diff --git a/.gitattributes b/.gitattributes index de50942d6f2..0fb2aec07c4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -46,6 +46,7 @@ # normalisation on a Windows checkout would rewrite the evidence the fixture exists to be. /src/main/runtime/__fixtures__/*.txt -text /src/main/daemon/__fixtures__/pty-transcripts/*.txt -text +/src/renderer/src/components/terminal-pane/terminal-link-transcripts/*.txt -text whitespace=cr-at-eol # Generated runtime English subset: compared byte-for-byte by # verify:localization-runtime-catalog, so a CRLF checkout would fail the gate. /src/renderer/src/i18n/en-runtime-required.json linguist-generated=true text eol=lf diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 98c8756f585..cf1493d14f7 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -30,6 +30,13 @@ Ordinary installs include native optional dependencies for the current OS and CP Before a cross-architecture build (including `pnpm build:mac`, which produces both x64 and arm64 artifacts by default), run `pnpm install:release` to add the other CPU's variants. +Linux `pnpm build`, `pnpm build:native`, and Linux packaging require a running Docker +daemon to build the clipboard helper against Ubuntu 20.04 rather than the host's +newer libraries. A verified cached helper can be reused without Docker. For native +Wayland development, run `pnpm build:native` before `pnpm dev` to make text copying +available. See the [clipboard build guide](../native/wayland-clipboard/README.md#building-and-testing). +macOS and Windows builds do not use this helper or require Docker for it. + ## Branch Naming Use a clear, descriptive branch name that reflects the change. diff --git a/.github/actions/prepare-native-runtime/action.yml b/.github/actions/prepare-native-runtime/action.yml index ae56feeb68e..64712b2aae7 100644 --- a/.github/actions/prepare-native-runtime/action.yml +++ b/.github/actions/prepare-native-runtime/action.yml @@ -54,7 +54,7 @@ runs: env: NATIVE_RUNTIME: ${{ inputs.native-runtime }} NODE_VERSION: ${{ inputs.node-version }} - NATIVE_SOURCE_HASH: ${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', '.npmrc', '.pnpmfile.cjs', '.github/actions/prepare-native-runtime/action.yml', 'config/scripts/ensure-native-runtime.mjs', 'config/scripts/rebuild-native-deps.mjs', 'config/scripts/node-pty-job-ownership.cjs', 'config/scripts/windows-pe-machine.cjs', 'config/scripts/windows-process-tree-gyp-rebuild.mjs', 'config/scripts/windows-process-tree-creation-time.cjs', 'config/scripts/install-electron-package-binary.mjs', 'config/scripts/electron-platform-path.mjs', 'config/scripts/zip-extractor-command.mjs', 'src/shared/zip-extractor-command.ts', 'config/scripts/shared-electron-dist-cache.mjs', 'config/scripts/space-sharing-copy.mjs', 'config/patches/node-pty@1.1.0.patch', 'config/patches/@vscode__windows-process-tree@0.8.0.patch', 'native/windows-registry/src/addon.cc', 'native/windows-registry/binding.gyp', 'native/windows-registry/package.json', 'native/windows-registry/index.js') }} + NATIVE_SOURCE_HASH: ${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', '.npmrc', '.pnpmfile.cjs', '.github/actions/prepare-native-runtime/action.yml', 'config/scripts/ensure-native-runtime.mjs', 'config/scripts/rebuild-native-deps.mjs', 'config/scripts/node-pty-job-ownership.cjs', 'config/scripts/windows-pe-machine.cjs', 'config/scripts/windows-process-tree-gyp-rebuild.mjs', 'config/scripts/windows-process-tree-creation-time.cjs', 'config/scripts/install-electron-package-binary.mjs', 'config/scripts/electron-platform-path.mjs', 'config/scripts/zip-extractor-command.mjs', 'src/shared/zip-extractor-command.ts', 'config/scripts/shared-electron-dist-cache.mjs', 'config/scripts/space-sharing-copy.mjs', 'config/patches/node-pty@1.1.0.patch', 'config/patches/@vscode__windows-process-tree@0.8.0.patch', 'native/windows-registry/src/addon.cc', 'native/windows-registry/binding.gyp', 'native/windows-registry/package.json', 'native/windows-registry/index.js', 'native/windows-security/src/addon.cc', 'native/windows-security/binding.gyp', 'native/windows-security/package.json', 'native/windows-security/index.js') }} run: | scope="${ImageOS:-$RUNNER_OS}" if [ -r /etc/os-release ]; then @@ -69,6 +69,7 @@ runs: path<> "$GITHUB_STEP_SUMMARY" + exit 0 + fi + + title="Point the Android APK download at $VERSION" + git config user.name "buf0-bot[bot]" + git config user.email "252831055+buf0-bot[bot]@users.noreply.github.com" + git checkout -b "$BRANCH" + git commit -am "$title" + # Why --force: a rerun rebuilds the branch on the site's current main. + git push --force origin "$BRANCH" + + # Why: a rerun of the same release reuses its open PR instead of opening another. + pr="$(gh pr list --repo "$SITE_REPO" --head "$BRANCH" --state open --json url --jq '.[].url')" + if [ -z "$pr" ]; then + pr="$(gh pr create --repo "$SITE_REPO" --base main --head "$BRANCH" --title "$title" \ + --body "Opened by the [Android release run]($GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID) for mobile-android-v$VERSION. Merging points /download/android and every APK link on the site at the new APK.")" + fi + echo "Android APK download bump: $pr" >> "$GITHUB_STEP_SUMMARY" + + - name: Report a failed bump + if: failure() + run: | + echo "::warning::The release is published, but the site's Android APK download was not bumped to $VERSION." + printf '### Android APK download not bumped\n\nThe release is published, but /download/android still serves the previous APK. Rerun this job, or set `ANDROID_RELEASE_VERSION` in `src/lib/downloadTargets.ts` of %s to `%s` by hand.\n' "$SITE_REPO" "$VERSION" >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 30dc63186e1..07ba8c9bd00 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -81,6 +81,7 @@ jobs: # from the Gemfile, which is how the release jobs could land on different # fastlane versions in the first place. Fail here instead. BUNDLE_FROZEN: 'true' + ORCA_MOBILE_TYPECHECK_COMPILER: 'native' defaults: run: @@ -94,6 +95,7 @@ jobs: - uses: ./.github/actions/install-node-dependencies with: + cache-pnpm-store: 'false' cache-dependency-path: | pnpm-lock.yaml mobile/pnpm-lock.yaml @@ -114,6 +116,8 @@ jobs: # proves the pinned fastlane the release workflow depends on still # resolves — before a release run finds out. - name: Setup Ruby and fastlane + id: ruby-tools + background: true if: steps.ruby-scope.outputs.should_run != 'false' uses: ruby/setup-ruby@v1 with: @@ -128,17 +132,21 @@ jobs: - name: Typecheck id: production-types background: true - run: node node_modules/typescript/bin/tsc --noEmit + env: + GOMAXPROCS: '2' + run: node scripts/typecheck-mobile.mjs # Why a ratchet and not the raw typecheck: mobile/tsconfig.json excludes test files, so until # tsconfig.test.json existed nothing checked them, and at introduction 127 of the 632 had # drifted. This fails when a test file that checks today stops checking, when a test leaves # the program, and on @ts-nocheck; the baseline may only shrink. - name: Typecheck tests (ratchet) + id: test-types + background: true + env: + GOMAXPROCS: '2' run: node scripts/check-tests-typecheck-ratchet.mjs - - wait: production-types - # This includes the bridged replay of the whole recording corpus, which used to be a second # step of its own behind RPC_FOUNDATION_BRIDGE=1. A gate nobody can forget to set is the point: # it fails when a divergence class grows, when a divergence lands in no class at all, or when @@ -168,6 +176,9 @@ jobs: ORCA_BACKGROUND_LAUNCH: '1' run: node ../config/scripts/run-mobile-ci-tests.mjs + # All checks read the completed install; compilers need not hold up test workers. + - wait: [production-types, test-types, ruby-tools] + # Reports, never gates: the goldens are content-addressed JSON, so their raw diff is hashes. # This decodes which recorded behaviour the pull request moves into the job summary, and runs # after a red Test too, when a reviewer most wants it. @@ -204,6 +215,8 @@ jobs: main-tests: name: Mobile tests on main + env: + ORCA_MOBILE_TYPECHECK_COMPILER: 'native' if: github.event_name == 'push' # Why ARM: the same pure-Node Vitest run `verify` makes on a pull request. runs-on: ubuntu-24.04-arm @@ -227,6 +240,20 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Typecheck + id: production-types + background: true + env: + GOMAXPROCS: '2' + run: node scripts/typecheck-mobile.mjs + + - name: Typecheck tests (ratchet) + id: test-types + background: true + env: + GOMAXPROCS: '2' + run: node scripts/check-tests-typecheck-ratchet.mjs + # The whole suite, not only the recordings: the mutant and page-bridge suites read the goldens # too. A red run here names each golden and the `rpc:record` command; the author of the merge # that turned it red re-records in a follow-up. @@ -239,3 +266,5 @@ jobs: env: ORCA_BACKGROUND_LAUNCH: '1' run: node ../config/scripts/run-mobile-ci-tests.mjs + + - wait: [production-types, test-types] diff --git a/.github/workflows/node-server-tests.yml b/.github/workflows/node-server-tests.yml index 087a6759ebd..92f03a8ecee 100644 --- a/.github/workflows/node-server-tests.yml +++ b/.github/workflows/node-server-tests.yml @@ -165,12 +165,12 @@ jobs: cache-pnpm-store: ${{ runner.os != 'Windows' }} cache-pnpm-store-lookup-only: 'true' # Design D7 upgrade and rollback: the last Bun orcad, built from a main commit that shipped - # it, beside this checkout's Node slot; the live-terminal hand-over skips once PROTOCOL_VERSION + # it, using the current Bun pin beside this checkout's Node slot; hand-over skips once PROTOCOL_VERSION # moves past the Bun daemon's. Install its pinned dependencies independently of this checkout. - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 if: runner.os == 'Linux' with: - bun-version: 1.4.2 + bun-version-file: config/.bun-version - name: Build the last Bun orcad for the cross-runtime tests id: bun-orcad background: true @@ -219,8 +219,8 @@ jobs: if: inputs.build_template && matrix.os == 'windows-2022' shell: bash run: | - node config/scripts/build-windows-process-tree-relay-addon.mjs --arch=x64 - node config/scripts/build-windows-process-tree-relay-addon.mjs --arch=arm64 + node config/scripts/build-windows-process-tree-addon.mjs --arch=x64 + node config/scripts/build-windows-process-tree-addon.mjs --arch=arm64 node -e " const { assertWindowsProcessTreeCreationTime } = require('./config/scripts/windows-process-tree-creation-time.cjs') const addon = require('./.build/windows-process-tree/x64/windows-process-tree.node') @@ -250,6 +250,23 @@ jobs: if-no-files-found: error retention-days: 7 overwrite: true + # orcad's data-root privacy check fails closed without it, so every Windows slot needs one. + - name: Build the Windows security addons for the desktop template + if: inputs.build_template && matrix.os == 'windows-2022' + shell: bash + run: | + node config/scripts/build-windows-security-addon.mjs --arch=x64 + node config/scripts/build-windows-security-addon.mjs --arch=arm64 + node -e "require('./.build/windows-security/x64/windows-security.node').currentUserSid()" + - name: Keep the Windows security addons for the desktop template + if: inputs.build_template && matrix.os == 'windows-2022' + uses: actions/upload-artifact@v7 + with: + name: orcad-windows-security + path: .build/windows-security/*/windows-security.node + if-no-files-found: error + retention-days: 7 + overwrite: true - uses: actions/setup-node@v6 if: runner.arch == 'X64' with: @@ -497,6 +514,11 @@ jobs: with: name: orcad-windows-cli-launcher path: .build/windows-cli-launcher + - name: Collect the Windows security addons + uses: actions/download-artifact@v8 + with: + name: orcad-windows-security + path: .build/windows-security - name: Merge the lanes and gate the full slot matrix shell: bash run: | diff --git a/.github/workflows/packaged-browser-e2e.yml b/.github/workflows/packaged-browser-e2e.yml index 1ca301ae4e8..4967cdde400 100644 --- a/.github/workflows/packaged-browser-e2e.yml +++ b/.github/workflows/packaged-browser-e2e.yml @@ -42,7 +42,7 @@ jobs: env: VITE_EXPOSE_STORE: 'true' run: | - pnpm run build:relay + pnpm run build:wsl-guest pnpm exec electron-vite build --mode e2e pnpm run build:web-from-renderer - name: Run both mixed-version directions @@ -86,7 +86,7 @@ jobs: env: VITE_EXPOSE_STORE: 'true' run: | - pnpm run build:relay + pnpm run build:wsl-guest pnpm exec electron-vite build --mode e2e pnpm run build:cli pnpm run build:web-from-renderer diff --git a/.github/workflows/performance-contracts.yml b/.github/workflows/performance-contracts.yml index e3f952fd7af..2e3be1f658c 100644 --- a/.github/workflows/performance-contracts.yml +++ b/.github/workflows/performance-contracts.yml @@ -12,6 +12,8 @@ on: - 'config/oxlint-plugins/*performance.mjs' - 'config/oxlint-plugins/quadratic-buffer-concat.mjs' - 'config/scripts/*-plugin.test.mjs' + - '!config/scripts/renderer-scrollbar-style-plugin.test.mjs' + - '!config/scripts/mobile-pairing-qrcode-import-plugin.test.mjs' # Keep in sync with the contract list in config/vitest.performance.config.ts; # without these a rename lands green and only breaks the next nightly. - 'src/main/sqlite/sync-database.test.ts' diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index ba11ca658fd..c0c199f88e6 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -206,7 +206,7 @@ jobs: - name: Set up Bun for preflight checks uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.4.3 + bun-version-file: config/.bun-version - name: Check process-host imports if: '!cancelled()' @@ -217,7 +217,18 @@ jobs: PREFLIGHT_PRIOR_SUCCESS: ${{ job.status == 'success' }} run: | if [ "$PREFLIGHT_PHASE_SELECTED" != true ] || [ "$PREFLIGHT_PRIOR_SUCCESS" != true ]; then exit 0; fi - bun --bun run check:process-host-imports + bun config/scripts/check-import-boundaries.mjs + + - name: Check main-process sync launches + if: '!cancelled()' + id: main-sync-spawn-ratchet + background: true + env: + PREFLIGHT_PHASE_SELECTED: ${{ needs.code_paths.outputs.static_analysis == 'true' }} + PREFLIGHT_PRIOR_SUCCESS: ${{ job.status == 'success' }} + run: | + if [ "$PREFLIGHT_PHASE_SELECTED" != true ] || [ "$PREFLIGHT_PRIOR_SUCCESS" != true ]; then exit 0; fi + bun --bun run check:main-sync-spawn-ratchet # Keep each check in its own log while sharing this runner. - name: Lint @@ -290,7 +301,7 @@ jobs: PREFLIGHT_PRIOR_SUCCESS: ${{ job.status == 'success' }} run: | if [ "$PREFLIGHT_PHASE_SELECTED" != true ] || [ "$PREFLIGHT_PRIOR_SUCCESS" != true ]; then exit 0; fi - pnpm run typecheck:ci + pnpm run typecheck:ci --bun-concurrency=2 --bun-threads=2 - name: Check Zustand selector fan-out budget if: needs.code_paths.outputs.static_analysis == 'true' @@ -344,11 +355,7 @@ jobs: - name: Enforce layout-writer ratchets if: needs.code_paths.outputs.static_analysis == 'true' - run: pnpm run check:layout-writer-ratchets - - - name: Check compatibility-folder imports - if: needs.code_paths.outputs.static_analysis == 'true' - run: pnpm run check:compat-boundary-imports + run: bun config/scripts/check-layout-writer-ratchets.mjs - name: Check Node runtime pin if: needs.code_paths.outputs.static_analysis == 'true' @@ -356,6 +363,7 @@ jobs: # Why: extraction writes sorted evidence to an isolated temporary path, # so feature PRs need one normalized AST pass rather than a three-OS matrix. + # Use preflight's pinned Bun even when the optional local pin differs. - name: Verify localization extraction if: '!cancelled()' id: localization-extraction @@ -372,7 +380,7 @@ jobs: scope="$(node config/scripts/localization-extraction-change-scope.mjs "$RUNNER_TEMP/localization-changes")" && [ "$scope" = false ]; then echo "Localization extraction inputs are unchanged." else - pnpm run verify:localization-extraction + bun config/scripts/verify-localization-extraction.mjs fi # Why both: the ratchet proves nothing reachable from the runtime imports electron, @@ -422,7 +430,7 @@ jobs: - name: Verify localization coverage if: needs.code_paths.outputs.static_analysis == 'true' - run: pnpm run verify:localization-coverage + run: bun config/scripts/audit-localization-coverage.mjs --check - wait: [localization-catalogs, localization-extraction] @@ -471,6 +479,8 @@ jobs: - wait: process-host-imports + - wait: main-sync-spawn-ratchet + - wait: unit-plan - uses: actions/upload-artifact@v7 @@ -893,7 +903,7 @@ jobs: - name: Install WebKit for the drawer check id: webkit background: true - run: pnpm exec playwright install --with-deps webkit + run: pnpm exec playwright-core install --with-deps webkit # The entry lives in mobile/ so one React resolves; without this every RN import is nothing. - uses: ./.github/actions/install-mobile-dependencies @@ -1110,7 +1120,7 @@ jobs: status=0 pnpm run build:cli || status=1 - scripts=(build:relay build:electron-vite:parallel) + scripts=(build:wsl-guest build:electron-vite:parallel) pids=() for script in "${scripts[@]}"; do pnpm run "$script" & @@ -1159,6 +1169,27 @@ jobs: rpm_marker="$(rpm2cpio "$rpm" | cpio --quiet --extract --to-stdout ./opt/Orca/resources/package-type)" [[ "$deb_marker" == deb ]] || { echo "Expected deb marker, got: $deb_marker"; exit 1; } [[ "$rpm_marker" == rpm ]] || { echo "Expected rpm marker, got: $rpm_marker"; exit 1; } + # Only the AppImage carries the pinned Node (config/scripts/appimage-node-runtime.cjs). + if dpkg-deb --fsys-tarfile "$deb" | tar -t | grep '/resources/node-runtime' >/dev/null; then + echo "The deb must not carry the AppImage's Node"; exit 1 + fi + if rpm2cpio "$rpm" | cpio --quiet -t | grep '/resources/node-runtime' >/dev/null; then + echo "The rpm must not carry the AppImage's Node"; exit 1 + fi + appimage_root="$(mktemp -d)" + (cd "$appimage_root" && "$GITHUB_WORKSPACE/dist/orca-linux.AppImage" --appimage-extract 'resources/node-runtime/bin/node' >/dev/null) + test -x "$appimage_root/squashfs-root/resources/node-runtime/bin/node" + "$appimage_root/squashfs-root/resources/node-runtime/bin/node" --version + rm -rf "$appimage_root" + ls -l dist/orca-linux.AppImage "$deb" "$rpm" + + # Kept briefly so a reviewer can run this exact AppImage on a real Linux desktop. + - uses: actions/upload-artifact@v7 + with: + name: orca-linux-appimage-${{ github.event.pull_request.head.sha }} + path: dist/orca-linux.AppImage + retention-days: 3 + compression-level: 0 - wait: shutdown-fixture-cache @@ -1236,6 +1267,41 @@ jobs: run: >- pnpm exec vitest run --config config/vitest.config.ts config/scripts/nsis-process-check.test.mjs + config/scripts/idle-cpu-process-sampling.test.mjs + + - name: Cache Windows CLI launcher + uses: actions/cache@v5 + with: + # Why the cargo directories ride along: a hit on .build skips the build + # entirely, but a miss otherwise recompiles the resource crate from a + # cold registry. + path: | + native/windows-cli-launcher/.build + native/windows-cli-launcher/target + native/windows-agent-hook/.build + native/windows-agent-hook/target + ~/.cargo/registry + key: windows-cli-launcher-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/windows-cli-launcher/**', 'native/windows-agent-hook/**', 'config/scripts/build-windows-cli-launcher.mjs', 'config/scripts/build-windows-agent-hook.mjs', 'config/scripts/windows-rust-executable-build.mjs', 'resources/build/icon.ico', 'package.json') }} + + # Why an explicit step rather than trusting the runner image: the packaged + # CLI launcher is a native Rust binary, and a host without cargo fails deep + # inside electron-builder's native hook instead of here. + - name: Ensure the Rust toolchain for the Windows CLI launcher + shell: pwsh + run: | + if (-not (Get-Command cargo -ErrorAction SilentlyContinue)) { + rustup toolchain install stable --profile minimal + rustup default stable + } + cargo --version + + # Why before the tests: the orca-agent-hook.exe suites then share one prebuilt binary rather + # than each starting its own build mid-run. + - name: Build the Windows agent hook + run: node config/scripts/build-windows-agent-hook.mjs + + - name: Build the Windows CLI launcher + run: node config/scripts/build-windows-cli-launcher.mjs - name: Test Windows-specific boundaries run: >- @@ -1248,8 +1314,10 @@ jobs: config/scripts/verify-packaged-node-pty-job-ownership.test.mjs config/scripts/windows-pe-machine.test.mjs config/scripts/build-windows-cli-launcher.test.mjs + config/scripts/verify-packaged-windows-agent-hook.test.mjs config/scripts/script-module-dependencies.test.mjs src/main/windows-registry-addon.test.ts + src/shared/windows-security-addon.win32.test.ts config/scripts/windows-process-tree-gyp-path.test.mjs config/scripts/windows-process-tree-gyp-rebuild.test.mjs config/scripts/package-electron-runtime-contract.test.mjs @@ -1266,11 +1334,15 @@ jobs: src/shared/__tests__/process-host/windows-cmd-shim-resolution.test.ts src/shared/__tests__/process-host/windows-cmd-shim-resolution.win32.test.ts src/main/agent-hooks/windows-hook-payload-delivery.test.ts + src/main/agent-hooks/managed-hook-stdin-lifecycle.test.ts src/main/jcode/hook-gate-script.test.ts src/main/agent-hooks/windows-direct-cmd-hook-command.test.ts + src/main/agent-hooks/windows-native-hook-exe-hosts.test.ts + src/main/claude/windows-native-hook-registration.test.ts src/main/agent-hooks/windows-cmd-hook-command-unicode.test.ts src/main/agent-hooks/windows-batch-hook-launcher.test.ts src/main/agent-hooks/windows-powershell-hook-launcher.test.ts + src/main/claude/claude-status-line-windows.test.ts src/main/codex/windows-hook-command.test.ts src/main/codex/windows-hook-upgrade.test.ts src/main/codex/hook-service-managed-install.test.ts @@ -1280,6 +1352,9 @@ jobs: src/main/windows/windows-host-job.win32.test.ts src/main/windows/windows-process-tree-command-line-patch.test.ts src/main/windows/windows-process-table-native-addon.win32.test.ts + src/main/windows/windows-administrator-status.win32.test.ts + src/main/windows/windows-administrator-restart.win32.test.ts + src/main/daemon/daemon-pid-identity-native.win32.test.ts src/main/persistence/profile-state/profile-state-access-windows-native.win32.test.ts src/main/windows-live-tree-kill.win32.test.ts src/main/wsl/wsl-runner.test.ts @@ -1308,30 +1383,6 @@ jobs: # Why the :parallel variant: identical to build:release except the three # electron-vite targets overlap instead of running back to back. The Linux package # job already packages and smoke-tests an AppImage built that way. - - name: Cache Windows CLI launcher - uses: actions/cache@v5 - with: - # Why the cargo directories ride along: a hit on .build skips the build - # entirely, but a miss otherwise recompiles the resource crate from a - # cold registry. - path: | - native/windows-cli-launcher/.build - native/windows-cli-launcher/target - ~/.cargo/registry - key: windows-cli-launcher-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/windows-cli-launcher/**', 'config/scripts/build-windows-cli-launcher.mjs', 'resources/build/icon.ico', 'package.json') }} - - # Why an explicit step rather than trusting the runner image: the packaged - # CLI launcher is a native Rust binary, and a host without cargo fails deep - # inside electron-builder's native hook instead of here. - - name: Ensure the Rust toolchain for the Windows CLI launcher - shell: pwsh - run: | - if (-not (Get-Command cargo -ErrorAction SilentlyContinue)) { - rustup toolchain install stable --profile minimal - rustup default stable - } - cargo --version - - name: Build package inputs run: pnpm run build:release:parallel diff --git a/.github/workflows/preflight-benchmark.yml b/.github/workflows/preflight-benchmark.yml index f141b8e6025..44b3617b3eb 100644 --- a/.github/workflows/preflight-benchmark.yml +++ b/.github/workflows/preflight-benchmark.yml @@ -27,7 +27,7 @@ jobs: node-version: '24' - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.4.3 + bun-version-file: config/.bun-version - name: Compare native and Bun typechecking run: node config/scripts/benchmark-preflight-compilers.mjs - uses: actions/upload-artifact@v7 @@ -49,7 +49,7 @@ jobs: node-version: '24' - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 with: - bun-version: 1.4.3 + bun-version-file: config/.bun-version - name: Compare anti-slop patch and script runtimes run: node config/scripts/benchmark-preflight-static-analysis.mjs - uses: actions/upload-artifact@v7 @@ -58,3 +58,48 @@ jobs: name: preflight-static-analysis path: .build/preflight-benchmark/ retention-days: 30 + compatibility-imports: + runs-on: ubuntu-24.04-arm + timeout-minutes: 10 + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + fetch-depth: 2 + - uses: ./.github/actions/install-node-dependencies + with: + native-runtime: none + node-version: '24' + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version-file: config/.bun-version + - name: Compare compatibility-import scan and runtimes + run: node config/scripts/benchmark-preflight-compat-boundary.mjs + - uses: actions/upload-artifact@v7 + if: always() + with: + name: preflight-compat-boundary + path: .build/preflight-benchmark/ + retention-days: 30 + localization-extraction: + runs-on: ubuntu-24.04-arm + timeout-minutes: 12 + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: ./.github/actions/install-node-dependencies + with: + native-runtime: none + node-version: '24' + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version-file: config/.bun-version + - name: Compare localization extraction runtimes and complete catalogs + run: node config/scripts/benchmark-preflight-localization-extraction.mjs + - uses: actions/upload-artifact@v7 + if: always() + with: + name: preflight-localization-extraction + path: .build/preflight-benchmark/ + retention-days: 30 diff --git a/.github/workflows/preflight-critical-path-benchmark.yml b/.github/workflows/preflight-critical-path-benchmark.yml new file mode 100644 index 00000000000..cfabf00e3cc --- /dev/null +++ b/.github/workflows/preflight-critical-path-benchmark.yml @@ -0,0 +1,42 @@ +name: Preflight critical-path comparison +on: + pull_request: + paths: + - .github/workflows/preflight-critical-path-benchmark.yml + - config/scripts/benchmark-ci-preflight-critical-path.mjs + workflow_dispatch: +permissions: + contents: read +concurrency: + group: preflight-critical-path-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +env: + ORCA_BACKGROUND_LAUNCH: '1' +jobs: + compare: + runs-on: ubuntu-24.04-arm + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + comparison: [smoke, sync-spawn, typecheck] + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + fetch-depth: 2 + - uses: ./.github/actions/install-node-dependencies + with: + native-runtime: node + node-version: '24' + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version-file: config/.bun-version + - name: Compare checks and verify their results + run: node config/scripts/benchmark-ci-preflight-critical-path.mjs ${{ matrix.comparison }} + - uses: actions/upload-artifact@v7 + if: always() + with: + name: preflight-critical-path-${{ matrix.comparison }} + path: .build/preflight-benchmark/ + retention-days: 30 diff --git a/.github/workflows/release-cut.yml b/.github/workflows/release-cut.yml index 275849c062a..5875e99f8eb 100644 --- a/.github/workflows/release-cut.yml +++ b/.github/workflows/release-cut.yml @@ -2145,7 +2145,7 @@ jobs: # in some runs, yet it is the file most at risk of losing its # signature in the NSIS rebuild. Verify it in every release. $targets = @(Get-Content 'inner-signing-list.txt') - foreach ($requiredTarget in @('Orca.exe', 'resources\bin\orca.exe')) { + foreach ($requiredTarget in @('Orca.exe', 'resources\bin\orca.exe', 'resources\bin\orca-agent-hook.exe')) { if ($targets -notcontains $requiredTarget) { $targets += $requiredTarget } } if ($targets -notcontains 'resources\elevate.exe') { diff --git a/.github/workflows/ssh-hostile-hosts.yml b/.github/workflows/ssh-hostile-hosts.yml index 1c1505e677e..b5f55598322 100644 --- a/.github/workflows/ssh-hostile-hosts.yml +++ b/.github/workflows/ssh-hostile-hosts.yml @@ -13,6 +13,9 @@ on: - 'src/main/ssh/ssh-relay-*' - 'src/main/ssh/*runtime*' - 'src/main/ssh/orcad-*' + - 'src/main/orcad/orcad-artifact-materializer.ts' + - 'src/main/orcad/orcad-host-unavailable.ts' + - 'src/main/node-runtime/**' - 'src/main/ssh/remote-install-*' - 'src/main/ssh/ssh-remote-*' - 'src/main/ssh/ssh-hostile-host-*' diff --git a/.github/workflows/ssh-windows-hosts.yml b/.github/workflows/ssh-windows-hosts.yml index 6973308fa36..4a3b910c620 100644 --- a/.github/workflows/ssh-windows-hosts.yml +++ b/.github/workflows/ssh-windows-hosts.yml @@ -11,6 +11,9 @@ on: - 'src/main/ssh/ssh-relay-*' - 'src/main/ssh/*runtime*' - 'src/main/ssh/orcad-*' + - 'src/main/orcad/orcad-artifact-materializer.ts' + - 'src/main/orcad/orcad-host-unavailable.ts' + - 'src/main/node-runtime/**' - 'src/main/ssh/remote-install-*' - 'src/main/ssh/ssh-remote-*' - 'src/main/ssh/ssh-hostile-host-*' @@ -24,14 +27,18 @@ on: - 'config/scripts/orcad-prebuild-*.mjs' - 'config/scripts/orcad-windows-process-tree.mjs' - 'config/scripts/orcad-windows-cli-launcher.mjs' + - 'config/scripts/orcad-windows-security.mjs' + - 'config/scripts/build-windows-security-addon.mjs' + - 'native/windows-security/**' - 'config/scripts/build-windows-cli-launcher.mjs' + - 'config/scripts/windows-rust-executable-build.mjs' - 'native/windows-cli-launcher/**' - 'src/main/orcad/orcad-cli-launcher.ts' - '.github/actions/prepare-windows-cli-launcher/**' - 'config/patches/node-pty*' - 'config/patches/@vscode__windows-process-tree*' - - 'config/scripts/build-windows-process-tree-relay-addon.mjs' - - 'config/scripts/relay-windows-process-tree-prepared-addon*.mjs' + - 'config/scripts/build-windows-process-tree-addon.mjs' + - 'config/scripts/windows-process-tree-prepared-addon*.mjs' - 'config/scripts/windows-process-tree-gyp-rebuild.mjs' - 'src/shared/windows-breakaway-launch*.ts' - 'src/main/ipc/ssh-host-server-*.ts' @@ -143,7 +150,7 @@ jobs: if [ "$REUSE_PREPARED_RUNTIME" = true ]; then reuse_args+=(--reuse-prepared-runtime) fi - node config/scripts/build-windows-process-tree-relay-addon.mjs --arch=${{ matrix.arch }} "${reuse_args[@]}" + node config/scripts/build-windows-process-tree-addon.mjs --arch=${{ matrix.arch }} "${reuse_args[@]}" - uses: ./.github/actions/prepare-orcad-prebuilds with: resolve-windows-cache: ${{ github.event_name == 'pull_request' }} diff --git a/.github/workflows/terminal-ime-e2e.yml b/.github/workflows/terminal-ime-e2e.yml index a99e045e4b9..2dc4e9cf8c5 100644 --- a/.github/workflows/terminal-ime-e2e.yml +++ b/.github/workflows/terminal-ime-e2e.yml @@ -101,7 +101,7 @@ jobs: env: VITE_EXPOSE_STORE: 'true' run: | - pnpm run build:relay + pnpm run build:wsl-guest pnpm exec electron-vite build --mode e2e pnpm run build:web-from-renderer - name: Run native Wayland Hangul terminating digit diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 9ea37f36248..99d57c48888 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -73,6 +73,7 @@ jobs: - name: Test shard env: + NODE_COMPILE_CACHE: ${{ runner.temp }}/orca-node-compile-cache-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.node }}-${{ matrix.shard.index }} ORCA_BALANCE_UNIT_SHARDS: '1' ORCA_BACKGROUND_LAUNCH: '1' run: | diff --git a/.github/workflows/win-crash-survival-e2e.yml b/.github/workflows/win-crash-survival-e2e.yml index 53c231111db..81c3e726faf 100644 --- a/.github/workflows/win-crash-survival-e2e.yml +++ b/.github/workflows/win-crash-survival-e2e.yml @@ -119,6 +119,9 @@ jobs: - uses: ./.github/actions/install-mobile-dependencies if: steps.cache-installer.outputs.cache-hit != 'true' + - uses: ./.github/actions/prepare-windows-agent-hook + if: steps.cache-installer.outputs.cache-hit != 'true' + - name: Build Windows installer (unsigned) if: steps.cache-installer.outputs.cache-hit != 'true' run: | diff --git a/.github/workflows/win-orcad-serve-switch-e2e.yml b/.github/workflows/win-orcad-serve-switch-e2e.yml index 6e105876008..0d0271d7ce9 100644 --- a/.github/workflows/win-orcad-serve-switch-e2e.yml +++ b/.github/workflows/win-orcad-serve-switch-e2e.yml @@ -57,6 +57,9 @@ jobs: - uses: ./.github/actions/install-mobile-dependencies if: steps.cache-installer.outputs.cache-hit != 'true' + - uses: ./.github/actions/prepare-windows-agent-hook + if: steps.cache-installer.outputs.cache-hit != 'true' + # Before the template exists: packaging verifies a present template for every target. - name: Build Windows installer (unsigned) if: steps.cache-installer.outputs.cache-hit != 'true' @@ -86,7 +89,7 @@ jobs: run: | node config/scripts/ensure-native-runtime.mjs --runtime=node pnpm build:orcad - node config/scripts/build-windows-process-tree-relay-addon.mjs --arch=x64 + node config/scripts/build-windows-process-tree-addon.mjs --arch=x64 node config/scripts/build-orcad-template.mjs --targets win32-x64 - name: Switch serve hosts on the installed app's profile diff --git a/.github/workflows/win-update-survival-e2e.yml b/.github/workflows/win-update-survival-e2e.yml index b709f82b788..9b0884f91b0 100644 --- a/.github/workflows/win-update-survival-e2e.yml +++ b/.github/workflows/win-update-survival-e2e.yml @@ -101,6 +101,9 @@ jobs: - uses: ./.github/actions/install-mobile-dependencies if: steps.cache-installer.outputs.cache-hit != 'true' + - uses: ./.github/actions/prepare-windows-agent-hook + if: steps.cache-installer.outputs.cache-hit != 'true' + - name: Build Windows installer (unsigned) if: steps.cache-installer.outputs.cache-hit != 'true' run: | diff --git a/.github/workflows/windows-signing-rehearsal.yml b/.github/workflows/windows-signing-rehearsal.yml index c2364330164..5aee75ca50a 100644 --- a/.github/workflows/windows-signing-rehearsal.yml +++ b/.github/workflows/windows-signing-rehearsal.yml @@ -499,7 +499,7 @@ jobs: } $targets = @(Get-Content 'inner-signing-list.txt') - foreach ($requiredTarget in @('Orca.exe', 'resources\bin\orca.exe')) { + foreach ($requiredTarget in @('Orca.exe', 'resources\bin\orca.exe', 'resources\bin\orca-agent-hook.exe')) { if ($targets -notcontains $requiredTarget) { $targets += $requiredTarget } } foreach ($relative in $targets) { diff --git a/.github/workflows/windows-wsl-e2e.yml b/.github/workflows/windows-wsl-e2e.yml index fb781e25331..77f69daaf66 100644 --- a/.github/workflows/windows-wsl-e2e.yml +++ b/.github/workflows/windows-wsl-e2e.yml @@ -37,7 +37,7 @@ jobs: native-runtime: electron - name: Build relay and Electron run: | - pnpm run build:relay + pnpm run build:wsl-guest if ($LASTEXITCODE -ne 0) { throw 'Relay build failed' } pnpm exec electron-vite build --mode e2e if ($LASTEXITCODE -ne 0) { throw 'Electron build failed' } diff --git a/.github/workflows/wsl-orcad-e2e.yml b/.github/workflows/wsl-orcad-e2e.yml new file mode 100644 index 00000000000..306204d7c46 --- /dev/null +++ b/.github/workflows/wsl-orcad-e2e.yml @@ -0,0 +1,220 @@ +name: WSL orcad E2E + +# WSL via orcad (step C10) on real WSL2 distros: a GitHub-hosted windows-2025 runner imports a +# pinned Ubuntu 24.04 rootfs twice (systemd off and on) and runs +# src/main/wsl/wsl-orcad-real-distro-lane.test.ts against both: deploy and launch, the wsl.exe +# stdio bridge, runtime RPC, liveness recovery, holder survival and teardown. Not a required check. +# Hosted WSL2 was proven in #27783: WSL 2.7.14, import 13-18 s, cold boot 8-14 s. +on: + pull_request: + paths: + - "src/main/wsl/**" + - "src/main/ssh/orcad-*" + - "src/main/ssh/remote-install-transport.ts" + - ".github/workflows/wsl-orcad-e2e.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: wsl-orcad-e2e-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + # wsl.exe prints UTF-16LE to pipes unless told otherwise. + WSL_UTF8: "1" + ROOTFS_URL: https://releases.ubuntu.com/24.04.4/ubuntu-24.04.4-wsl-amd64.wsl + ROOTFS_SHA256: 9b2f7730dc68227dd04a9f3e5eab86ad85caf556b8606ad94f1f29ff5c4fd3f5 + WSL_MSI_URL: https://github.com/microsoft/WSL/releases/download/3.0.1/wsl.3.0.1.0.x64.msi + WSL_MSI_SHA256: 28b1a0d013640a2ac95898ea705fa186e5b4ff767a1c1b49257161bc106599c6 + PLAIN_DISTRO: orca-lane-plain + SYSTEMD_DISTRO: orca-lane-systemd + +jobs: + # The distro is linux-x64-glibc; its node-pty slot only builds on Linux, and nothing else is needed. + template: + name: Build the linux-x64-glibc orcad template + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: ./.github/actions/install-node-dependencies + with: + native-runtime: node + - name: Build the template + run: | + pnpm build:orcad-prebuilds + pnpm build:orcad-prebuilds --require-slots linux-x64-glibc + pnpm build:orcad + node config/scripts/build-orcad-template.mjs --targets linux-x64-glibc + - uses: actions/upload-artifact@v7 + with: + name: wsl-orcad-template + path: out/orcad-template/ + # The template carries dot-directories (`.claude-plugin`) its manifest checksums. + include-hidden-files: true + retention-days: 1 + if-no-files-found: error + + wsl2: + name: WSL2 distros (systemd off and on) + needs: template + runs-on: windows-2025 + timeout-minutes: 45 + env: + ORCA_BACKGROUND_LAUNCH: "1" + ORCA_WSL_ORCAD_LANE_RECEIPTS: ${{ github.workspace }}\test-results\wsl-orcad-lane + defaults: + run: + shell: pwsh + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + # The image ships WSL 2.7.14, where stopping a systemd distro drops the VM-wide WSLInterop + # entry (microsoft/WSL#13885, fixed in 3.0.1). The lane asserts the fixed behavior, so it + # installs a pinned 3.0.1 MSI; `wsl --update` asks the GitHub API and gets rate-limited (403). + - name: Restore the pinned WSL package + id: wsl-msi-cache + uses: actions/cache/restore@v5 + with: + path: ${{ runner.temp }}/wsl-msi + key: wsl-orcad-msi-${{ env.WSL_MSI_SHA256 }} + - name: Install WSL 3.0.1 + timeout-minutes: 8 + run: | + "ImageOS=$env:ImageOS ImageVersion=$env:ImageVersion" + wsl.exe --version + $dir = Join-Path $env:RUNNER_TEMP 'wsl-msi' + New-Item -ItemType Directory -Force $dir | Out-Null + $msi = Join-Path $dir 'wsl.msi' + if (-not (Test-Path $msi)) { & "$env:WINDIR\System32\curl.exe" --fail --location --silent --show-error --output $msi $env:WSL_MSI_URL } + if ((Get-FileHash $msi -Algorithm SHA256).Hash.ToLowerInvariant() -ne $env:WSL_MSI_SHA256) { + Remove-Item $msi; throw 'WSL package checksum mismatch' + } + $install = Start-Process msiexec.exe -ArgumentList @('/i', $msi, '/qn', '/norestart', '/l*v', (Join-Path $env:RUNNER_TEMP 'wsl-msi.log')) -Wait -PassThru + if ($install.ExitCode -notin 0, 3010) { throw "WSL install failed: $($install.ExitCode)" } + wsl.exe --shutdown + $version = [version](((wsl.exe --version) -join "`n") -replace '(?s)^\D*?(\d+\.\d+\.\d+).*$', '$1') + wsl.exe --version + if ($version -lt [version]'3.0.1') { throw "WSL $version is older than 3.0.1" } + - name: Save the pinned WSL package + if: steps.wsl-msi-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v5 + with: + path: ${{ runner.temp }}/wsl-msi + key: wsl-orcad-msi-${{ env.WSL_MSI_SHA256 }} + - name: Restore the pinned rootfs + id: rootfs-cache + uses: actions/cache/restore@v5 + with: + path: ${{ runner.temp }}/wsl-rootfs + key: wsl-orcad-rootfs-${{ env.ROOTFS_SHA256 }} + # Runs beside the dependency install; the lane waits for it below. + - name: Import both distros as WSL2 + id: import + background: true + timeout-minutes: 10 + run: | + $cache = Join-Path $env:RUNNER_TEMP 'wsl-rootfs' + New-Item -ItemType Directory -Force $cache | Out-Null + $rootfs = Join-Path $cache 'ubuntu.wsl' + if (-not (Test-Path $rootfs)) { Invoke-WebRequest $env:ROOTFS_URL -OutFile $rootfs } + if ((Get-FileHash $rootfs -Algorithm SHA256).Hash.ToLowerInvariant() -ne $env:ROOTFS_SHA256) { + Remove-Item $rootfs; throw 'rootfs checksum mismatch' + } + foreach ($d in @(@{ Name = $env:PLAIN_DISTRO; Systemd = 'false' }, @{ Name = $env:SYSTEMD_DISTRO; Systemd = 'true' })) { + $sw = [Diagnostics.Stopwatch]::StartNew() + # No WSL1 fallback: the lane exists to prove WSL2. + wsl.exe --import $d.Name (Join-Path $env:RUNNER_TEMP $d.Name) $rootfs --version 2 + if ($LASTEXITCODE -ne 0) { throw "WSL2 import of $($d.Name) failed: $LASTEXITCODE" } + "$($d.Name) import_ms=$($sw.ElapsedMilliseconds)" + if (-not ((wsl.exe --list --verbose) -match "$($d.Name)\s+\S+\s+2\s*$")) { throw "$($d.Name) is not a WSL2 distro" } + # A non-root default user, as on a real install; git for the lane's repo. + $setup = "set -e; id orca >/dev/null 2>&1 || useradd -m -s /bin/bash orca; " + + "printf '[boot]\nsystemd=$($d.Systemd)\n[user]\ndefault=orca\n' > /etc/wsl.conf; " + + "command -v git >/dev/null || (apt-get update -qq && apt-get install -y -qq git)" + wsl.exe -d $d.Name -u root --exec sh -c $setup + if ($LASTEXITCODE -ne 0) { throw "provisioning $($d.Name) failed: $LASTEXITCODE" } + wsl.exe --terminate $d.Name + $sw.Restart() + wsl.exe -d $d.Name --exec sh -c 'echo "user=$(id -un) pid1=$(ps -p 1 -o comm=) kernel=$(uname -r)"' + if ($LASTEXITCODE -ne 0) { throw "first boot of $($d.Name) failed: $LASTEXITCODE" } + "$($d.Name) boot_ms=$($sw.ElapsedMilliseconds)" + wsl.exe --terminate $d.Name + } + wsl.exe --list --verbose + - uses: ./.github/actions/install-node-dependencies + with: + native-runtime: node + - uses: actions/download-artifact@v8 + with: + name: wsl-orcad-template + path: ${{ runner.temp }}/orcad-template + - wait: import + # Saved even when the lane fails; the import step verified its checksum. + - name: Save the pinned rootfs + if: steps.rootfs-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v5 + with: + path: ${{ runner.temp }}/wsl-rootfs + key: wsl-orcad-rootfs-${{ env.ROOTFS_SHA256 }} + - name: "Phase 1: deploy, RPC, kill orcad, terminate distro" + timeout-minutes: 20 + env: + ORCA_RUN_WSL_ORCAD_LANE: "1" + ORCA_WSL_ORCAD_LANE_PHASE: launch + ORCA_ORCAD_TEMPLATE_PATH: ${{ runner.temp }}/orcad-template + run: | + New-Item -ItemType Directory -Force $env:ORCA_WSL_ORCAD_LANE_RECEIPTS | Out-Null + node node_modules/vitest/vitest.mjs run --config config/vitest.config.ts src/main/wsl/wsl-orcad-real-distro-lane.test.ts --reporter=verbose 2>&1 | Tee-Object (Join-Path $env:ORCA_WSL_ORCAD_LANE_RECEIPTS 'launch.log') + if ($global:LASTEXITCODE -ne 0) { throw "launch phase failed: $global:LASTEXITCODE" } + # A new process: the holders must have kept both distros Running since phase 1 exited. + - name: "Phase 2: holders survive, reconnect, teardown" + timeout-minutes: 10 + env: + ORCA_RUN_WSL_ORCAD_LANE: "1" + ORCA_WSL_ORCAD_LANE_PHASE: survive + ORCA_ORCAD_TEMPLATE_PATH: ${{ runner.temp }}/orcad-template + run: | + node node_modules/vitest/vitest.mjs run --config config/vitest.config.ts src/main/wsl/wsl-orcad-real-distro-lane.test.ts --reporter=verbose 2>&1 | Tee-Object (Join-Path $env:ORCA_WSL_ORCAD_LANE_RECEIPTS 'survive.log') + if ($global:LASTEXITCODE -ne 0) { throw "survive phase failed: $global:LASTEXITCODE" } + # Belt and braces for the runner: a missing VM-wide interop entry is restored, then fails. + - name: WSLInterop is intact + if: ${{ !cancelled() && steps.import.outcome == 'success' }} + timeout-minutes: 3 + run: | + $state = wsl.exe -d $env:PLAIN_DISTRO -u root --exec sh -c 'if [ -e /proc/sys/fs/binfmt_misc/WSLInterop ]; then echo present; else echo :WSLInterop:M::MZ::/init:P > /proc/sys/fs/binfmt_misc/register && echo restored; fi' + "WSLInterop: $state" + wsl.exe --terminate $env:PLAIN_DISTRO + if ("$state".Trim() -ne 'present') { throw "WSLInterop was missing ($state)" } + - name: Collect orcad logs + if: failure() + timeout-minutes: 3 + run: | + $out = $env:ORCA_WSL_ORCAD_LANE_RECEIPTS + New-Item -ItemType Directory -Force $out | Out-Null + foreach ($d in @($env:PLAIN_DISTRO, $env:SYSTEMD_DISTRO)) { + wsl.exe -d $d --exec sh -c 'for f in $(find "$HOME/.orca-remote" -name "*.log*" -type f 2>/dev/null); do echo "=== $f"; tail -n 400 "$f"; done' > (Join-Path $out "$d-orcad-logs.txt") 2>&1 + } + wsl.exe --list --verbose + - name: Summary + if: always() + run: | + $dir = $env:ORCA_WSL_ORCAD_LANE_RECEIPTS + $lines = @("### WSL orcad lane — $env:ImageOS $env:ImageVersion", '') + foreach ($phase in 'launch', 'survive') { + $file = Join-Path $dir "$phase.json" + if (Test-Path $file) { $lines += "#### $phase", '```json', (Get-Content $file -Raw), '```' } + } + $lines | Add-Content $env:GITHUB_STEP_SUMMARY + - uses: actions/upload-artifact@v7 + if: always() + with: + name: wsl-orcad-lane-receipts + path: test-results/wsl-orcad-lane/ + retention-days: 7 + if-no-files-found: ignore diff --git a/.gitignore b/.gitignore index 54840102b6a..613bbf6f9bb 100644 --- a/.gitignore +++ b/.gitignore @@ -29,9 +29,13 @@ out/ release/ native/**/.build/ native/windows-cli-launcher/target/ -# node-gyp output for the vendored Windows registry addon; generated per host and ABI. +native/windows-agent-hook/target/ +# node-gyp output for the Windows native addons; generated per host and ABI. native/windows-registry/build/ native/windows-registry/bin/ +native/windows-security/build/ +native/windows-security/bin/ +.build/windows-security/ # pnpm .pnpm-store/ diff --git a/.oxlintrc.json b/.oxlintrc.json index 78dee1acd90..200213e83e3 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -21,6 +21,10 @@ { "name": "renderer-scrollbar-style", "specifier": "./config/oxlint-plugins/renderer-scrollbar-style.mjs" + }, + { + "name": "native-chat-design-tokens", + "specifier": "./config/oxlint-plugins/native-chat-design-tokens.mjs" } ], "categories": { @@ -181,6 +185,14 @@ ] } }, + { + "files": ["src/renderer/src/components/native-chat/**/*.{ts,tsx}"], + "rules": { + "native-chat-design-tokens/no-arbitrary-font-size": "error", + "native-chat-design-tokens/no-softened-foreground": "error", + "native-chat-design-tokens/no-weakened-focus-ring": "error" + } + }, { "files": ["src/shared/**/*.ts"], "rules": { @@ -198,7 +210,10 @@ "rules": { "react/globals": "off", "quadratic-buffer-concat/no-loop-carried-concat": "off", - "renderer-scrollbar-style/require-styled-vertical-scrollbar": "off" + "renderer-scrollbar-style/require-styled-vertical-scrollbar": "off", + "native-chat-design-tokens/no-arbitrary-font-size": "off", + "native-chat-design-tokens/no-softened-foreground": "off", + "native-chat-design-tokens/no-weakened-focus-ring": "off" } }, { diff --git a/AGENTS.md b/AGENTS.md index d30faf95d34..2451994d21a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # Design System -All UI work — layout, color, typography, spacing, component selection, UX behavior — must follow [`docs/STYLEGUIDE.md`](./docs/STYLEGUIDE.md). Most of it is linted: `pnpm run check:code-quality:changed` fails on new restyles of a `components/ui/` primitive, raw palette colors, and computed `className` strings; `pnpm lint` fails on any class Tailwind cannot generate. See the Enforcement section of the style guide before suppressing either. Use the tokens defined in `src/renderer/src/assets/main.css` (the canonical source) and the shadcn primitives in `src/renderer/src/components/ui/`. Don't invent new color values, font sizes, or shadow tiers when a documented one already covers the role. When STYLEGUIDE.md is silent, follow the resolution order in its final section. +All UI work — layout, color, typography, spacing, component selection, UX behavior — must follow [`docs/STYLEGUIDE.md`](./docs/STYLEGUIDE.md). Most of it is linted: `pnpm run check:code-quality:changed` fails on new restyles of a `components/ui/` primitive, raw palette colors, and computed `className` strings; `pnpm lint` fails on any class Tailwind cannot generate. See the Enforcement section of the style guide before suppressing either. Use the tokens defined in `src/renderer/src/assets/main.css` (the canonical source) and the shadcn primitives in `src/renderer/src/components/ui/`. Don't invent new color values, font sizes, or shadow tiers when a documented one already covers the role. When STYLEGUIDE.md is silent, follow the resolution order in its final section. In `components/native-chat/`, the "Chat type scale" and "Chat text colour, hover and focus" sections are binding, and `pnpm lint` fails on arbitrary font sizes, softened `text-foreground`, and weakened focus rings there. ## Electron UI Validation diff --git a/README.md b/README.md index 906fbc2d657..6def4187048 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Monitor and steer your agents from your phone — get notified when an agent finishes and send follow-ups from anywhere. -[iOS App Store](https://apps.apple.com/us/app/orca-ide/id6766130217) · [Android APK 0.0.52](https://github.com/stablyai/orca/releases/download/mobile-android-v0.0.52/app-release.apk) · [Docs →](https://www.onorca.dev/docs/mobile) +[iOS App Store](https://apps.apple.com/us/app/orca-ide/id6766130217) · [Android APK](https://www.onorca.dev/download/android) · [Docs →](https://www.onorca.dev/docs/mobile) @@ -234,7 +234,7 @@ yay -S stably-orca-bin Pair with your desktop app to monitor and steer your agents from your phone. - **iOS:** [Download on the App Store](https://apps.apple.com/us/app/orca-ide/id6766130217) -- **Android:** [Download APK 0.0.52](https://github.com/stablyai/orca/releases/download/mobile-android-v0.0.52/app-release.apk) · [Install guide](https://www.onorca.dev/docs/android-apk) +- **Android:** [Download APK](https://www.onorca.dev/download/android) · [Install guide](https://www.onorca.dev/docs/android-apk) --- diff --git a/cloud/dev/scripts/operate-relay-asia-admission.mjs b/cloud/dev/scripts/operate-relay-asia-admission.mjs index f5397972d4c..2a3189944bc 100644 --- a/cloud/dev/scripts/operate-relay-asia-admission.mjs +++ b/cloud/dev/scripts/operate-relay-asia-admission.mjs @@ -41,7 +41,8 @@ const SHAPES = { ['production-gce-c31'], ['production-gce-c32'], ['production-gce-c33'], - ['production-gce-c34'] + ['production-gce-c34'], + ['production-gce-c35'] ] } } diff --git a/cloud/dev/scripts/operate-relay-asia-admission.test.mjs b/cloud/dev/scripts/operate-relay-asia-admission.test.mjs index 8b53c0f5d2e..547c190f80c 100644 --- a/cloud/dev/scripts/operate-relay-asia-admission.test.mjs +++ b/cloud/dev/scripts/operate-relay-asia-admission.test.mjs @@ -560,7 +560,7 @@ test('accepts only reviewed Asia admission waves', () => { ].map((mode) => [mode, cellId])), ...['inspect', 'verify', 'register', 'registered', 'promote', 'recover-promotion', 'rollback'] .map((mode) => [mode, 'production-gce-c34']), - ...['inspect', 'verify', 'register', 'registered', 'rollback'] + ...['inspect', 'verify', 'register', 'registered', 'promote', 'recover-promotion', 'rollback'] .map((mode) => [mode, 'production-gce-c35']), ['inspect', 'production-gce-c27,production-gce-c28,production-gce-c29,production-gce-c30,production-gce-c31,production-gce-c32,production-gce-c33,production-gce-c34,production-gce-c35'] ] @@ -572,9 +572,8 @@ test('accepts only reviewed Asia admission waves', () => { ) } const rejected = [ - // The C35 spare stays migration-only: no reviewed promotion wave names it. - ['promote', 'production-gce-c35'], - ['recover-promotion', 'production-gce-c35'], + ['promote', 'production-gce-c34,production-gce-c35'], + ['promote', 'production-gce-c31,production-gce-c35'], ['register', 'production-gce-c34,production-gce-c35'], ['inspect', 'production-gce-c27,production-gce-c28,production-gce-c29,production-gce-c30,production-gce-c31,production-gce-c32,production-gce-c33,production-gce-c34'], ['rollback', 'production-gce-c27,production-gce-c28,production-gce-c29,production-gce-c30,production-gce-c31,production-gce-c32,production-gce-c33,production-gce-c34'], @@ -728,6 +727,26 @@ test('promotes the registered C34 spare to general and leaves every other cell a assert.deepEqual(subject.selector().membership.general, [...general, 'production-gce-c34'].sort()) }) +test('promotes the registered C35 spare to general and leaves every other cell alone', async () => { + const general = [ + ...launchCells, 'production-gce-c30', 'production-gce-c31', 'production-gce-c32', 'production-gce-c33', + 'production-gce-c34' + ] + const membership = { + existingOnly: [], + migrationOnly: ['production-gce-c17', 'production-gce-c35'], + general: [...general] + } + const subject = harness({ generation: 345, membership }) + const result = await operateRelayAsiaAdmission({ + environment: 'production', mode: 'promote', cells: ['production-gce-c35'], + expectedGeneration: 345, imageDigest: digest, attemptId: 'asia_promote_c35', token: 'not-logged' + }, subject) + assert.deepEqual(result.states, { 'production-gce-c35': 'general' }) + assert.deepEqual(subject.selector().membership.migrationOnly, ['production-gce-c17']) + assert.deepEqual(subject.selector().membership.general, [...general, 'production-gce-c35'].sort()) +}) + const usRegions = { 'production-gce-c32': 'us-central1', 'production-gce-c33': 'us-central1' } test('registers C32 and C33 one at a time in us-central1 at the Asia shape', async () => { @@ -868,7 +887,7 @@ test('runs each later cell\'s own canary with load aimed at that cell\'s region' for (const [cellId, region] of [ ['production-gce-c30', 'asia-east2'], ['production-gce-c31', 'asia-east2'], ['production-gce-c32', 'us-central1'], ['production-gce-c33', 'us-central1'], - ['production-gce-c34', 'asia-east2'] + ['production-gce-c34', 'asia-east2'], ['production-gce-c35', 'asia-east2'] ]) { const outputs = promotionOutputs(cellId) assert.equal(outputs?.canary, 'true', cellId) @@ -878,8 +897,9 @@ test('runs each later cell\'s own canary with load aimed at that cell\'s region' } assert.equal(promotionOutputs('production-gce-c32,production-gce-c33'), null) assert.equal(promotionOutputs('production-gce-c33,production-gce-c34'), null) + assert.equal(promotionOutputs('production-gce-c34,production-gce-c35'), null) const canaryStart = workflowBlock('case "${CANARY_CELL}" in', '\n esac') - for (const cellId of ['production-gce-c32', 'production-gce-c33', 'production-gce-c34']) { + for (const cellId of ['production-gce-c32', 'production-gce-c33', 'production-gce-c34', 'production-gce-c35']) { const result = spawnSync('bash', ['-euo', 'pipefail', '-c', `${canaryStart}\necho "\${verify_cells} \${expected_states}"`], { env: { ...process.env, CANARY_CELL: cellId }, encoding: 'utf8' diff --git a/cloud/dev/scripts/prepare-relay-production-capacity-canary.test.mjs b/cloud/dev/scripts/prepare-relay-production-capacity-canary.test.mjs index 9745c241544..80866fef433 100644 --- a/cloud/dev/scripts/prepare-relay-production-capacity-canary.test.mjs +++ b/cloud/dev/scripts/prepare-relay-production-capacity-canary.test.mjs @@ -97,9 +97,9 @@ describe('production Relay capacity cell admission', () => { it('admits the same-cap Asia and migration-only cells only under the same-cap allowlist', () => { for (const cellId of [ 'production-gce-c27', 'production-gce-c28', 'production-gce-c29', 'production-gce-c30', - 'production-gce-c31', 'production-gce-c34', + 'production-gce-c31', 'production-gce-c34', 'production-gce-c35', // Migration-only canaries: the US-only capacity rollout never touches them either. - 'production-gce-c17', 'production-gce-c18', 'production-gce-c35', + 'production-gce-c17', 'production-gce-c18', // US cells at the Asia shape: the 1,000-cap capacity rollout never touches them. 'production-gce-c32', 'production-gce-c33' ]) { diff --git a/cloud/dev/scripts/relay-asia-rollout-evidence.mjs b/cloud/dev/scripts/relay-asia-rollout-evidence.mjs index 09c1942eb86..850a9c98f11 100644 --- a/cloud/dev/scripts/relay-asia-rollout-evidence.mjs +++ b/cloud/dev/scripts/relay-asia-rollout-evidence.mjs @@ -27,6 +27,9 @@ const PRODUCTION_CANARIES = { }, 'production-gce-c34': { kind: 'production-c34-canary', origin: 'https://c34.relay.onorca.dev', region: ASIA_REGION + }, + 'production-gce-c35': { + kind: 'production-c35-canary', origin: 'https://c35.relay.onorca.dev', region: ASIA_REGION } } const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/ diff --git a/cloud/dev/scripts/relay-asia-rollout-evidence.test.mjs b/cloud/dev/scripts/relay-asia-rollout-evidence.test.mjs index b684bfed789..77e88a81452 100644 --- a/cloud/dev/scripts/relay-asia-rollout-evidence.test.mjs +++ b/cloud/dev/scripts/relay-asia-rollout-evidence.test.mjs @@ -415,6 +415,19 @@ test('builds a C34 canary that only C34 placement satisfies', () => { assert.throws(() => buildProductionCanaryEvidence(onC31), /C34 canary load was not placed only on C34/) }) +test('builds a C35 canary that only C35 placement satisfies', () => { + const c35 = 'production-gce-c35' + const evidence = buildProductionCanaryEvidence(canaryInput({}, c35)) + assert.equal(evidence.kind, 'production-c35-canary') + assert.equal(verifyRolloutEvidence( + evidence, workflowRun(evidence), + verifyExpected('production-c35-canary', { cellIds: [c35], selectorGeneration: 9 }) + ), evidence) + const onC34 = canaryInput({}, c35) + onC34.loadReport.assignedCellOrigins = ['https://c34.relay.onorca.dev'] + assert.throws(() => buildProductionCanaryEvidence(onC34), /C35 canary load was not placed only on C35/) +}) + test('records but does not gate organic US-targeted fallbacks during a canary', () => { // Mirrors C31's 2026-10-01 canary: US-targeted fallbacks, none targeting Asia. const input = canaryInput({}, 'production-gce-c31') diff --git a/cloud/dev/scripts/relay-production-same-cap-wave.mjs b/cloud/dev/scripts/relay-production-same-cap-wave.mjs index ce67ed0e62e..3389910ccfc 100644 --- a/cloud/dev/scripts/relay-production-same-cap-wave.mjs +++ b/cloud/dev/scripts/relay-production-same-cap-wave.mjs @@ -4,10 +4,7 @@ import { requireSameEvidenceCode } from './relay-evidence-code-provenance.mjs' // Migration-only by policy: zero hosts and no reservation, so a wave rolls one without // displacing anybody. It enters and must leave migration-only, never general. -// C35 is an Asia spare that stays migration-only until a reviewed change promotes it. -export const SAME_CAP_MIGRATION_ONLY_CELLS = [ - 'production-gce-c17', 'production-gce-c18', 'production-gce-c35' -] +export const SAME_CAP_MIGRATION_ONLY_CELLS = ['production-gce-c17', 'production-gce-c18'] export const SAME_CAP_CELLS = [ 'production-gce-c7', 'production-gce-c8', 'production-gce-c9', 'production-gce-c10', @@ -16,6 +13,7 @@ export const SAME_CAP_CELLS = [ 'production-gce-c23', 'production-gce-c24', 'production-gce-c25', 'production-gce-c26', 'production-gce-c27', 'production-gce-c28', 'production-gce-c29', 'production-gce-c30', 'production-gce-c31', 'production-gce-c32', 'production-gce-c33', 'production-gce-c34', + 'production-gce-c35', ...SAME_CAP_MIGRATION_ONLY_CELLS ] diff --git a/cloud/dev/scripts/relay-production-same-cap-wave.test.mjs b/cloud/dev/scripts/relay-production-same-cap-wave.test.mjs index 48630cc103e..d679ae3c7e4 100644 --- a/cloud/dev/scripts/relay-production-same-cap-wave.test.mjs +++ b/cloud/dev/scripts/relay-production-same-cap-wave.test.mjs @@ -136,14 +136,11 @@ test('the wave workflow chains exactly ten serial cell jobs', () => { assert.doesNotMatch(dispatch, /\n cell_11:/) }) -test('lists the C35 spare as migration-only beside C17 and C18, and C30-C34 as general', () => { - assert.deepEqual( - SAME_CAP_MIGRATION_ONLY_CELLS, - ['production-gce-c17', 'production-gce-c18', 'production-gce-c35'] - ) +test('lists only C17 and C18 as migration-only now that C35 is promoted, and C30-C35 as general', () => { + assert.deepEqual(SAME_CAP_MIGRATION_ONLY_CELLS, ['production-gce-c17', 'production-gce-c18']) for (const cellId of [ 'production-gce-c30', 'production-gce-c31', 'production-gce-c32', 'production-gce-c33', - 'production-gce-c34' + 'production-gce-c34', 'production-gce-c35' ]) { assert.equal(SAME_CAP_CELLS.includes(cellId), true, cellId) } @@ -221,6 +218,19 @@ test('rolls the migration-only cells but never mixes the two classes in one wave confirmation: `ROLL_RELAY_SAME_CAP ${targetDigest} ${c34Mixed}`, canaryRunId: '42' }), /all general or all migration-only/) + // C35 is general once its Asia canary promotes it, so a rollback restores it general. + assert.equal(entryAdmission('production-gce-c35'), 'general') + assert.equal(selectorWaveDelta('production-gce-c35'), 2) + const c35Mixed = 'production-gce-c35,production-gce-c17' + assert.throws(() => validateSameCapWave({ + mode: 'batch-apply', + cellIds: c35Mixed, + targetDigest, + rollbackDigest, + drainPaceWindowMs: '300000', + confirmation: `ROLL_RELAY_SAME_CAP ${targetDigest} ${c35Mixed}`, + canaryRunId: '42' + }), /all general or all migration-only/) const c31Mixed = 'production-gce-c31,production-gce-c18' assert.throws(() => validateSameCapWave({ mode: 'batch-apply', @@ -669,7 +679,7 @@ test('keeps Asia and migration-only cells on the default pace', () => { ) for (const cellId of SAME_CAP_CELLS) { const fast = SAME_CAP_FAST_DRAIN_PACE_CELLS.includes(cellId) - const asia = ['c27', 'c28', 'c29', 'c30', 'c31', 'c34'].some( + const asia = ['c27', 'c28', 'c29', 'c30', 'c31', 'c34', 'c35'].some( (cell) => cellId === `production-gce-${cell}` ) assert.equal(fast, entryAdmission(cellId) === 'general' && !asia, cellId) diff --git a/cloud/dev/scripts/relay-same-cap-script-census.test.mjs b/cloud/dev/scripts/relay-same-cap-script-census.test.mjs index 77f266bb7bd..2fea683b82e 100644 --- a/cloud/dev/scripts/relay-same-cap-script-census.test.mjs +++ b/cloud/dev/scripts/relay-same-cap-script-census.test.mjs @@ -279,10 +279,9 @@ describe('same-cap roll scripts accept every same-cap cell', () => { const trusted = SAME_CAP_CELLS.filter((cell) => REHOME_SOURCE_CELLS.has(cell)) // Only a declared rehome source may roll at a trusted protocol at all; the job refuses // the rest before it plans, and the next test covers them at protocol 0. - // The C35 spare is a rehome source that stays migration-only. assert.deepEqual( SAME_CAP_CELLS.filter((cell) => !REHOME_SOURCE_CELLS.has(cell)), - SAME_CAP_MIGRATION_ONLY_CELLS.filter((cell) => cell !== 'production-gce-c35') + SAME_CAP_MIGRATION_ONLY_CELLS ) for (const [cellId, protocol] of trusted.flatMap((cell) => [[cell, 1], [cell, 3]])) { const { cap, pool } = cellShape(cellId) diff --git a/cloud/dev/scripts/relay-same-cap-shadow-gate-verdict.mjs b/cloud/dev/scripts/relay-same-cap-shadow-gate-verdict.mjs index 019b31616fb..76523d435af 100644 --- a/cloud/dev/scripts/relay-same-cap-shadow-gate-verdict.mjs +++ b/cloud/dev/scripts/relay-same-cap-shadow-gate-verdict.mjs @@ -29,7 +29,8 @@ export const FLEET_POOL_CELL_IDS = [ 'production-gce-c29', 'production-gce-c30', 'production-gce-c31', - 'production-gce-c34' + 'production-gce-c34', + 'production-gce-c35' ] export const SHADOW_GATE_THRESHOLDS = { diff --git a/cloud/dev/scripts/relay-same-cap-shadow-gate.test.mjs b/cloud/dev/scripts/relay-same-cap-shadow-gate.test.mjs index 34ac47fec7f..681b06c3187 100644 --- a/cloud/dev/scripts/relay-same-cap-shadow-gate.test.mjs +++ b/cloud/dev/scripts/relay-same-cap-shadow-gate.test.mjs @@ -279,6 +279,7 @@ function productionLikeEntries() { ...metricSamples({ cellId: 'production-gce-c30', from: '2026-09-20T20:20:00Z', count: 20 }), ...metricSamples({ cellId: 'production-gce-c31', from: '2026-09-20T20:20:00Z', count: 20 }), ...metricSamples({ cellId: 'production-gce-c34', from: '2026-09-20T20:20:00Z', count: 20 }), + ...metricSamples({ cellId: 'production-gce-c35', from: '2026-09-20T20:20:00Z', count: 20 }), // One director instance's samples from ten minutes before the drain to the window's end. ...directorSamples({ from: '2026-09-20T19:50:00Z', count: 80, payload: {} }) ] @@ -340,10 +341,10 @@ function gcloudSeam(entries = productionLikeEntries()) { } } -test('reads every promoted asia-east2 cell as fleet pool, C34 included', () => { +test('reads every promoted asia-east2 cell as fleet pool, C35 included', () => { assert.deepEqual(FLEET_POOL_CELL_IDS, [ 'production-gce-c27', 'production-gce-c28', 'production-gce-c29', 'production-gce-c30', - 'production-gce-c31', 'production-gce-c34' + 'production-gce-c31', 'production-gce-c34', 'production-gce-c35' ]) }) @@ -365,6 +366,7 @@ test('a healthy roll reads as PASS and names the instance it proved serving', as 'fleetPool:production-gce-c30', 'fleetPool:production-gce-c31', 'fleetPool:production-gce-c34', + 'fleetPool:production-gce-c35', 'nonDrain503Budget' ]) assert.deepEqual(report.drain, { diff --git a/cloud/docs/relay-workflows.md b/cloud/docs/relay-workflows.md index 1cdffac2cd0..66b56b1e901 100644 --- a/cloud/docs/relay-workflows.md +++ b/cloud/docs/relay-workflows.md @@ -228,13 +228,16 @@ first rolled to the director's image as a migration-only same-cap wave. Once its it, it moved to the same-cap general list and the fleet pool list together, so the same-cap job now rolls it as a general cell and a rollback restores it general. It is a declared rehome source. -C35 is a seventh Asia cell at the C34 shape in `asia-east2-a`, starting a third zone round. It is -its own topology wave on image F (`sha256:41cba995…`), registers alone as migration-only, and then -the director is configured with `cell-ids` set to C35. It has no promotion wave yet: the Asia admission -script and workflow refuse `promote` for it. It is a declared rehome source, sits in the same-cap -migration-only list, and stays out of the fleet pool list. Its pool of 16 leaves 3 connections -under the usable Cloud SQL ceiling (`relay-cloud-sql-connection-budget.mjs`). Promoting it takes its -own reviewed change adding a promotion wave and canary entry, as C34 did. +C35 is a seventh Asia cell at the C34 shape in `asia-east2-a`, starting a third zone round. It was +its own topology wave on image F (`sha256:41cba995…`), registered alone as migration-only, and then +the director was configured with `cell-ids` set to C35. It launched as a migration-only spare and has +a promotion wave of its own, with the same five-minute canary C30, C31 and C34 ran. Promotion +compares the director's serving digest and C35's runtime digest with the one `image-digest` input, +so C35 was first rolled to the director's image as a migration-only same-cap wave. Once its canary +promoted it, it moved to the same-cap general list and the fleet pool list together, so the same-cap +job now rolls it as a general cell and a rollback restores it general. It is a declared rehome source. +Its pool of 16 leaves 3 connections under the usable Cloud SQL ceiling +(`relay-cloud-sql-connection-budget.mjs`). Rollback returns Asia cells to migration-only; it does not destroy the network or use existing-only. The production topology dispatch remains unavailable until the diff --git a/cloud/infra/terraform/environments/production.tfvars b/cloud/infra/terraform/environments/production.tfvars index dedf797c6ee..d427b2c28a3 100644 --- a/cloud/infra/terraform/environments/production.tfvars +++ b/cloud/infra/terraform/environments/production.tfvars @@ -468,7 +468,7 @@ relay_gce_cells = { connection_hard_cap = 3000 connection_unobserved_bound = 60 } - # Asia spare: registered migration-only as a drain landing zone; a starts the third zone round. + # Seventh Asia cell: launched as a migration-only spare, now general; a starts the third zone round. "production-gce-c35" = { hostname = "c35" region = "asia-east2" diff --git a/config/.bun-version b/config/.bun-version index 9df886c42a1..428b770e3e2 100644 --- a/config/.bun-version +++ b/config/.bun-version @@ -1 +1 @@ -1.4.2 +1.4.3 diff --git a/config/build-plugins/main-build-entry-points.ts b/config/build-plugins/main-build-entry-points.ts new file mode 100644 index 00000000000..a1c9427ef6a --- /dev/null +++ b/config/build-plugins/main-build-entry-points.ts @@ -0,0 +1,60 @@ +import { resolve } from 'node:path' +import { ORCAD_LOCAL_SERVE_SELECTION_ENTRY } from '../../src/shared/orcad-local-serve-selection' +import { CLI_MAIN_ENTRY_NAMES } from './plain-node-entry-guard' + +/** Main-build Rollup inputs: output file name (without .js) to its source entry. */ +export const MAIN_BUILD_ENTRY_POINTS: Record = { + index: resolve('src/main/index.ts'), + // Why: sandboxed webview preloads cannot load Rollup helper chunks. + 'browser-window-close-preload': resolve('src/preload/browser-window-close.ts'), + 'doc-preview-link-preload': resolve('src/preload/doc-preview-link.ts'), + 'daemon-entry': resolve('src/main/daemon/daemon-entry.ts'), + 'plugin-host-entry': resolve('src/main/plugins/plugin-host-entry.ts'), + 'computer-sidecar': resolve('src/main/computer/sidecar-entry.ts'), + 'stt-worker': resolve('src/main/speech/stt-worker.ts'), + 'warp-theme-parser-worker': resolve('src/main/warp-themes/warp-theme-parser-worker.ts'), + 'foreign-sqlite-reader-entry': resolve( + 'src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry.ts' + ), + 'session-scanner-service-entry': resolve('src/main/ai-vault/session-scanner-service-entry.ts'), + 'wsl-transcript-fs-process-entry': resolve( + 'src/main/native-chat/wsl-transcript-fs-process-entry.ts' + ), + // Why: libuv spawns processes inline on the calling loop, so the port + // scan's probe commands run on a worker thread instead of the UI one. + 'port-scan-command-worker-entry': resolve('src/main/ports/port-scan-command-worker-entry.ts'), + // Why (#27362): the Codex usage probe spawns on window focus; a cold + // CreateProcessW must not block the UI loop. + 'worker-thread-child-process-entry': resolve( + 'src/main/worker-thread-child-process/worker-thread-child-process-entry.ts' + ), + // Why: the Claude/Codex/OpenCode usage scans walk whole history + // corpora and read SQLite synchronously; a worker thread keeps that + // off the main-process event loop. + 'usage-scan-worker-entry': resolve('src/main/usage/usage-scan-worker-entry.ts'), + // Why: a first account setup can merge a large history tree with sync fs calls. + 'claude-profile-setup-worker-entry': resolve( + 'src/main/claude-accounts/claude-profile-setup-worker-entry.ts' + ), + 'profile-state-backup-worker-entry': resolve( + 'src/main/persistence/profile-state/profile-state-backup-worker-entry.ts' + ), + 'profile-state-writer-worker-entry': resolve( + 'src/main/persistence/profile-state/profile-state-writer-worker-entry.ts' + ), + // Why: forked with ELECTRON_RUN_AS_NODE so @parcel/watcher faults + // can't take down the main process (issue #7547). + 'parcel-watcher-process-entry': resolve('src/main/ipc/parcel-watcher-process-entry.ts'), + // Why: `orca serve` runs it under ELECTRON_RUN_AS_NODE so the CLI never bundles orcad prep. + [ORCAD_LOCAL_SERVE_SELECTION_ENTRY]: resolve( + 'src/main/orcad/orcad-local-serve-selection-entry.ts' + ), + // Why: a worker thread survives the macOS 26 AppKit main-thread deadlock + // without paying for another Electron process. + 'main-thread-hang-watchdog-entry': resolve( + 'src/main/hang-watchdog/main-thread-hang-watchdog-entry.ts' + ), + ...Object.fromEntries( + CLI_MAIN_ENTRY_NAMES.map((module) => [module, resolve(`src/main/${module}.ts`)]) + ) +} diff --git a/config/build-plugins/plain-node-entry-guard.ts b/config/build-plugins/plain-node-entry-guard.ts index f31f16012ab..fdd9e7d14ca 100644 --- a/config/build-plugins/plain-node-entry-guard.ts +++ b/config/build-plugins/plain-node-entry-guard.ts @@ -62,6 +62,7 @@ const WORKER_THREAD_ENTRY_NAMES = [ 'foreign-sqlite-reader-entry', 'main-thread-hang-watchdog-entry', 'port-scan-command-worker-entry', + 'worker-thread-child-process-entry', 'usage-scan-worker-entry', 'claude-profile-setup-worker-entry', 'profile-state-backup-worker-entry', diff --git a/config/docker/headless-serve-shutdown/run-signal-case.sh b/config/docker/headless-serve-shutdown/run-signal-case.sh index 2d561629170..5d1979462aa 100755 --- a/config/docker/headless-serve-shutdown/run-signal-case.sh +++ b/config/docker/headless-serve-shutdown/run-signal-case.sh @@ -38,6 +38,8 @@ export XDG_CONFIG_HOME="$state_dir/config" export XDG_CACHE_HOME="$state_dir/cache" export XDG_RUNTIME_DIR="$state_dir/runtime" export LIBGL_ALWAYS_SOFTWARE=1 +# Every entrypoint must serve the profile the caller chose, not the default one. +export ORCA_USER_DATA_PATH="$state_dir/profile" mkdir -p "$HOME" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" "$XDG_RUNTIME_DIR" chmod 700 "$XDG_RUNTIME_DIR" @@ -81,6 +83,12 @@ if [[ -z "$ready_line" ]]; then exit 1 fi +if [[ ! -f "$ORCA_USER_DATA_PATH/orca-runtime.json" || -e "$XDG_CONFIG_HOME/orca/orca-runtime.json" ]]; then + ls -la "$ORCA_USER_DATA_PATH" "$XDG_CONFIG_HOME" >&2 || true + echo "FAIL: serve ignored ORCA_USER_DATA_PATH; its runtime metadata is not in $ORCA_USER_DATA_PATH" >&2 + exit 1 +fi + registered_cli_verified=false if [[ "$entrypoint_kind" == appimage ]]; then registered_cli="$HOME/.local/bin/orca-ide" @@ -96,6 +104,20 @@ if [[ "$entrypoint_kind" == appimage ]]; then printf '%s\n' "$registered_help" >&2 exit 1 fi + # Pre-lease builds prune every generation under sha256(AppImage path); this build must not extract there. + installed_target=$(readlink "$XDG_CACHE_HOME/orca/appimage/launcher/installed" 2>/dev/null || true) + installed_namespace=$(basename "$(dirname "$(dirname "$(dirname "$(dirname "$installed_target")")")")") + legacy_namespace=$(printf '%s' /input/orca.AppImage | sha256sum | cut -c1-24) + if [[ ! -x "$installed_target" || "$installed_namespace" == "$legacy_namespace" ]]; then + echo "FAIL: installed CLI payload ${installed_target:-missing} is in the legacy namespace or missing" >&2 + exit 1 + fi + # A fresh cache means this serve unpacked the AppImage first, with progress on stderr. + if ! grep -q '\[serve\] AppImage copy ready after' "$stderr_log"; then + cat "$stderr_log" >&2 + echo "FAIL: first AppImage serve did not report unpacking progress" >&2 + exit 1 + fi registered_cli_verified=true fi diff --git a/config/electron-builder.config.cjs b/config/electron-builder.config.cjs index f8fc9f36060..cea7d61c4fd 100644 --- a/config/electron-builder.config.cjs +++ b/config/electron-builder.config.cjs @@ -24,6 +24,13 @@ const { verifyPackagedMainRuntimeDeps } = require('./packaged-runtime-node-modules.cjs') const { verifyLinuxGlibcFloor } = require('./scripts/verify-linux-glibc-floor.cjs') +const { + verifyPackagedWindowsAgentHook +} = require('./scripts/verify-packaged-windows-agent-hook.cjs') +const { + ensureBundledWaylandClipboard, + finalizePackagedWaylandClipboard +} = require('./wayland-clipboard-resources.cjs') const { writeMacBuildCompatibility } = require('./scripts/mac-build-compatibility.cjs') const { MOBILE_WEB_BUNDLE_DIR, @@ -48,6 +55,11 @@ const { } = require('./scripts/packaged-orcad-template.cjs') const { verifySkillsCliRuntime } = require('./scripts/verify-skills-cli-runtime.cjs') const { verifyStaticAppImagePackage } = require('./scripts/static-appimage-package-contract.cjs') +const { + appImageNodeRuntimeFpmArgs, + placeAppImageNodeRuntime, + verifyAppImageNodeRuntimeServesPty +} = require('./scripts/appimage-node-runtime.cjs') const { signWindowsUninstallerViaSignPath } = require('./scripts/windows-uninstaller-signing.cjs') // Why: dev-channel builds must carry the *release* identity — same bundle id, @@ -190,7 +202,7 @@ const TABULAR_FILE_EXTENSIONS = ['csv', 'tsv'] // Why: the config must load on a host-only install without resolving unused Windows addons. // This is load-time tolerance only; beforePack enforces that the target's natives are installed. // Why one package: @vscode/windows-process-tree is the only os: win32 npm addon; -// @orca/windows-registry is a workspace link present on every host, so its presence proves nothing. +// the @orca/windows-* addons are workspace links present on every host, so their presence proves nothing. const windowsRuntimeResources = existsSync( join(__dirname, '..', 'node_modules', '@vscode', 'windows-process-tree', 'package.json') ) @@ -375,12 +387,19 @@ module.exports = { }, // electron-builder calls this with the context alone. The second parameter is the bundle root, // so a test can point the guard at a scratch bundle instead of needing the repo's out/ built. - beforePack: (context, mobileWebBundleDir = MOBILE_WEB_BUNDLE_DIR) => { + beforePack: ( + context, + mobileWebBundleDir = MOBILE_WEB_BUNDLE_DIR, + ensureWaylandClipboard = ensureBundledWaylandClipboard + ) => { assertPackagedNativeVariantsInstalled(context.electronPlatformName, context.arch) assertBundledRipgrepInstalled() assertProcessHostOutputBuilt() assertOrcadTemplateBuilt() assertMobileWebBundleBuilt(mobileWebBundleDir) + if (context.electronPlatformName === 'linux') { + ensureWaylandClipboard(context.arch) + } }, afterPack: async (context) => { const resourcesDir = @@ -426,12 +445,15 @@ module.exports = { // Why after the prune: `pnpm install:release` widens the CPU set for cross-builds, // so an arm64 slice can still carry the x64 @parcel/watcher until // prunePackagedRuntimeNodeModules drops it. + let appImageNodeRuntime = null if (context.electronPlatformName === 'linux') { + const targetArch = { 1: 'x64', 3: 'arm64' }[context.arch] + // Before the floor gate, so the bundled Node is held to the same glibc floor. + appImageNodeRuntime = await placeAppImageNodeRuntime(resourcesDir, targetArch) // Why the arch is passed: symbol-version checks pass happily on a wrong-architecture binary, // so a cross-built slice could ship the host's pty.node and only fail at runtime. - verifyLinuxGlibcFloor(context.appOutDir, { - targetArch: { 1: 'x64', 3: 'arm64' }[context.arch] - }) + finalizePackagedWaylandClipboard(resourcesDir) + verifyLinuxGlibcFloor(context.appOutDir, { targetArch }) } verifyPackagedMainRuntimeDeps(resourcesDir) // Why: boot the packaged daemon-entry under plain Node, but only for the @@ -444,6 +466,7 @@ module.exports = { const canExecuteTargetArch = context.arch === hostArchEnum || context.arch === 4 if (context.electronPlatformName === 'win32') { verifyPackagedWindowsNodePty(resourcesDir, context.arch, { canExecuteTargetArch }) + verifyPackagedWindowsAgentHook(resourcesDir, context.arch) } verifySkillsCliRuntime(join(resourcesDir, 'app.asar.unpacked', 'out'), resourcesDir, { executeCommands: canExecuteTargetArch @@ -455,6 +478,9 @@ module.exports = { } if (canExecuteTargetArch) { verifyPackagedDaemonEntryBoots(resourcesDir) + if (appImageNodeRuntime) { + await verifyAppImageNodeRuntimeServesPty(resourcesDir, appImageNodeRuntime) + } } else { // Why: a cross-arch slice can't be booted by the host Node, but the // unpacked entry must still exist — its absence is a layout regression @@ -534,6 +560,16 @@ module.exports = { from: 'native/windows-cli-launcher/.build/orca.exe', to: 'bin/orca.exe' }, + { + from: 'native/windows-cli-launcher/.build/orca-administrator-restart.exe', + to: 'bin/orca-administrator-restart.exe' + }, + // Why resources/bin: SignPath signs every unsigned PE under win-unpacked, and the hook + // installer copies this signed file into ~/.orca/agent-hooks (#20913). + { + from: 'native/windows-agent-hook/.build/orca-agent-hook.exe', + to: 'bin/orca-agent-hook.exe' + }, { from: 'node_modules/agent-browser/bin/agent-browser-win32-x64.exe', to: 'agent-browser-win32-x64.exe' @@ -671,6 +707,10 @@ module.exports = { ...commonExtraResources, ...createPackagedRuntimeNodeModuleResources('linux'), linuxSpeechNativeResource, + { + from: 'native/wayland-clipboard/.build/${arch}/orca-wayland-clipboard', + to: 'bin/orca-wayland-clipboard' + }, { from: 'resources/linux/bin/orca-ide', to: 'bin/orca-ide' @@ -714,7 +754,9 @@ module.exports = { // GUI-triggered and can never run on a server, so without this the CLI is // unreachable from the shell on exactly the hosts that need it. afterInstall: 'resources/linux/packaging/after-install.sh', - afterRemove: 'resources/linux/packaging/after-remove.sh' + afterRemove: 'resources/linux/packaging/after-remove.sh', + // Why: only an AppImage's files can vanish under a running daemon (see appimage-node-runtime.cjs). + fpm: appImageNodeRuntimeFpmArgs }, rpm: { packageName: 'orca-ide', @@ -731,7 +773,9 @@ module.exports = { ], // Why: same headless CLI-on-PATH registration as deb; rpm runs these via fpm. afterInstall: 'resources/linux/packaging/after-install.sh', - afterRemove: 'resources/linux/packaging/after-remove.sh' + afterRemove: 'resources/linux/packaging/after-remove.sh', + // Why: only an AppImage's files can vanish under a running daemon (see appimage-node-runtime.cjs). + fpm: appImageNodeRuntimeFpmArgs }, beforeBuild: electronBuilderNativeRebuild, // Why: must be true so that electron-builder rebuilds native modules diff --git a/config/focus-setting-read-baseline.txt b/config/focus-setting-read-baseline.txt index 20f9e85dc52..5c1bc52ff16 100644 --- a/config/focus-setting-read-baseline.txt +++ b/config/focus-setting-read-baseline.txt @@ -333,7 +333,6 @@ 2 src/renderer/src/lib/launch-agent-web-host-tab.ts 2 src/renderer/src/lib/launch-ai-vault-session.ts 1 src/renderer/src/lib/launch-structured-agent-session.ts -1 src/renderer/src/lib/launch-worktree-background-terminals.ts 1 src/renderer/src/lib/linear-issue-url-lookup.ts 1 src/renderer/src/lib/local-preflight-context.ts 3 src/renderer/src/lib/open-agent-message-sender.ts diff --git a/config/knip.json b/config/knip.json index 8bb86d8d261..fefbeabd39d 100644 --- a/config/knip.json +++ b/config/knip.json @@ -11,6 +11,7 @@ "src/main/warp-themes/warp-theme-parser-worker.ts", "src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry.ts", "src/main/ports/port-scan-command-worker-entry.ts", + "src/main/worker-thread-child-process/worker-thread-child-process-entry.ts", "src/main/ipc/parcel-watcher-process-entry.ts", "src/main/hang-watchdog/main-thread-hang-watchdog-entry.ts", "src/main/agent-hooks/managed-agent-hook-controls.ts", diff --git a/config/main-sync-spawn-baseline.txt b/config/main-sync-spawn-baseline.txt new file mode 100644 index 00000000000..59644c5f559 --- /dev/null +++ b/config/main-sync-spawn-baseline.txt @@ -0,0 +1,54 @@ +# Synchronous child-process launches in production src/main and src/shared, per file: uses of +# execFileSync/spawnSync/execSync, runProcessSync and the repo sync wrappers listed in +# config/scripts/check-main-sync-spawn-ratchet.mjs (synchronous ACL rewrites and grants, which +# can block on a whole directory subtree). +# Some entries run in the daemon or orcad process, or are test harnesses outside the test-path +# conventions. This is a RATCHET: counts may only go DOWN. +# Prune after removing launches: pnpm check:main-sync-spawn-ratchet --prune +1 src/main/agent-hooks/installer-utils.ts +2 src/main/browser/browser-cookie-key.ts +1 src/main/browser/browser-route-egress-electron-launch.ts +1 src/main/browser/browser-route-partition-binding-store.ts +1 src/main/browser/browser-route-persisted-worker-electron-process.ts +1 src/main/claude-accounts/runtime-auth-service.ts +3 src/main/codex-accounts/fs-utils.ts +2 src/main/codex-accounts/legacy-wsl-runtime-auth-drain-recovery-script-harness.ts +2 src/main/codex-accounts/legacy-wsl-runtime-auth-drain-script-harness.ts +1 src/main/codex-accounts/runtime-home-service-home-routing.ts +1 src/main/codex-accounts/runtime-home-service-wsl.ts +2 src/main/codex-accounts/service.ts +1 src/main/computer/macos-computer-use-permissions.ts +2 src/main/daemon/daemon-cgroup-scope.ts +1 src/main/daemon/daemon-process-identity-query.ts +1 src/main/daemon/daemon-process-start-time.ts +1 src/main/daemon/daemon-user-manager-lifetime.ts +1 src/main/daemon/pty-process-ceiling-runtime.ts +1 src/main/daemon/pty-process-ceiling.ts +1 src/main/daemon/pty-subprocess/shell-launch-plan.ts +1 src/main/emulator/serve-sim-runtime-materializer.ts +1 src/main/git/command-runner/git-exec-file.ts +1 src/main/git/repo-detection-command.ts +1 src/main/git/runner.ts +1 src/main/ipc/worktree-logic.ts +2 src/main/macos-press-and-hold-default.ts +1 src/main/network/macos-tailscale-dns-diagnostic.ts +1 src/main/opencode/legacy-plugin-acl-retry.ts +2 src/main/orcad/node-pty-precondition.ts +1 src/main/orcad/orcad-data-root-privacy.ts +2 src/main/persistence/profile-state/profile-state-access-identity.ts +1 src/main/persistence/profile-state/profile-state-recovery-copy.ts +1 src/main/plugins/plugin-private-marketplace-ssh-shim.cjs +1 src/main/pty/posix-pty-foreground-group.ts +1 src/main/pty/posix-pty-process-groups.ts +1 src/main/pwsh.ts +1 src/main/runtime/runtime-skill-install-authority.ts +1 src/main/runtime/tls-certificate.ts +1 src/main/skills/skill-discovery-target.ts +2 src/main/startup/cli-launch-redirect.ts +1 src/main/startup/linux-secret-service-probe.ts +1 src/main/worktree-runner-script.ts +3 src/main/wsl.ts +2 src/main/zsh-startup-hook-pty-harness.ts +1 src/shared/fish-binary-requirement.ts +1 src/shared/openssh-default-shell.ts +1 src/shared/secure-file.ts diff --git a/config/mobile-ci.vitest.config.mjs b/config/mobile-ci.vitest.config.mjs index aefae4d5ffe..a5c7684ae42 100644 --- a/config/mobile-ci.vitest.config.mjs +++ b/config/mobile-ci.vitest.config.mjs @@ -3,6 +3,7 @@ import original from '../mobile/vitest.config.ts' // Keep real process, native, and runtime-specific contracts on Node. const nodeFiles = [ + 'scripts/check-tests-typecheck-incremental-cache.test.ts', 'src/tasks/mobile-agent-launch-architecture.test.ts', 'src/tasks/agent-launch-mobile-replay.test.ts', 'src/mock-server-key-pair.test.ts', diff --git a/config/oxlint-plugins/native-chat-design-tokens.mjs b/config/oxlint-plugins/native-chat-design-tokens.mjs new file mode 100644 index 00000000000..26c0e56a622 --- /dev/null +++ b/config/oxlint-plugins/native-chat-design-tokens.mjs @@ -0,0 +1,49 @@ +import { plainClassName } from './renderer-scrollbar-style.mjs' + +const CHECKS = { + 'no-arbitrary-font-size': { + pattern: /^text-\[(?:length:)?[\d.]+(?:px|rem|em)\]$/, + message: + 'Use a chat type step (text-sm, text-xs, text-2xs, text-3xs, text-chat-code), not an arbitrary size. See "Chat type scale" in docs/STYLEGUIDE.md.' + }, + 'no-softened-foreground': { + pattern: /^text-foreground\/\d+$/, + message: + "Don't soften text-foreground by hand: use text-chat-foreground on the chat canvas or text-muted-foreground on a lifted surface. See docs/STYLEGUIDE.md." + }, + 'no-weakened-focus-ring': { + pattern: /^ring-ring\/\d+$/, + message: + 'A focus ring at reduced opacity fails 3:1 contrast on the chat canvas: use ring-ring. See docs/STYLEGUIDE.md.' + } +} + +function literalTexts(node) { + if (node.type === 'Literal') { + return typeof node.value === 'string' ? [node.value] : [] + } + return node.quasis.map((quasi) => quasi.value.cooked ?? quasi.value.raw) +} + +function createRule({ pattern, message }) { + return { + create(context) { + const check = (node) => { + const offending = literalTexts(node) + .flatMap((text) => text.split(/\s+/)) + .find((token) => pattern.test(plainClassName(token))) + if (offending) { + context.report({ node, message: `${offending}: ${message}` }) + } + } + return { Literal: check, TemplateLiteral: check } + } + } +} + +export default { + meta: { name: 'native-chat-design-tokens' }, + rules: Object.fromEntries( + Object.entries(CHECKS).map(([name, check]) => [name, createRule(check)]) + ) +} diff --git a/config/packaged-runtime-node-modules.cjs b/config/packaged-runtime-node-modules.cjs index b22664b83c2..63556ad3b6d 100644 --- a/config/packaged-runtime-node-modules.cjs +++ b/config/packaged-runtime-node-modules.cjs @@ -27,6 +27,7 @@ const PACKAGED_RUNTIME_PACKAGE_ROOTS = [ 'posthog-node', 'proper-lockfile', 'qrcode', + 'smol-toml', 'ssh2', 'tweetnacl', 'ws', @@ -36,9 +37,15 @@ const PACKAGED_RUNTIME_PACKAGE_ROOTS = [ // Why macOS only: serve-sim drives the iOS Simulator, and its native addon is a Mach-O that // Windows signing rejects as a PE file. const DARWIN_PACKAGED_RUNTIME_PACKAGE_ROOTS = ['serve-sim'] +/** The compiled binary each workspace Windows addon loads, relative to its package. */ +const WORKSPACE_WINDOWS_ADDON_BINARIES = [ + ['@orca/windows-registry', 'build/Release/orca_windows_registry.node'], + ['@orca/windows-security', 'build/Release/orca_windows_security.node'] +] const WINDOWS_PACKAGED_RUNTIME_PACKAGE_ROOTS = [ '@vscode/windows-process-tree', - '@orca/windows-registry' + '@orca/windows-registry', + '@orca/windows-security' ] const NODE_PTY_PREBUILD_PREFIX_BY_PLATFORM = { @@ -612,11 +619,21 @@ function assertPackagedNativeVariantsInstalled(electronPlatformName, electronArc } // Why one package: @vscode/windows-process-tree is the only os: win32 npm addon; - // @orca/windows-registry is a workspace link present on every host, so its presence proves nothing. + // the @orca/windows-* addons are workspace links present on every host, so their presence proves nothing. const missingWindowsAddons = [] if (electronPlatformName === 'win32' && !isInstalled('@vscode/windows-process-tree')) { missingWindowsAddons.push('@vscode/windows-process-tree') } + // Why the binary, not the package: the link exists everywhere, and a missing or foreign-arch + // .node would otherwise surface only at runtime (secure files unrestricted, orcad refusing to start). + if (electronPlatformName === 'win32') { + for (const [name, binary] of WORKSPACE_WINDOWS_ADDON_BINARIES) { + const addon = join(nodeModulesDir, name, binary) + if (!existsSync(addon) || readPeMachine(addon) !== PE_MACHINE[architecture]) { + missingWindowsAddons.push(`${name} (${binary} for ${architecture})`) + } + } + } if (missing.length === 0 && missingWindowsAddons.length === 0) { return diff --git a/config/patches/@xterm__addon-image@0.10.0-beta.300.patch b/config/patches/@xterm__addon-image@0.10.0-beta.300.patch deleted file mode 100644 index 44d6ac32c14..00000000000 --- a/config/patches/@xterm__addon-image@0.10.0-beta.300.patch +++ /dev/null @@ -1,602 +0,0 @@ -diff --git a/lib/addon-image.js b/lib/addon-image.js -index 38cf9e8708a5f314b8d587e5428ce7facb0d4076..4c5f44e00b0972978d762df5990de86002537649 100644 ---- a/lib/addon-image.js -+++ b/lib/addon-image.js -@@ -1,3 +1,3 @@ - /*! For license information please see addon-image.js.LICENSE.txt */ --!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ImageAddon=t():e.ImageAddon=t()}(globalThis,()=>(()=>{"use strict";var e={939(e,t){function A(e){return 255&e}function i(e){return e>>>8&255}function s(e){return e>>>16&255}function r(e,t,A,i=255){return((255&i)<<24|(255&A)<<16|(255&t)<<8|255&e)>>>0}function o(e,t,A){return Math.max(e,Math.min(A,t))}function a(e,t,A){return A<0&&(A+=1),A>1&&(A-=1),6*A<1?t+6*(e-t)*A:2*A<1?e:3*A<2?t+(e-t)*(4-6*A):t}function n(e,t,A){return(4278190080|Math.round(A/100*255)<<16|Math.round(t/100*255)<<8|Math.round(e/100*255))>>>0}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_FOREGROUND=t.DEFAULT_BACKGROUND=t.PALETTE_ANSI_256=t.PALETTE_VT340_GREY=t.PALETTE_VT340_COLOR=t.normalizeHLS=t.normalizeRGB=t.nearestColorIndex=t.fromRGBA8888=t.toRGBA8888=t.alpha=t.blue=t.green=t.red=t.BIG_ENDIAN=void 0,t.BIG_ENDIAN=255===new Uint8Array(new Uint32Array([4278190080]).buffer)[0],t.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly."),t.red=A,t.green=i,t.blue=s,t.alpha=function(e){return e>>>24&255},t.toRGBA8888=r,t.fromRGBA8888=function(e){return[255&e,e>>8&255,e>>16&255,e>>>24]},t.nearestColorIndex=function(e,t){const r=A(e),o=i(e),a=s(e);let n=Number.MAX_SAFE_INTEGER,h=-1;for(let e=0;e{const e=[r(0,0,0),r(205,0,0),r(0,205,0),r(205,205,0),r(0,0,238),r(205,0,205),r(0,250,205),r(229,229,229),r(127,127,127),r(255,0,0),r(0,255,0),r(255,255,0),r(92,92,255),r(255,0,255),r(0,255,255),r(255,255,255)],t=[0,95,135,175,215,255];for(let A=0;A<6;++A)for(let i=0;i<6;++i)for(let s=0;s<6;++s)e.push(r(t[A],t[i],t[s]));for(let t=8;t<=238;t+=10)e.push(r(t,t,t));return new Uint32Array(e)})(),t.DEFAULT_BACKGROUND=r(0,0,0,255),t.DEFAULT_FOREGROUND=r(255,255,255,255)},591(e,t,A){Object.defineProperty(t,"__esModule",{value:!0}),t.decodeAsync=t.decode=t.Decoder=t.DecoderAsync=void 0;const i=A(939),s=A(199),r=function(e){if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),A=new Uint8Array(t.length);for(let e=0;e1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}}const h={memoryLimit:134217728,sixelColor:i.DEFAULT_FOREGROUND,fillColor:i.DEFAULT_BACKGROUND,palette:i.PALETTE_VT340_COLOR,paletteLimit:s.LIMITS.PALETTE_SIZE,truncate:!0};function g(e){const t=new n,A={env:{handle_band:t.handle_band.bind(t),mode_parsed:t.mode_parsed.bind(t)}};return WebAssembly.instantiate(o||r,A).then(A=>(o=o||A.module,new d(e,A.instance||A,t)))}t.DecoderAsync=g;class d{constructor(e,t,A){if(this._PIXEL_OFFSET=s.LIMITS.MAX_WIDTH+4,this._canvas=a,this._bandWidths=[],this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},h,e),this._opts.paletteLimit>s.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${s.LIMITS.PALETTE_SIZE}`);if(t)A.bandHandler=this._handle_band.bind(this),A.modeHandler=this._initCanvas.bind(this);else{const e=o||(o=new WebAssembly.Module(r));t=new WebAssembly.Instance(e,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),s.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),s.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(i.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(2===e){const e=this.width*this.height;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}this._maxWidth=this._width}else if(1===e)if(2===this._level){const e=Math.min(this._rasterWidth,s.LIMITS.MAX_WIDTH)*this._rasterHeight;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){const A=e+t;if(A>this._canvas.length){if(this._opts.memoryLimit&&4*A>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");const e=new Uint32Array(65536*Math.ceil(A/65536));e.set(this._canvas),this._canvas=e}}_handle_band(e){const t=this._PIXEL_OFFSET;let A=this._lastOffset;if(2===this._mode){let i=this.height-this._currentHeight,s=0;for(;s<6&&i>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),A+e*s),s++,i--;this._lastOffset+=e*s,this._currentHeight+=s}else if(1===this._mode){this._realloc(A,6*e),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let i=0;i<6;++i)this._canvas.set(this._pSrc.subarray(t*i,t*i+e),A+e*i);this._bandWidths.push(e),this._lastOffset+=6*e,this._currentHeight+=6}return 0}get width(){return 1!==this._mode?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return 1!==this._mode?this._height:this._wasm.current_width()?6*this._bandWidths.length+this._wasm.current_height():6*this._bandWidths.length}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,A=this._opts.paletteLimit,i=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,A,i?1:0),t&&this._palette.set(t.subarray(0,s.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,A=e.length){let i=t;for(;i0){const A=this._PIXEL_OFFSET;let i=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(A*s,A*s+e),i+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,i+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(1===this._mode){if(this._minWidth===this._maxWidth){let t=!1;if(e)if(e!==this._minWidth)t=!0;else{const t=this._PIXEL_OFFSET;let A=this._lastOffset;this._realloc(A,6*e);for(let i=0;i<6;++i)this._canvas.set(this._pSrc.subarray(t*i,t*i+e),A+e*i)}if(!t)return this._canvas.subarray(0,this.width*this.height)}const t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let A=0,i=0;for(let e=0;e{if(this._disposed)return(0,i.toDisposable)(()=>{});const s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);const r=(0,i.toDisposable)(()=>{const e=this._listeners.indexOf(s);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return A&&(Array.isArray(A)?A.push(r):A.add(r)),r}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let A=0,i=t.length;At.fire(e))},e.map=function(e,t){return(A,i,s)=>e(e=>A.call(i,t(e)),void 0,s)},e.any=function(...e){return(t,A,s)=>{const r=new i.DisposableStore;for(const i of e)r.add(i(e=>t.call(A,e)));return s&&(Array.isArray(s)?s.push(r):s.add(r)),r}},e.runAndSubscribe=function(e,t,A){return t(A),e(e=>t(e))}}(s||(t.EventUtils=s={}))},426(e,t){function A(e){return{dispose:e}}function i(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=A,t.dispose=i,t.combinedDisposable=function(...e){return A(()=>i(e))};class s{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=s;class r{constructor(){this._store=new s}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=r,r.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},795(e,t,A){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IIPHandler=void 0;const s=A(463),r=A(699),o=i(A(669)),a=i(A(61)),n=A(389),h=A(462),g={type:0,name:"Unnamed file",size:0,width:"auto",height:"auto",preserveAspectRatio:1,inline:0};t.IIPHandler=class{constructor(e,t,A,i){this._opts=e,this._renderer=t,this._storage=A,this._coreTerminal=i,this._aborted=!1,this._hp=new n.HeaderParser,this._header=g,this._isMultipart=!1,this._abortMulti=!1;const s=Math.ceil(4*this._opts.iipSizeLimit/3),r=Math.min(1048576,s);this._dec=new o.default(4194304,s,r),this._qoiDec=new a.default(4194304)}reset(){this._hp.reset(),this._dec.release(),this._qoiDec.release()}start(){this._aborted=!1,this._hp.reset()}put(e,t,A){if(!this._aborted)if(4===this._hp.state)0!==this._dec.put(e.subarray(t,A))&&(this._dec.release(),this._aborted=!0);else{const i=this._hp.parse(e,t,A);if(-1===i)return void(this._aborted=!0);if(i>0){if(1===this._hp.fields.type){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},g,this._hp.fields),!this._header.inline)return void(this._aborted=!0);this._dec.init()}else if(this._abortMulti)return void(this._aborted=!0);0!==this._dec.put(e.subarray(i,A))&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){var t,A,i;if(this._aborted)return!0;if(4!==this._hp.state&&this._hp.end())return!0;const o=this._hp.fields.type;if(3===o)return!0;if(5===o){let e=r.CELL_SIZE_DEFAULT.width,A=r.CELL_SIZE_DEFAULT.height;this._renderer.dimensions&&(e=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,A=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);const s=null!==(i=null===(t=this._coreTerminal._core._coreBrowserService)||void 0===t?void 0:t.dpr)&&void 0!==i?i:1,o=`]1337;ReportCellSize=${A.toFixed(3)};${e.toFixed(3)};${s.toFixed(3)}\\`;return this._coreTerminal.input(o,!1),!0}if(2===o)return this._header=Object.assign({},g,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._dec.init(),!0;if(4===o){if(!this._isMultipart)return!0;if(this._isMultipart=!1,this._abortMulti||2!==this._header.type)return!0}let a,n,d=0,l=0,I=h.UNSUPPORTED_TYPE;if((a=e)&&((a=!this._dec.end())?(I=(0,h.imageType)(this._dec.data8),(a="unsupported"!==I.mime)?(d=I.width,l=I.height,(a=d&&l&&d*l(this._storage.addImage(e),!0)).catch(e=>(console.warn(`IIP: decoding error ${I.mime} ${I.width}x${I.height}`,e),!0))}_resize(e,t){var A,i,s,o;const a=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.width)||r.CELL_SIZE_DEFAULT.width,n=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.height)||r.CELL_SIZE_DEFAULT.height,h=(null===(s=this._renderer.dimensions)||void 0===s?void 0:s.css.canvas.width)||a*this._coreTerminal.cols,g=(null===(o=this._renderer.dimensions)||void 0===o?void 0:o.css.canvas.height)||n*this._coreTerminal.rows,d=this._dim(this._header.width,h,a),l=this._dim(this._header.height,g,n);if(!d&&!l){const A=h/e,i=(g-n)/t,s=Math.min(A,i);return s<1?[e*s,t*s]:[e,t]}return d?!this._header.preserveAspectRatio&&d&&l?[d,l]:[d,t*d/e]:[e*l/t,l]}_dim(e,t,A){return"auto"===e?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*A}}},389(e,t){function A(e){let t="";for(let A=0;A57)throw new Error("illegal char");t=10*t+e[A]-48}return t}function s(e){const t=A(e);if(!t.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return t}Object.defineProperty(t,"__esModule",{value:!0}),t.HeaderParser=void 0;const r={inline:i,size:i,name:function(e){if("undefined"!=typeof Buffer)return Buffer.from(A(e),"base64").toString();const t=atob(A(e)),i=new Uint8Array(t.length);for(let e=0;e14)return-1;for(let h=t;h=d)return this._a();r[s++]=t}break;case 58:return 3!==i||this._storeValue(s)?(this.state=4,h+1):this._a();default:if(s>=d)return this._a();r[s++]=t}}return this.state=i,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){const t=A(this._buffer.subarray(0,e));return!!t&&(this._key=t,this.fields[t]=null,!0)}_storeValue(e){if(this._key){try{const t=this._buffer.slice(0,e);this.fields[this._key]=r[this._key]?r[this._key](t):t}catch(e){return!1}return!0}return!1}}},649(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.IIPImageStorage=void 0,t.IIPImageStorage=class{constructor(e){this._storage=e,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"}}addImage(e){this._storage.addImage(e,this._addImageOpts)}}},462(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UNSUPPORTED_TYPE=void 0,t.imageType=function(e){if(e.length<32)return t.UNSUPPORTED_TYPE;const A=new Uint32Array(e.buffer,e.byteOffset,8);if(1196314761===A[0]&&169478669===A[1]&&1380206665===A[3])return{mime:"image/png",width:e[16]<<24|e[17]<<16|e[18]<<8|e[19],height:e[20]<<24|e[21]<<16|e[22]<<8|e[23]};if(255===e[0]&&216===e[1]&&255===e[2]){const[t,A]=function(e){const t=e.length;let A=4,i=e[A]<<8|e[A+1];for(;;){if(A+=i,A>=t)return[0,0];if(255!==e[A])return[0,0];if(192===e[A+1]||194===e[A+1])return A+8>>14&16383)};case 32:return 157!==e[23]||1!==e[24]||42!==e[25]?t.UNSUPPORTED_TYPE:{mime:"image/webp",width:16383&(e[26]|e[27]<<8),height:16383&(e[28]|e[29]<<8)}}return t.UNSUPPORTED_TYPE}if(1887007846===A[1]&&(1718187617===A[2]||1936291425===A[2])){let A=-1;const i=Math.min(e.length-16,1024);for(let t=8;t0&&i>0)return{mime:"image/avif",width:t,height:i}}return t.UNSUPPORTED_TYPE}return t.UNSUPPORTED_TYPE},t.UNSUPPORTED_TYPE={mime:"unsupported",width:0,height:0}},463(e,t,A){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageRenderer=void 0;const i=A(939),s=A(426);class r extends s.Disposable{get canvas(){var e;return null===(e=this._layers.get("top"))||void 0===e?void 0:e.canvas}static createCanvas(e,t,A){const i=(null!=e?e:document).createElement("canvas");return i.width=0|t,i.height=0|A,i}static createImageData(e,t,A,i){if("function"!=typeof ImageData){const s=e.createImageData(t,A);return i&&s.data.set(new Uint8ClampedArray(i,0,t*A*4)),s}return i?new ImageData(new Uint8ClampedArray(i,0,t*A*4),t,A):new ImageData(t,A)}static createImageBitmap(e){return"function"!=typeof createImageBitmap?Promise.resolve(void 0):createImageBitmap(e)}constructor(e){super(),this._terminal=e,this._layers=new Map,this._optionsRefresh=this._register(new s.MutableDisposable),this._oldOpen=this._terminal._core.open,this._terminal._core.open=e=>{var t;null===(t=this._oldOpen)||void 0===t||t.call(this._terminal._core,e),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(e=>{var t;"fontSize"===e&&(this.rescaleCanvas(),null===(t=this._renderService)||void 0===t||t.refreshRows(0,this._terminal.rows))}),this._register((0,s.toDisposable)(()=>{var e;this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),null===(e=this._placeholderBitmap)||void 0===e||e.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}showPlaceholder(e){var t,A;e?this._placeholder||-1===this.cellSize.height||this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),null===(A=this._renderService)||void 0===A||A.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){var e,t;return{width:(null===(e=this.dimensions)||void 0===e?void 0:e.css.cell.width)||-1,height:(null===(t=this.dimensions)||void 0===t?void 0:t.css.cell.height)||-1}}clearLines(e,t,A){var i,s,r,o,a;const n=e*((null===(i=this.dimensions)||void 0===i?void 0:i.css.cell.height)||0),h=(null===(s=this.dimensions)||void 0===s?void 0:s.css.canvas.width)||0,g=(t+1-e)*((null===(r=this.dimensions)||void 0===r?void 0:r.css.cell.height)||0);A&&"top"!==A||null===(o=this._layers.get("top"))||void 0===o||o.clearRect(0,n,h,g),A&&"bottom"!==A||null===(a=this._layers.get("bottom"))||void 0===a||a.clearRect(0,n,h,g)}clearAll(e){if(!e||"top"===e){const e=this._layers.get("top");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}if(!e||"bottom"===e){const e=this._layers.get("bottom");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}}draw(e,t,A,i,s=1){const r=this._layers.get(e.layer);if(!r)return;const{width:o,height:a}=this.cellSize;if(-1===o||-1===a)return;this._rescaleImage(e,o,a);const n=e.actual,h=Math.ceil(n.width/o),g=t%h*o,d=Math.floor(t/h)*a,l=A*o,I=i*a,c=s*o+g>n.width?n.width-g:s*o,_=d+a>n.height?n.height-d:a;r.drawImage(n,Math.floor(g),Math.floor(d),Math.ceil(c),Math.ceil(_),Math.floor(l),Math.floor(I),Math.ceil(c),Math.ceil(_))}extractTile(e,t){const{width:A,height:i}=this.cellSize;if(-1===A||-1===i)return;this._rescaleImage(e,A,i);const s=e.actual,o=Math.ceil(s.width/A),a=t%o*A,n=Math.floor(t/o)*i,h=A+a>s.width?s.width-a:A,g=n+i>s.height?s.height-n:i,d=r.createCanvas(this.document,h,g),l=d.getContext("2d");return l?(l.drawImage(s,Math.floor(a),Math.floor(n),Math.floor(h),Math.floor(g),0,0,Math.floor(h),Math.floor(g)),d):void 0}drawPlaceholder(e,t,A=1){var i;const s=this._layers.get("top");if(s){const{width:r,height:o}=this.cellSize;if(-1===r||-1===o)return;if(this._placeholder?o>=this._placeholder.height&&this._createPlaceHolder(o+1):this._createPlaceHolder(Math.max(o+1,24)),!this._placeholder)return;s.drawImage(null!==(i=this._placeholderBitmap)&&void 0!==i?i:this._placeholder,e*r,t*o%2?0:1,r*A,o,e*r,t*o,r*A,o)}}rescaleCanvas(){var e,t;const A=(null===(e=this.dimensions)||void 0===e?void 0:e.css.canvas.width)||0,i=(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.height)||0;for(const e of this._layers.values())e.canvas.width===A&&e.canvas.height===i||(e.canvas.width=A,e.canvas.height=i)}_rescaleImage(e,t,A){if(t===e.actualCellSize.width&&A===e.actualCellSize.height)return;const{width:i,height:s}=e.origCellSize;if(t===i&&A===s)return e.actual=e.orig,e.actualCellSize.width=i,void(e.actualCellSize.height=s);const o=r.createCanvas(this.document,Math.ceil(e.orig.width*t/i),Math.ceil(e.orig.height*A/s)),a=o.getContext("2d");a&&(a.drawImage(e.orig,0,0,o.width,o.height),e.actual=o,e.actualCellSize.width=t,e.actualCellSize.height=A)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=e=>{var t;for(const e of[...this._layers.keys()])this.removeLayerFromDom(e);null===(t=this._oldSetRenderer)||void 0===t||t.call(this._renderService,e)}}insertLayerToDom(e="top"){var t,A;if(!this.document||!this._terminal._core.screenElement)return void console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");if(this._layers.has(e))return;const i=r.createCanvas(this.document,(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.width)||0,(null===(A=this.dimensions)||void 0===A?void 0:A.css.canvas.height)||0);i.classList.add(`xterm-image-layer-${e}`);const s=this._terminal._core.screenElement;s.style.isolation="isolate","bottom"===e?(i.style.zIndex="-1",s.insertBefore(i,s.firstChild)):(i.style.zIndex="0",s.appendChild(i));const o=i.getContext("2d",{alpha:!0});o?(this._layers.set(e,o),this.clearAll(e)):i.remove()}removeLayerFromDom(e="top"){const t=this._layers.get(e);t&&(t.canvas.remove(),this._layers.delete(e))}hasLayer(e){return this._layers.has(e)}_createPlaceHolder(e=24){var t;null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0;const A=32,s=r.createCanvas(this.document,A,e),o=s.getContext("2d",{alpha:!1});if(!o)return;const a=r.createImageData(o,A,e),n=new Uint32Array(a.data.buffer),h=(0,i.toRGBA8888)(0,0,0),g=(0,i.toRGBA8888)(255,255,255);n.fill(h);for(let t=0;tthis._placeholderBitmap=e)}else this._placeholder=void 0}get document(){var e;return null===(e=this._terminal._core._coreBrowserService)||void 0===e?void 0:e.window.document}}t.ImageRenderer=r},699(e,t,A){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageStorage=t.CELL_SIZE_DEFAULT=void 0;const i=A(463);t.CELL_SIZE_DEFAULT={width:7,height:14};class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}get urlId(){return this._urlId}set urlId(e){this._urlId=e}constructor(e=0,t=0,A=-1,i=-1){this.imageId=A,this.tileId=i,this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId,this.imageId,this.tileId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&-1===this.imageId}}const r=new s;t.ImageStorage=class{constructor(e,t,A){this._terminal=e,this._renderer=t,this._opts=A,this._images=new Map,this._lastId=0,this._lowestId=0,this._fullyCleared=!1,this._needsFullClear=!1,this._pixelLimit=25e5;try{this.setLimit(this._opts.storageLimit)}catch(e){e instanceof Error&&console.error(e.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){var e;for(const t of this._images.values())null===(e=t.marker)||void 0===e||e.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return 4*this._pixelLimit/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return 4*this._getStoredPixels()/1e6}_getStoredPixels(){let e=0;for(const t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){var t;const A=this._images.get(e);A&&(this._images.delete(e),window.ImageBitmap&&A.orig instanceof ImageBitmap&&A.orig.close(),null===(t=this.onImageDeleted)||void 0===t||t.call(this,e))}wipeAlternate(){var e;const t=[];for(const[A,i]of this._images.entries())"alternate"===i.bufferType&&(null===(e=i.marker)||void 0===e||e.dispose(),t.push(A));for(const e of t)this._delImg(e);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){var t;const A=this._images.get(e);A&&(null===(t=A.marker)||void 0===t||t.dispose(),this._delImg(e))}addImage(e,A){var i,s;this._evictOldest(e.width*e.height);let r=this._renderer.cellSize;-1!==r.width&&-1!==r.height||(r=t.CELL_SIZE_DEFAULT);const o=Math.ceil(e.width/r.width),a=Math.ceil(e.height/r.height),n=++this._lastId,h=this._terminal._core.buffer,g=this._terminal.cols,d=this._terminal.rows,l=h.x,I=h.y;let c=l,_=0;A.scrolling||(h.x=0,h.y=0,c=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y);for(let e=0;e=g);++A)this._writeToCell(t,c+A,n,e*o+A),_++;if(A.scrolling)e=d)break;h.x=c}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y),A.scrolling?"iip"===A.cursorPos?h.x=Math.min(c+o,g):h.x=c:(h.x=l,h.y=I);const C=[];for(const[e,t]of this._images.entries())t.tileCount<1&&(null===(i=t.marker)||void 0===i||i.dispose(),C.push(e));for(const e of C)this._delImg(e);const B=this._terminal.registerMarker(0);null==B||B.onDispose(()=>{this._images.get(n)&&this._delImg(n)}),"alternate"===this._terminal.buffer.active.type&&this._evictOnAlternate();const Q={orig:e,origCellSize:r,actual:e,actualCellSize:Object.assign({},r),marker:B||void 0,tileCount:_,bufferType:this._terminal.buffer.active.type,layer:A.layer,zIndex:A.zIndex};return this._images.set(n,Q),null===(s=this.onImageAdded)||void 0===s||s.call(this),n}render(e){var t,A;let i=!1,s=!1;for(const e of this._images.values())if("bottom"===e.layer?s=!0:i=!0,i&&s)break;if(i&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(s&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size)return this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),void(this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom"));!i&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!s&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);const{start:o,end:a}=e,n=this._terminal._core.buffer,h=this._terminal._core.cols;this._renderer.clearLines(o,a);const g=[],d=[];for(let e=o;e<=a;++e){const i=n.lines.get(e+n.ydisp);if(!i)return;for(let s=0;se.imgSpec.zIndex-t.imgSpec.zIndex);for(const e of d)this._renderer.drawPlaceholder(e.col,e.row,e.count);for(const e of g)this._renderer.draw(e.imgSpec,e.tileId,e.col,e.row,e.count)}viewportResize(e){var t,A;if(!this._images.size)return void(this._viewportMetrics=e);if(this._viewportMetrics.cols>=e.cols)return void(this._viewportMetrics=e);const i=this._terminal._core.buffer,s=i.lines.length,o=this._viewportMetrics.cols-1;for(let a=0;a=h)continue;let g=!1;for(let t=o+1;t>e.cols;++t)if(4194303&s._data[3*t+0]){g=!0;break}if(g)continue;const d=Math.min(e.cols,h-i.tileId%h+o);let l=i.tileId;for(let e=o+1;e>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255}o.set(i.PALETTE_VT340_COLOR),t.SixelHandler=class{constructor(e,t,A){this._opts=e,this._storage=t,this._coreTerminal=A,this._size=0,this._aborted=!1,(0,r.DecoderAsync)({memoryLimit:4*this._opts.pixelLimit,palette:o,paletteLimit:this._opts.sixelPaletteLimit}).then(e=>this._dec=e)}reset(){this._dec&&(this._dec.release(),this._dec._palette.fill(0),this._dec.init(0,o,this._opts.sixelPaletteLimit))}hook(e){var t;if(this._size=0,this._aborted=!1,this._dec){const A=1===e.params[1]?0:function(e,t){let A=0;if(!t)return A;if(e.isInverse())if(e.isFgDefault())A=a(t.foreground.rgba);else if(e.isFgRGB()){const t=e.constructor.toColorRGB(e.getFgColor());A=(0,i.toRGBA8888)(...t)}else A=a(t.ansi[e.getFgColor()].rgba);else if(e.isBgDefault())A=a(t.background.rgba);else if(e.isBgRGB()){const t=e.constructor.toColorRGB(e.getBgColor());A=(0,i.toRGBA8888)(...t)}else A=a(t.ansi[e.getBgColor()].rgba);return A}(this._coreTerminal._core._inputHandler._curAttrData,null===(t=this._coreTerminal._core._themeService)||void 0===t?void 0:t.colors);this._dec.init(A,null,this._opts.sixelPaletteLimit)}}put(e,t,A){if(!this._aborted&&this._dec){if(this._size+=A-t,this._size>this._opts.sixelSizeLimit)return console.warn("SIXEL: too much data, aborting"),this._aborted=!0,void this._dec.release();try{this._dec.decode(e,t,A)}catch(e){console.warn(`SIXEL: error while decoding image - ${e}`),this._aborted=!0,this._dec.release()}}}unhook(e){var t;if(this._aborted||!e||!this._dec)return!0;const A=this._dec.width,i=this._dec.height;if(!A||!i)return i&&this._storage.advanceCursor(i),!0;const r=s.ImageRenderer.createCanvas(void 0,A,i);return null===(t=r.getContext("2d"))||void 0===t||t.putImageData(new ImageData(this._dec.data8,A,i),0,0),this._dec.memoryUsage>4194304&&this._dec.release(),this._storage.addImage(r),!0}}},994(e,t,A){Object.defineProperty(t,"__esModule",{value:!0}),t.SixelImageStorage=void 0;const i=A(699);t.SixelImageStorage=class{constructor(e,t,A,i){this._storage=e,this._opts=t,this._renderer=A,this._terminal=i,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;-1!==t.width&&-1!==t.height||(t=i.CELL_SIZE_DEFAULT);const A=Math.ceil(e/t.height);for(let e=1;e512)return void(this._aborted=!0);if(this._controlData.set(e.subarray(t,s),this._controlLength),this._controlLength+=r,!this._inControlData){if(this._parsedCommand=(0,a.parseKittyCommand)(this._parseControlDataString()),void 0!==this._parsedCommand.id&&void 0!==this._parsedCommand.imageNumber)return this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",null!==(i=this._parsedCommand.quiet)&&void 0!==i?i:0),void(this._aborted=!0);if("d"===this._parsedCommand.action)return;const t=s+1;tthis._encodedSizeLimit){const e=null!==(n=this._activeDecoder)&&void 0!==n?n:null==g?void 0:g.decoder;return e&&e.release(),this._activeDecoder=null,g&&this._removePendingEntry(h),void(this._aborted=!0)}this._decodeError||((null==g?void 0:g.decoder)&&!this._activeDecoder&&(this._activeDecoder=g.decoder),this._activeDecoder||(this._activeDecoder=new o.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes),this._activeDecoder.init()),0!==this._activeDecoder.put(e.subarray(t,A))&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,g&&this._removePendingEntry(h)))}end(e){var t,A;if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();const i=this._parsedCommand;if("d"===i.action)return this._handleDelete(i);const s=null!==(A=null!==(t=i.id)&&void 0!==t?t:this._lastPendingKey)&&void 0!==A?A:0,r=1===i.more,o=this._pendingTransmissions.get(s);if(r)return this._activeDecoder&&(o?(o.totalEncodedSize+=this._totalEncodedSize,o.decodeError=o.decodeError||this._decodeError):this._pendingTransmissions.set(s,{cmd:Object.assign({},i),decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=s,this._activeDecoder=null),!0;o&&(this._lastPendingKey=void 0);let a=this._decodeError,n=i,h=this._activeDecoder;o&&(n=o.cmd,h=o.decoder,a=a||o.decodeError,this._pendingTransmissions.delete(s));let g=new Uint8Array(0);h&&(0!==h.end()&&(a=!0),g=h.data8),this._activeDecoder=null;const d=this._handleCommandWithBytesAndCmd(n,g,a);return h&&h.release(),d}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",null!==(o=e.quiet)&&void 0!==o?o:0)),i}case"T":return this._handleTransmitDisplay(e,t,A);case"q":return this._handleQuery(e,t,A);case"p":return this._handlePlacement(e);default:return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported action",null!==(a=e.quiet)&&void 0!==a?a:0),!0}}_handlePlacement(e){var t;if(void 0===e.id)return!0;const A=e.id,i=this._kittyStorage.getImage(A);return i?this._displayImage(i,e).then(t=>{var i;return this._sendResponse(A,t?"OK":"EINVAL:image rendering failed",null!==(i=e.quiet)&&void 0!==i?i:0,e.placementId),!0}):(this._sendResponse(A,"ENOENT:image not found",null!==(t=e.quiet)&&void 0!==t?t:0,e.placementId),!0)}_handleTransmit(e,t,A){var i,s,r,o,a,n;return"d"!==(null!==(i=e.transmission)&&void 0!==i?i:"d")?(void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",null!==(s=e.quiet)&&void 0!==s?s:0),!0):(A||0===t.length||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:null!==(r=e.width)&&void 0!==r?r:0,height:null!==(o=e.height)&&void 0!==o?o:0,format:null!==(a=e.format)&&void 0!==a?a:32,compression:null!==(n=e.compression)&&void 0!==n?n:""}),!0)}_handleTransmitDisplay(e,t,A){var i,s;if(A)return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:invalid base64 data",null!==(i=e.quiet)&&void 0!==i?i:0),!0;this._handleTransmit(e,t,A);const r=null!==(s=e.id)&&void 0!==s?s:this._kittyStorage.lastImageId,o=this._kittyStorage.getImage(r);if(o){const t=this._displayImage(o,e);return void 0!==e.id?t.then(t=>{var A;return this._sendResponse(r,t?"OK":"EINVAL:image rendering failed",null!==(A=e.quiet)&&void 0!==A?A:0),!0}):t.then(()=>!0)}return!0}_handleQuery(e,t,A){var i,s,r,o,a,n;const h=null!==(i=e.id)&&void 0!==i?i:0,g=null!==(s=e.quiet)&&void 0!==s?s:0;if("d"!==(null!==(r=e.transmission)&&void 0!==r?r:"d"))return this._sendResponse(h,"EINVAL:unsupported transmission medium",g),!0;if(A)return this._sendResponse(h,"EINVAL:invalid base64 data",g),!0;if(0===t.length)return this._sendResponse(h,"OK",g),!0;const d=null!==(o=e.format)&&void 0!==o?o:32;if(100===d)this._sendResponse(h,"OK",g);else{const A=null!==(a=e.width)&&void 0!==a?a:0,i=null!==(n=e.height)&&void 0!==n?n:0;if(!A||!i)return this._sendResponse(h,"EINVAL:width and height required for raw pixel data",g),!0;const s=A*i*(32===d?4:3);if(t.length=1)return;if(!s&&A>=2)return;const r=`_Gi=${e}${i?`,p=${i}`:""};${t}\\`;this._coreTerminal._core.coreService.triggerDataEvent(r)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){var A,i,o,a,n,h,g;let d=await this._createBitmap(e);try{const l=Math.max(0,null!==(o=t.x)&&void 0!==o?o:0),I=Math.max(0,null!==(a=t.y)&&void 0!==a?a:0),c=t.sourceWidth||d.width-l,_=t.sourceHeight||d.height-I,C=Math.max(0,d.width-l),B=Math.max(0,d.height-I),Q=Math.max(0,Math.min(c,C)),m=Math.max(0,Math.min(_,B));if(0===Q||0===m)throw new Error("invalid source rectangle");if(0!==l||0!==I||Q!==d.width||m!==d.height){const e=await createImageBitmap(d,l,I,Q,m);d.close(),d=e}const E=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.width)||r.CELL_SIZE_DEFAULT.width,u=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.height)||r.CELL_SIZE_DEFAULT.height;let w,p;void 0!==t.columns&&void 0!==t.rows?(w=t.columns,p=t.rows):void 0!==t.columns?(w=t.columns,p=Math.max(1,Math.ceil(d.height/d.width*(w*E)/u))):void 0!==t.rows?(p=t.rows,w=Math.max(1,Math.ceil(d.width/d.height*(p*u)/E))):(w=Math.ceil(d.width/E),p=Math.ceil(d.height/u));let f=d.width,D=d.height;if(void 0===t.columns&&void 0===t.rows||(f=Math.round(w*E),D=Math.round(p*u)),f*D>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");const y=this._coreTerminal._core.buffer,v=y.x,k=y.y,M=y.ybase,b=void 0!==t.zIndex&&t.zIndex<0?"bottom":"top";if(f!==d.width||D!==d.height){const e=await createImageBitmap(d,{resizeWidth:f,resizeHeight:D});d.close(),d=e}const S=Math.min(Math.max(0,null!==(n=t.xOffset)&&void 0!==n?n:0),E-1),L=Math.min(Math.max(0,null!==(h=t.yOffset)&&void 0!==h?h:0),u-1);if(0!==S||0!==L){const e=void 0!==t.columns?Math.round(w*E):d.width+S,A=void 0!==t.rows?Math.round(p*u):d.height+L,i=s.ImageRenderer.createCanvas(window.document,e,A),r=i.getContext("2d");if(!r)throw new Error("Failed to create offset canvas context");r.drawImage(d,S,L);const o=await createImageBitmap(i);if(i.width=i.height=0,d.close(),d=o,f=d.width,D=d.height,f*D>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");void 0===t.columns&&(w=Math.ceil(d.width/E)),void 0===t.rows&&(p=Math.ceil(d.height/u))}const N=null!==(g=t.zIndex)&&void 0!==g?g:0;if(this._kittyStorage.addImage(e.id,d,!0,b,N),d=void 0,1===t.cursorMovement){const e=y.ybase-M;y.x=v,y.y=Math.max(k-e,0)}else y.x=Math.min(v+w,this._coreTerminal.cols)}catch(e){throw null==d||d.close(),e}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if("z"===e.compression&&(t=await this._decompressZlib(t)),100===e.format){const e=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){const t=URL.createObjectURL(e),A=new Image;return new Promise((e,i)=>{A.addEventListener("load",()=>{var r;URL.revokeObjectURL(t);const o=s.ImageRenderer.createCanvas(window.document,A.width,A.height);null===(r=o.getContext("2d"))||void 0===r||r.drawImage(A,0,0),createImageBitmap(o).then(e).catch(i)}),A.addEventListener("error",()=>{URL.revokeObjectURL(t),i(new Error("Failed to load image"))}),A.src=t})}return createImageBitmap(e)}const A=e.width,i=e.height;if(!A||!i)throw new Error("Width and height required for raw pixel data");const r=A*i*(32===e.format?4:3);if(t.length>>24|t<<8,h[l++]=4278190080|t>>>16|A<<16,h[l++]=4278190080|A>>>8}let I=3*g,c=4*g;for(let e=g;ee+t.length,0),a=new Uint8Array(o);let n=0;for(const e of s)a.set(e,n),n+=e.length;return a}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}}},470(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseKittyCommand=function(e){const t={},A=e.split(",");for(const e of A){const A=e.indexOf("=");if(-1===A)continue;const i=e.substring(0,A),s=e.substring(A+1);if("a"===i){t.action=s;continue}if("o"===i){t.compression=s;continue}if("t"===i){t.transmission=s;continue}if("d"===i){t.deleteSelector=s;continue}const r=parseInt(s,10);switch(i){case"f":t.format=r;break;case"i":t.id=r;break;case"I":t.imageNumber=r;break;case"s":t.width=r;break;case"v":t.height=r;break;case"x":t.x=r;break;case"y":t.y=r;break;case"w":t.sourceWidth=r;break;case"h":t.sourceHeight=r;break;case"X":t.xOffset=r;break;case"Y":t.yOffset=r;break;case"c":t.columns=r;break;case"r":t.rows=r;break;case"m":t.more=r;break;case"q":t.quiet=r;break;case"C":t.cursorMovement=r;break;case"z":t.zIndex=r;break;case"p":t.placementId=r}}return t}},235(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyImageStorage=void 0;class A{constructor(e){this._storage=e,this._nextImageId=1,this._images=new Map,this._kittyIdToStorageId=new Map,this._storageIdToKittyId=new Map,this._handleStorageImageDeleted=e=>{const t=this._storageIdToKittyId.get(e);void 0!==t&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))},this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"},this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=e=>{var t;null===(t=this._previousOnImageDeleted)||void 0===t||t.call(this,e),this._handleStorageImageDeleted(e)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){const i=null!=e?e:this._nextImageId++,s=this._kittyIdToStorageId.get(i);return void 0!==s&&(this._storage.deleteImage(s),this._kittyIdToStorageId.delete(i),this._storageIdToKittyId.delete(s)),!this._images.has(i)&&this._images.size>=A._maxStoredImages&&this._evictUndisplayedImages(),this._images.set(i,Object.assign(Object.assign({},t),{id:i})),i}addImage(e,t,A,i,s){const r=this._kittyIdToStorageId.get(e);void 0!==r&&this._storageIdToKittyId.delete(r),this._addImageOpts.scrolling=A,this._addImageOpts.layer=i,this._addImageOpts.zIndex=s;const o=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,o),this._storageIdToKittyId.set(o,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);const t=this._kittyIdToStorageId.get(e);void 0!==t&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(const e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(const[e]of this._images){if(this._images.size<=A._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}}t.KittyImageStorage=A,A._maxStoredImages=256},669(e,t,A){Object.defineProperty(t,"__esModule",{value:!0});const i=(0,A(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),s=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(e=>e.charCodeAt(0))),r=new Uint32Array(1024);r.fill(4278190080);for(let e=0;e>4|(e<<4&255)<<8;for(let e=0;e>2<<8|(e<<6&255)<<16;for(let e=0;ethis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):o}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=null!=e?e:this.maxBytes,this._bytes=null!=t?t:Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let A=this._m32;const s=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let e=this._bytes;for(;(e*=2)this._mem.buffer.byteLength){const t=Math.ceil((e+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(t),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=e}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;const t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}}},61(e,t,A){Object.defineProperty(t,"__esModule",{value:!0});const i=(0,A(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="});t.default=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];const t=this.width*this.height,A=4*t,s=e.length,r=Math.max(A,s)+(Math.min(A,s)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}}},552(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.InWasm=function(e){if(e.d){const{t,s:i,d:s}=e;let r,o;const a=WebAssembly;return 0===t?i?e=>new a.Instance(o||(o=new a.Module(r||(r=A(s)))),e):e=>o?a.instantiate(o,e):a.instantiate(r||(r=A(s)),e).then(e=>(o=e.module)&&e.instance):1===t?i?()=>o||(o=new a.Module(r||(r=A(s)))):()=>o?Promise.resolve(o):a.compile(r||(r=A(s))).then(e=>o=e):i?()=>r||(r=A(s)):()=>Promise.resolve(r||(r=A(s)))}if("undefined"==typeof _wasmCtx)throw new Error('must run "inwasm"');_wasmCtx.add(e)};let A=e=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),A=new Uint8Array(t.length);for(let e=0;e{var e=i;Object.defineProperty(e,"__esModule",{value:!0}),e.ImageAddon=void 0;const t=A(414),s=A(795),r=A(463),o=A(699),a=A(23),n=A(235),h=A(566),g=A(994),d=A(649),l={enableSizeReports:!0,pixelLimit:16777216,sixelSupport:!0,sixelScrolling:!0,sixelPaletteLimit:4096,sixelSizeLimit:33554432,storageLimit:128,showPlaceholder:!0,iipSupport:!0,iipSizeLimit:33554432,kittySupport:!0,kittySizeLimit:33554432};e.ImageAddon=class{constructor(e){this._disposables=[],this._handlers=new Map,this._onImageAdded=new t.Emitter,this.onImageAdded=this._onImageAdded.event,this._opts=Object.assign({},l,e),this._defaultOpts=Object.assign({},l,e)}dispose(){for(const e of this._disposables)e.dispose();this._disposables.length=0,this._handlers.clear(),this._onImageAdded.dispose()}_disposeLater(...e){for(const t of e)this._disposables.push(t)}activate(e){var t;if(this._terminal=e,this._renderer=new r.ImageRenderer(e),this._storage=new o.ImageStorage(e,this._renderer,this._opts),this._storage.onImageAdded=()=>this._onImageAdded.fire(),this._opts.enableSizeReports){const A=null!==(t=e.options.windowOptions)&&void 0!==t?t:{};A.getWinSizePixels=!0,A.getCellSizePixels=!0,A.getWinSizeChars=!0,e.options.windowOptions=A}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},e=>this._decset(e)),e.parser.registerCsiHandler({prefix:"?",final:"l"},e=>this._decrst(e)),e.parser.registerCsiHandler({final:"c"},e=>this._da1(e)),e.parser.registerCsiHandler({prefix:"?",final:"S"},e=>this._xtermGraphicsAttributes(e)),e.onRender(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.render(e)}),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>{var e;return null===(e=this._storage)||void 0===e?void 0:e.wipeAlternate()}),e.onResize(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.viewportResize(e)})),this._opts.sixelSupport){const t=new g.SixelImageStorage(this._storage,this._opts,this._renderer,e),A=new h.SixelHandler(this._opts,t,e);this._handlers.set("sixel",A),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},A))}if(this._opts.iipSupport){const t=new d.IIPImageStorage(this._storage),A=new s.IIPHandler(this._opts,this._renderer,t,e);this._handlers.set("iip",A),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,A))}if(this._opts.kittySupport){const t=new n.KittyImageStorage(this._storage),A=new a.KittyGraphicsHandler(this._opts,this._renderer,t,e);this._handlers.set("kitty",A),this._disposeLater(t,A,e._core._inputHandler._parser.registerApcHandler({final:"G"},A))}}reset(){var e;this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,null===(e=this._storage)||void 0===e||e.reset();for(const e of this._handlers.values())e.reset();return!1}get storageLimit(){var e;return(null===(e=this._storage)||void 0===e?void 0:e.getLimit())||-1}set storageLimit(e){var t;null===(t=this._storage)||void 0===t||t.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){var t;this._opts.showPlaceholder=e,null===(t=this._renderer)||void 0===t||t.showPlaceholder(e)}getImageAtBufferCell(e,t){var A;return null===(A=this._storage)||void 0===A?void 0:A.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){var A;return null===(A=this._storage)||void 0===A?void 0:A.extractTileAtBufferCell(e,t)}_report(e){var t;null===(t=this._terminal)||void 0===t||t._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=4096?(this._opts.sixelPaletteLimit=e[2],this._report(`[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`[?${e[0]};2S`),!0;case 4:return this._report(`[?${e[0]};0;4096S`),!0;default:return this._report(`[?${e[0]};2S`),!0}if(2===e[0])switch(e[1]){case 1:let n=null===(A=null===(t=this._renderer)||void 0===t?void 0:t.dimensions)||void 0===A?void 0:A.css.canvas.width,h=null===(s=null===(i=this._renderer)||void 0===i?void 0:i.dimensions)||void 0===s?void 0:s.css.canvas.height;if(!n||!h){const e=o.CELL_SIZE_DEFAULT;n=((null===(r=this._terminal)||void 0===r?void 0:r.cols)||80)*e.width,h=((null===(a=this._terminal)||void 0===a?void 0:a.rows)||24)*e.height}if(n*h(()=>{"use strict";var e={939(e,t){function i(e){return 255&e}function A(e){return e>>>8&255}function s(e){return e>>>16&255}function r(e,t,i,A=255){return((255&A)<<24|(255&i)<<16|(255&t)<<8|255&e)>>>0}function o(e,t,i){return Math.max(e,Math.min(i,t))}function a(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),6*i<1?t+6*(e-t)*i:2*i<1?e:3*i<2?t+(e-t)*(4-6*i):t}function n(e,t,i){return(4278190080|Math.round(i/100*255)<<16|Math.round(t/100*255)<<8|Math.round(e/100*255))>>>0}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_FOREGROUND=t.DEFAULT_BACKGROUND=t.PALETTE_ANSI_256=t.PALETTE_VT340_GREY=t.PALETTE_VT340_COLOR=t.normalizeHLS=t.normalizeRGB=t.nearestColorIndex=t.fromRGBA8888=t.toRGBA8888=t.alpha=t.blue=t.green=t.red=t.BIG_ENDIAN=void 0,t.BIG_ENDIAN=255===new Uint8Array(new Uint32Array([4278190080]).buffer)[0],t.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly."),t.red=i,t.green=A,t.blue=s,t.alpha=function(e){return e>>>24&255},t.toRGBA8888=r,t.fromRGBA8888=function(e){return[255&e,e>>8&255,e>>16&255,e>>>24]},t.nearestColorIndex=function(e,t){const r=i(e),o=A(e),a=s(e);let n=Number.MAX_SAFE_INTEGER,h=-1;for(let e=0;e{const e=[r(0,0,0),r(205,0,0),r(0,205,0),r(205,205,0),r(0,0,238),r(205,0,205),r(0,250,205),r(229,229,229),r(127,127,127),r(255,0,0),r(0,255,0),r(255,255,0),r(92,92,255),r(255,0,255),r(0,255,255),r(255,255,255)],t=[0,95,135,175,215,255];for(let i=0;i<6;++i)for(let A=0;A<6;++A)for(let s=0;s<6;++s)e.push(r(t[i],t[A],t[s]));for(let t=8;t<=238;t+=10)e.push(r(t,t,t));return new Uint32Array(e)})(),t.DEFAULT_BACKGROUND=r(0,0,0,255),t.DEFAULT_FOREGROUND=r(255,255,255,255)},591(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.decodeAsync=t.decode=t.Decoder=t.DecoderAsync=void 0;const A=i(939),s=i(199),r=function(e){if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}}const h={memoryLimit:134217728,sixelColor:A.DEFAULT_FOREGROUND,fillColor:A.DEFAULT_BACKGROUND,palette:A.PALETTE_VT340_COLOR,paletteLimit:s.LIMITS.PALETTE_SIZE,truncate:!0};function g(e){const t=new n,i={env:{handle_band:t.handle_band.bind(t),mode_parsed:t.mode_parsed.bind(t)}};return WebAssembly.instantiate(o||r,i).then(i=>(o=o||i.module,new d(e,i.instance||i,t)))}t.DecoderAsync=g;class d{constructor(e,t,i){if(this._PIXEL_OFFSET=s.LIMITS.MAX_WIDTH+4,this._canvas=a,this._bandWidths=[],this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},h,e),this._opts.paletteLimit>s.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${s.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{const e=o||(o=new WebAssembly.Module(r));t=new WebAssembly.Instance(e,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),s.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),s.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(A.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(2===e){const e=this.width*this.height;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}this._maxWidth=this._width}else if(1===e)if(2===this._level){const e=Math.min(this._rasterWidth,s.LIMITS.MAX_WIDTH)*this._rasterHeight;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){const i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&4*i>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");const e=new Uint32Array(65536*Math.ceil(i/65536));e.set(this._canvas),this._canvas=e}}_handle_band(e){const t=this._PIXEL_OFFSET;let i=this._lastOffset;if(2===this._mode){let A=this.height-this._currentHeight,s=0;for(;s<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),i+e*s),s++,A--;this._lastOffset+=e*s,this._currentHeight+=s}else if(1===this._mode){this._realloc(i,6*e),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=6*e,this._currentHeight+=6}return 0}get width(){return 1!==this._mode?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return 1!==this._mode?this._height:this._wasm.current_width()?6*this._bandWidths.length+this._wasm.current_height():6*this._bandWidths.length}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,s.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){const i=this._PIXEL_OFFSET;let A=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*s,i*s+e),A+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,A+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(1===this._mode){if(this._minWidth===this._maxWidth){let t=!1;if(e)if(e!==this._minWidth)t=!0;else{const t=this._PIXEL_OFFSET;let i=this._lastOffset;this._realloc(i,6*e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A)}if(!t)return this._canvas.subarray(0,this.width*this.height)}const t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let e=0;e{if(this._disposed)return(0,A.toDisposable)(()=>{});const s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);const r=(0,A.toDisposable)(()=>{const e=this._listeners.indexOf(s);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(r):i.add(r)),r}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,A=t.length;it.fire(e))},e.map=function(e,t){return(i,A,s)=>e(e=>i.call(A,t(e)),void 0,s)},e.any=function(...e){return(t,i,s)=>{const r=new A.DisposableStore;for(const A of e)r.add(A(e=>t.call(i,e)));return s&&(Array.isArray(s)?s.push(r):s.add(r)),r}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(s||(t.EventUtils=s={}))},426(e,t){function i(e){return{dispose:e}}function A(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=A,t.combinedDisposable=function(...e){return i(()=>A(e))};class s{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=s;class r{constructor(){this._store=new s}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=r,r.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},795(e,t,i){var A=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IIPHandler=void 0;const s=i(463),r=i(699),o=A(i(669)),a=A(i(61)),n=i(389),h=i(462),g={type:0,name:"Unnamed file",size:0,width:"auto",height:"auto",preserveAspectRatio:1,inline:0};t.IIPHandler=class{constructor(e,t,i,A){this._opts=e,this._renderer=t,this._storage=i,this._coreTerminal=A,this._generation=0,this._aborted=!1,this._hp=new n.HeaderParser,this._header=g,this._isMultipart=!1,this._abortMulti=!1;const s=Math.ceil(4*this._opts.iipSizeLimit/3),r=Math.min(1048576,s);this._dec=new o.default(0,s,r),this._qoiDec=new a.default(0)}reset(){this._generation++,this._hp.reset(),this._dec.release(),this._qoiDec.release()}start(){this._aborted=!1,this._hp.reset()}put(e,t,i){if(!this._aborted)if(4===this._hp.state)0!==this._dec.put(e.subarray(t,i))&&(this._dec.release(),this._aborted=!0);else{const A=this._hp.parse(e,t,i);if(-1===A)return void(this._aborted=!0);if(A>0){if(1===this._hp.fields.type){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},g,this._hp.fields),!this._header.inline)return void(this._aborted=!0);if(!this._initDecoder())return void(this._aborted=!0)}else if(this._abortMulti)return void(this._aborted=!0);0!==this._dec.put(e.subarray(A,i))&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){var t,i,A;if(this._aborted)return!0;if(4!==this._hp.state&&this._hp.end())return!0;const o=this._hp.fields.type;if(3===o)return!0;if(5===o){let e=r.CELL_SIZE_DEFAULT.width,i=r.CELL_SIZE_DEFAULT.height;this._renderer.dimensions&&(e=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,i=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);const s=null!==(A=null===(t=this._coreTerminal._core._coreBrowserService)||void 0===t?void 0:t.dpr)&&void 0!==A?A:1,o=`]1337;ReportCellSize=${i.toFixed(3)};${e.toFixed(3)};${s.toFixed(3)}\\`;return this._coreTerminal.input(o,!1),!0}if(2===o)return this._header=Object.assign({},g,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._initDecoder()||(this._abortMulti=!0),!0;if(4===o){if(!this._isMultipart)return!0;if(this._isMultipart=!1,this._abortMulti||2!==this._header.type)return!0}let a,n,d=0,l=0,I=h.UNSUPPORTED_TYPE;if((a=e)&&((a=!this._dec.end())?(I=(0,h.imageType)(this._dec.data8),(a="unsupported"!==I.mime)?(d=I.width,l=I.height,(a=d&&l&&d*lc!==this._generation?(e.close(),!0):(this._storage.addImage(e),!0)).catch(e=>(console.warn(`IIP: decoding error ${I.mime} ${I.width}x${I.height}`,e),!0))}_initDecoder(){try{return this._dec.init(),!0}catch(e){return console.warn("IIP: could not allocate decoder",e),this._dec.release(),!1}}_resize(e,t){var i,A,s,o;const a=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.width)||r.CELL_SIZE_DEFAULT.width,n=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.height)||r.CELL_SIZE_DEFAULT.height,h=(null===(s=this._renderer.dimensions)||void 0===s?void 0:s.css.canvas.width)||a*this._coreTerminal.cols,g=(null===(o=this._renderer.dimensions)||void 0===o?void 0:o.css.canvas.height)||n*this._coreTerminal.rows,d=this._dim(this._header.width,h,a),l=this._dim(this._header.height,g,n);if(!d&&!l){const i=h/e,A=(g-n)/t,s=Math.min(i,A);return s<1?[e*s,t*s]:[e,t]}return d?!this._header.preserveAspectRatio&&d&&l?[d,l]:[d,t*d/e]:[e*l/t,l]}_dim(e,t,i){return"auto"===e?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}}},389(e,t){function i(e){let t="";for(let i=0;i57)throw new Error("illegal char");t=10*t+e[i]-48}return t}function s(e){const t=i(e);if(!t.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return t}Object.defineProperty(t,"__esModule",{value:!0}),t.HeaderParser=void 0;const r={inline:A,size:A,name:function(e){if("undefined"!=typeof Buffer)return Buffer.from(i(e),"base64").toString();const t=atob(i(e)),A=new Uint8Array(t.length);for(let e=0;e14)return-1;for(let h=t;h=d)return this._a();r[s++]=t}break;case 58:return 3!==A||this._storeValue(s)?(this.state=4,h+1):this._a();default:if(s>=d)return this._a();r[s++]=t}}return this.state=A,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){const t=i(this._buffer.subarray(0,e));return!!t&&(this._key=t,this.fields[t]=null,!0)}_storeValue(e){if(this._key){try{const t=this._buffer.slice(0,e);this.fields[this._key]=r[this._key]?r[this._key](t):t}catch(e){return!1}return!0}return!1}}},649(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.IIPImageStorage=void 0,t.IIPImageStorage=class{constructor(e){this._storage=e,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"}}addImage(e){this._storage.addImage(e,this._addImageOpts)}}},462(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UNSUPPORTED_TYPE=void 0,t.imageType=function(e){if(e.length<32)return t.UNSUPPORTED_TYPE;const i=new Uint32Array(e.buffer,e.byteOffset,8);if(1196314761===i[0]&&169478669===i[1]&&1380206665===i[3])return{mime:"image/png",width:e[16]<<24|e[17]<<16|e[18]<<8|e[19],height:e[20]<<24|e[21]<<16|e[22]<<8|e[23]};if(255===e[0]&&216===e[1]&&255===e[2]){const[t,i]=function(e){const t=e.length;let i=4,A=e[i]<<8|e[i+1];for(;;){if(i+=A,i>=t)return[0,0];if(255!==e[i])return[0,0];if(192===e[i+1]||194===e[i+1])return i+8>>14&16383)};case 32:return 157!==e[23]||1!==e[24]||42!==e[25]?t.UNSUPPORTED_TYPE:{mime:"image/webp",width:16383&(e[26]|e[27]<<8),height:16383&(e[28]|e[29]<<8)}}return t.UNSUPPORTED_TYPE}if(1887007846===i[1]&&(1718187617===i[2]||1936291425===i[2])){let i=-1;const A=Math.min(e.length-16,1024);for(let t=8;t0&&A>0)return{mime:"image/avif",width:t,height:A}}return t.UNSUPPORTED_TYPE}return t.UNSUPPORTED_TYPE},t.UNSUPPORTED_TYPE={mime:"unsupported",width:0,height:0}},463(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageRenderer=void 0;const A=i(939),s=i(426);class r extends s.Disposable{get canvas(){var e;return null===(e=this._layers.get("top"))||void 0===e?void 0:e.canvas}static createCanvas(e,t,i){const A=(null!=e?e:document).createElement("canvas");return A.width=0|t,A.height=0|i,A}static createImageData(e,t,i,A){if("function"!=typeof ImageData){const s=e.createImageData(t,i);return A&&s.data.set(new Uint8ClampedArray(A,0,t*i*4)),s}return A?new ImageData(new Uint8ClampedArray(A,0,t*i*4),t,i):new ImageData(t,i)}static createImageBitmap(e){return"function"!=typeof createImageBitmap?Promise.resolve(void 0):createImageBitmap(e)}constructor(e){super(),this._terminal=e,this._layers=new Map,this._optionsRefresh=this._register(new s.MutableDisposable),this._oldOpen=this._terminal._core.open,this._terminal._core.open=e=>{var t;null===(t=this._oldOpen)||void 0===t||t.call(this._terminal._core,e),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(e=>{var t;"fontSize"===e&&(this.rescaleCanvas(),null===(t=this._renderService)||void 0===t||t.refreshRows(0,this._terminal.rows))}),this._register((0,s.toDisposable)(()=>{var e;this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),null===(e=this._placeholderBitmap)||void 0===e||e.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}showPlaceholder(e){var t,i;e?this._placeholder||-1===this.cellSize.height||this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),null===(i=this._renderService)||void 0===i||i.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){var e,t;return{width:(null===(e=this.dimensions)||void 0===e?void 0:e.css.cell.width)||-1,height:(null===(t=this.dimensions)||void 0===t?void 0:t.css.cell.height)||-1}}clearLines(e,t,i){var A,s,r,o,a;const n=e*((null===(A=this.dimensions)||void 0===A?void 0:A.css.cell.height)||0),h=(null===(s=this.dimensions)||void 0===s?void 0:s.css.canvas.width)||0,g=(t+1-e)*((null===(r=this.dimensions)||void 0===r?void 0:r.css.cell.height)||0);i&&"top"!==i||null===(o=this._layers.get("top"))||void 0===o||o.clearRect(0,n,h,g),i&&"bottom"!==i||null===(a=this._layers.get("bottom"))||void 0===a||a.clearRect(0,n,h,g)}clearAll(e){if(!e||"top"===e){const e=this._layers.get("top");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}if(!e||"bottom"===e){const e=this._layers.get("bottom");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}}draw(e,t,i,A,s=1){const r=this._layers.get(e.layer);if(!r)return;const{width:o,height:a}=this.cellSize;if(-1===o||-1===a)return;this._rescaleImage(e,o,a);const n=e.actual,{width:h,height:g}=e.actualCellSize,d=Math.ceil(n.width/h),l=t%d*h,I=Math.floor(t/d)*g,c=i*o,_=A*a,C=s*h+l>n.width?n.width-l:s*h,B=I+g>n.height?n.height-I:g;r.drawImage(n,Math.floor(l),Math.floor(I),Math.ceil(C),Math.ceil(B),Math.floor(c),Math.floor(_),Math.ceil(C*o/h),Math.ceil(B*a/g))}extractTile(e,t){const{width:i,height:A}=this.cellSize;if(-1===i||-1===A)return;this._rescaleImage(e,i,A);const s=e.actual,{width:o,height:a}=e.actualCellSize,n=Math.ceil(s.width/o),h=t%n*o,g=Math.floor(t/n)*a,d=o+h>s.width?s.width-h:o,l=g+a>s.height?s.height-g:a,I=r.createCanvas(this.document,Math.ceil(d*i/o),Math.ceil(l*A/a)),c=I.getContext("2d");return c?(c.drawImage(s,Math.floor(h),Math.floor(g),Math.floor(d),Math.floor(l),0,0,I.width,I.height),I):void 0}drawPlaceholder(e,t,i=1){var A;const s=this._layers.get("top");if(s){const{width:r,height:o}=this.cellSize;if(-1===r||-1===o)return;if(this._placeholder?o>=this._placeholder.height&&this._createPlaceHolder(o+1):this._createPlaceHolder(Math.max(o+1,24)),!this._placeholder)return;s.drawImage(null!==(A=this._placeholderBitmap)&&void 0!==A?A:this._placeholder,e*r,t*o%2?0:1,r*i,o,e*r,t*o,r*i,o)}}rescaleCanvas(){var e,t;const i=(null===(e=this.dimensions)||void 0===e?void 0:e.css.canvas.width)||0,A=(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.height)||0;for(const e of this._layers.values())e.canvas.width===i&&e.canvas.height===A||(e.canvas.width=i,e.canvas.height=A)}_rescaleImage(e,t,i){if(t===e.actualCellSize.width&&i===e.actualCellSize.height)return;const{width:A,height:s}=e.origCellSize;if(t===A&&i===s)return e.actual=e.orig,e.actualCellSize.width=A,void(e.actualCellSize.height=s);const o=Math.ceil(e.orig.width*t/A),a=Math.ceil(e.orig.height*i/s);if(o*a>e.orig.width*e.orig.height)return e.actual=e.orig,e.actualCellSize.width=A,void(e.actualCellSize.height=s);const n=r.createCanvas(this.document,o,a),h=n.getContext("2d");h&&(h.drawImage(e.orig,0,0,n.width,n.height),e.actual=n,e.actualCellSize.width=t,e.actualCellSize.height=i)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=e=>{var t;for(const e of[...this._layers.keys()])this.removeLayerFromDom(e);null===(t=this._oldSetRenderer)||void 0===t||t.call(this._renderService,e)}}insertLayerToDom(e="top"){var t,i;if(!this.document||!this._terminal._core.screenElement)return void console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");if(this._layers.has(e))return;const A=r.createCanvas(this.document,(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.width)||0,(null===(i=this.dimensions)||void 0===i?void 0:i.css.canvas.height)||0);A.classList.add(`xterm-image-layer-${e}`);const s=this._terminal._core.screenElement;s.style.isolation="isolate","bottom"===e?(A.style.zIndex="-1",s.insertBefore(A,s.firstChild)):(A.style.zIndex="0",s.appendChild(A));const o=A.getContext("2d",{alpha:!0});o?(this._layers.set(e,o),this.clearAll(e)):A.remove()}removeLayerFromDom(e="top"){const t=this._layers.get(e);t&&(t.canvas.remove(),this._layers.delete(e))}hasLayer(e){return this._layers.has(e)}_createPlaceHolder(e=24){var t;null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0;const i=32,s=r.createCanvas(this.document,i,e),o=s.getContext("2d",{alpha:!1});if(!o)return;const a=r.createImageData(o,i,e),n=new Uint32Array(a.data.buffer),h=(0,A.toRGBA8888)(0,0,0),g=(0,A.toRGBA8888)(255,255,255);n.fill(h);for(let t=0;t{this._placeholder!==I?null==e||e.close():this._placeholderBitmap=e}).catch(()=>{})}get document(){var e;return null===(e=this._terminal._core._coreBrowserService)||void 0===e?void 0:e.window.document}}t.ImageRenderer=r},699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageStorage=t.CELL_SIZE_DEFAULT=void 0;const A=i(463);t.CELL_SIZE_DEFAULT={width:7,height:14};class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}get urlId(){return this._urlId}set urlId(e){this._urlId=e}constructor(e=0,t=0,i=-1,A=-1){this.imageId=i,this.tileId=A,this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId,this.imageId,this.tileId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&-1===this.imageId}}const r=new s;t.ImageStorage=class{constructor(e,t,i){this._terminal=e,this._renderer=t,this._opts=i,this._images=new Map,this._lastId=0,this._lowestId=0,this._fullyCleared=!1,this._needsFullClear=!1,this._pixelLimit=25e5;try{this.setLimit(this._opts.storageLimit)}catch(e){e instanceof Error&&console.error(e.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){var e;for(const t of this._images.values())null===(e=t.marker)||void 0===e||e.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return 4*this._pixelLimit/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return 4*this._getStoredPixels()/1e6}_getStoredPixels(){let e=0;for(const t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){var t;const i=this._images.get(e);i&&(this._images.delete(e),window.ImageBitmap&&i.orig instanceof ImageBitmap&&i.orig.close(),null===(t=this.onImageDeleted)||void 0===t||t.call(this,e))}wipeAlternate(){var e;const t=[];for(const[i,A]of this._images.entries())"alternate"===A.bufferType&&(null===(e=A.marker)||void 0===e||e.dispose(),t.push(i));for(const e of t)this._delImg(e);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){var t;const i=this._images.get(e);i&&(null===(t=i.marker)||void 0===t||t.dispose(),this._delImg(e))}addImage(e,i){var A,s;this._evictOldest(e.width*e.height);let r=this._renderer.cellSize;-1!==r.width&&-1!==r.height||(r=t.CELL_SIZE_DEFAULT);const o=Math.ceil(e.width/r.width),a=Math.ceil(e.height/r.height),n=++this._lastId,h=this._terminal._core.buffer,g=this._terminal.cols,d=this._terminal.rows,l=h.x,I=h.y;let c=l,_=0;i.scrolling||(h.x=0,h.y=0,c=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y);for(let e=0;e=g);++i)this._writeToCell(t,c+i,n,e*o+i),_++;if(i.scrolling)e=d)break;h.x=c}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y),i.scrolling?"iip"===i.cursorPos?h.x=Math.min(c+o,g):h.x=c:(h.x=l,h.y=I);const C=[];for(const[e,t]of this._images.entries())t.tileCount<1&&(null===(A=t.marker)||void 0===A||A.dispose(),C.push(e));for(const e of C)this._delImg(e);const B=this._terminal.registerMarker(0);null==B||B.onDispose(()=>{this._images.get(n)&&this._delImg(n)}),"alternate"===this._terminal.buffer.active.type&&this._evictOnAlternate();const Q={orig:e,origCellSize:r,actual:e,actualCellSize:Object.assign({},r),marker:B||void 0,tileCount:_,bufferType:this._terminal.buffer.active.type,layer:i.layer,zIndex:i.zIndex};return this._images.set(n,Q),null===(s=this.onImageAdded)||void 0===s||s.call(this),n}render(e){var t,i;let A=!1,s=!1;for(const e of this._images.values())if("bottom"===e.layer?s=!0:A=!0,A&&s)break;if(A&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(s&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size)return this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),void(this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom"));!A&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!s&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);const{start:o,end:a}=e,n=this._terminal._core.buffer,h=this._terminal._core.cols;this._renderer.clearLines(o,a);const g=[],d=[];for(let e=o;e<=a;++e){const A=n.lines.get(e+n.ydisp);if(!A)return;for(let s=0;se.imgSpec.zIndex-t.imgSpec.zIndex);for(const e of d)this._renderer.drawPlaceholder(e.col,e.row,e.count);for(const e of g)this._renderer.draw(e.imgSpec,e.tileId,e.col,e.row,e.count)}viewportResize(e){var t,i;if(!this._images.size)return void(this._viewportMetrics=e);if(this._viewportMetrics.cols>=e.cols)return void(this._viewportMetrics=e);const A=this._terminal._core.buffer,s=A.lines.length,o=this._viewportMetrics.cols-1;for(let a=0;a=h)continue;let g=!1;for(let t=o+1;t>e.cols;++t)if(4194303&s._data[3*t+0]){g=!0;break}if(g)continue;const d=Math.min(e.cols,h-A.tileId%h+o);let l=A.tileId;for(let e=o+1;e4194304&&e.release();const A=null!==(i=n.get(t))&&void 0!==i?i:[];A.length<2&&(A.push(e),n.set(t,A))}function d(e){return A.BIG_ENDIAN?e:(255&e)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255}t.SixelHandler=class{constructor(e,t,i){var A;this._opts=e,this._storage=t,this._coreTerminal=i,this._size=0,this._aborted=!1,this._decMemoryLimit=0,this._palette=new Uint32Array(o.LIMITS.PALETTE_SIZE),this._palette.set(a),A=4*this._opts.pixelLimit,h||(h=!0,(0,r.DecoderAsync)({memoryLimit:A,palette:a}).then(e=>g(e,A),()=>{h=!1}))}reset(){this._returnDecoder(),this._palette.fill(0),this._palette.set(a)}hook(e){var t;this._size=0,this._aborted=!1,this._returnDecoder();const i=4*this._opts.pixelLimit;try{this._dec=function(e){var t,i;return null!==(i=null===(t=n.get(e))||void 0===t?void 0:t.pop())&&void 0!==i?i:new r.Decoder({memoryLimit:e,palette:a})}(i)}catch(e){return console.warn(`SIXEL: could not allocate decoder - ${e}`),void(this._aborted=!0)}this._decMemoryLimit=i;const s=1===e.params[1]?0:function(e,t){let i=0;if(!t)return i;if(e.isInverse())if(e.isFgDefault())i=d(t.foreground.rgba);else if(e.isFgRGB()){const t=e.constructor.toColorRGB(e.getFgColor());i=(0,A.toRGBA8888)(...t)}else i=d(t.ansi[e.getFgColor()].rgba);else if(e.isBgDefault())i=d(t.background.rgba);else if(e.isBgRGB()){const t=e.constructor.toColorRGB(e.getBgColor());i=(0,A.toRGBA8888)(...t)}else i=d(t.ansi[e.getBgColor()].rgba);return i}(this._coreTerminal._core._inputHandler._curAttrData,null===(t=this._coreTerminal._core._themeService)||void 0===t?void 0:t.colors);this._dec.init(s,this._palette,this._opts.sixelPaletteLimit)}_returnDecoder(){const e=this._dec;e&&(this._dec=void 0,this._palette.set(e.palette),g(e,this._decMemoryLimit))}put(e,t,i){if(!this._aborted&&this._dec){if(this._size+=i-t,this._size>this._opts.sixelSizeLimit)return console.warn("SIXEL: too much data, aborting"),this._aborted=!0,void this._dec.release();try{this._dec.decode(e,t,i)}catch(e){console.warn(`SIXEL: error while decoding image - ${e}`),this._aborted=!0,this._dec.release()}}}unhook(e){try{return this._unhook(e)}finally{this._returnDecoder()}}_unhook(e){var t;if(this._aborted||!e||!this._dec)return!0;const i=this._dec.width,A=this._dec.height;if(!i||!A)return A&&this._storage.advanceCursor(A),!0;const r=s.ImageRenderer.createCanvas(void 0,i,A);return null===(t=r.getContext("2d"))||void 0===t||t.putImageData(new ImageData(this._dec.data8,i,A),0,0),this._storage.addImage(r),!0}}},994(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SixelImageStorage=void 0;const A=i(699);t.SixelImageStorage=class{constructor(e,t,i,A){this._storage=e,this._opts=t,this._renderer=i,this._terminal=A,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;-1!==t.width&&-1!==t.height||(t=A.CELL_SIZE_DEFAULT);const i=Math.ceil(e/t.height);for(let e=1;e512)return void(this._aborted=!0);if(this._controlData.set(e.subarray(t,s),this._controlLength),this._controlLength+=r,!this._inControlData){if(this._parsedCommand=(0,n.parseKittyCommand)(this._parseControlDataString()),void 0!==this._parsedCommand.id&&void 0!==this._parsedCommand.imageNumber)return this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",null!==(A=this._parsedCommand.quiet)&&void 0!==A?A:0),void(this._aborted=!0);if("d"===this._parsedCommand.action)return;const t=s+1;tthis._encodedSizeLimit){const e=null!==(g=this._activeDecoder)&&void 0!==g?g:null==_?void 0:_.decoder;return e&&e.release(),this._activeDecoder=null,_&&this._removePendingEntry(c),void(this._aborted=!0)}if(!this._decodeError){if((null==_?void 0:_.decoder)&&!this._activeDecoder&&(this._activeDecoder=_.decoder),!this._activeDecoder){const e=this._maxEncodedBytes+131072;if(e>1e6*this._opts.storageLimit)return this._aborted=!0,void(void 0!==(null===(s=this._parsedCommand)||void 0===s?void 0:s.id)&&this._sendResponse(this._parsedCommand.id,"ENOMEM:pending image budget exceeded",null!==(d=this._parsedCommand.quiet)&&void 0!==d?d:0));const t=Math.max(1,Math.floor(1e6*this._opts.storageLimit/e));for(;this._pendingTransmissions.size>=t;){const e=this._pendingTransmissions.entries().next().value;if(!e)break;e[1].decoder.release(),this._removePendingEntry(e[0]),void 0!==e[1].cmd.id&&this._sendResponse(e[1].cmd.id,"ENOMEM:pending image budget exceeded",null!==(l=e[1].cmd.quiet)&&void 0!==l?l:0)}const i=new a.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes);try{i.init()}catch(e){return console.warn("KITTY: could not allocate decoder",e),this._aborted=!0,void(void 0!==(null===(r=this._parsedCommand)||void 0===r?void 0:r.id)&&this._sendResponse(this._parsedCommand.id,"ENOMEM:could not allocate decoder",null!==(I=this._parsedCommand.quiet)&&void 0!==I?I:0))}this._activeDecoder=i}0!==this._activeDecoder.put(e.subarray(t,i))&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,_&&this._removePendingEntry(c))}}end(e){var t,i;if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();const A=this._parsedCommand;if("d"===A.action)return this._handleDelete(A);const s=null!==(i=null!==(t=A.id)&&void 0!==t?t:this._lastPendingKey)&&void 0!==i?i:0,r=1===A.more,o=this._pendingTransmissions.get(s);if(r)return this._activeDecoder&&(o?(o.totalEncodedSize+=this._totalEncodedSize,o.decodeError=o.decodeError||this._decodeError):this._pendingTransmissions.set(s,{cmd:Object.assign({},A),decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=s,this._activeDecoder=null),!0;o&&(this._lastPendingKey=void 0);let a=this._decodeError,n=A,h=this._activeDecoder;o&&(n=o.cmd,h=o.decoder,a=a||o.decodeError,this._pendingTransmissions.delete(s));let g=new Uint8Array(0);h&&(0!==h.end()&&(a=!0),g=h.data8),this._activeDecoder=null;const d=this._handleCommandWithBytesAndCmd(n,g,a);return h&&h.release(),d}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",null!==(o=e.quiet)&&void 0!==o?o:0)),A}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported action",null!==(a=e.quiet)&&void 0!==a?a:0),!0}}_handlePlacement(e){var t;if(void 0===e.id)return!0;const i=e.id,A=this._kittyStorage.getImage(i);return A?this._displayImage(A,e).then(t=>{var A;return this._sendResponse(i,t?"OK":"EINVAL:image rendering failed",null!==(A=e.quiet)&&void 0!==A?A:0,e.placementId),!0}):(this._sendResponse(i,"ENOENT:image not found",null!==(t=e.quiet)&&void 0!==t?t:0,e.placementId),!0)}_handleTransmit(e,t,i){var A,s,r,o,a,n;return"d"!==(null!==(A=e.transmission)&&void 0!==A?A:"d")?(void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",null!==(s=e.quiet)&&void 0!==s?s:0),!0):(i||0===t.length||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:null!==(r=e.width)&&void 0!==r?r:0,height:null!==(o=e.height)&&void 0!==o?o:0,format:null!==(a=e.format)&&void 0!==a?a:32,compression:null!==(n=e.compression)&&void 0!==n?n:""}),!0)}_handleTransmitDisplay(e,t,i){var A,s;if(i)return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:invalid base64 data",null!==(A=e.quiet)&&void 0!==A?A:0),!0;this._handleTransmit(e,t,i);const r=null!==(s=e.id)&&void 0!==s?s:this._kittyStorage.lastImageId,o=this._kittyStorage.getImage(r);if(o){const t=this._displayImage(o,e);return void 0!==e.id?t.then(t=>{var i;return this._sendResponse(r,t?"OK":"EINVAL:image rendering failed",null!==(i=e.quiet)&&void 0!==i?i:0),!0}):t.then(()=>!0)}return!0}_handleQuery(e,t,i){var A,s,r,o,a,n;const h=null!==(A=e.id)&&void 0!==A?A:0,g=null!==(s=e.quiet)&&void 0!==s?s:0;if("d"!==(null!==(r=e.transmission)&&void 0!==r?r:"d"))return this._sendResponse(h,"EINVAL:unsupported transmission medium",g),!0;if(i)return this._sendResponse(h,"EINVAL:invalid base64 data",g),!0;if(0===t.length)return this._sendResponse(h,"OK",g),!0;const d=null!==(o=e.format)&&void 0!==o?o:32;if(100===d)this._sendResponse(h,"OK",g);else{const i=null!==(a=e.width)&&void 0!==a?a:0,A=null!==(n=e.height)&&void 0!==n?n:0;if(!i||!A)return this._sendResponse(h,"EINVAL:width and height required for raw pixel data",g),!0;const s=i*A*(32===d?4:3);if(t.length=1)return;if(!s&&i>=2)return;const r=`_Gi=${e}${A?`,p=${A}`:""};${t}\\`;this._coreTerminal._core.coreService.triggerDataEvent(r)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){var i,A,o,a,n,h,g;const d=this._generation;let l=await this._createBitmap(e);try{if(d!==this._generation)throw new Error("image decode canceled");const I=Math.max(0,null!==(o=t.x)&&void 0!==o?o:0),c=Math.max(0,null!==(a=t.y)&&void 0!==a?a:0),_=t.sourceWidth||l.width-I,C=t.sourceHeight||l.height-c,B=Math.max(0,l.width-I),Q=Math.max(0,l.height-c),m=Math.max(0,Math.min(_,B)),u=Math.max(0,Math.min(C,Q));if(0===m||0===u)throw new Error("invalid source rectangle");if(0!==I||0!==c||m!==l.width||u!==l.height){const e=await createImageBitmap(l,I,c,m,u);l.close(),l=e}const E=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.width)||r.CELL_SIZE_DEFAULT.width,p=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.height)||r.CELL_SIZE_DEFAULT.height;let w,f;void 0!==t.columns&&void 0!==t.rows?(w=t.columns,f=t.rows):void 0!==t.columns?(w=t.columns,f=Math.max(1,Math.ceil(l.height/l.width*(w*E)/p))):void 0!==t.rows?(f=t.rows,w=Math.max(1,Math.ceil(l.width/l.height*(f*p)/E))):(w=Math.ceil(l.width/E),f=Math.ceil(l.height/p));let D=l.width,y=l.height;if(void 0===t.columns&&void 0===t.rows||(D=Math.round(w*E),y=Math.round(f*p)),D*y>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");const v=this._coreTerminal._core.buffer,M=v.x,k=v.y,b=v.ybase,S=void 0!==t.zIndex&&t.zIndex<0?"bottom":"top";if(D!==l.width||y!==l.height){const e=await createImageBitmap(l,{resizeWidth:D,resizeHeight:y});l.close(),l=e}const L=Math.min(Math.max(0,null!==(n=t.xOffset)&&void 0!==n?n:0),E-1),N=Math.min(Math.max(0,null!==(h=t.yOffset)&&void 0!==h?h:0),p-1);if(0!==L||0!==N){const e=void 0!==t.columns?Math.round(w*E):l.width+L,i=void 0!==t.rows?Math.round(f*p):l.height+N,A=s.ImageRenderer.createCanvas(window.document,e,i),r=A.getContext("2d");if(!r)throw new Error("Failed to create offset canvas context");r.drawImage(l,L,N);const o=await createImageBitmap(A);if(A.width=A.height=0,l.close(),l=o,D=l.width,y=l.height,D*y>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");void 0===t.columns&&(w=Math.ceil(l.width/E)),void 0===t.rows&&(f=Math.ceil(l.height/p))}if(d!==this._generation)throw new Error("image decode canceled");const G=null!==(g=t.zIndex)&&void 0!==g?g:0;if(this._kittyStorage.addImage(e.id,l,!0,S,G),l=void 0,1===t.cursorMovement){const e=v.ybase-b;v.x=M,v.y=Math.max(k-e,0)}else v.x=Math.min(M+w,this._coreTerminal.cols)}catch(e){throw null==l||l.close(),e}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if("z"===e.compression&&(t=await this._decompressZlib(t)),100===e.format){const e=(0,o.imageType)(t);if("image/png"!==e.mime||!(e.width>0)||!(e.height>0)||e.width*e.height>this._opts.pixelLimit)throw new RangeError("PNG exceeds pixel limit or has invalid dimensions");const i=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){const e=URL.createObjectURL(i),t=new Image;return new Promise((i,A)=>{t.addEventListener("load",()=>{var r;URL.revokeObjectURL(e);const o=s.ImageRenderer.createCanvas(window.document,t.width,t.height);null===(r=o.getContext("2d"))||void 0===r||r.drawImage(t,0,0),createImageBitmap(o).then(i).catch(A)}),t.addEventListener("error",()=>{URL.revokeObjectURL(e),A(new Error("Failed to load image"))}),t.src=e})}return createImageBitmap(i)}const i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");const r=i*A*(32===e.format?4:3);if(t.length>>24|t<<8,g[I++]=4278190080|t>>>16|i<<16,g[I++]=4278190080|i>>>8}let c=3*d,_=4*d;for(let e=d;e=e.length)return void t.close();const i=Math.min(A+4096,e.length);t.enqueue(new Uint8Array(e.subarray(A,i))),A=i}}).pipeThrough(new DecompressionStream(t)).getReader(),r=[];let o=0;try{for(;;){const{done:e,value:t}=await s.read();if(e)break;if(o+=t.byteLength,o>i)throw await s.cancel().catch(()=>{}),new RangeError("decompressed image exceeds byte limit");r.push(t)}}finally{s.releaseLock()}const a=new Uint8Array(o);let n=0;for(const e of r)a.set(e,n),n+=e.length;return a}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}}},470(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseKittyCommand=function(e){const t={},i=e.split(",");for(const e of i){const i=e.indexOf("=");if(-1===i)continue;const A=e.substring(0,i),s=e.substring(i+1);if("a"===A){t.action=s;continue}if("o"===A){t.compression=s;continue}if("t"===A){t.transmission=s;continue}if("d"===A){t.deleteSelector=s;continue}const r=parseInt(s,10);switch(A){case"f":t.format=r;break;case"i":t.id=r;break;case"I":t.imageNumber=r;break;case"s":t.width=r;break;case"v":t.height=r;break;case"x":t.x=r;break;case"y":t.y=r;break;case"w":t.sourceWidth=r;break;case"h":t.sourceHeight=r;break;case"X":t.xOffset=r;break;case"Y":t.yOffset=r;break;case"c":t.columns=r;break;case"r":t.rows=r;break;case"m":t.more=r;break;case"q":t.quiet=r;break;case"C":t.cursorMovement=r;break;case"z":t.zIndex=r;break;case"p":t.placementId=r}}return t}},235(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyImageStorage=void 0;class i{constructor(e){this._storage=e,this._nextImageId=1,this._images=new Map,this._kittyIdToStorageId=new Map,this._storageIdToKittyId=new Map,this._handleStorageImageDeleted=e=>{const t=this._storageIdToKittyId.get(e);void 0!==t&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))},this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"},this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=e=>{var t;null===(t=this._previousOnImageDeleted)||void 0===t||t.call(this,e),this._handleStorageImageDeleted(e)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){const A=null!=e?e:this._nextImageId++,s=this._kittyIdToStorageId.get(A);void 0!==s&&(this._storage.deleteImage(s),this._kittyIdToStorageId.delete(A),this._storageIdToKittyId.delete(s)),!this._images.has(A)&&this._images.size>=i._maxStoredImages&&this._evictUndisplayedImages();const r=1e6*this._storage.getLimit();this._images.delete(A);let o=0;for(const e of this._images.values())o+=e.data.size;for(const e of[!1,!0])for(const[i,A]of this._images){if(o+t.data.size<=r)break;this._kittyIdToStorageId.has(i)===e&&(o-=A.data.size,this.deleteById(i))}return this._images.set(A,Object.assign(Object.assign({},t),{id:A})),A}addImage(e,t,i,A,s){const r=this._kittyIdToStorageId.get(e);void 0!==r&&this._storageIdToKittyId.delete(r),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=s;const o=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,o),this._storageIdToKittyId.set(o,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);const t=this._kittyIdToStorageId.get(e);void 0!==t&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(const e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(const[e]of this._images){if(this._images.size<=i._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}}t.KittyImageStorage=i,i._maxStoredImages=256},669(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});const A=(0,i(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),s=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(e=>e.charCodeAt(0))),r=new Uint32Array(1024);r.fill(4278190080);for(let e=0;e>4|(e<<4&255)<<8;for(let e=0;e>2<<8|(e<<6&255)<<16;for(let e=0;ethis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):o}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=null!=e?e:this.maxBytes,this._bytes=null!=t?t:Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32;const s=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let e=this._bytes;for(;(e*=2)this._mem.buffer.byteLength){const t=Math.ceil((e+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(t),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=e}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;const t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}}},61(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});const A=(0,i(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="});t.default=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];const t=this.width*this.height,i=4*t,s=e.length,r=Math.max(i,s)+(Math.min(i,s)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}}},552(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.InWasm=function(e){if(e.d){const{t,s:A,d:s}=e;let r,o;const a=WebAssembly;return 0===t?A?e=>new a.Instance(o||(o=new a.Module(r||(r=i(s)))),e):e=>o?a.instantiate(o,e):a.instantiate(r||(r=i(s)),e).then(e=>(o=e.module)&&e.instance):1===t?A?()=>o||(o=new a.Module(r||(r=i(s)))):()=>o?Promise.resolve(o):a.compile(r||(r=i(s))).then(e=>o=e):A?()=>r||(r=i(s)):()=>Promise.resolve(r||(r=i(s)))}if("undefined"==typeof _wasmCtx)throw new Error('must run "inwasm"');_wasmCtx.add(e)};let i=e=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e{var e=A;Object.defineProperty(e,"__esModule",{value:!0}),e.ImageAddon=void 0;const t=i(414),s=i(795),r=i(463),o=i(699),a=i(23),n=i(235),h=i(566),g=i(994),d=i(649),l={enableSizeReports:!0,pixelLimit:16777216,sixelSupport:!0,sixelScrolling:!0,sixelPaletteLimit:4096,sixelSizeLimit:33554432,storageLimit:128,showPlaceholder:!0,iipSupport:!0,iipSizeLimit:33554432,kittySupport:!0,kittySizeLimit:33554432};e.ImageAddon=class{constructor(e){this._disposables=[],this._handlers=new Map,this._onImageAdded=new t.Emitter,this.onImageAdded=this._onImageAdded.event,this._opts=Object.assign({},l,e),this._defaultOpts=Object.assign({},l,e)}dispose(){for(const e of this._handlers.values())e.reset();for(const e of this._disposables)e.dispose();this._disposables.length=0,this._handlers.clear(),this._onImageAdded.dispose()}_disposeLater(...e){for(const t of e)this._disposables.push(t)}activate(e){var t;if(this._terminal=e,this._renderer=new r.ImageRenderer(e),this._storage=new o.ImageStorage(e,this._renderer,this._opts),this._storage.onImageAdded=()=>this._onImageAdded.fire(),this._opts.enableSizeReports){const i=null!==(t=e.options.windowOptions)&&void 0!==t?t:{};i.getWinSizePixels=!0,i.getCellSizePixels=!0,i.getWinSizeChars=!0,e.options.windowOptions=i}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},e=>this._decset(e)),e.parser.registerCsiHandler({prefix:"?",final:"l"},e=>this._decrst(e)),e.parser.registerCsiHandler({final:"c"},e=>this._da1(e)),e.parser.registerCsiHandler({prefix:"?",final:"S"},e=>this._xtermGraphicsAttributes(e)),e.onRender(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.render(e)}),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>{var e;return null===(e=this._storage)||void 0===e?void 0:e.wipeAlternate()}),e.onResize(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.viewportResize(e)})),this._opts.sixelSupport){const t=new g.SixelImageStorage(this._storage,this._opts,this._renderer,e),i=new h.SixelHandler(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){const t=new d.IIPImageStorage(this._storage),i=new s.IIPHandler(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){const t=new n.KittyImageStorage(this._storage),i=new a.KittyGraphicsHandler(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){var e;this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,null===(e=this._storage)||void 0===e||e.reset();for(const e of this._handlers.values())e.reset();return!1}get storageLimit(){var e;return(null===(e=this._storage)||void 0===e?void 0:e.getLimit())||-1}set storageLimit(e){var t;null===(t=this._storage)||void 0===t||t.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){var t;this._opts.showPlaceholder=e,null===(t=this._renderer)||void 0===t||t.showPlaceholder(e)}getImageAtBufferCell(e,t){var i;return null===(i=this._storage)||void 0===i?void 0:i.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){var i;return null===(i=this._storage)||void 0===i?void 0:i.extractTileAtBufferCell(e,t)}_report(e){var t;null===(t=this._terminal)||void 0===t||t._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=4096?(this._opts.sixelPaletteLimit=e[2],this._report(`[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`[?${e[0]};2S`),!0;case 4:return this._report(`[?${e[0]};0;4096S`),!0;default:return this._report(`[?${e[0]};2S`),!0}if(2===e[0])switch(e[1]){case 1:let n=null===(i=null===(t=this._renderer)||void 0===t?void 0:t.dimensions)||void 0===i?void 0:i.css.canvas.width,h=null===(s=null===(A=this._renderer)||void 0===A?void 0:A.dimensions)||void 0===s?void 0:s.css.canvas.height;if(!n||!h){const e=o.CELL_SIZE_DEFAULT;n=((null===(r=this._terminal)||void 0===r?void 0:r.cols)||80)*e.width,h=((null===(a=this._terminal)||void 0===a?void 0:a.rows)||24)*e.height}if(n*h {\nreturn ","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJDmpBsIkCQYAE/AoAAAsgBEEBSA0AIANBAXEhBSAHBH8gA0H+////B3EhAkEAIQEDQCABQQl0IgZBEHJB4IkSakGwiQJBgAT8CgAAIAZBkARyQeCJEmpBsIkCQYAE/AoAACABQQJqIQEgAkECayICDQALIAFBB3RBBHIFQQQLIQEgBQRAIAFBAnRB4IkSakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEEIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiA0EQckHwiRZqQbCJAkGABPwKAAAgA0GQBHJB8IkWakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAERQ0AIAFBAnRB8IkWakGwiQJBgAT8CgAAC0HUCCAIQQd0QQRyNgIAC58TAgh/AX5B5AgoAgAhA0HgCCgCACECQegIKAIAIQcgAUGQiQFqIglB/wE6AAAgACABSARAIABBkIkBaiEIA0AgAiEEIAhBAWohAQJAIAgtAABB/wBxIgJBMGtBCUsEQCABIQgMAQtB7AgoAgBBAnRB7AhqIgUoAgAhAANAIAUgAiAAQQpsakEwayIANgIAIAEtAAAhAiABQQFqIgghASACQf8AcSICQTBrQQpJDQALCwJAAkACQAJAAkACQAJ/AkAgAkE/ayIAQT9NBEAgBEUNASAEQSFGBEBB8AgoAgAiAUEBIAEbIgQgB2ohAQJAIABFDQAgB0H//wBLDQBBgIABIAdrIAQgAUH//wBLGyEFAkAgAEEBcUUNACAHQQJ0QaCJAmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEECcUUNACAHQQJ0QbCJBmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEEEcUUNACAHQQJ0QcCJCmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEEIcUUNACAHQQJ0QdCJDmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEEQcUUNACAHQQJ0QeCJEmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLIABBIHFFDQAgBUEBayEEIAdBAnRB8IkWaiEAIAVBB3EiAgRAA0AgACADNgIAIABBBGohACAFQQFrIQUgAkEBayICDQALCyAEQQdJDQADQCAAIAM2AhwgACADNgIYIAAgAzYCFCAAIAM2AhAgACADNgIMIAAgAzYCCCAAIAM2AgQgACADNgIAIABBIGohACAFQQhrIgUNAAsLIAhBAWoiBSAILQAAQf8AcSICQT9rIgBBP00NAxoMBAsCQEHsCCgCACIFQQFGBEBB8AgoAgAiAUHMCCgCACIESQ0BIAEgBHAhAQwBC0H4CCgCACEEQfQIKAIAIQECQAJAIAVBBUcNACABQQFHDQAgBEHpAk4NBAwBCyAEQeQASg0DQfwIKAIAQeQASg0DQYAJKAIAQeQASg0DCwJAIAFFDQAgAUECSg0AIARB/AgoAgBBgAkoAgAgAUECdEGICGooAgARAgAhBEHwCCgCACIBQcwIKAIAIgVPBH8gASAFcAUgAQtBAnRBkAlqIAQ2AgALQfAIKAIAIgFBzAgoAgAiBEkNACABIARwIQELIAFBAnRBkAlqKAIAIQMMAQsgAkH9AHFBIUcEQCAHIQEgAiEADAQLIARBI0cNBAJAQewIKAIAIgRBAUYEQEHwCCgCACIBQcwIKAIAIgBJDQEgASAAcCEBDAELQfgIKAIAIQFB9AgoAgAhAAJAAkAgBEEFRw0AIABBAUcNACABQekCSA0BDAcLIAFB5ABKDQZB/AgoAgBB5ABKDQZBgAkoAgBB5ABKDQYLAkAgAEUNACAAQQJKDQAgAUH8CCgCAEGACSgCACAAQQJ0QYgIaigCABECACEAQfAIKAIAIgFBzAgoAgAiBE8EfyABIARwBSABC0ECdEGQCWogADYCAAtB8AgoAgAiAUHMCCgCACIASQ0AIAEgAHAhAQsgAUECdEGQCWooAgAhAwwECyAHIQEgCAshBQNAIAFB//8ATQRAIABBAXEgAWxBAnRBoIkCaiADNgIAIABBAXZBAXEgAWxBAnRBsIkGaiADNgIAIABBAnZBAXEgAWxBAnRBwIkKaiADNgIAIABBA3ZBAXEgAWxBAnRB0IkOaiADNgIAIABBBHZBAXEgAWxBAnRB4IkSaiADNgIAIABBBXYgAWxBAnRB8IkWaiADNgIACyABQQFqIQEgBS0AACEAIAVBAWoiBCEFIABB/wBxIgJBP2siAEHAAEkNAAsgBCEFC0EAIQQgBSEIIAEhByACIQAgAkH9AHFBIUYNAQtBBCEHIAQhAiAAQSRrDgoDAgICAgICAgIBAgtB7AhCATcCAAwCC0GoCCgCAEEEaxAABEBB0AhBATYCAA8LAkBBqAgoAgAiBkEFSA0AQaAIKQMAIQogBkEDa0EBdiIBQQdxIQJBACEAIAFBAWtBB08EQCABQfj///8HcSEFA0AgAEEDdCIBQbCJAmogCjcDACABQQhyQbCJAmogCjcDACABQRByQbCJAmogCjcDACABQRhyQbCJAmogCjcDACABQSByQbCJAmogCjcDACABQShyQbCJAmogCjcDACABQTByQbCJAmogCjcDACABQThyQbCJAmogCjcDACAAQQhqIQAgBUEIayIFDQALCyACRQ0AA0AgAEEDdEGwiQJqIAo3AwAgAEEBaiEAIAJBAWsiAg0ACwtBwIkGQbCJAiAGQQJ0IgD8CgAAQdCJCkGwiQIgAPwKAABB4IkOQbCJAiAA/AoAAEHwiRJBsIkCIAD8CgAAQYCKFkGwiQIgAPwKAAAgBCECDAELAkAgAEE7Rw0AQewIKAIAIgBBB0oNAEHsCCAAQQFqNgIAIABBAnRB8AhqQQA2AgALIAEhBwsgCCAJSQ0ACwtB5AggAzYCAEHgCCACNgIAQegIIAc2AgAL4gcCBX8BfgJAQdAIAn8CQAJAIAAgAU4NACABQZCJAWohBiAAQZCJAWohBQNAIAUtAAAiA0H/AHEhAgJAAkACQAJAAkACQAJAQeAIKAIAIgRBIkcEQCAEDQcgAkEiRgRAQewIQgE3AgBB4AhBIjYCAAwICyACQT9rQcAASQ0GIANBIWsiAkEMTQ0BDAULAkAgAkEwayIEQQlNBEBB7AgoAgBBAnRB7AhqIgIgBCACKAIAQQpsajYCAAwBC0HsCCgCACEEIAJBO0YEQCAEQQdKDQFB7AggBEEBajYCACAEQQJ0QfAIakEANgIADAELIARBBEYEQEHECEECNgIAQbAIQfAIKQMANwMAQbgIQfgIKAIAIgI2AgBBvAhB/AgoAgAiBDYCAEHICEECQQFBwAgoAgAiAxs2AgBBrAggBEEAIAMbNgIAQagIIAJBgIABIAJBgIABSBtBBGpBACADGzYCAEHgCEEANgIADAoLIAJBP2tBwABJDQQLIANBIWsiAkEMTQ0BDAILQQEgAnRBjSBxRQ0DDAQLQQEgAnRBjSBxDQELIANBoQFrIgJBDEsNA0EBIAJ0QY0gcUUNAwtBxAhCgYCAgBA3AgBBsAhB8AgoAgBBAEHsCCgCACICQQBKGzYCAEG0CEH0CCgCAEEAIAJBAUobNgIAQbgIQfgIKAIAQQAgAkECShs2AgBB4AhBADYCAEG8CEEANgIADAQLIANBoQFrIgJBDEsNAUEBIAJ0QY0gcUUNAQtBxAhCgYCAgBA3AgBBsAhCADcDAEG4CEIANwMADAMLIAVBAWoiBSAGSQ0ACwsCQEHICCgCAA4DAwEAAQsCQEGoCCgCACIFQQVIDQBBoAgpAwAhByAFQQNrQQF2IgNBB3EhBEEAIQIgA0EBa0EHTwRAIANB+P///wdxIQYDQCACQQN0IgNBsIkCaiAHNwMAIANBCHJBsIkCaiAHNwMAIANBEHJBsIkCaiAHNwMAIANBGHJBsIkCaiAHNwMAIANBIHJBsIkCaiAHNwMAIANBKHJBsIkCaiAHNwMAIANBMHJBsIkCaiAHNwMAIANBOHJBsIkCaiAHNwMAIAJBCGohAiAGQQhrIgYNAAsLIARFDQADQCACQQN0QbCJAmogBzcDACACQQFqIQIgBEEBayIEDQALC0HAiQZBsIkCIAVBAnQiA/wKAABB0IkKQbCJAiAD/AoAAEHgiQ5BsIkCIAP8CgAAQfCJEkGwiQIgA/wKAABBgIoWQbCJAiAD/AoAAEECDAELEAhByAgoAgALEAEiAjYCACACDQAgACABQcgIKAIAQQJ0QYAIaigCABEBAAsLdABB6AhBBDYCAEHkCCAANgIAQewIQgE3AgBBxAhCADcCAEHACCADNgIAQdwIQgA3AgBBqAhCADcDAEGwCEIANwMAQbgIQgA3AwBBzAggAkGAICACQYAgSRs2AgBBoAggAa1CgYCAgBB+NwMAQdAIQQA2AgALIwBB0AgoAgBFBEAgACABQcgIKAIAQQJ0QYAIaigCABEBAAsLWgECfwJAAkACQEHICCgCAEEBaw4CAAECC0HYCEHoCCgCACIAQdgIKAIAIgEgACABShsiAEGAgAEgAEGAgAFIGyIANgIAIABBBGsPC0GoCCgCAEEEayEACyAAC0IBAX8Cf0EGQdwIKAIAIgBBIHENABpBBSAAQRBxDQAaQQQgAEEIcQ0AGkEDIABBBHENABpBAiAAQQFxIABBAnEbCwu9BQEFfQJ/IAJFBEAgAUH/AWxBMmpB5ABtIgBBCHQgAHIgAEEQdHIMAQsgArJDAADIQpUhBiAAQfABarJDAAC0Q5UhBQJ9IAGyQwAAyEKVIgNDAAAAP10EQCADIAZDAACAP5KUDAELIAYgA0MAAIA/IAaTlJILIQcgAyADkiEGAkAgBUOrqqo+kiIEQwAAAABdBEAgBEMAAIA/kiEEDAELIARDAACAP15FDQAgBEMAAIC/kiEECyAGIAeTIQMgBUMAAAAAXSEAAn8CfSADIAcgA5NDAADAQJQgBJSSIARDq6oqPl0NABogByAEQwAAAD9dDQAaIAMgBEOrqio/XUUNABogAyAHIAOTIARDAADAwJRDAACAQJKUkgtDAAB/Q5RDAAAAP5IiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALIQECQCAABEAgBUMAAIA/kiEEDAELIAUiBEMAAIA/XkUNACAFQwAAgL+SIQQLIAVDq6qqvpIiBUMAAAAAXSECAn8CfSADIAcgA5NDAADAQJQgBJSSIARDq6oqPl0NABogByAEQwAAAD9dDQAaIAMgBEOrqio/XUUNABogAyAHIAOTIARDAADAwJRDAACAQJKUkgtDAAB/Q5RDAAAAP5IiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALIQACQCACBEAgBUMAAIA/kiEFDAELIAVDAACAP15FDQAgBUMAAIC/kiEFCwJAIAVDq6oqPl0EQCADIAcgA5NDAADAQJQgBZSSIQcMAQsgBUMAAAA/XQ0AIAVDq6oqP11FBEAgAyEHDAELIAMgByADkyAFQwAAwMCUQwAAgECSlJIhBwsgAEEIdAJ/IAdDAAB/Q5RDAAAAP5IiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALQRB0ciABcgtBgICAeHILNwAgAEH/AWxBMmpB5ABtIAFB/wFsQTJqQeQAbUEIdHIgAkH/AWxBMmpB5ABtQRB0ckGAgIB4cgsEACMACwYAIAAkAAsQACMAIABrQXBxIgAkACAACwsYAQBBgAgLEQEAAAACAAAAAwAAAAQAAAAF'\n};\n//# sourceMappingURL=wasm.js.map","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Limit held memory in base64 decoder (encoded bytes).\n KEEP_DATA = 4194304,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n this._dec.init();\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n this._dec.init();\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n const data = this._qoiDec.decode(this._dec.data8);\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode — cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat — points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const finalWidth = width + sx > img.width ? img.width - sx : width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document,\n Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n );\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport {\n ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec,\n IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes,\n UnderlineStyle, IAddImageOpts\n} from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0,\n public imageId = -1,\n public tileId = -1\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrsImage {\n /**\n * Technically we dont need a clone variant of ExtendedAttrsImage,\n * as we never clone a cell holding image data.\n * Note: Clone is only meant to be used by the InputHandler for\n * sticky attributes, which is never the case for image data.\n * We still provide a proper clone method to reflect the full ext attr\n * state in case there are future use cases for clone.\n */\n return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n }\n\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase);\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n let e: IExtendedAttrsImage = line._extendedAttrs[col] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (\n ++col < cols\n && (line.getBg(col) & BgFlags.HAS_EXTENDED)\n && (e = line._extendedAttrs[col] ?? EMPTY_ATTRS)\n && (e.imageId === imageId)\n && (e.tileId === startTile + count)\n ) {\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row) as IBufferLineExt;\n if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const old = line._extendedAttrs[x];\n if (old) {\n if (old.imageId !== undefined) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n // found a plain ExtendedAttrs instance, clone it to new entry\n line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n return;\n }\n }\n // fall-through: always create new ExtendedAttrsImage entry\n line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const imgId = line._extendedAttrs[x]?.imageId;\n if (imgId) {\n const spec = this._images.get(imgId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n","/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n DecoderAsync({\n memoryLimit: this._opts.pixelLimit * 4,\n palette: DEFAULT_PALETTE,\n paletteLimit: this._opts.sixelPaletteLimit\n }).then(d => this._dec = d);\n }\n\n public reset(): void {\n /**\n * reset sixel decoder to defaults:\n * - release all memory\n * - nullify palette (4096)\n * - apply default palette (256)\n */\n if (this._dec) {\n this._dec.release();\n // FIXME: missing interface on decoder to nullify full palette\n (this._dec as any)._palette.fill(0);\n this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n }\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n if (this._dec) {\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n this._dec.release();\n }\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded → 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n this._activeDecoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n this._activeDecoder.init();\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received — clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first — handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload — image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) — ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency —\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw × r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly — no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB→RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes — ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] → uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1–3 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch {\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const ds = new DecompressionStream(format);\n const writer = ds.writable.getWriter();\n writer.write(compressed as BufferSource);\n writer.close();\n\n const chunks: Uint8Array[] = [];\n const reader = ds.readable.getReader();\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) — only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair — same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId → placementId → storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map","\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 §4 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","red","n","green","blue","toRGBA8888","r","g","b","a","clamp","low","high","value","Math","max","min","h2c","t1","t2","c","normalizeRGB","round","Object","defineProperty","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","PALETTE_ANSI_256","PALETTE_VT340_GREY","PALETTE_VT340_COLOR","normalizeHLS","nearestColorIndex","fromRGBA8888","alpha","BIG_ENDIAN","Uint8Array","Uint32Array","buffer","console","warn","color","palette","Number","MAX_SAFE_INTEGER","idx","i","length","dr","dg","db","d","h","l","s","v","HLStoRGB","p","push","decodeAsync","decode","Decoder","DecoderAsync","Colors_1","__webpack_require__","wasm_1","WASM_BYTES","Buffer","from","bytestring","atob","result","charCodeAt","decodeBase64","LIMITS","BYTES","WASM_MODULE","NULL_CANVAS","CallbackProxy","constructor","this","bandHandler","width","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","memoryLimit","sixelColor","fillColor","paletteLimit","PALETTE_SIZE","truncate","opts","cbProxy","importObj","env","bind","WebAssembly","instantiate","then","inst","instance","_instance","_cbProxy","_PIXEL_OFFSET","MAX_WIDTH","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","_opts","assign","Error","_handle_band","_initCanvas","Module","Instance","_wasm","_chunk","memory","get_chunk_address","CHUNK_SIZE","_states","get_state_address","_palette","get_palette_address","set","_pSrc","get_p0_address","init","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","height","release","_realloc","offset","additionalPixels","newCanvas","ceil","adv","remaining","subarray","current_width","current_height","memoryUsage","byteLength","properties","level","memUsage","rasterAttributes","numerator","denominator","data","start","end","decodeString","j","data32","currentWidth","fill","escape","final","finalOffset","bw","currentHeight","data8","Uint8ClampedArray","dec","async","Lifecycle_1","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","toDisposable","entry","fn","slice","indexOf","splice","Array","isArray","add","fire","call","listeners","len","dispose","forward","to","e","map","undefined","any","events","store","DisposableStore","runAndSubscribe","handler","initial","arg","_disposables","Set","_isDisposed","isDisposed","o","clear","Disposable","_store","_register","None","freeze","_value","ImageRenderer_1","ImageStorage_1","Base64Decoder_wasm_1","__importDefault","QoiDecoder_wasm_1","IIPHeaderParser_1","IIPMetrics_1","DEFAULT_HEADER","type","name","size","preserveAspectRatio","inline","_renderer","_storage","_coreTerminal","_aborted","_hp","HeaderParser","_header","_isMultipart","_abortMulti","maxEncodedBytes","iipSizeLimit","initialBytes","_dec","default","_qoiDec","reset","put","state","dataPos","parse","fields","success","seqType","w","CELL_SIZE_DEFAULT","dimensions","css","canvas","cols","rows","scale","_c","_a","_core","_coreBrowserService","dpr","report","toFixed","input","cond","blob","metrics","UNSUPPORTED_TYPE","imageType","mime","pixelLimit","_resize","floor","ImageData","byteOffset","ImageRenderer","createCanvas","_b","getContext","putImageData","addImage","Blob","createImageBitmap","resizeWidth","resizeHeight","bm","catch","cw","cell","ch","_d","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","parseInt","toStr","String","fromCharCode","toInt","toSize","match","DECODERS","toString","bs","TextDecoder","FILE_MARKER","MULTIPARTFILE_MARKER","FILEPART_MARKER","FILEEND_MARKER","REPORTCELLSIZE_MARKER","MAX_FIELDCHARS","_buffer","_position","_key","k","_storeValue","pos","_storeKey","_addImageOpts","scrolling","layer","zIndex","cursorPos","img","d32","blockLength","jpgSize","dim","limit","_layers","get","localDocument","document","createElement","createImageData","ctx","imgData","Promise","resolve","_terminal","super","Map","_optionsRefresh","MutableDisposable","_oldOpen","open","parent","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","_renderService","refreshRows","removeLayerFromDom","_oldSetRenderer","setRenderer","_placeholderBitmap","close","_placeholder","showPlaceholder","cellSize","_createPlaceHolder","clearLines","y","clearRect","_e","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sx","sy","dx","dy","finalWidth","finalHeight","drawImage","extractTile","drawPlaceholder","values","spec","actualCellSize","originalWidth","originalHeight","origCellSize","orig","renderer","key","keys","insertLayerToDom","has","classList","style","isolation","insertBefore","firstChild","appendChild","remove","delete","hasLayer","bWidth","blueprint","black","white","shift","x","screen","ctx2","bitmap","window","ExtendedAttrsImage","ext","_urlId","_ext","underlineStyle","underlineColor","underlineVariantOffset","val","urlId","imageId","clone","isEmpty","EMPTY_ATTRS","_images","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","setLimit","storageLimit","error","message","getLimit","_viewportMetrics","marker","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","id","ImageBitmap","onImageDeleted","wipeAlternate","zero","entries","bufferType","deleteImage","termCols","termRows","originX","originY","tileCount","_inputHandler","_dirtyRowTracker","markDirty","line","lines","ybase","_writeToCell","lineFeed","endMarker","registerMarker","onDispose","active","_evictOnAlternate","onImageAdded","render","range","hasTopImages","hasBottomImages","drawCalls","placeholderCalls","ydisp","getBg","_extendedAttrs","startTile","startCol","sort","viewportResize","oldCol","tilesPerRow","hasData","rightCol","_data","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","old","oldSpec","imgId","Decoder_1","DEFAULT_PALETTE","convertLe","_size","sixelPaletteLimit","hook","params","attr","colors","bg","isInverse","isFgDefault","foreground","rgba","isFgRGB","t","toColorRGB","getFgColor","ansi","isBgDefault","background","isBgRGB","getBgColor","extractActiveBg","_curAttrData","_themeService","sixelSizeLimit","unhook","advanceCursor","sixelScrolling","KittyGraphicsTypes_1","_kittyStorage","_decodeError","_activeDecoder","_inControlData","_controlData","_controlLength","_encodedSizeLimit","_totalEncodedSize","_parsedCommand","_pendingTransmissions","_maxEncodedBytes","kittySizeLimit","_initialEncodedBytes","_cleanupAllPending","_removePendingEntry","_lastPendingKey","pending","decoder","controlEnd","copyLength","parseKittyCommand","_parseControlDataString","imageNumber","_sendResponse","quiet","action","payloadStart","_streamPayload","pendingKey","previousEncodedSize","totalEncodedSize","decoderToRelease","_handleNoPayloadCommand","cmd","_handleDelete","isMoreComing","more","decodeError","finalCmd","imageBytes","_handleCommandWithBytesAndCmd","str","fromCodePoint","_handlePlacement","bytes","_handleTransmit","transmission","_handleTransmitDisplay","_handleQuery","image","getImage","_displayImage","placementId","storeImage","format","compression","_f","lastImageId","expectedBytes","deleteSelector","deleteAll","deleteById","isOk","response","coreService","triggerDataEvent","_decodeAndDisplay","_createBitmap","cropX","cropY","cropW","sourceWidth","cropH","sourceHeight","maxCropW","maxCropH","finalCropW","finalCropH","cropped","imgCols","imgRows","columns","savedX","savedY","savedYbase","scaled","xOffset","yOffset","canvasW","canvasH","offsetCanvas","offsetCtx","offsetBitmap","_g","cursorMovement","scrolled","arrayBuffer","_decompressZlib","url","URL","createObjectURL","Image","reject","addEventListener","revokeObjectURL","src","pixelCount","src32","dst32","alignedPixels","srcOffset","dstOffset","b0","b1","b2","srcByte","dstByte","compressed","_decompress","ds","DecompressionStream","writer","writable","getWriter","write","chunks","reader","readable","getReader","done","read","totalLength","reduce","sum","chunk","images","_kittyIdToStorageId","kittyIdToStorageId","pendingTransmissions","parts","split","part","eqIdx","substring","numValue","KittyImageStorage","_nextImageId","_storageIdToKittyId","_handleStorageImageDeleted","storageId","kittyId","_previousOnImageDeleted","_wrappedOnImageDeleted","imageData","oldStorageId","_maxStoredImages","_evictUndisplayedImages","wasmDecode","InWasm","MAP","el","D","EMPTY","keepSize","maxBytes","_inst","_ended","_bytes","_m32","_mem","m","grow","Memory","requested","needed","newSize","addPages","loadedBytes","freeBytes","wasmQoiDecode","ib","dl","chunkP","def","W","z","compile","_wasmCtx","fromBase64","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","Event_1","IIPHandler_1","KittyGraphicsHandler_1","KittyImageStorage_1","SixelHandler_1","SixelImageStorage_1","IIPImageStorage_1","enableSizeReports","sixelSupport","iipSupport","kittySupport","_handlers","_onImageAdded","Emitter","_defaultOpts","obj","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelStorage","SixelImageStorage","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipStorage","IIPImageStorage","iipHandler","IIPHandler","registerOscHandler","kittyStorage","kittyHandler","KittyGraphicsHandler","registerApcHandler","storageUsage","_report","sqrt"],"sourceRoot":""} -\ No newline at end of file -+{"version":3,"file":"addon-image.js","mappings":"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","sources":["webpack://ImageAddon/webpack/universalModuleDefinition","webpack://ImageAddon/../node_modules/sixel/lib/Colors.js","webpack://ImageAddon/../node_modules/sixel/lib/Decoder.js","webpack://ImageAddon/../node_modules/sixel/lib/wasm.js","webpack://ImageAddon/../src/common/Event.ts","webpack://ImageAddon/../src/common/Lifecycle.ts","webpack://ImageAddon/./src/IIPHandler.ts","webpack://ImageAddon/./src/IIPHeaderParser.ts","webpack://ImageAddon/./src/IIPImageStorage.ts","webpack://ImageAddon/./src/IIPMetrics.ts","webpack://ImageAddon/./src/ImageRenderer.ts","webpack://ImageAddon/./src/ImageStorage.ts","webpack://ImageAddon/./src/SixelHandler.ts","webpack://ImageAddon/./src/SixelImageStorage.ts","webpack://ImageAddon/./src/kitty/KittyGraphicsHandler.ts","webpack://ImageAddon/./src/kitty/KittyGraphicsTypes.ts","webpack://ImageAddon/./src/kitty/KittyImageStorage.ts","webpack://ImageAddon/../node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js","webpack://ImageAddon/../node_modules/xterm-wasm-parts/lib/qoi/QoiDecoder.wasm.js","webpack://ImageAddon/javascript/node_modules/inwasm-runtime/lib/index.cjs","webpack://ImageAddon/webpack/bootstrap","webpack://ImageAddon/./src/ImageAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageAddon\"] = factory();\n\telse\n\t\troot[\"ImageAddon\"] = factory();\n})(globalThis, () => {\nreturn ","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: 'AGFzbQEAAAABJAdgAAF/YAJ/fwBgA39/fwF/YAF/AX9gAABgBH9/f38AYAF/AAIlAgNlbnYLaGFuZGxlX2JhbmQAAwNlbnYLbW9kZV9wYXJzZWQAAwMTEgQAAAAAAQQBAQUBAAACAgAGAwQFAXABBwcFBAEBBwcGCAF/AUGAihoLB9wBDgZtZW1vcnkCABFnZXRfc3RhdGVfYWRkcmVzcwADEWdldF9jaHVua19hZGRyZXNzAAQOZ2V0X3AwX2FkZHJlc3MABRNnZXRfcGFsZXR0ZV9hZGRyZXNzAAYEaW5pdAALBmRlY29kZQAMDWN1cnJlbnRfd2lkdGgADQ5jdXJyZW50X2hlaWdodAAOGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtfaW5pdGlhbGl6ZQACCXN0YWNrU2F2ZQARDHN0YWNrUmVzdG9yZQASCnN0YWNrQWxsb2MAEwkMAQBBAQsGCgcJDxACDAEBCq5UEgMAAQsFAEGgCAsGAEGQiQELBgBBsIkCCwUAQZAJC+okAQh/QeQIKAIAIQVB4AgoAgAhA0HoCCgCACEIIAFBkIkBaiIJQf8BOgAAIAAgAUgEQCAAQZCJAWohBgNAIAMhBCAGQQFqIQECQCAGLQAAQf8AcSIDQTBrQQlLBEAgASEGDAELQewIKAIAQQJ0QewIaiICKAIAIQADQCACIAMgAEEKbGpBMGsiADYCACABLQAAIQMgAUEBaiIGIQEgA0H/AHEiA0Ewa0EKSQ0ACwsCQAJAAkACQAJAAkACQAJ/AkACQCADQT9rIgBBP00EQCAERQ0BIARBIUYEQAJAQfAIKAIAIgFBASABGyIHIAhqIgFB1AgoAgAiA0gNACADQf//AEoNAANAIANBAnQiAkGgiQJqIgRBoAgpAwA3AwAgAkGoiQJqQaAIKQMANwMAIAJBsIkCakGgCCkDADcDACACQbiJAmpBoAgpAwA3AwAgAkHAiQJqQaAIKQMANwMAIAJByIkCakGgCCkDADcDACACQdCJAmpBoAgpAwA3AwAgAkHYiQJqQaAIKQMANwMAIAJB4IkCakGgCCkDADcDACACQeiJAmpBoAgpAwA3AwAgAkHwiQJqQaAIKQMANwMAIAJB+IkCakGgCCkDADcDACACQYCKAmpBoAgpAwA3AwAgAkGIigJqQaAIKQMANwMAIAJBkIoCakGgCCkDADcDACACQZiKAmpBoAgpAwA3AwAgAkGgigJqQaAIKQMANwMAIAJBqIoCakGgCCkDADcDACACQbCKAmpBoAgpAwA3AwAgAkG4igJqQaAIKQMANwMAIAJBwIoCakGgCCkDADcDACACQciKAmpBoAgpAwA3AwAgAkHQigJqQaAIKQMANwMAIAJB2IoCakGgCCkDADcDACACQeCKAmpBoAgpAwA3AwAgAkHoigJqQaAIKQMANwMAIAJB8IoCakGgCCkDADcDACACQfiKAmpBoAgpAwA3AwAgAkGAiwJqQaAIKQMANwMAIAJBiIsCakGgCCkDADcDACACQZCLAmpBoAgpAwA3AwAgAkGYiwJqQaAIKQMANwMAIAJBoIsCakGgCCkDADcDACACQaiLAmpBoAgpAwA3AwAgAkGwiwJqQaAIKQMANwMAIAJBuIsCakGgCCkDADcDACACQcCLAmpBoAgpAwA3AwAgAkHIiwJqQaAIKQMANwMAIAJB0IsCakGgCCkDADcDACACQdiLAmpBoAgpAwA3AwAgAkHgiwJqQaAIKQMANwMAIAJB6IsCakGgCCkDADcDACACQfCLAmpBoAgpAwA3AwAgAkH4iwJqQaAIKQMANwMAIAJBgIwCakGgCCkDADcDACACQYiMAmpBoAgpAwA3AwAgAkGQjAJqQaAIKQMANwMAIAJBmIwCakGgCCkDADcDACACQaCMAmpBoAgpAwA3AwAgAkGojAJqQaAIKQMANwMAIAJBsIwCakGgCCkDADcDACACQbiMAmpBoAgpAwA3AwAgAkHAjAJqQaAIKQMANwMAIAJByIwCakGgCCkDADcDACACQdCMAmpBoAgpAwA3AwAgAkHYjAJqQaAIKQMANwMAIAJB4IwCakGgCCkDADcDACACQeiMAmpBoAgpAwA3AwAgAkHwjAJqQaAIKQMANwMAIAJB+IwCakGgCCkDADcDACACQYCNAmpBoAgpAwA3AwAgAkGIjQJqQaAIKQMANwMAIAJBkI0CakGgCCkDADcDACACQZiNAmpBoAgpAwA3AwAgAkGwiQZqIARBgAT8CgAAQdQIKAIAQQJ0QcCJCmogBEGABPwKAABB1AgoAgBBAnRB0IkOaiAEQYAE/AoAAEHUCCgCAEECdEHgiRJqIARBgAT8CgAAQdQIKAIAQQJ0QfCJFmogBEGABPwKAABB1AhB1AgoAgAiAkGAAWoiAzYCACABIANIDQEgAkGA/wBIDQALCwJAIABFDQAgCEH//wBLDQBBgIABIAhrIAcgAUH//wBLGyECAkAgAEEBcUUNACACRQ0AIAhBAnRBoIkCaiEDIAIhBCACQQdxIgcEQANAIAMgBTYCACADQQRqIQMgBEEBayEEIAdBAWsiBw0ACwsgAkEBa0EHSQ0AA0AgAyAFNgIcIAMgBTYCGCADIAU2AhQgAyAFNgIQIAMgBTYCDCADIAU2AgggAyAFNgIEIAMgBTYCACADQSBqIQMgBEEIayIEDQALCwJAIABBAnFFDQAgAkUNACAIQQJ0QbCJBmohAyACIQQgAkEHcSIHBEADQCADIAU2AgAgA0EEaiEDIARBAWshBCAHQQFrIgcNAAsLIAJBAWtBB0kNAANAIAMgBTYCHCADIAU2AhggAyAFNgIUIAMgBTYCECADIAU2AgwgAyAFNgIIIAMgBTYCBCADIAU2AgAgA0EgaiEDIARBCGsiBA0ACwsCQCAAQQRxRQ0AIAJFDQAgCEECdEHAiQpqIQMgAiEEIAJBB3EiBwRAA0AgAyAFNgIAIANBBGohAyAEQQFrIQQgB0EBayIHDQALCyACQQFrQQdJDQADQCADIAU2AhwgAyAFNgIYIAMgBTYCFCADIAU2AhAgAyAFNgIMIAMgBTYCCCADIAU2AgQgAyAFNgIAIANBIGohAyAEQQhrIgQNAAsLAkAgAEEIcUUNACACRQ0AIAhBAnRB0IkOaiEDIAIhBCACQQdxIgcEQANAIAMgBTYCACADQQRqIQMgBEEBayEEIAdBAWsiBw0ACwsgAkEBa0EHSQ0AA0AgAyAFNgIcIAMgBTYCGCADIAU2AhQgAyAFNgIQIAMgBTYCDCADIAU2AgggAyAFNgIEIAMgBTYCACADQSBqIQMgBEEIayIEDQALCwJAIABBEHFFDQAgAkUNACAIQQJ0QeCJEmohAyACIQQgAkEHcSIHBEADQCADIAU2AgAgA0EEaiEDIARBAWshBCAHQQFrIgcNAAsLIAJBAWtBB0kNAANAIAMgBTYCHCADIAU2AhggAyAFNgIUIAMgBTYCECADIAU2AgwgAyAFNgIIIAMgBTYCBCADIAU2AgAgA0EgaiEDIARBCGsiBA0ACwsgAEEgcUUNACACRQ0AIAJBAWshByAIQQJ0QfCJFmohAyACQQdxIgQEQANAIAMgBTYCACADQQRqIQMgAkEBayECIARBAWsiBA0ACwsgB0EHSQ0AA0AgAyAFNgIcIAMgBTYCGCADIAU2AhQgAyAFNgIQIAMgBTYCDCADIAU2AgggAyAFNgIEIAMgBTYCACADQSBqIQMgAkEIayICDQALC0HcCEHcCCgCACAAcjYCACAGQQFqIgIgBi0AAEH/AHEiA0E/ayIAQT9LDQQaDAMLAkBB7AgoAgAiBEEBRgRAQfAIKAIAIgNBzAgoAgAiAUkNASADIAFwIQMMAQtB+AgoAgAhAkH0CCgCACEBAkACQCAEQQVHDQAgAUEBRw0AIAJB6QJODQQMAQsgAkHkAEoNA0H8CCgCAEHkAEoNA0GACSgCAEHkAEoNAwsCQCABRQ0AIAFBAkoNACACQfwIKAIAQYAJKAIAIAFBAnRBiAhqKAIAEQIAIQFB8AgoAgAiA0HMCCgCACICTwR/IAMgAnAFIAMLQQJ0QZAJaiABNgIAC0HwCCgCACIDQcwIKAIAIgFJDQAgAyABcCEDCyADQQJ0QZAJaigCACEFDAELIANB/QBxQSFHBEAgCCEBIAYhAgwECyAEQSNHDQQCQEHsCCgCACICQQFGBEBB8AgoAgAiAUHMCCgCACIASQ0BIAEgAHAhAQwBC0H4CCgCACEBQfQIKAIAIQACQAJAIAJBBUcNACAAQQFHDQAgAUHpAkgNAQwHCyABQeQASg0GQfwIKAIAQeQASg0GQYAJKAIAQeQASg0GCwJAIABFDQAgAEECSg0AIAFB/AgoAgBBgAkoAgAgAEECdEGICGooAgARAgAhAEHwCCgCACIBQcwIKAIAIgJPBH8gASACcAUgAQtBAnRBkAlqIAA2AgALQfAIKAIAIgFBzAgoAgAiAEkNACABIABwIQELIAFBAnRBkAlqKAIAIQUMBAsgCCEBIAYhAgtB1AgoAgAhBgNAAkAgASAGSA0AIAZB//8ASg0AIAZBAnQiBEGgiQJqIgZBoAgpAwA3AwAgBEGoiQJqQaAIKQMANwMAIARBsIkCakGgCCkDADcDACAEQbiJAmpBoAgpAwA3AwAgBEHAiQJqQaAIKQMANwMAIARByIkCakGgCCkDADcDACAEQdCJAmpBoAgpAwA3AwAgBEHYiQJqQaAIKQMANwMAIARB4IkCakGgCCkDADcDACAEQeiJAmpBoAgpAwA3AwAgBEHwiQJqQaAIKQMANwMAIARB+IkCakGgCCkDADcDACAEQYCKAmpBoAgpAwA3AwAgBEGIigJqQaAIKQMANwMAIARBkIoCakGgCCkDADcDACAEQZiKAmpBoAgpAwA3AwAgBEGgigJqQaAIKQMANwMAIARBqIoCakGgCCkDADcDACAEQbCKAmpBoAgpAwA3AwAgBEG4igJqQaAIKQMANwMAIARBwIoCakGgCCkDADcDACAEQciKAmpBoAgpAwA3AwAgBEHQigJqQaAIKQMANwMAIARB2IoCakGgCCkDADcDACAEQeCKAmpBoAgpAwA3AwAgBEHoigJqQaAIKQMANwMAIARB8IoCakGgCCkDADcDACAEQfiKAmpBoAgpAwA3AwAgBEGAiwJqQaAIKQMANwMAIARBiIsCakGgCCkDADcDACAEQZCLAmpBoAgpAwA3AwAgBEGYiwJqQaAIKQMANwMAIARBoIsCakGgCCkDADcDACAEQaiLAmpBoAgpAwA3AwAgBEGwiwJqQaAIKQMANwMAIARBuIsCakGgCCkDADcDACAEQcCLAmpBoAgpAwA3AwAgBEHIiwJqQaAIKQMANwMAIARB0IsCakGgCCkDADcDACAEQdiLAmpBoAgpAwA3AwAgBEHgiwJqQaAIKQMANwMAIARB6IsCakGgCCkDADcDACAEQfCLAmpBoAgpAwA3AwAgBEH4iwJqQaAIKQMANwMAIARBgIwCakGgCCkDADcDACAEQYiMAmpBoAgpAwA3AwAgBEGQjAJqQaAIKQMANwMAIARBmIwCakGgCCkDADcDACAEQaCMAmpBoAgpAwA3AwAgBEGojAJqQaAIKQMANwMAIARBsIwCakGgCCkDADcDACAEQbiMAmpBoAgpAwA3AwAgBEHAjAJqQaAIKQMANwMAIARByIwCakGgCCkDADcDACAEQdCMAmpBoAgpAwA3AwAgBEHYjAJqQaAIKQMANwMAIARB4IwCakGgCCkDADcDACAEQeiMAmpBoAgpAwA3AwAgBEHwjAJqQaAIKQMANwMAIARB+IwCakGgCCkDADcDACAEQYCNAmpBoAgpAwA3AwAgBEGIjQJqQaAIKQMANwMAIARBkI0CakGgCCkDADcDACAEQZiNAmpBoAgpAwA3AwAgBEGwiQZqIAZBgAT8CgAAQdQIKAIAQQJ0QcCJCmogBkGABPwKAABB1AgoAgBBAnRB0IkOaiAGQYAE/AoAAEHUCCgCAEECdEHgiRJqIAZBgAT8CgAAQdQIKAIAQQJ0QfCJFmogBkGABPwKAABB1AhB1AgoAgBBgAFqIgY2AgALIAFB//8ATQRAIABBAXEgAWxBAnRBoIkCaiAFNgIAIABBAXZBAXEgAWxBAnRBsIkGaiAFNgIAIABBAnZBAXEgAWxBAnRBwIkKaiAFNgIAIABBA3ZBAXEgAWxBAnRB0IkOaiAFNgIAIABBBHZBAXEgAWxBAnRB4IkSaiAFNgIAIABBBXYgAWxBAnRB8IkWaiAFNgIAQdQIKAIAIQYLIAFBAWohAUHcCEHcCCgCACAAcjYCACACLQAAIQAgAkEBaiIEIQIgAEH/AHEiA0E/ayIAQcAASQ0ACyAECyECQQAhBCACIQYgASEIIANB/QBxQSFGDQELIANBJGsOCgEDAwMDAwMDAwIDC0HsCEIBNwIADAQLQdgIIAFB2AgoAgAiACAAIAFIGyIAQYCAASAAQYCAAUgbNgIADAILQegIIAFB2AgoAgAiACAAIAFIGyIAQYCAASAAQYCAAUgbIgA2AgBB2AggADYCACAAQQRrEAAEQEHoCEEENgIAQdgIQQQ2AgBB0AhBATYCAA8LEAgMAQsCQCADQTtHDQBB7AgoAgAiAEEHSg0AQewIIABBAWo2AgAgAEECdEHwCGpBADYCAAsgAiEGIAQhAyABIQgMAQtBBCEIIAIhBiAEIQMLIAYgCUkNAAsLQeQIIAU2AgBB4AggAzYCAEHoCCAINgIAC9ELAgF+CH9B2AhCBDcDAEGojQJBoAgpAwAiADcDAEGgjQIgADcDAEGYjQIgADcDAEGQjQIgADcDAEGIjQIgADcDAEGAjQIgADcDAEH4jAIgADcDAEHwjAIgADcDAEHojAIgADcDAEHgjAIgADcDAEHYjAIgADcDAEHQjAIgADcDAEHIjAIgADcDAEHAjAIgADcDAEG4jAIgADcDAEGwjAIgADcDAEGojAIgADcDAEGgjAIgADcDAEGYjAIgADcDAEGQjAIgADcDAEGIjAIgADcDAEGAjAIgADcDAEH4iwIgADcDAEHwiwIgADcDAEHoiwIgADcDAEHgiwIgADcDAEHYiwIgADcDAEHQiwIgADcDAEHIiwIgADcDAEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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'\n};\n//# sourceMappingURL=wasm.js.map","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Held memory in base64/QOI decoders between images. Zero because each kept\n // decoder pins a wasm memory, and V8 caps those per process (~124 in a\n // sandboxed renderer), so idle terminals must not hold one.\n KEEP_DATA = 0,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _generation = 0;\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._generation++;\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n if (!this._initDecoder()) {\n this._aborted = true;\n return;\n }\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n if (!this._initDecoder()) {\n this._abortMulti = true;\n }\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n let data: Uint8Array;\n try {\n data = this._qoiDec.decode(this._dec.data8);\n } catch (e) {\n console.warn('IIP: could not decode QOI image', e);\n this._dec.release();\n this._qoiDec.release();\n return true;\n }\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n const generation = this._generation;\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n if (generation !== this._generation) {\n bm.close();\n return true;\n }\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n private _initDecoder(): boolean {\n try {\n this._dec.init();\n return true;\n } catch (e) {\n console.warn('IIP: could not allocate decoder', e);\n this._dec.release();\n return false;\n }\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode — cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat — points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * sourceWidth + sx > img.width ? img.width - sx : count * sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const finalWidth = sourceWidth + sx > img.width ? img.width - sx : sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n const canvas = ImageRenderer.createCanvas(this.document, Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight));\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, canvas.width, canvas.height\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const scaledWidth = Math.ceil(spec.orig!.width * currentWidth / originalWidth);\n const scaledHeight = Math.ceil(spec.orig!.height * currentHeight / originalHeight);\n // Upscale visible tiles directly; a full zoomed copy can dwarf the image budget.\n if (scaledWidth * scaledHeight > spec.orig!.width * spec.orig!.height) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(this.document, scaledWidth, scaledHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n const placeholder = this._placeholder;\n ImageRenderer.createImageBitmap(placeholder).then(bitmap => {\n if (this._placeholder !== placeholder) bitmap?.close();\n else this._placeholderBitmap = bitmap;\n }).catch(() => {});\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport {\n ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec,\n IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes,\n UnderlineStyle, IAddImageOpts\n} from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0,\n public imageId = -1,\n public tileId = -1\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrsImage {\n /**\n * Technically we dont need a clone variant of ExtendedAttrsImage,\n * as we never clone a cell holding image data.\n * Note: Clone is only meant to be used by the InputHandler for\n * sticky attributes, which is never the case for image data.\n * We still provide a proper clone method to reflect the full ext attr\n * state in case there are future use cases for clone.\n */\n return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n }\n\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase);\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n let e: IExtendedAttrsImage = line._extendedAttrs[col] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (\n ++col < cols\n && (line.getBg(col) & BgFlags.HAS_EXTENDED)\n && (e = line._extendedAttrs[col] ?? EMPTY_ATTRS)\n && (e.imageId === imageId)\n && (e.tileId === startTile + count)\n ) {\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row) as IBufferLineExt;\n if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const old = line._extendedAttrs[x];\n if (old) {\n if (old.imageId !== undefined) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n // found a plain ExtendedAttrs instance, clone it to new entry\n line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n return;\n }\n }\n // fall-through: always create new ExtendedAttrsImage entry\n line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const imgId = line._extendedAttrs[x]?.imageId;\n if (imgId) {\n const spec = this._images.get(imgId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n","/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\nimport { LIMITS } from 'sixel/lib/wasm';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n// Why pooled: every decoder owns a wasm memory, and V8 caps live wasm memories\n// per process (~124 in a sandboxed renderer). Terminals borrow a decoder only\n// while a SIXEL sequence is open, so idle terminals hold none.\nconst MAX_IDLE_DECODERS = 2;\nconst idleDecoders = new Map();\nlet poolPrimed = false;\n\nfunction primeDecoderPool(memoryLimit: number): void {\n if (poolPrimed) return;\n poolPrimed = true;\n // Async compile once, off the parser's hot path; later decoders reuse the cached module.\n DecoderAsync({ memoryLimit, palette: DEFAULT_PALETTE }).then(\n d => releaseDecoder(d, memoryLimit),\n () => { poolPrimed = false; }\n );\n}\n\nfunction acquireDecoder(memoryLimit: number): Decoder {\n return idleDecoders.get(memoryLimit)?.pop() ?? new Decoder({ memoryLimit, palette: DEFAULT_PALETTE });\n}\n\nfunction releaseDecoder(dec: Decoder, memoryLimit: number): void {\n if (dec.memoryUsage > MEM_PERMA_LIMIT) {\n dec.release();\n }\n const idle = idleDecoders.get(memoryLimit) ?? [];\n if (idle.length < MAX_IDLE_DECODERS) {\n idle.push(dec);\n idleDecoders.set(memoryLimit, idle);\n }\n}\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n private _decMemoryLimit = 0;\n // Color registers outlive a single image, so they live here rather than in a pooled decoder.\n private readonly _palette = new Uint32Array(LIMITS.PALETTE_SIZE);\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n this._palette.set(DEFAULT_PALETTE);\n primeDecoderPool(this._opts.pixelLimit * 4);\n }\n\n public reset(): void {\n this._returnDecoder();\n this._palette.fill(0);\n this._palette.set(DEFAULT_PALETTE);\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n this._returnDecoder();\n const memoryLimit = this._opts.pixelLimit * 4;\n try {\n this._dec = acquireDecoder(memoryLimit);\n } catch (e) {\n // Why: exhausting wasm memory must drop this image, not throw out of the parser and wedge the write queue.\n console.warn(`SIXEL: could not allocate decoder - ${e}`);\n this._aborted = true;\n return;\n }\n this._decMemoryLimit = memoryLimit;\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, this._palette, this._opts.sixelPaletteLimit);\n }\n\n private _returnDecoder(): void {\n const dec = this._dec;\n if (!dec) return;\n this._dec = undefined;\n this._palette.set(dec.palette);\n releaseDecoder(dec, this._decMemoryLimit);\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n try {\n return this._unhook(success);\n } finally {\n this._returnDecoder();\n }\n }\n\n private _unhook(success: boolean): boolean {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { imageType } from '../IIPMetrics';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _generation = 0;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._generation++;\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded → 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n // Budget WASM capacity, including one page of decoder state and rounding.\n const decoderCapacity = this._maxEncodedBytes + 131072;\n if (decoderCapacity > this._opts.storageLimit * 1000000) {\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:pending image budget exceeded', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n const maxPending = Math.max(1, Math.floor(this._opts.storageLimit * 1000000 / decoderCapacity));\n while (this._pendingTransmissions.size >= maxPending) {\n const oldest = this._pendingTransmissions.entries().next().value;\n if (!oldest) break;\n oldest[1].decoder.release();\n this._removePendingEntry(oldest[0]);\n if (oldest[1].cmd.id !== undefined) {\n this._sendResponse(oldest[1].cmd.id, 'ENOMEM:pending image budget exceeded', oldest[1].cmd.quiet ?? 0);\n }\n }\n const decoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n try {\n decoder.init();\n } catch (e) {\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n console.warn('KITTY: could not allocate decoder', e);\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:could not allocate decoder', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n this._activeDecoder = decoder;\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received — clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first — handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload — image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) — ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n const generation = this._generation;\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n if (generation !== this._generation) throw new Error('image decode canceled');\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency —\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw × r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n if (generation !== this._generation) throw new Error('image decode canceled');\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const metrics = imageType(bytes);\n // IHDR dimensions are parsed with signed shifts, so a value >= 0x80000000 comes\n // back negative and a bare `>` pixel-limit test passes it; require positive.\n if (metrics.mime !== 'image/png' || !(metrics.width > 0) || !(metrics.height > 0) || metrics.width * metrics.height > this._opts.pixelLimit) {\n throw new RangeError('PNG exceeds pixel limit or has invalid dimensions');\n }\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly — no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB→RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes — ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] → uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1–3 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch (error) {\n if (error instanceof RangeError) throw error;\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const limit = Math.min(this._opts.kittySizeLimit, this._opts.pixelLimit * 4, this._opts.storageLimit * 1000000);\n let offsetIn = 0;\n // Bound inflation within one native transform before its output is budgeted.\n const source = new ReadableStream({\n pull(controller) {\n if (offsetIn >= compressed.length) {\n controller.close();\n return;\n }\n const end = Math.min(offsetIn + 4096, compressed.length);\n controller.enqueue(new Uint8Array(compressed.subarray(offsetIn, end)));\n offsetIn = end;\n }\n });\n const reader = source.pipeThrough(new DecompressionStream(format)).getReader();\n const chunks: Uint8Array[] = [];\n let totalLength = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n totalLength += value.byteLength;\n if (totalLength > limit) {\n await reader.cancel().catch(() => {});\n throw new RangeError('decompressed image exceeds byte limit');\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) — only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair — same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId → placementId → storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n // Encoded images awaiting placement are outside ImageStorage's pixel budget.\n // Unplaced payloads are evicted first so a new upload cannot erase a visible\n // image while abandoned blobs still hold budget; placed ones go only when\n // that is not enough, because the byte cap is a hard bound. The new image is\n // always stored, so an oversized one overshoots by at most one payload\n // (itself bounded by kittySizeLimit) rather than being dropped after an OK ack.\n const byteLimit = this._storage.getLimit() * 1000000;\n this._images.delete(imageId);\n let retainedBytes = 0;\n for (const image of this._images.values()) retainedBytes += image.data.size;\n for (const evictPlaced of [false, true]) {\n for (const [oldestId, image] of this._images) {\n if (retainedBytes + imageData.data.size <= byteLimit) break;\n if (this._kittyIdToStorageId.has(oldestId) !== evictPlaced) continue;\n retainedBytes -= image.data.size;\n this.deleteById(oldestId);\n }\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map","\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 §4 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const handler of this._handlers.values()) handler.reset();\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","red","n","green","blue","toRGBA8888","r","g","b","a","clamp","low","high","value","Math","max","min","h2c","t1","t2","c","normalizeRGB","round","Object","defineProperty","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","PALETTE_ANSI_256","PALETTE_VT340_GREY","PALETTE_VT340_COLOR","normalizeHLS","nearestColorIndex","fromRGBA8888","alpha","BIG_ENDIAN","Uint8Array","Uint32Array","buffer","console","warn","color","palette","Number","MAX_SAFE_INTEGER","idx","i","length","dr","dg","db","d","h","l","s","v","HLStoRGB","p","push","decodeAsync","decode","Decoder","DecoderAsync","Colors_1","__webpack_require__","wasm_1","WASM_BYTES","Buffer","from","bytestring","atob","result","charCodeAt","decodeBase64","LIMITS","BYTES","WASM_MODULE","NULL_CANVAS","CallbackProxy","constructor","this","bandHandler","width","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","memoryLimit","sixelColor","fillColor","paletteLimit","PALETTE_SIZE","truncate","opts","cbProxy","importObj","env","bind","WebAssembly","instantiate","then","inst","instance","_instance","_cbProxy","_PIXEL_OFFSET","MAX_WIDTH","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","_opts","assign","Error","_handle_band","_initCanvas","Module","Instance","_wasm","_chunk","memory","get_chunk_address","CHUNK_SIZE","_states","get_state_address","_palette","get_palette_address","set","_pSrc","get_p0_address","init","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","height","release","_realloc","offset","additionalPixels","newCanvas","ceil","adv","remaining","subarray","current_width","current_height","memoryUsage","byteLength","properties","level","memUsage","rasterAttributes","numerator","denominator","data","start","end","decodeString","j","data32","currentWidth","fill","escape","final","finalOffset","bw","currentHeight","data8","Uint8ClampedArray","dec","async","Lifecycle_1","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","toDisposable","entry","fn","slice","indexOf","splice","Array","isArray","add","fire","call","listeners","len","dispose","forward","to","e","map","undefined","any","events","store","DisposableStore","runAndSubscribe","handler","initial","arg","_disposables","Set","_isDisposed","isDisposed","o","clear","Disposable","_store","_register","None","freeze","_value","ImageRenderer_1","ImageStorage_1","Base64Decoder_wasm_1","__importDefault","QoiDecoder_wasm_1","IIPHeaderParser_1","IIPMetrics_1","DEFAULT_HEADER","type","name","size","preserveAspectRatio","inline","_renderer","_storage","_coreTerminal","_generation","_aborted","_hp","HeaderParser","_header","_isMultipart","_abortMulti","maxEncodedBytes","iipSizeLimit","initialBytes","_dec","default","_qoiDec","reset","put","state","dataPos","parse","fields","_initDecoder","success","seqType","w","CELL_SIZE_DEFAULT","dimensions","css","canvas","cols","rows","scale","_c","_a","_core","_coreBrowserService","dpr","report","toFixed","input","cond","blob","metrics","UNSUPPORTED_TYPE","imageType","mime","pixelLimit","_resize","floor","ImageData","byteOffset","ImageRenderer","createCanvas","_b","getContext","putImageData","addImage","Blob","generation","createImageBitmap","resizeWidth","resizeHeight","bm","close","catch","cw","cell","ch","_d","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","parseInt","toStr","String","fromCharCode","toInt","toSize","match","DECODERS","toString","bs","TextDecoder","FILE_MARKER","MULTIPARTFILE_MARKER","FILEPART_MARKER","FILEEND_MARKER","REPORTCELLSIZE_MARKER","MAX_FIELDCHARS","_buffer","_position","_key","k","_storeValue","pos","_storeKey","_addImageOpts","scrolling","layer","zIndex","cursorPos","img","d32","blockLength","jpgSize","dim","limit","_layers","get","localDocument","document","createElement","createImageData","ctx","imgData","Promise","resolve","_terminal","super","Map","_optionsRefresh","MutableDisposable","_oldOpen","open","parent","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","_renderService","refreshRows","removeLayerFromDom","_oldSetRenderer","setRenderer","_placeholderBitmap","_placeholder","showPlaceholder","cellSize","_createPlaceHolder","clearLines","y","clearRect","_e","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sourceWidth","sourceHeight","actualCellSize","sx","sy","dx","dy","finalWidth","finalHeight","drawImage","extractTile","drawPlaceholder","values","spec","originalWidth","originalHeight","origCellSize","orig","scaledWidth","scaledHeight","renderer","key","keys","insertLayerToDom","has","classList","style","isolation","insertBefore","firstChild","appendChild","remove","delete","hasLayer","bWidth","blueprint","black","white","shift","x","screen","ctx2","placeholder","bitmap","window","ExtendedAttrsImage","ext","_urlId","_ext","underlineStyle","underlineColor","underlineVariantOffset","val","urlId","imageId","clone","isEmpty","EMPTY_ATTRS","_images","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","setLimit","storageLimit","error","message","getLimit","_viewportMetrics","marker","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","id","ImageBitmap","onImageDeleted","wipeAlternate","zero","entries","bufferType","deleteImage","termCols","termRows","originX","originY","tileCount","_inputHandler","_dirtyRowTracker","markDirty","line","lines","ybase","_writeToCell","lineFeed","endMarker","registerMarker","onDispose","active","_evictOnAlternate","onImageAdded","render","range","hasTopImages","hasBottomImages","drawCalls","placeholderCalls","ydisp","getBg","_extendedAttrs","startTile","startCol","sort","viewportResize","oldCol","tilesPerRow","hasData","rightCol","_data","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","old","oldSpec","imgId","Decoder_1","DEFAULT_PALETTE","idleDecoders","poolPrimed","releaseDecoder","idle","convertLe","_size","_decMemoryLimit","_returnDecoder","hook","params","pop","acquireDecoder","attr","colors","bg","isInverse","isFgDefault","foreground","rgba","isFgRGB","t","toColorRGB","getFgColor","ansi","isBgDefault","background","isBgRGB","getBgColor","extractActiveBg","_curAttrData","_themeService","sixelPaletteLimit","sixelSizeLimit","unhook","_unhook","advanceCursor","sixelScrolling","KittyGraphicsTypes_1","_kittyStorage","_decodeError","_activeDecoder","_inControlData","_controlData","_controlLength","_encodedSizeLimit","_totalEncodedSize","_parsedCommand","_pendingTransmissions","_maxEncodedBytes","kittySizeLimit","_initialEncodedBytes","_cleanupAllPending","_removePendingEntry","_lastPendingKey","pending","decoder","controlEnd","copyLength","parseKittyCommand","_parseControlDataString","imageNumber","_sendResponse","quiet","action","payloadStart","_streamPayload","pendingKey","previousEncodedSize","_f","totalEncodedSize","decoderToRelease","_g","decoderCapacity","_h","maxPending","oldest","next","cmd","_j","_k","_handleNoPayloadCommand","_handleDelete","isMoreComing","more","decodeError","finalCmd","imageBytes","_handleCommandWithBytesAndCmd","str","fromCodePoint","_handlePlacement","bytes","_handleTransmit","transmission","_handleTransmitDisplay","_handleQuery","image","getImage","_displayImage","placementId","storeImage","format","compression","lastImageId","expectedBytes","deleteSelector","deleteAll","deleteById","isOk","response","coreService","triggerDataEvent","_decodeAndDisplay","_createBitmap","cropX","cropY","cropW","cropH","maxCropW","maxCropH","finalCropW","finalCropH","cropped","imgCols","imgRows","columns","savedX","savedY","savedYbase","scaled","xOffset","yOffset","canvasW","canvasH","offsetCanvas","offsetCtx","offsetBitmap","cursorMovement","scrolled","arrayBuffer","_decompressZlib","url","URL","createObjectURL","Image","reject","addEventListener","revokeObjectURL","src","pixelCount","src32","dst32","alignedPixels","srcOffset","dstOffset","b0","b1","b2","srcByte","dstByte","compressed","_decompress","offsetIn","reader","ReadableStream","pull","controller","enqueue","pipeThrough","DecompressionStream","getReader","chunks","totalLength","done","read","cancel","releaseLock","chunk","images","_kittyIdToStorageId","kittyIdToStorageId","pendingTransmissions","parts","split","part","eqIdx","substring","numValue","KittyImageStorage","_nextImageId","_storageIdToKittyId","_handleStorageImageDeleted","storageId","kittyId","_previousOnImageDeleted","_wrappedOnImageDeleted","imageData","oldStorageId","_maxStoredImages","_evictUndisplayedImages","byteLimit","retainedBytes","evictPlaced","oldestId","wasmDecode","InWasm","MAP","el","D","EMPTY","keepSize","maxBytes","_inst","_ended","_bytes","_m32","_mem","m","grow","Memory","requested","needed","newSize","addPages","loadedBytes","freeBytes","wasmQoiDecode","ib","dl","chunkP","def","W","z","compile","_wasmCtx","fromBase64","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","Event_1","IIPHandler_1","KittyGraphicsHandler_1","KittyImageStorage_1","SixelHandler_1","SixelImageStorage_1","IIPImageStorage_1","enableSizeReports","sixelSupport","iipSupport","kittySupport","_handlers","_onImageAdded","Emitter","_defaultOpts","obj","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelStorage","SixelImageStorage","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipStorage","IIPImageStorage","iipHandler","IIPHandler","registerOscHandler","kittyStorage","kittyHandler","KittyGraphicsHandler","registerApcHandler","storageUsage","_report","sqrt"],"sourceRoot":""} -\ No newline at end of file -diff --git a/lib/addon-image.mjs b/lib/addon-image.mjs -index 753a4f833c038a3f45802377dcb16a93695f2161..aca74ad0c769e8525bc5e4ab8cc6dda03959f760 100644 ---- a/lib/addon-image.mjs -+++ b/lib/addon-image.mjs -@@ -14,5 +14,5 @@ - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ --var it=Object.create;var Te=Object.defineProperty;var At=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,nt=Object.prototype.hasOwnProperty;var x=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var at=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let A of rt(e))!nt.call(r,A)&&A!==t&&Te(r,A,{get:()=>e[A],enumerable:!(i=At(e,A))||i.enumerable});return r};var M=(r,e,t)=>(t=r!=null?it(st(r)):{},at(e||!r||!r.__esModule?Te(t,"default",{value:r,enumerable:!0}):t,r));var X=x(_=>{"use strict";Object.defineProperty(_,"__esModule",{value:!0});_.DEFAULT_FOREGROUND=_.DEFAULT_BACKGROUND=_.PALETTE_ANSI_256=_.PALETTE_VT340_GREY=_.PALETTE_VT340_COLOR=_.normalizeHLS=_.normalizeRGB=_.nearestColorIndex=_.fromRGBA8888=_.toRGBA8888=_.alpha=_.blue=_.green=_.red=_.BIG_ENDIAN=void 0;_.BIG_ENDIAN=new Uint8Array(new Uint32Array([4278190080]).buffer)[0]===255;_.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly.");function xe(r){return r&255}_.red=xe;function Me(r){return r>>>8&255}_.green=Me;function ve(r){return r>>>16&255}_.blue=ve;function ht(r){return r>>>24&255}_.alpha=ht;function B(r,e,t,i=255){return((i&255)<<24|(t&255)<<16|(e&255)<<8|r&255)>>>0}_.toRGBA8888=B;function gt(r){return[r&255,r>>8&255,r>>16&255,r>>>24]}_.fromRGBA8888=gt;function It(r,e){let t=xe(r),i=Me(r),A=ve(r),s=Number.MAX_SAFE_INTEGER,n=-1;for(let a=0;a1&&(t-=1),t*6<1?e+(r-e)*6*t:t*2<1?r:t*3<2?e+(r-e)*(4-t*6):e}function dt(r,e,t){if(!t){let s=Math.round(e*255);return B(s,s,s)}let i=e<.5?e*(1+t):e+t-e*t,A=2*e-i;return B(ge(0,255,Math.round(Ie(i,A,r+1/3)*255)),ge(0,255,Math.round(Ie(i,A,r)*255)),ge(0,255,Math.round(Ie(i,A,r-1/3)*255)))}function m(r,e,t){return(4278190080|Math.round(t/100*255)<<16|Math.round(e/100*255)<<8|Math.round(r/100*255))>>>0}_.normalizeRGB=m;function lt(r,e,t){return dt((r+240%360)/360,e/100,t/100)}_.normalizeHLS=lt;_.PALETTE_VT340_COLOR=new Uint32Array([m(0,0,0),m(20,20,80),m(80,13,13),m(20,80,20),m(80,20,80),m(20,80,80),m(80,80,20),m(53,53,53),m(26,26,26),m(33,33,60),m(60,26,26),m(33,60,33),m(60,33,60),m(33,60,60),m(60,60,33),m(80,80,80)]);_.PALETTE_VT340_GREY=new Uint32Array([m(0,0,0),m(13,13,13),m(26,26,26),m(40,40,40),m(6,6,6),m(20,20,20),m(33,33,33),m(46,46,46),m(0,0,0),m(13,13,13),m(26,26,26),m(40,40,40),m(6,6,6),m(20,20,20),m(33,33,33),m(46,46,46)]);_.PALETTE_ANSI_256=(()=>{let r=[B(0,0,0),B(205,0,0),B(0,205,0),B(205,205,0),B(0,0,238),B(205,0,205),B(0,250,205),B(229,229,229),B(127,127,127),B(255,0,0),B(0,255,0),B(255,255,0),B(92,92,255),B(255,0,255),B(0,255,255),B(255,255,255)],e=[0,95,135,175,215,255];for(let t=0;t<6;++t)for(let i=0;i<6;++i)for(let A=0;A<6;++A)r.push(B(e[t],e[i],e[A]));for(let t=8;t<=238;t+=10)r.push(B(t,t,t));return new Uint32Array(r)})();_.DEFAULT_BACKGROUND=B(0,0,0,255);_.DEFAULT_FOREGROUND=B(255,255,255,255)});var ce=x(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.InWasm=Ct;var v=r=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(r);if(typeof Buffer<"u")return Buffer.from(r,"base64");let e=atob(r),t=new Uint8Array(e.length);for(let i=0;inew n.Instance(s||(s=new n.Module(A||(A=v(i)))),a):a=>s?n.instantiate(s,a):n.instantiate(A||(A=v(i)),a).then(o=>(s=o.module)&&o.instance):e===1?t?()=>s||(s=new n.Module(A||(A=v(i)))):()=>s?Promise.resolve(s):n.compile(A||(A=v(i))).then(a=>s=a):t?()=>A||(A=v(i)):()=>Promise.resolve(A||(A=v(i)))}if(typeof _wasmCtx>"u")throw new Error('must run "inwasm"');_wasmCtx.add(r)}});var ue=x(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});var pt=ce(),Bt=(0,pt.InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),S=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(r=>r.charCodeAt(0))),R=new Uint32Array(1024);R.fill(4278190080);for(let r=0;r>4|(r<<4&255)<<8;for(let r=0;r>2<<8|(r<<6&255)<<16;for(let r=0;rthis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):ft}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=e??this.maxBytes,this._bytes=t??Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32,A=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let i=this._bytes;for(;(i*=2)this._mem.buffer.byteLength){let A=Math.ceil((i+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(A),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=i}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;let t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}};_e.default=me});var Re=x(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});var Qt=ce(),Dt=(0,Qt.InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="}),Ee=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];let t=this.width*this.height,i=t*4,A=e.length,s=Math.max(i,A)+(Math.min(i,A)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}};Ce.default=Ee});var Ke=x(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});ie.LIMITS=void 0;ie.LIMITS={CHUNK_SIZE:16384,PALETTE_SIZE:4096,MAX_WIDTH:16384,BYTES:"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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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"}});var We=x(b=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});b.decodeAsync=b.decode=b.Decoder=b.DecoderAsync=void 0;var O=X(),f=Ke();function yt(r){if(typeof Buffer<"u")return Buffer.from(r,"base64");let e=atob(r),t=new Uint8Array(e.length);for(let i=0;i1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}},St={memoryLimit:2048*65536,sixelColor:O.DEFAULT_FOREGROUND,fillColor:O.DEFAULT_BACKGROUND,palette:O.PALETTE_VT340_COLOR,paletteLimit:f.LIMITS.PALETTE_SIZE,truncate:!0};function qe(r){let e=new ye,t={env:{handle_band:e.handle_band.bind(e),mode_parsed:e.mode_parsed.bind(e)}};return WebAssembly.instantiate(J||Ye,t).then(i=>(J=J||i.module,new P(r,i.instance||i,e)))}b.DecoderAsync=qe;var P=class{constructor(e,t,i){if(this._PIXEL_OFFSET=f.LIMITS.MAX_WIDTH+4,this._canvas=Ae,this._bandWidths=[],this._maxWidth=0,this._minWidth=f.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},St,e),this._opts.paletteLimit>f.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${f.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{let A=J||(J=new WebAssembly.Module(Ye));t=new WebAssembly.Instance(A,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),f.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),f.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(O.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(e===2){let t=this.width*this.height;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}this._maxWidth=this._width}else if(e===1)if(this._level===2){let t=Math.min(this._rasterWidth,f.LIMITS.MAX_WIDTH)*this._rasterHeight;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){let i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&i*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");let A=new Uint32Array(Math.ceil(i/65536)*65536);A.set(this._canvas),this._canvas=A}}_handle_band(e){let t=this._PIXEL_OFFSET,i=this._lastOffset;if(this._mode===2){let A=this.height-this._currentHeight,s=0;for(;s<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),i+e*s),s++,A--;this._lastOffset+=e*s,this._currentHeight+=s}else if(this._mode===1){this._realloc(i,e*6),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=e*6,this._currentHeight+=6}return 0}get width(){return this._mode!==1?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return this._mode!==1?this._height:this._wasm.current_width()?this._bandWidths.length*6+this._wasm.current_height():this._bandWidths.length*6}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,f.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=f.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){let i=this._PIXEL_OFFSET,A=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*s,i*s+e),A+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,A+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(this._mode===1){if(this._minWidth===this._maxWidth){let s=!1;if(e)if(e!==this._minWidth)s=!0;else{let n=this._PIXEL_OFFSET,a=this._lastOffset;this._realloc(a,e*6);for(let o=0;o<6;++o)this._canvas.set(this._pSrc.subarray(n*o,n*o+e),a+e*o)}if(!s)return this._canvas.subarray(0,this.width*this.height)}let t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let s=0;s{if(this._disposed)return H(()=>{});let A={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(A);let s=H(()=>{let n=this._listeners.indexOf(A);n!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(n,1))});return i&&(Array.isArray(i)?i.push(s):i.add(s)),s},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let i=0,A=t.length;i{function r(s,n){return s(a=>n.fire(a))}A.forward=r;function e(s,n){return(a,o,g)=>s(h=>a.call(o,n(h)),void 0,g)}A.map=e;function t(...s){return(n,a,o)=>{let g=new N;for(let h of s)g.add(h(I=>n.call(a,I)));return o&&(Array.isArray(o)?o.push(g):o.add(g)),g}}A.any=t;function i(s,n,a){return n(a),s(o=>n(o))}A.runAndSubscribe=i})(ot||={});var de=M(X());var D=class r extends k{constructor(t){super();this._terminal=t;this._layers=new Map;this._optionsRefresh=this._register(new W);this._oldOpen=this._terminal._core.open,this._terminal._core.open=i=>{this._oldOpen?.call(this._terminal._core,i),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(i=>{i==="fontSize"&&(this.rescaleCanvas(),this._renderService?.refreshRows(0,this._terminal.rows))}),this._register(H(()=>{this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}get canvas(){return this._layers.get("top")?.canvas}static createCanvas(t,i,A){let s=(t??document).createElement("canvas");return s.width=i|0,s.height=A|0,s}static createImageData(t,i,A,s){if(typeof ImageData!="function"){let n=t.createImageData(i,A);return s&&n.data.set(new Uint8ClampedArray(s,0,i*A*4)),n}return s?new ImageData(new Uint8ClampedArray(s,0,i*A*4),i,A):new ImageData(i,A)}static createImageBitmap(t){return typeof createImageBitmap!="function"?Promise.resolve(void 0):createImageBitmap(t)}showPlaceholder(t){t?!this._placeholder&&this.cellSize.height!==-1&&this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),this._renderService?.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){return{width:this.dimensions?.css.cell.width||-1,height:this.dimensions?.css.cell.height||-1}}clearLines(t,i,A){let s=t*(this.dimensions?.css.cell.height||0),n=this.dimensions?.css.canvas.width||0,a=(i+1-t)*(this.dimensions?.css.cell.height||0);(!A||A==="top")&&this._layers.get("top")?.clearRect(0,s,n,a),(!A||A==="bottom")&&this._layers.get("bottom")?.clearRect(0,s,n,a)}clearAll(t){if(!t||t==="top"){let i=this._layers.get("top");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}if(!t||t==="bottom"){let i=this._layers.get("bottom");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}}draw(t,i,A,s,n=1){let a=this._layers.get(t.layer);if(!a)return;let{width:o,height:g}=this.cellSize;if(o===-1||g===-1)return;this._rescaleImage(t,o,g);let h=t.actual,I=Math.ceil(h.width/o),d=i%I*o,c=Math.floor(i/I)*g,l=A*o,E=s*g,p=n*o+d>h.width?h.width-d:n*o,u=c+g>h.height?h.height-c:g;a.drawImage(h,Math.floor(d),Math.floor(c),Math.ceil(p),Math.ceil(u),Math.floor(l),Math.floor(E),Math.ceil(p),Math.ceil(u))}extractTile(t,i){let{width:A,height:s}=this.cellSize;if(A===-1||s===-1)return;this._rescaleImage(t,A,s);let n=t.actual,a=Math.ceil(n.width/A),o=i%a*A,g=Math.floor(i/a)*s,h=A+o>n.width?n.width-o:A,I=g+s>n.height?n.height-g:s,d=r.createCanvas(this.document,h,I),c=d.getContext("2d");if(c)return c.drawImage(n,Math.floor(o),Math.floor(g),Math.floor(h),Math.floor(I),0,0,Math.floor(h),Math.floor(I)),d}drawPlaceholder(t,i,A=1){let s=this._layers.get("top");if(s){let{width:n,height:a}=this.cellSize;if(n===-1||a===-1||(this._placeholder?a>=this._placeholder.height&&this._createPlaceHolder(a+1):this._createPlaceHolder(Math.max(a+1,24)),!this._placeholder))return;s.drawImage(this._placeholderBitmap??this._placeholder,t*n,i*a%2?0:1,n*A,a,t*n,i*a,n*A,a)}}rescaleCanvas(){let t=this.dimensions?.css.canvas.width||0,i=this.dimensions?.css.canvas.height||0;for(let A of this._layers.values())(A.canvas.width!==t||A.canvas.height!==i)&&(A.canvas.width=t,A.canvas.height=i)}_rescaleImage(t,i,A){if(i===t.actualCellSize.width&&A===t.actualCellSize.height)return;let{width:s,height:n}=t.origCellSize;if(i===s&&A===n){t.actual=t.orig,t.actualCellSize.width=s,t.actualCellSize.height=n;return}let a=r.createCanvas(this.document,Math.ceil(t.orig.width*i/s),Math.ceil(t.orig.height*A/n)),o=a.getContext("2d");o&&(o.drawImage(t.orig,0,0,a.width,a.height),t.actual=a,t.actualCellSize.width=i,t.actualCellSize.height=A)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=t=>{for(let i of[...this._layers.keys()])this.removeLayerFromDom(i);this._oldSetRenderer?.call(this._renderService,t)}}insertLayerToDom(t="top"){if(!this.document||!this._terminal._core.screenElement){console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");return}if(this._layers.has(t))return;let i=r.createCanvas(this.document,this.dimensions?.css.canvas.width||0,this.dimensions?.css.canvas.height||0);i.classList.add(`xterm-image-layer-${t}`);let A=this._terminal._core.screenElement;A.style.isolation="isolate",t==="bottom"?(i.style.zIndex="-1",A.insertBefore(i,A.firstChild)):(i.style.zIndex="0",A.appendChild(i));let s=i.getContext("2d",{alpha:!0});if(!s){i.remove();return}this._layers.set(t,s),this.clearAll(t)}removeLayerFromDom(t="top"){let i=this._layers.get(t);i&&(i.canvas.remove(),this._layers.delete(t))}hasLayer(t){return this._layers.has(t)}_createPlaceHolder(t=24){this._placeholderBitmap?.close(),this._placeholderBitmap=void 0;let i=32,A=r.createCanvas(this.document,i,t),s=A.getContext("2d",{alpha:!1});if(!s)return;let n=r.createImageData(s,i,t),a=new Uint32Array(n.data.buffer),o=(0,de.toRGBA8888)(0,0,0),g=(0,de.toRGBA8888)(255,255,255);a.fill(o);for(let d=0;dthis._placeholderBitmap=d)}get document(){return this._terminal._core._coreBrowserService?.window.document}};var w={width:7,height:14},G=class r{constructor(e=0,t=0,i=-1,A=-1){this.imageId=i;this.tileId=A;this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}get urlId(){return this._urlId}set urlId(e){this._urlId=e}clone(){return new r(this._ext,this._urlId,this.imageId,this.tileId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.imageId===-1}},F=new G,Z=class{constructor(e,t,i){this._terminal=e;this._renderer=t;this._opts=i;this._images=new Map;this._lastId=0;this._lowestId=0;this._fullyCleared=!1;this._needsFullClear=!1;this._pixelLimit=25e5;try{this.setLimit(this._opts.storageLimit)}catch(A){A instanceof Error&&console.error(A.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){for(let e of this._images.values())e.marker?.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return this._pixelLimit*4/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return this._getStoredPixels()*4/1e6}_getStoredPixels(){let e=0;for(let t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){let t=this._images.get(e);t&&(this._images.delete(e),window.ImageBitmap&&t.orig instanceof ImageBitmap&&t.orig.close(),this.onImageDeleted?.(e))}wipeAlternate(){let e=[];for(let[t,i]of this._images.entries())i.bufferType==="alternate"&&(i.marker?.dispose(),e.push(t));for(let t of e)this._delImg(t);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){let t=this._images.get(e);t&&(t.marker?.dispose(),this._delImg(e))}addImage(e,t){this._evictOldest(e.width*e.height);let i=this._renderer.cellSize;(i.width===-1||i.height===-1)&&(i=w);let A=Math.ceil(e.width/i.width),s=Math.ceil(e.height/i.height),n=++this._lastId,a=this._terminal._core.buffer,o=this._terminal.cols,g=this._terminal.rows,h=a.x,I=a.y,d=h,c=0;t.scrolling||(a.x=0,a.y=0,d=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(a.y);for(let u=0;u=o);++Q)this._writeToCell(C,d+Q,n,u*A+Q),c++;if(t.scrolling)u=g)break;a.x=d}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(a.y),t.scrolling?t.cursorPos==="iip"?a.x=Math.min(d+A,o):a.x=d:(a.x=h,a.y=I);let l=[];for(let[u,C]of this._images.entries())C.tileCount<1&&(C.marker?.dispose(),l.push(u));for(let u of l)this._delImg(u);let E=this._terminal.registerMarker(0);E?.onDispose(()=>{this._images.get(n)&&this._delImg(n)}),this._terminal.buffer.active.type==="alternate"&&this._evictOnAlternate();let p={orig:e,origCellSize:i,actual:e,actualCellSize:{...i},marker:E||void 0,tileCount:c,bufferType:this._terminal.buffer.active.type,layer:t.layer,zIndex:t.zIndex};return this._images.set(n,p),this.onImageAdded?.(),n}render(e){let t=!1,i=!1;for(let h of this._images.values())if(h.layer==="bottom"?i=!0:t=!0,t&&i)break;if(t&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(i&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size){this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom");return}!t&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!i&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);let{start:A,end:s}=e,n=this._terminal._core.buffer,a=this._terminal._core.cols;this._renderer.clearLines(A,s);let o=[],g=[];for(let h=A;h<=s;++h){let I=n.lines.get(h+n.ydisp);if(!I)return;for(let d=0;dh.imgSpec.zIndex-I.imgSpec.zIndex);for(let h of g)this._renderer.drawPlaceholder(h.col,h.row,h.count);for(let h of o)this._renderer.draw(h.imgSpec,h.tileId,h.col,h.row,h.count)}viewportResize(e){if(!this._images.size){this._viewportMetrics=e;return}if(this._viewportMetrics.cols>=e.cols){this._viewportMetrics=e;return}let t=this._terminal._core.buffer,i=t.lines.length,A=this._viewportMetrics.cols-1;for(let s=0;s=h)continue;let I=!1;for(let l=A+1;l>e.cols;++l)if(n._data[l*3+0]&4194303){I=!0;break}if(I)continue;let d=Math.min(e.cols,h-a.tileId%h+A),c=a.tileId;for(let l=A+1;l57)throw new Error("illegal char");e=e*10+r[t]-48}return e}function ke(r){let e=j(r);if(!e.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return e}function wt(r){if(typeof Buffer<"u")return Buffer.from(j(r),"base64").toString();let e=atob(j(r)),t=new Uint8Array(e.length);for(let i=0;i14)return-1;for(let a=t;a=De)return this._a();n[s++]=o}break;case 58:return A===3&&!this._storeValue(s)?this._a():(this.state=4,a+1);default:if(s>=De)return this._a();n[s++]=o}}return this.state=A,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){let t=j(this._buffer.subarray(0,e));return t?(this._key=t,this.fields[t]=null,!0):!1}_storeValue(e){if(this._key){try{let t=this._buffer.slice(0,e);this.fields[this._key]=Ne[this._key]?Ne[this._key](t):t}catch{return!1}return!0}return!1}};var L={mime:"unsupported",width:0,height:0};function Ge(r){if(r.length<32)return L;let e=new Uint32Array(r.buffer,r.byteOffset,8);if(e[0]===1196314761&&e[1]===169478669&&e[3]===1380206665)return{mime:"image/png",width:r[16]<<24|r[17]<<16|r[18]<<8|r[19],height:r[20]<<24|r[21]<<16|r[22]<<8|r[23]};if(r[0]===255&&r[1]===216&&r[2]===255){let[t,i]=bt(r);return{mime:"image/jpeg",width:t,height:i}}if(e[0]===944130375&&(r[4]===55||r[4]===57)&&r[5]===97)return{mime:"image/gif",width:r[7]<<8|r[6],height:r[9]<<8|r[8]};if(e[0]===1718185841)return{mime:"image/qoi",width:r[4]<<24|r[5]<<16|r[6]<<8|r[7],height:r[8]<<24|r[9]<<16|r[10]<<8|r[11]};if(e[0]===1179011410&&e[2]===1346520407&&(e[3]&16777215)===3690582){switch(r[15]){case 88:return{mime:"image/webp",width:(r[24]|r[25]<<8|r[26]<<16)+1,height:(r[27]|r[28]<<8|r[29]<<16)+1};case 76:if(r[20]!==47)return L;let t=r[21]|r[22]<<8|r[23]<<16|r[24]<<24;return{mime:"image/webp",width:(t&16383)+1,height:(t>>>14&16383)+1};case 32:return r[23]!==157||r[24]!==1||r[25]!==42?L:{mime:"image/webp",width:(r[26]|r[27]<<8)&16383,height:(r[28]|r[29]<<8)&16383}}return L}if(e[1]===1887007846&&(e[2]===1718187617||e[2]===1936291425)){let t=-1,i=Math.min(r.length-16,1024);for(let A=8;A0&&s>0)return{mime:"image/avif",width:A,height:s}}return L}return L}function bt(r){let e=r.length,t=4,i=r[t]<<8|r[t+1];for(;;){if(t+=i,t>=e)return[0,0];if(r[t]!==255)return[0,0];if(r[t+1]===192||r[t+1]===194)return t+80){if(this._hp.fields.type===1){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},we,this._hp.fields),!this._header.inline){this._aborted=!0;return}this._dec.init()}else if(this._abortMulti){this._aborted=!0;return}this._dec.put(e.subarray(A,i))!==0&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){if(this._aborted||this._hp.state!==4&&this._hp.end())return!0;let t=this._hp.fields.type;if(t===3)return!0;if(t===5){let o=w.width,g=w.height;this._renderer.dimensions&&(o=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,g=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);let h=this._coreTerminal._core._coreBrowserService?.dpr??1,I=`\x1B]1337;ReportCellSize=${g.toFixed(3)};${o.toFixed(3)};${h.toFixed(3)}\x1B\\`;return this._coreTerminal.input(I,!1),!0}if(t===2)return this._header=Object.assign({},we,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._dec.init(),!0;if(t===4&&(!this._isMultipart||(this._isMultipart=!1,this._abortMulti||this._header.type!==2)))return!0;let i=0,A=0,s,n=L;if((s=e)&&((s=!this._dec.end())?(n=Ge(this._dec.data8),(s=n.mime!=="unsupported")?(i=n.width,A=n.height,(s=i&&A&&i*A(this._storage.addImage(o),!0)).catch(o=>(console.warn(`IIP: decoding error ${n.mime} ${n.width}x${n.height}`,o),!0))}_resize(e,t){let i=this._renderer.dimensions?.css.cell.width||w.width,A=this._renderer.dimensions?.css.cell.height||w.height,s=this._renderer.dimensions?.css.canvas.width||i*this._coreTerminal.cols,n=this._renderer.dimensions?.css.canvas.height||A*this._coreTerminal.rows,a=this._dim(this._header.width,s,i),o=this._dim(this._header.height,n,A);if(!a&&!o){let g=s/e,h=(n-A)/t,I=Math.min(g,h);return I<1?[e*I,t*I]:[e,t]}return a?this._header.preserveAspectRatio||!a||!o?[a,t*a/e]:[a,o]:[e*o/t,o]}_dim(e,t,i){return e==="auto"?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}};var Pe=M(ue());function be(r){let e={},t=r.split(",");for(let i of t){let A=i.indexOf("=");if(A===-1)continue;let s=i.substring(0,A),n=i.substring(A+1);if(s==="a"){e.action=n;continue}if(s==="o"){e.compression=n;continue}if(s==="t"){e.transmission=n;continue}if(s==="d"){e.deleteSelector=n;continue}let a=parseInt(n,10);switch(s){case"f":e.format=a;break;case"i":e.id=a;break;case"I":e.imageNumber=a;break;case"s":e.width=a;break;case"v":e.height=a;break;case"x":e.x=a;break;case"y":e.y=a;break;case"w":e.sourceWidth=a;break;case"h":e.sourceHeight=a;break;case"X":e.xOffset=a;break;case"Y":e.yOffset=a;break;case"c":e.columns=a;break;case"r":e.rows=a;break;case"m":e.more=a;break;case"q":e.quiet=a;break;case"C":e.cursorMovement=a;break;case"z":e.zIndex=a;break;case"p":e.placementId=a;break}}return e}var Je=0,ee=class{constructor(e,t,i,A){this._opts=e;this._renderer=t;this._kittyStorage=i;this._coreTerminal=A;this._aborted=!1;this._decodeError=!1;this._activeDecoder=null;this._inControlData=!0;this._controlData=new Uint32Array(512);this._controlLength=0;this._encodedSizeLimit=0;this._totalEncodedSize=0;this._parsedCommand=null;this._pendingTransmissions=new Map;this._maxEncodedBytes=Math.ceil(this._opts.kittySizeLimit*4/3),this._initialEncodedBytes=Math.min(4194304,this._maxEncodedBytes)}reset(){this._cleanupAllPending(),this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),this._kittyStorage.reset()}dispose(){this.reset()}_removePendingEntry(e){this._pendingTransmissions.delete(e),this._lastPendingKey===e&&(this._lastPendingKey=void 0)}_cleanupAllPending(){for(let e of this._pendingTransmissions.values())e.decoder.release();this._pendingTransmissions.clear(),this._lastPendingKey=void 0}start(){this._aborted=!1,this._decodeError=!1,this._inControlData=!0,this._controlLength=0,this._parsedCommand=null,this._encodedSizeLimit=this._maxEncodedBytes,this._totalEncodedSize=0,this._activeDecoder=null}put(e,t,i){if(!this._aborted)if(!this._inControlData)this._streamPayload(e,t,i);else{let A=i;for(let n=t;n512){this._aborted=!0;return}if(this._controlData.set(e.subarray(t,A),this._controlLength),this._controlLength+=s,!this._inControlData){if(this._parsedCommand=be(this._parseControlDataString()),this._parsedCommand.id!==void 0&&this._parsedCommand.imageNumber!==void 0){this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",this._parsedCommand.quiet??0),this._aborted=!0;return}if(this._parsedCommand.action==="d")return;let n=A+1;nthis._encodedSizeLimit){let o=this._activeDecoder??s?.decoder;o&&o.release(),this._activeDecoder=null,s&&this._removePendingEntry(A),this._aborted=!0;return}this._decodeError||(s?.decoder&&!this._activeDecoder&&(this._activeDecoder=s.decoder),this._activeDecoder||(this._activeDecoder=new Pe.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes),this._activeDecoder.init()),this._activeDecoder.put(e.subarray(t,i))!==Je&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,s&&this._removePendingEntry(A)))}end(e){if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();let t=this._parsedCommand;if(t.action==="d")return this._handleDelete(t);let i=t.id??this._lastPendingKey??0,A=t.more===1,s=this._pendingTransmissions.get(i);if(A)return this._activeDecoder&&(s?(s.totalEncodedSize+=this._totalEncodedSize,s.decodeError=s.decodeError||this._decodeError):this._pendingTransmissions.set(i,{cmd:{...t},decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=i,this._activeDecoder=null),!0;s&&(this._lastPendingKey=void 0);let n=this._decodeError,a=t,o=this._activeDecoder;s&&(a=s.cmd,o=s.decoder,n=n||s.decodeError,this._pendingTransmissions.delete(i));let g=new Uint8Array(0);o&&(o.end()!==Je&&(n=!0),g=o.data8),this._activeDecoder=null;let h=this._handleCommandWithBytesAndCmd(a,g,n);return o&&o.release(),h}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",e.quiet??0)),s}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported action",e.quiet??0),!0}}_handlePlacement(e){if(e.id===void 0)return!0;let t=e.id,i=this._kittyStorage.getImage(t);return i?this._displayImage(i,e).then(s=>(this._sendResponse(t,s?"OK":"EINVAL:image rendering failed",e.quiet??0,e.placementId),!0)):(this._sendResponse(t,"ENOENT:image not found",e.quiet??0,e.placementId),!0)}_handleTransmit(e,t,i){return(e.transmission??"d")!=="d"?(e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",e.quiet??0),!0):(i||t.length===0||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:e.width??0,height:e.height??0,format:e.format??32,compression:e.compression??""}),!0)}_handleTransmitDisplay(e,t,i){if(i)return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:invalid base64 data",e.quiet??0),!0;this._handleTransmit(e,t,i);let A=e.id??this._kittyStorage.lastImageId,s=this._kittyStorage.getImage(A);if(s){let n=this._displayImage(s,e);return e.id!==void 0?n.then(a=>(this._sendResponse(A,a?"OK":"EINVAL:image rendering failed",e.quiet??0),!0)):n.then(()=>!0)}return!0}_handleQuery(e,t,i){let A=e.id??0,s=e.quiet??0;if((e.transmission??"d")!=="d")return this._sendResponse(A,"EINVAL:unsupported transmission medium",s),!0;if(i)return this._sendResponse(A,"EINVAL:invalid base64 data",s),!0;if(t.length===0)return this._sendResponse(A,"OK",s),!0;let a=e.format??32;if(a===100)this._sendResponse(A,"OK",s);else{let o=e.width??0,g=e.height??0;if(!o||!g)return this._sendResponse(A,"EINVAL:width and height required for raw pixel data",s),!0;let h=a===32?4:3,I=o*g*h;if(t.length=1||!s&&i>=2)return;let n=A?`,p=${A}`:"",a=`\x1B_Gi=${e}${n};${t}\x1B\\`;this._coreTerminal._core.coreService.triggerDataEvent(a)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){let i=await this._createBitmap(e);try{let A=Math.max(0,t.x??0),s=Math.max(0,t.y??0),n=t.sourceWidth||i.width-A,a=t.sourceHeight||i.height-s,o=Math.max(0,i.width-A),g=Math.max(0,i.height-s),h=Math.max(0,Math.min(n,o)),I=Math.max(0,Math.min(a,g));if(h===0||I===0)throw new Error("invalid source rectangle");if(A!==0||s!==0||h!==i.width||I!==i.height){let T=await createImageBitmap(i,A,s,h,I);i.close(),i=T}let d=this._renderer.dimensions?.css.cell.width||w.width,c=this._renderer.dimensions?.css.cell.height||w.height,l,E;t.columns!==void 0&&t.rows!==void 0?(l=t.columns,E=t.rows):t.columns!==void 0?(l=t.columns,E=Math.max(1,Math.ceil(i.height/i.width*(l*d)/c))):t.rows!==void 0?(E=t.rows,l=Math.max(1,Math.ceil(i.width/i.height*(E*c)/d))):(l=Math.ceil(i.width/d),E=Math.ceil(i.height/c));let p=i.width,u=i.height;if((t.columns!==void 0||t.rows!==void 0)&&(p=Math.round(l*d),u=Math.round(E*c)),p*u>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");let C=this._coreTerminal._core.buffer,Q=C.x,K=C.y,Y=C.ybase,Ve=t.zIndex!==void 0&&t.zIndex<0?"bottom":"top";if(p!==i.width||u!==i.height){let T=await createImageBitmap(i,{resizeWidth:p,resizeHeight:u});i.close(),i=T}let oe=Math.min(Math.max(0,t.xOffset??0),d-1),he=Math.min(Math.max(0,t.yOffset??0),c-1);if(oe!==0||he!==0){let T=t.columns!==void 0?Math.round(l*d):i.width+oe,et=t.rows!==void 0?Math.round(E*c):i.height+he,q=D.createCanvas(window.document,T,et),Le=q.getContext("2d");if(!Le)throw new Error("Failed to create offset canvas context");Le.drawImage(i,oe,he);let tt=await createImageBitmap(q);if(q.width=q.height=0,i.close(),i=tt,p=i.width,u=i.height,p*u>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");t.columns===void 0&&(l=Math.ceil(i.width/d)),t.rows===void 0&&(E=Math.ceil(i.height/c))}let $e=t.zIndex??0;if(this._kittyStorage.addImage(e.id,i,!0,Ve,$e),i=void 0,t.cursorMovement===1){let T=C.ybase-Y;C.x=Q,C.y=Math.max(K-T,0)}else C.x=Math.min(Q+l,this._coreTerminal.cols)}catch(A){throw i?.close(),A}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if(e.compression==="z"&&(t=await this._decompressZlib(t)),e.format===100){let p=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){let u=URL.createObjectURL(p),C=new Image;return new Promise((Q,K)=>{C.addEventListener("load",()=>{URL.revokeObjectURL(u);let Y=D.createCanvas(window.document,C.width,C.height);Y.getContext("2d")?.drawImage(C,0,0),createImageBitmap(Y).then(Q).catch(K)}),C.addEventListener("error",()=>{URL.revokeObjectURL(u),K(new Error("Failed to load image"))}),C.src=u})}return createImageBitmap(p)}let i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");let s=e.format===32?4:3,n=i*A*s;if(t.length>>24|C<<8,h[c++]=4278190080|C>>>16|Q<<16,h[c++]=4278190080|Q>>>8}let l=I*3,E=I*4;for(let p=I;ph+I.length,0),o=new Uint8Array(a),g=0;for(let h of s)o.set(h,g),g+=h.length;return o}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}};var U=class U{constructor(e){this._storage=e;this._nextImageId=1;this._images=new Map;this._kittyIdToStorageId=new Map;this._storageIdToKittyId=new Map;this._handleStorageImageDeleted=e=>{let t=this._storageIdToKittyId.get(e);t!==void 0&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))};this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"};this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=t=>{this._previousOnImageDeleted?.(t),this._handleStorageImageDeleted(t)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){let i=e??this._nextImageId++,A=this._kittyIdToStorageId.get(i);return A!==void 0&&(this._storage.deleteImage(A),this._kittyIdToStorageId.delete(i),this._storageIdToKittyId.delete(A)),!this._images.has(i)&&this._images.size>=U._maxStoredImages&&this._evictUndisplayedImages(),this._images.set(i,{...t,id:i}),i}addImage(e,t,i,A,s){let n=this._kittyIdToStorageId.get(e);n!==void 0&&this._storageIdToKittyId.delete(n),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=s;let a=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,a),this._storageIdToKittyId.set(a,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);let t=this._kittyIdToStorageId.get(e);t!==void 0&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(let e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(let[e]of this._images){if(this._images.size<=U._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}};U._maxStoredImages=256;var te=U;var y=M(X());var ze=M(We());var xt=4194304,Se=y.PALETTE_ANSI_256;Se.set(y.PALETTE_VT340_COLOR);var se=class{constructor(e,t,i){this._opts=e;this._storage=t;this._coreTerminal=i;this._size=0;this._aborted=!1;(0,ze.DecoderAsync)({memoryLimit:this._opts.pixelLimit*4,palette:Se,paletteLimit:this._opts.sixelPaletteLimit}).then(A=>this._dec=A)}reset(){this._dec&&(this._dec.release(),this._dec._palette.fill(0),this._dec.init(0,Se,this._opts.sixelPaletteLimit))}hook(e){if(this._size=0,this._aborted=!1,this._dec){let t=e.params[1]===1?0:Mt(this._coreTerminal._core._inputHandler._curAttrData,this._coreTerminal._core._themeService?.colors);this._dec.init(t,null,this._opts.sixelPaletteLimit)}}put(e,t,i){if(!(this._aborted||!this._dec)){if(this._size+=i-t,this._size>this._opts.sixelSizeLimit){console.warn("SIXEL: too much data, aborting"),this._aborted=!0,this._dec.release();return}try{this._dec.decode(e,t,i)}catch(A){console.warn(`SIXEL: error while decoding image - ${A}`),this._aborted=!0,this._dec.release()}}}unhook(e){if(this._aborted||!e||!this._dec)return!0;let t=this._dec.width,i=this._dec.height;if(!t||!i)return i&&this._storage.advanceCursor(i),!0;let A=D.createCanvas(void 0,t,i);return A.getContext("2d")?.putImageData(new ImageData(this._dec.data8,t,i),0,0),this._dec.memoryUsage>xt&&this._dec.release(),this._storage.addImage(A),!0}};function Mt(r,e){let t=0;if(!e)return t;if(r.isInverse())if(r.isFgDefault())t=re(e.foreground.rgba);else if(r.isFgRGB()){let i=r.constructor.toColorRGB(r.getFgColor());t=(0,y.toRGBA8888)(...i)}else t=re(e.ansi[r.getFgColor()].rgba);else if(r.isBgDefault())t=re(e.background.rgba);else if(r.isBgRGB()){let i=r.constructor.toColorRGB(r.getBgColor());t=(0,y.toRGBA8888)(...i)}else t=re(e.ansi[r.getBgColor()].rgba);return t}function re(r){return y.BIG_ENDIAN?r:(r&255)<<24|(r>>>8&255)<<16|(r>>>16&255)<<8|r>>>24&255}var ne=class{constructor(e,t,i,A){this._storage=e;this._opts=t;this._renderer=i;this._terminal=A;this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;(t.width===-1||t.height===-1)&&(t=w);let i=Math.ceil(e/t.height);for(let A=1;Athis._onImageAdded.fire(),this._opts.enableSizeReports){let t=e.options.windowOptions??{};t.getWinSizePixels=!0,t.getCellSizePixels=!0,t.getWinSizeChars=!0,e.options.windowOptions=t}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},t=>this._decset(t)),e.parser.registerCsiHandler({prefix:"?",final:"l"},t=>this._decrst(t)),e.parser.registerCsiHandler({final:"c"},t=>this._da1(t)),e.parser.registerCsiHandler({prefix:"?",final:"S"},t=>this._xtermGraphicsAttributes(t)),e.onRender(t=>this._storage?.render(t)),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>this._storage?.wipeAlternate()),e.onResize(t=>this._storage?.viewportResize(t))),this._opts.sixelSupport){let t=new ne(this._storage,this._opts,this._renderer,e),i=new se(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){let t=new ae(this._storage),i=new $(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){let t=new te(this._storage),i=new ee(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,this._storage?.reset();for(let e of this._handlers.values())e.reset();return!1}get storageLimit(){return this._storage?.getLimit()||-1}set storageLimit(e){this._storage?.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){this._opts.showPlaceholder=e,this._renderer?.showPlaceholder(e)}getImageAtBufferCell(e,t){return this._storage?.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){return this._storage?.extractTileAtBufferCell(e,t)}_report(e){this._terminal?._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=Ze?(this._opts.sixelPaletteLimit=e[2],this._report(`\x1B[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`\x1B[?${e[0]};2S`),!0;case 4:return this._report(`\x1B[?${e[0]};0;${Ze}S`),!0;default:return this._report(`\x1B[?${e[0]};2S`),!0}if(e[0]===2)switch(e[1]){case 1:let t=this._renderer?.dimensions?.css.canvas.width,i=this._renderer?.dimensions?.css.canvas.height;if(!t||!i){let s=w;t=(this._terminal?.cols||80)*s.width,i=(this._terminal?.rows||24)*s.height}if(t*i()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var It=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let A of ht(e))!gt.call(r,A)&&A!==t&&Ne(r,A,{get:()=>e[A],enumerable:!(i=ot(e,A))||i.enumerable});return r};var x=(r,e,t)=>(t=r!=null?at(dt(r)):{},It(e||!r||!r.__esModule?Ne(t,"default",{value:r,enumerable:!0}):t,r));var j=M(_=>{"use strict";Object.defineProperty(_,"__esModule",{value:!0});_.DEFAULT_FOREGROUND=_.DEFAULT_BACKGROUND=_.PALETTE_ANSI_256=_.PALETTE_VT340_GREY=_.PALETTE_VT340_COLOR=_.normalizeHLS=_.normalizeRGB=_.nearestColorIndex=_.fromRGBA8888=_.toRGBA8888=_.alpha=_.blue=_.green=_.red=_.BIG_ENDIAN=void 0;_.BIG_ENDIAN=new Uint8Array(new Uint32Array([4278190080]).buffer)[0]===255;_.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly.");function He(r){return r&255}_.red=He;function Fe(r){return r>>>8&255}_.green=Fe;function Ge(r){return r>>>16&255}_.blue=Ge;function ct(r){return r>>>24&255}_.alpha=ct;function f(r,e,t,i=255){return((i&255)<<24|(t&255)<<16|(e&255)<<8|r&255)>>>0}_.toRGBA8888=f;function mt(r){return[r&255,r>>8&255,r>>16&255,r>>>24]}_.fromRGBA8888=mt;function _t(r,e){let t=He(r),i=Fe(r),A=Ge(r),s=Number.MAX_SAFE_INTEGER,n=-1;for(let a=0;a1&&(t-=1),t*6<1?e+(r-e)*6*t:t*2<1?r:t*3<2?e+(r-e)*(4-t*6):e}function ut(r,e,t){if(!t){let s=Math.round(e*255);return f(s,s,s)}let i=e<.5?e*(1+t):e+t-e*t,A=2*e-i;return f(ce(0,255,Math.round(me(i,A,r+1/3)*255)),ce(0,255,Math.round(me(i,A,r)*255)),ce(0,255,Math.round(me(i,A,r-1/3)*255)))}function m(r,e,t){return(4278190080|Math.round(t/100*255)<<16|Math.round(e/100*255)<<8|Math.round(r/100*255))>>>0}_.normalizeRGB=m;function Et(r,e,t){return ut((r+240%360)/360,e/100,t/100)}_.normalizeHLS=Et;_.PALETTE_VT340_COLOR=new Uint32Array([m(0,0,0),m(20,20,80),m(80,13,13),m(20,80,20),m(80,20,80),m(20,80,80),m(80,80,20),m(53,53,53),m(26,26,26),m(33,33,60),m(60,26,26),m(33,60,33),m(60,33,60),m(33,60,60),m(60,60,33),m(80,80,80)]);_.PALETTE_VT340_GREY=new Uint32Array([m(0,0,0),m(13,13,13),m(26,26,26),m(40,40,40),m(6,6,6),m(20,20,20),m(33,33,33),m(46,46,46),m(0,0,0),m(13,13,13),m(26,26,26),m(40,40,40),m(6,6,6),m(20,20,20),m(33,33,33),m(46,46,46)]);_.PALETTE_ANSI_256=(()=>{let r=[f(0,0,0),f(205,0,0),f(0,205,0),f(205,205,0),f(0,0,238),f(205,0,205),f(0,250,205),f(229,229,229),f(127,127,127),f(255,0,0),f(0,255,0),f(255,255,0),f(92,92,255),f(255,0,255),f(0,255,255),f(255,255,255)],e=[0,95,135,175,215,255];for(let t=0;t<6;++t)for(let i=0;i<6;++i)for(let A=0;A<6;++A)r.push(f(e[t],e[i],e[A]));for(let t=8;t<=238;t+=10)r.push(f(t,t,t));return new Uint32Array(r)})();_.DEFAULT_BACKGROUND=f(0,0,0,255);_.DEFAULT_FOREGROUND=f(255,255,255,255)});var Ee=M(ue=>{"use strict";Object.defineProperty(ue,"__esModule",{value:!0});ue.InWasm=Dt;var v=r=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(r);if(typeof Buffer<"u")return Buffer.from(r,"base64");let e=atob(r),t=new Uint8Array(e.length);for(let i=0;inew n.Instance(s||(s=new n.Module(A||(A=v(i)))),a):a=>s?n.instantiate(s,a):n.instantiate(A||(A=v(i)),a).then(o=>(s=o.module)&&o.instance):e===1?t?()=>s||(s=new n.Module(A||(A=v(i)))):()=>s?Promise.resolve(s):n.compile(A||(A=v(i))).then(a=>s=a):t?()=>A||(A=v(i)):()=>Promise.resolve(A||(A=v(i)))}if(typeof _wasmCtx>"u")throw new Error('must run "inwasm"');_wasmCtx.add(r)}});var Be=M(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});var wt=Ee(),bt=(0,wt.InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),S=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(r=>r.charCodeAt(0))),R=new Uint32Array(1024);R.fill(4278190080);for(let r=0;r>4|(r<<4&255)<<8;for(let r=0;r>2<<8|(r<<6&255)<<16;for(let r=0;rthis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):yt}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=e??this.maxBytes,this._bytes=t??Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32,A=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let i=this._bytes;for(;(i*=2)this._mem.buffer.byteLength){let A=Math.ceil((i+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(A),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=i}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;let t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}};pe.default=Ce});var Ue=M(Qe=>{"use strict";Object.defineProperty(Qe,"__esModule",{value:!0});var St=Ee(),Lt=(0,St.InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="}),fe=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];let t=this.width*this.height,i=t*4,A=e.length,s=Math.max(i,A)+(Math.min(i,A)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}};Qe.default=fe});var xe=M(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.LIMITS=void 0;se.LIMITS={CHUNK_SIZE:16384,PALETTE_SIZE:4096,MAX_WIDTH:16384,BYTES:"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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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"}});var je=M(b=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});b.decodeAsync=b.decode=b.Decoder=b.DecoderAsync=void 0;var O=j(),Q=xe();function Mt(r){if(typeof Buffer<"u")return Buffer.from(r,"base64");let e=atob(r),t=new Uint8Array(e.length);for(let i=0;i1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}},vt={memoryLimit:2048*65536,sixelColor:O.DEFAULT_FOREGROUND,fillColor:O.DEFAULT_BACKGROUND,palette:O.PALETTE_VT340_COLOR,paletteLimit:Q.LIMITS.PALETTE_SIZE,truncate:!0};function Ze(r){let e=new Me,t={env:{handle_band:e.handle_band.bind(e),mode_parsed:e.mode_parsed.bind(e)}};return WebAssembly.instantiate(J||Xe,t).then(i=>(J=J||i.module,new P(r,i.instance||i,e)))}b.DecoderAsync=Ze;var P=class{constructor(e,t,i){if(this._PIXEL_OFFSET=Q.LIMITS.MAX_WIDTH+4,this._canvas=ne,this._bandWidths=[],this._maxWidth=0,this._minWidth=Q.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},vt,e),this._opts.paletteLimit>Q.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${Q.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{let A=J||(J=new WebAssembly.Module(Xe));t=new WebAssembly.Instance(A,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),Q.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),Q.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(O.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(e===2){let t=this.width*this.height;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}this._maxWidth=this._width}else if(e===1)if(this._level===2){let t=Math.min(this._rasterWidth,Q.LIMITS.MAX_WIDTH)*this._rasterHeight;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){let i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&i*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");let A=new Uint32Array(Math.ceil(i/65536)*65536);A.set(this._canvas),this._canvas=A}}_handle_band(e){let t=this._PIXEL_OFFSET,i=this._lastOffset;if(this._mode===2){let A=this.height-this._currentHeight,s=0;for(;s<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),i+e*s),s++,A--;this._lastOffset+=e*s,this._currentHeight+=s}else if(this._mode===1){this._realloc(i,e*6),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=e*6,this._currentHeight+=6}return 0}get width(){return this._mode!==1?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return this._mode!==1?this._height:this._wasm.current_width()?this._bandWidths.length*6+this._wasm.current_height():this._bandWidths.length*6}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,Q.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=Q.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){let i=this._PIXEL_OFFSET,A=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*s,i*s+e),A+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,A+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(this._mode===1){if(this._minWidth===this._maxWidth){let s=!1;if(e)if(e!==this._minWidth)s=!0;else{let n=this._PIXEL_OFFSET,a=this._lastOffset;this._realloc(a,e*6);for(let o=0;o<6;++o)this._canvas.set(this._pSrc.subarray(n*o,n*o+e),a+e*o)}if(!s)return this._canvas.subarray(0,this.width*this.height)}let t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let s=0;s{if(this._disposed)return H(()=>{});let A={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(A);let s=H(()=>{let n=this._listeners.indexOf(A);n!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(n,1))});return i&&(Array.isArray(i)?i.push(s):i.add(s)),s},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let i=0,A=t.length;i{function r(s,n){return s(a=>n.fire(a))}A.forward=r;function e(s,n){return(a,o,h)=>s(d=>a.call(o,n(d)),void 0,h)}A.map=e;function t(...s){return(n,a,o)=>{let h=new N;for(let d of s)h.add(d(g=>n.call(a,g)));return o&&(Array.isArray(o)?o.push(h):o.add(h)),h}}A.any=t;function i(s,n,a){return n(a),s(o=>n(o))}A.runAndSubscribe=i})(lt||={});var _e=x(j());var D=class r extends k{constructor(t){super();this._terminal=t;this._layers=new Map;this._optionsRefresh=this._register(new X);this._oldOpen=this._terminal._core.open,this._terminal._core.open=i=>{this._oldOpen?.call(this._terminal._core,i),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(i=>{i==="fontSize"&&(this.rescaleCanvas(),this._renderService?.refreshRows(0,this._terminal.rows))}),this._register(H(()=>{this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}get canvas(){return this._layers.get("top")?.canvas}static createCanvas(t,i,A){let s=(t??document).createElement("canvas");return s.width=i|0,s.height=A|0,s}static createImageData(t,i,A,s){if(typeof ImageData!="function"){let n=t.createImageData(i,A);return s&&n.data.set(new Uint8ClampedArray(s,0,i*A*4)),n}return s?new ImageData(new Uint8ClampedArray(s,0,i*A*4),i,A):new ImageData(i,A)}static createImageBitmap(t){return typeof createImageBitmap!="function"?Promise.resolve(void 0):createImageBitmap(t)}showPlaceholder(t){t?!this._placeholder&&this.cellSize.height!==-1&&this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),this._renderService?.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){return{width:this.dimensions?.css.cell.width||-1,height:this.dimensions?.css.cell.height||-1}}clearLines(t,i,A){let s=t*(this.dimensions?.css.cell.height||0),n=this.dimensions?.css.canvas.width||0,a=(i+1-t)*(this.dimensions?.css.cell.height||0);(!A||A==="top")&&this._layers.get("top")?.clearRect(0,s,n,a),(!A||A==="bottom")&&this._layers.get("bottom")?.clearRect(0,s,n,a)}clearAll(t){if(!t||t==="top"){let i=this._layers.get("top");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}if(!t||t==="bottom"){let i=this._layers.get("bottom");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}}draw(t,i,A,s,n=1){let a=this._layers.get(t.layer);if(!a)return;let{width:o,height:h}=this.cellSize;if(o===-1||h===-1)return;this._rescaleImage(t,o,h);let d=t.actual,{width:g,height:I}=t.actualCellSize,l=Math.ceil(d.width/g),c=i%l*g,u=Math.floor(i/l)*I,E=A*o,C=s*h,p=n*g+c>d.width?d.width-c:n*g,B=u+I>d.height?d.height-u:I;a.drawImage(d,Math.floor(c),Math.floor(u),Math.ceil(p),Math.ceil(B),Math.floor(E),Math.floor(C),Math.ceil(p*o/g),Math.ceil(B*h/I))}extractTile(t,i){let{width:A,height:s}=this.cellSize;if(A===-1||s===-1)return;this._rescaleImage(t,A,s);let n=t.actual,{width:a,height:o}=t.actualCellSize,h=Math.ceil(n.width/a),d=i%h*a,g=Math.floor(i/h)*o,I=a+d>n.width?n.width-d:a,l=g+o>n.height?n.height-g:o,c=r.createCanvas(this.document,Math.ceil(I*A/a),Math.ceil(l*s/o)),u=c.getContext("2d");if(u)return u.drawImage(n,Math.floor(d),Math.floor(g),Math.floor(I),Math.floor(l),0,0,c.width,c.height),c}drawPlaceholder(t,i,A=1){let s=this._layers.get("top");if(s){let{width:n,height:a}=this.cellSize;if(n===-1||a===-1||(this._placeholder?a>=this._placeholder.height&&this._createPlaceHolder(a+1):this._createPlaceHolder(Math.max(a+1,24)),!this._placeholder))return;s.drawImage(this._placeholderBitmap??this._placeholder,t*n,i*a%2?0:1,n*A,a,t*n,i*a,n*A,a)}}rescaleCanvas(){let t=this.dimensions?.css.canvas.width||0,i=this.dimensions?.css.canvas.height||0;for(let A of this._layers.values())(A.canvas.width!==t||A.canvas.height!==i)&&(A.canvas.width=t,A.canvas.height=i)}_rescaleImage(t,i,A){if(i===t.actualCellSize.width&&A===t.actualCellSize.height)return;let{width:s,height:n}=t.origCellSize;if(i===s&&A===n){t.actual=t.orig,t.actualCellSize.width=s,t.actualCellSize.height=n;return}let a=Math.ceil(t.orig.width*i/s),o=Math.ceil(t.orig.height*A/n);if(a*o>t.orig.width*t.orig.height){t.actual=t.orig,t.actualCellSize.width=s,t.actualCellSize.height=n;return}let h=r.createCanvas(this.document,a,o),d=h.getContext("2d");d&&(d.drawImage(t.orig,0,0,h.width,h.height),t.actual=h,t.actualCellSize.width=i,t.actualCellSize.height=A)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=t=>{for(let i of[...this._layers.keys()])this.removeLayerFromDom(i);this._oldSetRenderer?.call(this._renderService,t)}}insertLayerToDom(t="top"){if(!this.document||!this._terminal._core.screenElement){console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");return}if(this._layers.has(t))return;let i=r.createCanvas(this.document,this.dimensions?.css.canvas.width||0,this.dimensions?.css.canvas.height||0);i.classList.add(`xterm-image-layer-${t}`);let A=this._terminal._core.screenElement;A.style.isolation="isolate",t==="bottom"?(i.style.zIndex="-1",A.insertBefore(i,A.firstChild)):(i.style.zIndex="0",A.appendChild(i));let s=i.getContext("2d",{alpha:!0});if(!s){i.remove();return}this._layers.set(t,s),this.clearAll(t)}removeLayerFromDom(t="top"){let i=this._layers.get(t);i&&(i.canvas.remove(),this._layers.delete(t))}hasLayer(t){return this._layers.has(t)}_createPlaceHolder(t=24){this._placeholderBitmap?.close(),this._placeholderBitmap=void 0;let i=32,A=r.createCanvas(this.document,i,t),s=A.getContext("2d",{alpha:!1});if(!s)return;let n=r.createImageData(s,i,t),a=new Uint32Array(n.data.buffer),o=(0,_e.toRGBA8888)(0,0,0),h=(0,_e.toRGBA8888)(255,255,255);a.fill(o);for(let l=0;l{this._placeholder!==I?l?.close():this._placeholderBitmap=l}).catch(()=>{})}get document(){return this._terminal._core._coreBrowserService?.window.document}};var w={width:7,height:14},G=class r{constructor(e=0,t=0,i=-1,A=-1){this.imageId=i;this.tileId=A;this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}get urlId(){return this._urlId}set urlId(e){this._urlId=e}clone(){return new r(this._ext,this._urlId,this.imageId,this.tileId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.imageId===-1}},F=new G,V=class{constructor(e,t,i){this._terminal=e;this._renderer=t;this._opts=i;this._images=new Map;this._lastId=0;this._lowestId=0;this._fullyCleared=!1;this._needsFullClear=!1;this._pixelLimit=25e5;try{this.setLimit(this._opts.storageLimit)}catch(A){A instanceof Error&&console.error(A.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){for(let e of this._images.values())e.marker?.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return this._pixelLimit*4/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return this._getStoredPixels()*4/1e6}_getStoredPixels(){let e=0;for(let t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){let t=this._images.get(e);t&&(this._images.delete(e),window.ImageBitmap&&t.orig instanceof ImageBitmap&&t.orig.close(),this.onImageDeleted?.(e))}wipeAlternate(){let e=[];for(let[t,i]of this._images.entries())i.bufferType==="alternate"&&(i.marker?.dispose(),e.push(t));for(let t of e)this._delImg(t);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){let t=this._images.get(e);t&&(t.marker?.dispose(),this._delImg(e))}addImage(e,t){this._evictOldest(e.width*e.height);let i=this._renderer.cellSize;(i.width===-1||i.height===-1)&&(i=w);let A=Math.ceil(e.width/i.width),s=Math.ceil(e.height/i.height),n=++this._lastId,a=this._terminal._core.buffer,o=this._terminal.cols,h=this._terminal.rows,d=a.x,g=a.y,I=d,l=0;t.scrolling||(a.x=0,a.y=0,I=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(a.y);for(let C=0;C=o);++B)this._writeToCell(p,I+B,n,C*A+B),l++;if(t.scrolling)C=h)break;a.x=I}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(a.y),t.scrolling?t.cursorPos==="iip"?a.x=Math.min(I+A,o):a.x=I:(a.x=d,a.y=g);let c=[];for(let[C,p]of this._images.entries())p.tileCount<1&&(p.marker?.dispose(),c.push(C));for(let C of c)this._delImg(C);let u=this._terminal.registerMarker(0);u?.onDispose(()=>{this._images.get(n)&&this._delImg(n)}),this._terminal.buffer.active.type==="alternate"&&this._evictOnAlternate();let E={orig:e,origCellSize:i,actual:e,actualCellSize:{...i},marker:u||void 0,tileCount:l,bufferType:this._terminal.buffer.active.type,layer:t.layer,zIndex:t.zIndex};return this._images.set(n,E),this.onImageAdded?.(),n}render(e){let t=!1,i=!1;for(let d of this._images.values())if(d.layer==="bottom"?i=!0:t=!0,t&&i)break;if(t&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(i&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size){this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom");return}!t&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!i&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);let{start:A,end:s}=e,n=this._terminal._core.buffer,a=this._terminal._core.cols;this._renderer.clearLines(A,s);let o=[],h=[];for(let d=A;d<=s;++d){let g=n.lines.get(d+n.ydisp);if(!g)return;for(let I=0;Id.imgSpec.zIndex-g.imgSpec.zIndex);for(let d of h)this._renderer.drawPlaceholder(d.col,d.row,d.count);for(let d of o)this._renderer.draw(d.imgSpec,d.tileId,d.col,d.row,d.count)}viewportResize(e){if(!this._images.size){this._viewportMetrics=e;return}if(this._viewportMetrics.cols>=e.cols){this._viewportMetrics=e;return}let t=this._terminal._core.buffer,i=t.lines.length,A=this._viewportMetrics.cols-1;for(let s=0;s=d)continue;let g=!1;for(let c=A+1;c>e.cols;++c)if(n._data[c*3+0]&4194303){g=!0;break}if(g)continue;let I=Math.min(e.cols,d-a.tileId%d+A),l=a.tileId;for(let c=A+1;c57)throw new Error("illegal char");e=e*10+r[t]-48}return e}function Oe(r){let e=$(r);if(!e.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return e}function Tt(r){if(typeof Buffer<"u")return Buffer.from($(r),"base64").toString();let e=atob($(r)),t=new Uint8Array(e.length);for(let i=0;i14)return-1;for(let a=t;a=Se)return this._a();n[s++]=o}break;case 58:return A===3&&!this._storeValue(s)?this._a():(this.state=4,a+1);default:if(s>=Se)return this._a();n[s++]=o}}return this.state=A,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){let t=$(this._buffer.subarray(0,e));return t?(this._key=t,this.fields[t]=null,!0):!1}_storeValue(e){if(this._key){try{let t=this._buffer.slice(0,e);this.fields[this._key]=Je[this._key]?Je[this._key](t):t}catch{return!1}return!0}return!1}};var L={mime:"unsupported",width:0,height:0};function te(r){if(r.length<32)return L;let e=new Uint32Array(r.buffer,r.byteOffset,8);if(e[0]===1196314761&&e[1]===169478669&&e[3]===1380206665)return{mime:"image/png",width:r[16]<<24|r[17]<<16|r[18]<<8|r[19],height:r[20]<<24|r[21]<<16|r[22]<<8|r[23]};if(r[0]===255&&r[1]===216&&r[2]===255){let[t,i]=xt(r);return{mime:"image/jpeg",width:t,height:i}}if(e[0]===944130375&&(r[4]===55||r[4]===57)&&r[5]===97)return{mime:"image/gif",width:r[7]<<8|r[6],height:r[9]<<8|r[8]};if(e[0]===1718185841)return{mime:"image/qoi",width:r[4]<<24|r[5]<<16|r[6]<<8|r[7],height:r[8]<<24|r[9]<<16|r[10]<<8|r[11]};if(e[0]===1179011410&&e[2]===1346520407&&(e[3]&16777215)===3690582){switch(r[15]){case 88:return{mime:"image/webp",width:(r[24]|r[25]<<8|r[26]<<16)+1,height:(r[27]|r[28]<<8|r[29]<<16)+1};case 76:if(r[20]!==47)return L;let t=r[21]|r[22]<<8|r[23]<<16|r[24]<<24;return{mime:"image/webp",width:(t&16383)+1,height:(t>>>14&16383)+1};case 32:return r[23]!==157||r[24]!==1||r[25]!==42?L:{mime:"image/webp",width:(r[26]|r[27]<<8)&16383,height:(r[28]|r[29]<<8)&16383}}return L}if(e[1]===1887007846&&(e[2]===1718187617||e[2]===1936291425)){let t=-1,i=Math.min(r.length-16,1024);for(let A=8;A0&&s>0)return{mime:"image/avif",width:A,height:s}}return L}return L}function xt(r){let e=r.length,t=4,i=r[t]<<8|r[t+1];for(;;){if(t+=i,t>=e)return[0,0];if(r[t]!==255)return[0,0];if(r[t+1]===192||r[t+1]===194)return t+80){if(this._hp.fields.type===1){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},Le,this._hp.fields),!this._header.inline){this._aborted=!0;return}if(!this._initDecoder()){this._aborted=!0;return}}else if(this._abortMulti){this._aborted=!0;return}this._dec.put(e.subarray(A,i))!==0&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){if(this._aborted||this._hp.state!==4&&this._hp.end())return!0;let t=this._hp.fields.type;if(t===3)return!0;if(t===5){let h=w.width,d=w.height;this._renderer.dimensions&&(h=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,d=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);let g=this._coreTerminal._core._coreBrowserService?.dpr??1,I=`\x1B]1337;ReportCellSize=${d.toFixed(3)};${h.toFixed(3)};${g.toFixed(3)}\x1B\\`;return this._coreTerminal.input(I,!1),!0}if(t===2)return this._header=Object.assign({},Le,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._initDecoder()||(this._abortMulti=!0),!0;if(t===4&&(!this._isMultipart||(this._isMultipart=!1,this._abortMulti||this._header.type!==2)))return!0;let i=0,A=0,s,n=L;if((s=e)&&((s=!this._dec.end())?(n=te(this._dec.data8),(s=n.mime!=="unsupported")?(i=n.width,A=n.height,(s=i&&A&&i*Ao!==this._generation?(h.close(),!0):(this._storage.addImage(h),!0)).catch(h=>(console.warn(`IIP: decoding error ${n.mime} ${n.width}x${n.height}`,h),!0))}_initDecoder(){try{return this._dec.init(),!0}catch(e){return console.warn("IIP: could not allocate decoder",e),this._dec.release(),!1}}_resize(e,t){let i=this._renderer.dimensions?.css.cell.width||w.width,A=this._renderer.dimensions?.css.cell.height||w.height,s=this._renderer.dimensions?.css.canvas.width||i*this._coreTerminal.cols,n=this._renderer.dimensions?.css.canvas.height||A*this._coreTerminal.rows,a=this._dim(this._header.width,s,i),o=this._dim(this._header.height,n,A);if(!a&&!o){let h=s/e,d=(n-A)/t,g=Math.min(h,d);return g<1?[e*g,t*g]:[e,t]}return a?this._header.preserveAspectRatio||!a||!o?[a,t*a/e]:[a,o]:[e*o/t,o]}_dim(e,t,i){return e==="auto"?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}};var We=x(Be());function Te(r){let e={},t=r.split(",");for(let i of t){let A=i.indexOf("=");if(A===-1)continue;let s=i.substring(0,A),n=i.substring(A+1);if(s==="a"){e.action=n;continue}if(s==="o"){e.compression=n;continue}if(s==="t"){e.transmission=n;continue}if(s==="d"){e.deleteSelector=n;continue}let a=parseInt(n,10);switch(s){case"f":e.format=a;break;case"i":e.id=a;break;case"I":e.imageNumber=a;break;case"s":e.width=a;break;case"v":e.height=a;break;case"x":e.x=a;break;case"y":e.y=a;break;case"w":e.sourceWidth=a;break;case"h":e.sourceHeight=a;break;case"X":e.xOffset=a;break;case"Y":e.yOffset=a;break;case"c":e.columns=a;break;case"r":e.rows=a;break;case"m":e.more=a;break;case"q":e.quiet=a;break;case"C":e.cursorMovement=a;break;case"z":e.zIndex=a;break;case"p":e.placementId=a;break}}return e}var ze=0,Ae=class{constructor(e,t,i,A){this._opts=e;this._renderer=t;this._kittyStorage=i;this._coreTerminal=A;this._aborted=!1;this._generation=0;this._decodeError=!1;this._activeDecoder=null;this._inControlData=!0;this._controlData=new Uint32Array(512);this._controlLength=0;this._encodedSizeLimit=0;this._totalEncodedSize=0;this._parsedCommand=null;this._pendingTransmissions=new Map;this._maxEncodedBytes=Math.ceil(this._opts.kittySizeLimit*4/3),this._initialEncodedBytes=Math.min(4194304,this._maxEncodedBytes)}reset(){this._generation++,this._cleanupAllPending(),this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),this._kittyStorage.reset()}dispose(){this.reset()}_removePendingEntry(e){this._pendingTransmissions.delete(e),this._lastPendingKey===e&&(this._lastPendingKey=void 0)}_cleanupAllPending(){for(let e of this._pendingTransmissions.values())e.decoder.release();this._pendingTransmissions.clear(),this._lastPendingKey=void 0}start(){this._aborted=!1,this._decodeError=!1,this._inControlData=!0,this._controlLength=0,this._parsedCommand=null,this._encodedSizeLimit=this._maxEncodedBytes,this._totalEncodedSize=0,this._activeDecoder=null}put(e,t,i){if(!this._aborted)if(!this._inControlData)this._streamPayload(e,t,i);else{let A=i;for(let n=t;n512){this._aborted=!0;return}if(this._controlData.set(e.subarray(t,A),this._controlLength),this._controlLength+=s,!this._inControlData){if(this._parsedCommand=Te(this._parseControlDataString()),this._parsedCommand.id!==void 0&&this._parsedCommand.imageNumber!==void 0){this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",this._parsedCommand.quiet??0),this._aborted=!0;return}if(this._parsedCommand.action==="d")return;let n=A+1;nthis._encodedSizeLimit){let o=this._activeDecoder??s?.decoder;o&&o.release(),this._activeDecoder=null,s&&this._removePendingEntry(A),this._aborted=!0;return}if(!this._decodeError){if(s?.decoder&&!this._activeDecoder&&(this._activeDecoder=s.decoder),!this._activeDecoder){let o=this._maxEncodedBytes+131072;if(o>this._opts.storageLimit*1e6){this._aborted=!0,this._parsedCommand?.id!==void 0&&this._sendResponse(this._parsedCommand.id,"ENOMEM:pending image budget exceeded",this._parsedCommand.quiet??0);return}let h=Math.max(1,Math.floor(this._opts.storageLimit*1e6/o));for(;this._pendingTransmissions.size>=h;){let g=this._pendingTransmissions.entries().next().value;if(!g)break;g[1].decoder.release(),this._removePendingEntry(g[0]),g[1].cmd.id!==void 0&&this._sendResponse(g[1].cmd.id,"ENOMEM:pending image budget exceeded",g[1].cmd.quiet??0)}let d=new We.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes);try{d.init()}catch(g){console.warn("KITTY: could not allocate decoder",g),this._aborted=!0,this._parsedCommand?.id!==void 0&&this._sendResponse(this._parsedCommand.id,"ENOMEM:could not allocate decoder",this._parsedCommand.quiet??0);return}this._activeDecoder=d}this._activeDecoder.put(e.subarray(t,i))!==ze&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,s&&this._removePendingEntry(A))}}end(e){if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();let t=this._parsedCommand;if(t.action==="d")return this._handleDelete(t);let i=t.id??this._lastPendingKey??0,A=t.more===1,s=this._pendingTransmissions.get(i);if(A)return this._activeDecoder&&(s?(s.totalEncodedSize+=this._totalEncodedSize,s.decodeError=s.decodeError||this._decodeError):this._pendingTransmissions.set(i,{cmd:{...t},decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=i,this._activeDecoder=null),!0;s&&(this._lastPendingKey=void 0);let n=this._decodeError,a=t,o=this._activeDecoder;s&&(a=s.cmd,o=s.decoder,n=n||s.decodeError,this._pendingTransmissions.delete(i));let h=new Uint8Array(0);o&&(o.end()!==ze&&(n=!0),h=o.data8),this._activeDecoder=null;let d=this._handleCommandWithBytesAndCmd(a,h,n);return o&&o.release(),d}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",e.quiet??0)),s}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported action",e.quiet??0),!0}}_handlePlacement(e){if(e.id===void 0)return!0;let t=e.id,i=this._kittyStorage.getImage(t);return i?this._displayImage(i,e).then(s=>(this._sendResponse(t,s?"OK":"EINVAL:image rendering failed",e.quiet??0,e.placementId),!0)):(this._sendResponse(t,"ENOENT:image not found",e.quiet??0,e.placementId),!0)}_handleTransmit(e,t,i){return(e.transmission??"d")!=="d"?(e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",e.quiet??0),!0):(i||t.length===0||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:e.width??0,height:e.height??0,format:e.format??32,compression:e.compression??""}),!0)}_handleTransmitDisplay(e,t,i){if(i)return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:invalid base64 data",e.quiet??0),!0;this._handleTransmit(e,t,i);let A=e.id??this._kittyStorage.lastImageId,s=this._kittyStorage.getImage(A);if(s){let n=this._displayImage(s,e);return e.id!==void 0?n.then(a=>(this._sendResponse(A,a?"OK":"EINVAL:image rendering failed",e.quiet??0),!0)):n.then(()=>!0)}return!0}_handleQuery(e,t,i){let A=e.id??0,s=e.quiet??0;if((e.transmission??"d")!=="d")return this._sendResponse(A,"EINVAL:unsupported transmission medium",s),!0;if(i)return this._sendResponse(A,"EINVAL:invalid base64 data",s),!0;if(t.length===0)return this._sendResponse(A,"OK",s),!0;let a=e.format??32;if(a===100)this._sendResponse(A,"OK",s);else{let o=e.width??0,h=e.height??0;if(!o||!h)return this._sendResponse(A,"EINVAL:width and height required for raw pixel data",s),!0;let d=a===32?4:3,g=o*h*d;if(t.length=1||!s&&i>=2)return;let n=A?`,p=${A}`:"",a=`\x1B_Gi=${e}${n};${t}\x1B\\`;this._coreTerminal._core.coreService.triggerDataEvent(a)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){let i=this._generation,A=await this._createBitmap(e);try{if(i!==this._generation)throw new Error("image decode canceled");let s=Math.max(0,t.x??0),n=Math.max(0,t.y??0),a=t.sourceWidth||A.width-s,o=t.sourceHeight||A.height-n,h=Math.max(0,A.width-s),d=Math.max(0,A.height-n),g=Math.max(0,Math.min(a,h)),I=Math.max(0,Math.min(o,d));if(g===0||I===0)throw new Error("invalid source rectangle");if(s!==0||n!==0||g!==A.width||I!==A.height){let T=await createImageBitmap(A,s,n,g,I);A.close(),A=T}let l=this._renderer.dimensions?.css.cell.width||w.width,c=this._renderer.dimensions?.css.cell.height||w.height,u,E;t.columns!==void 0&&t.rows!==void 0?(u=t.columns,E=t.rows):t.columns!==void 0?(u=t.columns,E=Math.max(1,Math.ceil(A.height/A.width*(u*l)/c))):t.rows!==void 0?(E=t.rows,u=Math.max(1,Math.ceil(A.width/A.height*(E*c)/l))):(u=Math.ceil(A.width/l),E=Math.ceil(A.height/c));let C=A.width,p=A.height;if((t.columns!==void 0||t.rows!==void 0)&&(C=Math.round(u*l),p=Math.round(E*c)),C*p>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");let B=this._coreTerminal._core.buffer,Y=B.x,q=B.y,z=B.ybase,At=t.zIndex!==void 0&&t.zIndex<0?"bottom":"top";if(C!==A.width||p!==A.height){let T=await createImageBitmap(A,{resizeWidth:C,resizeHeight:p});A.close(),A=T}let Ie=Math.min(Math.max(0,t.xOffset??0),l-1),le=Math.min(Math.max(0,t.yOffset??0),c-1);if(Ie!==0||le!==0){let T=t.columns!==void 0?Math.round(u*l):A.width+Ie,st=t.rows!==void 0?Math.round(E*c):A.height+le,W=D.createCanvas(window.document,T,st),ke=W.getContext("2d");if(!ke)throw new Error("Failed to create offset canvas context");ke.drawImage(A,Ie,le);let nt=await createImageBitmap(W);if(W.width=W.height=0,A.close(),A=nt,C=A.width,p=A.height,C*p>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");t.columns===void 0&&(u=Math.ceil(A.width/l)),t.rows===void 0&&(E=Math.ceil(A.height/c))}if(i!==this._generation)throw new Error("image decode canceled");let rt=t.zIndex??0;if(this._kittyStorage.addImage(e.id,A,!0,At,rt),A=void 0,t.cursorMovement===1){let T=B.ybase-z;B.x=Y,B.y=Math.max(q-T,0)}else B.x=Math.min(Y+u,this._coreTerminal.cols)}catch(s){throw A?.close(),s}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if(e.compression==="z"&&(t=await this._decompressZlib(t)),e.format===100){let E=te(t);if(E.mime!=="image/png"||!(E.width>0)||!(E.height>0)||E.width*E.height>this._opts.pixelLimit)throw new RangeError("PNG exceeds pixel limit or has invalid dimensions");let C=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){let p=URL.createObjectURL(C),B=new Image;return new Promise((Y,q)=>{B.addEventListener("load",()=>{URL.revokeObjectURL(p);let z=D.createCanvas(window.document,B.width,B.height);z.getContext("2d")?.drawImage(B,0,0),createImageBitmap(z).then(Y).catch(q)}),B.addEventListener("error",()=>{URL.revokeObjectURL(p),q(new Error("Failed to load image"))}),B.src=p})}return createImageBitmap(C)}let i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");let s=e.format===32?4:3,n=i*A*s;if(t.length>>24|p<<8,d[l++]=4278190080|p>>>16|B<<16,d[l++]=4278190080|B>>>8}let c=g*3,u=g*4;for(let E=g;E=e.length){g.close();return}let I=Math.min(A+4096,e.length);g.enqueue(new Uint8Array(e.subarray(A,I))),A=I}}).pipeThrough(new DecompressionStream(t)).getReader(),a=[],o=0;try{for(;;){let{done:g,value:I}=await n.read();if(g)break;if(o+=I.byteLength,o>i)throw await n.cancel().catch(()=>{}),new RangeError("decompressed image exceeds byte limit");a.push(I)}}finally{n.releaseLock()}let h=new Uint8Array(o),d=0;for(let g of a)h.set(g,d),d+=g.length;return h}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}};var U=class U{constructor(e){this._storage=e;this._nextImageId=1;this._images=new Map;this._kittyIdToStorageId=new Map;this._storageIdToKittyId=new Map;this._handleStorageImageDeleted=e=>{let t=this._storageIdToKittyId.get(e);t!==void 0&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))};this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"};this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=t=>{this._previousOnImageDeleted?.(t),this._handleStorageImageDeleted(t)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){let i=e??this._nextImageId++,A=this._kittyIdToStorageId.get(i);A!==void 0&&(this._storage.deleteImage(A),this._kittyIdToStorageId.delete(i),this._storageIdToKittyId.delete(A)),!this._images.has(i)&&this._images.size>=U._maxStoredImages&&this._evictUndisplayedImages();let s=this._storage.getLimit()*1e6;this._images.delete(i);let n=0;for(let a of this._images.values())n+=a.data.size;for(let a of[!1,!0])for(let[o,h]of this._images){if(n+t.data.size<=s)break;this._kittyIdToStorageId.has(o)===a&&(n-=h.data.size,this.deleteById(o))}return this._images.set(i,{...t,id:i}),i}addImage(e,t,i,A,s){let n=this._kittyIdToStorageId.get(e);n!==void 0&&this._storageIdToKittyId.delete(n),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=s;let a=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,a),this._storageIdToKittyId.set(a,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);let t=this._kittyIdToStorageId.get(e);t!==void 0&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(let e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(let[e]of this._images){if(this._images.size<=U._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}};U._maxStoredImages=256;var re=U;var y=x(j());var he=x(je()),Ve=x(xe());var Nt=4194304,K=y.PALETTE_ANSI_256;K.set(y.PALETTE_VT340_COLOR);var Ht=2,Re=new Map,ve=!1;function Ft(r){ve||(ve=!0,(0,he.DecoderAsync)({memoryLimit:r,palette:K}).then(e=>$e(e,r),()=>{ve=!1}))}function Gt(r){return Re.get(r)?.pop()??new he.Decoder({memoryLimit:r,palette:K})}function $e(r,e){r.memoryUsage>Nt&&r.release();let t=Re.get(e)??[];t.lengththis._opts.sixelSizeLimit){console.warn("SIXEL: too much data, aborting"),this._aborted=!0,this._dec.release();return}try{this._dec.decode(e,t,i)}catch(A){console.warn(`SIXEL: error while decoding image - ${A}`),this._aborted=!0,this._dec.release()}}}unhook(e){try{return this._unhook(e)}finally{this._returnDecoder()}}_unhook(e){if(this._aborted||!e||!this._dec)return!0;let t=this._dec.width,i=this._dec.height;if(!t||!i)return i&&this._storage.advanceCursor(i),!0;let A=D.createCanvas(void 0,t,i);return A.getContext("2d")?.putImageData(new ImageData(this._dec.data8,t,i),0,0),this._storage.addImage(A),!0}};function Ut(r,e){let t=0;if(!e)return t;if(r.isInverse())if(r.isFgDefault())t=ae(e.foreground.rgba);else if(r.isFgRGB()){let i=r.constructor.toColorRGB(r.getFgColor());t=(0,y.toRGBA8888)(...i)}else t=ae(e.ansi[r.getFgColor()].rgba);else if(r.isBgDefault())t=ae(e.background.rgba);else if(r.isBgRGB()){let i=r.constructor.toColorRGB(r.getBgColor());t=(0,y.toRGBA8888)(...i)}else t=ae(e.ansi[r.getBgColor()].rgba);return t}function ae(r){return y.BIG_ENDIAN?r:(r&255)<<24|(r>>>8&255)<<16|(r>>>16&255)<<8|r>>>24&255}var de=class{constructor(e,t,i,A){this._storage=e;this._opts=t;this._renderer=i;this._terminal=A;this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;(t.width===-1||t.height===-1)&&(t=w);let i=Math.ceil(e/t.height);for(let A=1;Athis._onImageAdded.fire(),this._opts.enableSizeReports){let t=e.options.windowOptions??{};t.getWinSizePixels=!0,t.getCellSizePixels=!0,t.getWinSizeChars=!0,e.options.windowOptions=t}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},t=>this._decset(t)),e.parser.registerCsiHandler({prefix:"?",final:"l"},t=>this._decrst(t)),e.parser.registerCsiHandler({final:"c"},t=>this._da1(t)),e.parser.registerCsiHandler({prefix:"?",final:"S"},t=>this._xtermGraphicsAttributes(t)),e.onRender(t=>this._storage?.render(t)),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>this._storage?.wipeAlternate()),e.onResize(t=>this._storage?.viewportResize(t))),this._opts.sixelSupport){let t=new de(this._storage,this._opts,this._renderer,e),i=new oe(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){let t=new ge(this._storage),i=new ie(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){let t=new re(this._storage),i=new Ae(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,this._storage?.reset();for(let e of this._handlers.values())e.reset();return!1}get storageLimit(){return this._storage?.getLimit()||-1}set storageLimit(e){this._storage?.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){this._opts.showPlaceholder=e,this._renderer?.showPlaceholder(e)}getImageAtBufferCell(e,t){return this._storage?.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){return this._storage?.extractTileAtBufferCell(e,t)}_report(e){this._terminal?._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=tt?(this._opts.sixelPaletteLimit=e[2],this._report(`\x1B[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`\x1B[?${e[0]};2S`),!0;case 4:return this._report(`\x1B[?${e[0]};0;${tt}S`),!0;default:return this._report(`\x1B[?${e[0]};2S`),!0}if(e[0]===2)switch(e[1]){case 1:let t=this._renderer?.dimensions?.css.canvas.width,i=this._renderer?.dimensions?.css.canvas.height;if(!t||!i){let s=w;t=(this._terminal?.cols||80)*s.width,i=(this._terminal?.rows||24)*s.height}if(t*i {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map", null, null, "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat \u2014 points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const finalWidth = width + sx > img.width ? img.width - sx : width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document,\n Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n );\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport {\n ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec,\n IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes,\n UnderlineStyle, IAddImageOpts\n} from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0,\n public imageId = -1,\n public tileId = -1\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrsImage {\n /**\n * Technically we dont need a clone variant of ExtendedAttrsImage,\n * as we never clone a cell holding image data.\n * Note: Clone is only meant to be used by the InputHandler for\n * sticky attributes, which is never the case for image data.\n * We still provide a proper clone method to reflect the full ext attr\n * state in case there are future use cases for clone.\n */\n return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n }\n\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase);\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n let e: IExtendedAttrsImage = line._extendedAttrs[col] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (\n ++col < cols\n && (line.getBg(col) & BgFlags.HAS_EXTENDED)\n && (e = line._extendedAttrs[col] ?? EMPTY_ATTRS)\n && (e.imageId === imageId)\n && (e.tileId === startTile + count)\n ) {\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row) as IBufferLineExt;\n if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const old = line._extendedAttrs[x];\n if (old) {\n if (old.imageId !== undefined) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n // found a plain ExtendedAttrs instance, clone it to new entry\n line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n return;\n }\n }\n // fall-through: always create new ExtendedAttrsImage entry\n line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const imgId = line._extendedAttrs[x]?.imageId;\n if (imgId) {\n const spec = this._images.get(imgId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Limit held memory in base64 decoder (encoded bytes).\n KEEP_DATA = 4194304,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n this._dec.init();\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n this._dec.init();\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n const data = this._qoiDec.decode(this._dec.data8);\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded \u2192 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n this._activeDecoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n this._activeDecoder.init();\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received \u2014 clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first \u2014 handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload \u2014 image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) \u2014 ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency \u2014\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw \u00D7 r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly \u2014 no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB\u2192RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes \u2014 ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] \u2192 uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1\u20133 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch {\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const ds = new DecompressionStream(format);\n const writer = ds.writable.getWriter();\n writer.write(compressed as BufferSource);\n writer.close();\n\n const chunks: Uint8Array[] = [];\n const reader = ds.readable.getReader();\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) \u2014 only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair \u2014 same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId \u2192 placementId \u2192 storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n DecoderAsync({\n memoryLimit: this._opts.pixelLimit * 4,\n palette: DEFAULT_PALETTE,\n paletteLimit: this._opts.sixelPaletteLimit\n }).then(d => this._dec = d);\n }\n\n public reset(): void {\n /**\n * reset sixel decoder to defaults:\n * - release all memory\n * - nullify palette (4096)\n * - apply default palette (256)\n */\n if (this._dec) {\n this._dec.release();\n // FIXME: missing interface on decoder to nullify full palette\n (this._dec as any)._palette.fill(0);\n this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n }\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n if (this._dec) {\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n this._dec.release();\n }\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode \u2014 cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 \u00A74 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"], -- "mappings": "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", -- "names": ["exports", "red", "n", "green", "blue", "alpha", "toRGBA8888", "g", "b", "a", "fromRGBA8888", "color", "nearestColorIndex", "palette", "r", "min", "idx", "i", "dr", "dg", "db", "d", "clamp", "low", "high", "value", "h2c", "t1", "t2", "c", "HLStoRGB", "h", "l", "s", "v", "normalizeRGB", "normalizeHLS", "p", "require_lib", "__commonJSMin", "exports", "InWasm", "z", "s", "b", "r", "def", "t", "d", "m", "W", "e", "require_Base64Decoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmDecode", "MAP", "el", "D", "i", "EMPTY", "Base64Decoder", "keepSize", "maxBytes", "initialBytes", "m", "bytes", "requested", "needed", "newSize", "addPages", "data", "require_QoiDecoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmQoiDecode", "QoiDecoder", "keepSize", "d", "pixels", "ib", "dl", "bytes", "chunkP", "exports", "Colors_1", "wasm_1", "decodeBase64", "s", "bytestring", "result", "WASM_BYTES", "WASM_MODULE", "NULL_CANVAS", "CallbackProxy", "width", "mode", "DEFAULT_OPTIONS", "DecoderAsync", "opts", "cbProxy", "importObj", "inst", "Decoder", "exports", "_instance", "_cbProxy", "module", "pixels", "offset", "additionalPixels", "newCanvas", "adv", "remaining", "c", "i", "fillColor", "palette", "paletteLimit", "truncate", "data", "start", "end", "p", "length", "j", "currentWidth", "escape", "final", "finalOffset", "bw", "currentHeight", "decode", "dec", "decodeAsync", "toDisposable", "fn", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "len", "EventUtils", "forward", "from", "to", "e", "map", "i", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "import_Colors", "ImageRenderer", "_ImageRenderer", "Disposable", "_terminal", "MutableDisposable", "parent", "option", "toDisposable", "localDocument", "width", "height", "canvas", "ctx", "buffer", "imgData", "img", "value", "start", "end", "layer", "y", "w", "h", "imgSpec", "tileId", "col", "row", "count", "cols", "sx", "sy", "dx", "dy", "finalWidth", "finalHeight", "spec", "currentWidth", "currentHeight", "originalWidth", "originalHeight", "renderer", "key", "screenElement", "bWidth", "blueprint", "d32", "black", "white", "shift", "offset", "x", "ctx2", "i", "bitmap", "CELL_SIZE_DEFAULT", "ExtendedAttrsImage", "_ExtendedAttrsImage", "ext", "urlId", "imageId", "tileId", "value", "val", "EMPTY_ATTRS", "ImageStorage", "_terminal", "_renderer", "_opts", "e", "spec", "storedPixels", "id", "zero", "img", "opts", "cellSize", "cols", "rows", "buffer", "termCols", "termRows", "originX", "originY", "offset", "tileCount", "row", "line", "col", "endMarker", "imgSpec", "range", "hasTopImages", "hasBottomImages", "start", "end", "drawCalls", "placeholderCalls", "startTile", "startCol", "count", "a", "b", "call", "metrics", "oldCol", "tilesPerRow", "hasData", "rightCol", "lastTile", "expandCol", "x", "y", "orig", "canvas", "ImageRenderer", "room", "used", "current", "old", "oldSpec", "imgId", "import_Base64Decoder", "import_QoiDecoder", "toStr", "data", "s", "i", "toInt", "v", "toSize", "toName", "bs", "b", "DECODERS", "FILE_MARKER", "MULTIPARTFILE_MARKER", "FILEPART_MARKER", "FILEEND_MARKER", "REPORTCELLSIZE_MARKER", "MAX_FIELDCHARS", "HeaderParser", "k", "start", "end", "state", "pos", "buffer", "c", "UNSUPPORTED_TYPE", "imageType", "d", "d32", "width", "height", "jpgSize", "dim", "pos", "limit", "i", "len", "blockLength", "DEFAULT_HEADER", "IIPHandler", "_opts", "_renderer", "_storage", "_coreTerminal", "HeaderParser", "maxEncodedBytes", "initialBytes", "Base64Decoder", "QoiDecoder", "data", "start", "end", "dataPos", "success", "seqType", "w", "CELL_SIZE_DEFAULT", "h", "scale", "report", "cond", "metrics", "UNSUPPORTED_TYPE", "imageType", "blob", "canvas", "ImageRenderer", "bm", "e", "cw", "ch", "width", "height", "rw", "rh", "wf", "hf", "f", "s", "total", "cdim", "import_Base64Decoder", "parseKittyCommand", "data", "cmd", "parts", "part", "eqIdx", "key", "value", "numValue", "DECODER_OK", "KittyGraphicsHandler", "_opts", "_renderer", "_kittyStorage", "_coreTerminal", "key", "pending", "data", "start", "end", "controlEnd", "i", "copyLength", "parseKittyCommand", "payloadStart", "pendingKey", "previousEncodedSize", "decoderToRelease", "Base64Decoder", "success", "cmd", "isMoreComing", "decodeError", "finalCmd", "decoder", "imageBytes", "result", "str", "bytes", "id", "image", "quiet", "format", "width", "height", "bytesPerPixel", "expectedBytes", "message", "placementId", "isOk", "pPart", "response", "bitmap", "cropX", "cropY", "cropW", "cropH", "maxCropW", "maxCropH", "finalCropW", "finalCropH", "cropped", "cw", "CELL_SIZE_DEFAULT", "ch", "imgCols", "imgRows", "w", "h", "buffer", "savedX", "savedY", "savedYbase", "layer", "scaled", "xOffset", "yOffset", "canvasW", "canvasH", "offsetCanvas", "ImageRenderer", "offsetCtx", "offsetBitmap", "zIndex", "scrolled", "e", "blob", "url", "img", "resolve", "reject", "canvas", "pixelCount", "src32", "dst32", "alignedPixels", "srcOffset", "dstOffset", "b0", "b1", "b2", "srcByte", "dstByte", "compressed", "ds", "writer", "chunks", "reader", "done", "value", "totalLength", "sum", "chunk", "offset", "_KittyImageStorage", "_storage", "storageId", "kittyId", "id", "imageData", "imageId", "oldStorageId", "image", "scrolling", "layer", "zIndex", "KittyImageStorage", "import_Colors", "import_Decoder", "MEM_PERMA_LIMIT", "DEFAULT_PALETTE", "SixelHandler", "_opts", "_storage", "_coreTerminal", "d", "params", "fillColor", "extractActiveBg", "data", "start", "end", "e", "success", "width", "height", "canvas", "ImageRenderer", "attr", "colors", "bg", "convertLe", "t", "color", "SixelImageStorage", "_storage", "_opts", "_renderer", "_terminal", "img", "height", "cellSize", "CELL_SIZE_DEFAULT", "rows", "i", "IIPImageStorage", "_storage", "img", "DEFAULT_OPTIONS", "MAX_SIXEL_PALETTE_SIZE", "ImageAddon", "opts", "Emitter", "DEFAULT_OPTIONS", "obj", "args", "terminal", "ImageRenderer", "ImageStorage", "windowOps", "params", "range", "metrics", "sixelStorage", "SixelImageStorage", "sixelHandler", "SixelHandler", "iipStorage", "IIPImageStorage", "iipHandler", "IIPHandler", "kittyStorage", "KittyImageStorage", "kittyHandler", "KittyGraphicsHandler", "handler", "limit", "value", "x", "y", "s", "i", "MAX_SIXEL_PALETTE_SIZE", "width", "height", "cellSize", "CELL_SIZE_DEFAULT"] -+ "sourcesContent": [null, "\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map", null, null, "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat \u2014 points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * sourceWidth + sx > img.width ? img.width - sx : count * sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const finalWidth = sourceWidth + sx > img.width ? img.width - sx : sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n const canvas = ImageRenderer.createCanvas(this.document, Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight));\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, canvas.width, canvas.height\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const scaledWidth = Math.ceil(spec.orig!.width * currentWidth / originalWidth);\n const scaledHeight = Math.ceil(spec.orig!.height * currentHeight / originalHeight);\n // Upscale visible tiles directly; a full zoomed copy can dwarf the image budget.\n if (scaledWidth * scaledHeight > spec.orig!.width * spec.orig!.height) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(this.document, scaledWidth, scaledHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n const placeholder = this._placeholder;\n ImageRenderer.createImageBitmap(placeholder).then(bitmap => {\n if (this._placeholder !== placeholder) bitmap?.close();\n else this._placeholderBitmap = bitmap;\n }).catch(() => {});\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport {\n ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec,\n IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes,\n UnderlineStyle, IAddImageOpts\n} from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0,\n public imageId = -1,\n public tileId = -1\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrsImage {\n /**\n * Technically we dont need a clone variant of ExtendedAttrsImage,\n * as we never clone a cell holding image data.\n * Note: Clone is only meant to be used by the InputHandler for\n * sticky attributes, which is never the case for image data.\n * We still provide a proper clone method to reflect the full ext attr\n * state in case there are future use cases for clone.\n */\n return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n }\n\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase);\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n let e: IExtendedAttrsImage = line._extendedAttrs[col] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (\n ++col < cols\n && (line.getBg(col) & BgFlags.HAS_EXTENDED)\n && (e = line._extendedAttrs[col] ?? EMPTY_ATTRS)\n && (e.imageId === imageId)\n && (e.tileId === startTile + count)\n ) {\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row) as IBufferLineExt;\n if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] ?? EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] ?? EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const old = line._extendedAttrs[x];\n if (old) {\n if (old.imageId !== undefined) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n // found a plain ExtendedAttrs instance, clone it to new entry\n line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n return;\n }\n }\n // fall-through: always create new ExtendedAttrsImage entry\n line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const imgId = line._extendedAttrs[x]?.imageId;\n if (imgId) {\n const spec = this._images.get(imgId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Held memory in base64/QOI decoders between images. Zero because each kept\n // decoder pins a wasm memory, and V8 caps those per process (~124 in a\n // sandboxed renderer), so idle terminals must not hold one.\n KEEP_DATA = 0,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _generation = 0;\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._generation++;\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n if (!this._initDecoder()) {\n this._aborted = true;\n return;\n }\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n if (!this._initDecoder()) {\n this._abortMulti = true;\n }\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n let data: Uint8Array;\n try {\n data = this._qoiDec.decode(this._dec.data8);\n } catch (e) {\n console.warn('IIP: could not decode QOI image', e);\n this._dec.release();\n this._qoiDec.release();\n return true;\n }\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n const generation = this._generation;\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n if (generation !== this._generation) {\n bm.close();\n return true;\n }\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n private _initDecoder(): boolean {\n try {\n this._dec.init();\n return true;\n } catch (e) {\n console.warn('IIP: could not allocate decoder', e);\n this._dec.release();\n return false;\n }\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { imageType } from '../IIPMetrics';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _generation = 0;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._generation++;\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded \u2192 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n // Budget WASM capacity, including one page of decoder state and rounding.\n const decoderCapacity = this._maxEncodedBytes + 131072;\n if (decoderCapacity > this._opts.storageLimit * 1000000) {\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:pending image budget exceeded', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n const maxPending = Math.max(1, Math.floor(this._opts.storageLimit * 1000000 / decoderCapacity));\n while (this._pendingTransmissions.size >= maxPending) {\n const oldest = this._pendingTransmissions.entries().next().value;\n if (!oldest) break;\n oldest[1].decoder.release();\n this._removePendingEntry(oldest[0]);\n if (oldest[1].cmd.id !== undefined) {\n this._sendResponse(oldest[1].cmd.id, 'ENOMEM:pending image budget exceeded', oldest[1].cmd.quiet ?? 0);\n }\n }\n const decoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n try {\n decoder.init();\n } catch (e) {\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n console.warn('KITTY: could not allocate decoder', e);\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:could not allocate decoder', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n this._activeDecoder = decoder;\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received \u2014 clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first \u2014 handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload \u2014 image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) \u2014 ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n const generation = this._generation;\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n if (generation !== this._generation) throw new Error('image decode canceled');\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency \u2014\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw \u00D7 r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n if (generation !== this._generation) throw new Error('image decode canceled');\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const metrics = imageType(bytes);\n // IHDR dimensions are parsed with signed shifts, so a value >= 0x80000000 comes\n // back negative and a bare `>` pixel-limit test passes it; require positive.\n if (metrics.mime !== 'image/png' || !(metrics.width > 0) || !(metrics.height > 0) || metrics.width * metrics.height > this._opts.pixelLimit) {\n throw new RangeError('PNG exceeds pixel limit or has invalid dimensions');\n }\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly \u2014 no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB\u2192RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes \u2014 ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] \u2192 uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1\u20133 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch (error) {\n if (error instanceof RangeError) throw error;\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const limit = Math.min(this._opts.kittySizeLimit, this._opts.pixelLimit * 4, this._opts.storageLimit * 1000000);\n let offsetIn = 0;\n // Bound inflation within one native transform before its output is budgeted.\n const source = new ReadableStream({\n pull(controller) {\n if (offsetIn >= compressed.length) {\n controller.close();\n return;\n }\n const end = Math.min(offsetIn + 4096, compressed.length);\n controller.enqueue(new Uint8Array(compressed.subarray(offsetIn, end)));\n offsetIn = end;\n }\n });\n const reader = source.pipeThrough(new DecompressionStream(format)).getReader();\n const chunks: Uint8Array[] = [];\n let totalLength = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n totalLength += value.byteLength;\n if (totalLength > limit) {\n await reader.cancel().catch(() => {});\n throw new RangeError('decompressed image exceeds byte limit');\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) \u2014 only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair \u2014 same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId \u2192 placementId \u2192 storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n // Encoded images awaiting placement are outside ImageStorage's pixel budget.\n // Unplaced payloads are evicted first so a new upload cannot erase a visible\n // image while abandoned blobs still hold budget; placed ones go only when\n // that is not enough, because the byte cap is a hard bound. The new image is\n // always stored, so an oversized one overshoots by at most one payload\n // (itself bounded by kittySizeLimit) rather than being dropped after an OK ack.\n const byteLimit = this._storage.getLimit() * 1000000;\n this._images.delete(imageId);\n let retainedBytes = 0;\n for (const image of this._images.values()) retainedBytes += image.data.size;\n for (const evictPlaced of [false, true]) {\n for (const [oldestId, image] of this._images) {\n if (retainedBytes + imageData.data.size <= byteLimit) break;\n if (this._kittyIdToStorageId.has(oldestId) !== evictPlaced) continue;\n retainedBytes -= image.data.size;\n this.deleteById(oldestId);\n }\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\nimport { LIMITS } from 'sixel/lib/wasm';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n// Why pooled: every decoder owns a wasm memory, and V8 caps live wasm memories\n// per process (~124 in a sandboxed renderer). Terminals borrow a decoder only\n// while a SIXEL sequence is open, so idle terminals hold none.\nconst MAX_IDLE_DECODERS = 2;\nconst idleDecoders = new Map();\nlet poolPrimed = false;\n\nfunction primeDecoderPool(memoryLimit: number): void {\n if (poolPrimed) return;\n poolPrimed = true;\n // Async compile once, off the parser's hot path; later decoders reuse the cached module.\n DecoderAsync({ memoryLimit, palette: DEFAULT_PALETTE }).then(\n d => releaseDecoder(d, memoryLimit),\n () => { poolPrimed = false; }\n );\n}\n\nfunction acquireDecoder(memoryLimit: number): Decoder {\n return idleDecoders.get(memoryLimit)?.pop() ?? new Decoder({ memoryLimit, palette: DEFAULT_PALETTE });\n}\n\nfunction releaseDecoder(dec: Decoder, memoryLimit: number): void {\n if (dec.memoryUsage > MEM_PERMA_LIMIT) {\n dec.release();\n }\n const idle = idleDecoders.get(memoryLimit) ?? [];\n if (idle.length < MAX_IDLE_DECODERS) {\n idle.push(dec);\n idleDecoders.set(memoryLimit, idle);\n }\n}\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n private _decMemoryLimit = 0;\n // Color registers outlive a single image, so they live here rather than in a pooled decoder.\n private readonly _palette = new Uint32Array(LIMITS.PALETTE_SIZE);\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n this._palette.set(DEFAULT_PALETTE);\n primeDecoderPool(this._opts.pixelLimit * 4);\n }\n\n public reset(): void {\n this._returnDecoder();\n this._palette.fill(0);\n this._palette.set(DEFAULT_PALETTE);\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n this._returnDecoder();\n const memoryLimit = this._opts.pixelLimit * 4;\n try {\n this._dec = acquireDecoder(memoryLimit);\n } catch (e) {\n // Why: exhausting wasm memory must drop this image, not throw out of the parser and wedge the write queue.\n console.warn(`SIXEL: could not allocate decoder - ${e}`);\n this._aborted = true;\n return;\n }\n this._decMemoryLimit = memoryLimit;\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, this._palette, this._opts.sixelPaletteLimit);\n }\n\n private _returnDecoder(): void {\n const dec = this._dec;\n if (!dec) return;\n this._dec = undefined;\n this._palette.set(dec.palette);\n releaseDecoder(dec, this._decMemoryLimit);\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n try {\n return this._unhook(success);\n } finally {\n this._returnDecoder();\n }\n }\n\n private _unhook(success: boolean): boolean {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode \u2014 cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 \u00A74 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const handler of this._handlers.values()) handler.reset();\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"], -+ "mappings": "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", -+ "names": ["exports", "red", "n", "green", "blue", "alpha", "toRGBA8888", "g", "b", "a", "fromRGBA8888", "color", "nearestColorIndex", "palette", "r", "min", "idx", "i", "dr", "dg", "db", "d", "clamp", "low", "high", "value", "h2c", "t1", "t2", "c", "HLStoRGB", "h", "l", "s", "v", "normalizeRGB", "normalizeHLS", "p", "require_lib", "__commonJSMin", "exports", "InWasm", "z", "s", "b", "r", "def", "t", "d", "m", "W", "e", "require_Base64Decoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmDecode", "MAP", "el", "D", "i", "EMPTY", "Base64Decoder", "keepSize", "maxBytes", "initialBytes", "m", "bytes", "requested", "needed", "newSize", "addPages", "data", "require_QoiDecoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmQoiDecode", "QoiDecoder", "keepSize", "d", "pixels", "ib", "dl", "bytes", "chunkP", "exports", "Colors_1", "wasm_1", "decodeBase64", "s", "bytestring", "result", "WASM_BYTES", "WASM_MODULE", "NULL_CANVAS", "CallbackProxy", "width", "mode", "DEFAULT_OPTIONS", "DecoderAsync", "opts", "cbProxy", "importObj", "inst", "Decoder", "exports", "_instance", "_cbProxy", "module", "pixels", "offset", "additionalPixels", "newCanvas", "adv", "remaining", "c", "i", "fillColor", "palette", "paletteLimit", "truncate", "data", "start", "end", "p", "length", "j", "currentWidth", "escape", "final", "finalOffset", "bw", "currentHeight", "decode", "dec", "decodeAsync", "toDisposable", "fn", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "len", "EventUtils", "forward", "from", "to", "e", "map", "i", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "import_Colors", "ImageRenderer", "_ImageRenderer", "Disposable", "_terminal", "MutableDisposable", "parent", "option", "toDisposable", "localDocument", "width", "height", "canvas", "ctx", "buffer", "imgData", "img", "value", "start", "end", "layer", "y", "w", "h", "imgSpec", "tileId", "col", "row", "count", "sourceWidth", "sourceHeight", "cols", "sx", "sy", "dx", "dy", "finalWidth", "finalHeight", "spec", "currentWidth", "currentHeight", "originalWidth", "originalHeight", "scaledWidth", "scaledHeight", "renderer", "key", "screenElement", "bWidth", "blueprint", "d32", "black", "white", "shift", "offset", "x", "ctx2", "i", "placeholder", "bitmap", "CELL_SIZE_DEFAULT", "ExtendedAttrsImage", "_ExtendedAttrsImage", "ext", "urlId", "imageId", "tileId", "value", "val", "EMPTY_ATTRS", "ImageStorage", "_terminal", "_renderer", "_opts", "e", "spec", "storedPixels", "id", "zero", "img", "opts", "cellSize", "cols", "rows", "buffer", "termCols", "termRows", "originX", "originY", "offset", "tileCount", "row", "line", "col", "endMarker", "imgSpec", "range", "hasTopImages", "hasBottomImages", "start", "end", "drawCalls", "placeholderCalls", "startTile", "startCol", "count", "a", "b", "call", "metrics", "oldCol", "tilesPerRow", "hasData", "rightCol", "lastTile", "expandCol", "x", "y", "orig", "canvas", "ImageRenderer", "room", "used", "current", "old", "oldSpec", "imgId", "import_Base64Decoder", "import_QoiDecoder", "toStr", "data", "s", "i", "toInt", "v", "toSize", "toName", "bs", "b", "DECODERS", "FILE_MARKER", "MULTIPARTFILE_MARKER", "FILEPART_MARKER", "FILEEND_MARKER", "REPORTCELLSIZE_MARKER", "MAX_FIELDCHARS", "HeaderParser", "k", "start", "end", "state", "pos", "buffer", "c", "UNSUPPORTED_TYPE", "imageType", "d", "d32", "width", "height", "jpgSize", "dim", "pos", "limit", "i", "len", "blockLength", "DEFAULT_HEADER", "IIPHandler", "_opts", "_renderer", "_storage", "_coreTerminal", "HeaderParser", "maxEncodedBytes", "initialBytes", "Base64Decoder", "QoiDecoder", "data", "start", "end", "dataPos", "success", "seqType", "w", "CELL_SIZE_DEFAULT", "h", "scale", "report", "cond", "metrics", "UNSUPPORTED_TYPE", "imageType", "blob", "e", "canvas", "ImageRenderer", "generation", "bm", "cw", "ch", "width", "height", "rw", "rh", "wf", "hf", "f", "s", "total", "cdim", "import_Base64Decoder", "parseKittyCommand", "data", "cmd", "parts", "part", "eqIdx", "key", "value", "numValue", "DECODER_OK", "KittyGraphicsHandler", "_opts", "_renderer", "_kittyStorage", "_coreTerminal", "key", "pending", "data", "start", "end", "controlEnd", "i", "copyLength", "parseKittyCommand", "payloadStart", "pendingKey", "previousEncodedSize", "decoderToRelease", "decoderCapacity", "maxPending", "oldest", "decoder", "Base64Decoder", "e", "success", "cmd", "isMoreComing", "decodeError", "finalCmd", "imageBytes", "result", "str", "bytes", "id", "image", "quiet", "format", "width", "height", "bytesPerPixel", "expectedBytes", "message", "placementId", "isOk", "pPart", "response", "generation", "bitmap", "cropX", "cropY", "cropW", "cropH", "maxCropW", "maxCropH", "finalCropW", "finalCropH", "cropped", "cw", "CELL_SIZE_DEFAULT", "ch", "imgCols", "imgRows", "w", "h", "buffer", "savedX", "savedY", "savedYbase", "layer", "scaled", "xOffset", "yOffset", "canvasW", "canvasH", "offsetCanvas", "ImageRenderer", "offsetCtx", "offsetBitmap", "zIndex", "scrolled", "metrics", "imageType", "blob", "url", "img", "resolve", "reject", "canvas", "pixelCount", "src32", "dst32", "alignedPixels", "srcOffset", "dstOffset", "b0", "b1", "b2", "srcByte", "dstByte", "compressed", "error", "limit", "offsetIn", "reader", "controller", "chunks", "totalLength", "done", "value", "offset", "chunk", "_KittyImageStorage", "_storage", "storageId", "kittyId", "id", "imageData", "imageId", "oldStorageId", "byteLimit", "retainedBytes", "image", "evictPlaced", "oldestId", "scrolling", "layer", "zIndex", "KittyImageStorage", "import_Colors", "import_Decoder", "import_wasm", "MEM_PERMA_LIMIT", "DEFAULT_PALETTE", "MAX_IDLE_DECODERS", "idleDecoders", "poolPrimed", "primeDecoderPool", "memoryLimit", "d", "releaseDecoder", "acquireDecoder", "dec", "idle", "SixelHandler", "_opts", "_storage", "_coreTerminal", "params", "e", "fillColor", "extractActiveBg", "data", "start", "end", "success", "width", "height", "canvas", "ImageRenderer", "attr", "colors", "bg", "convertLe", "t", "color", "SixelImageStorage", "_storage", "_opts", "_renderer", "_terminal", "img", "height", "cellSize", "CELL_SIZE_DEFAULT", "rows", "i", "IIPImageStorage", "_storage", "img", "DEFAULT_OPTIONS", "MAX_SIXEL_PALETTE_SIZE", "ImageAddon", "opts", "Emitter", "DEFAULT_OPTIONS", "handler", "obj", "args", "terminal", "ImageRenderer", "ImageStorage", "windowOps", "params", "range", "metrics", "sixelStorage", "SixelImageStorage", "sixelHandler", "SixelHandler", "iipStorage", "IIPImageStorage", "iipHandler", "IIPHandler", "kittyStorage", "KittyImageStorage", "kittyHandler", "KittyGraphicsHandler", "limit", "value", "x", "y", "s", "i", "MAX_SIXEL_PALETTE_SIZE", "width", "height", "cellSize", "CELL_SIZE_DEFAULT"] - } -diff --git a/src/IIPHandler.ts b/src/IIPHandler.ts -index 559b907416eb38318f439d060d7f89311ed34c7e..73cedbe99f831bffd202697cc8ba80a46a39cb99 100644 ---- a/src/IIPHandler.ts -+++ b/src/IIPHandler.ts -@@ -13,8 +13,10 @@ import { imageType, UNSUPPORTED_TYPE } from './IIPMetrics'; - - // Local const enum mirror - esbuild can't inline const enums from external packages - const enum DecoderConst { -- // Limit held memory in base64 decoder (encoded bytes). -- KEEP_DATA = 4194304, -+ // Held memory in base64/QOI decoders between images. Zero because each kept -+ // decoder pins a wasm memory, and V8 caps those per process (~124 in a -+ // sandboxed renderer), so idle terminals must not hold one. -+ KEEP_DATA = 0, - // Initial buffer allocation for the decoder. - INITIAL_DATA = 1048576, - // Local mirror of const enum (esbuild can't inline const enums from external packages) -@@ -34,6 +36,7 @@ const DEFAULT_HEADER: IHeaderFields = { - - - export class IIPHandler implements IOscHandler, IResetHandler { -+ private _generation = 0; - private _aborted = false; - private _hp = new HeaderParser(); - private _header: IHeaderFields = DEFAULT_HEADER; -@@ -55,6 +58,7 @@ export class IIPHandler implements IOscHandler, IResetHandler { - } - - public reset(): void { -+ this._generation++; - this._hp.reset(); - this._dec.release(); - this._qoiDec.release(); -@@ -92,7 +96,10 @@ export class IIPHandler implements IOscHandler, IResetHandler { - this._aborted = true; - return; - } -- this._dec.init(); -+ if (!this._initDecoder()) { -+ this._aborted = true; -+ return; -+ } - } else if (this._abortMulti) { - this._aborted = true; - return; -@@ -135,7 +142,9 @@ export class IIPHandler implements IOscHandler, IResetHandler { - this._isMultipart = true; - this._abortMulti = false; - this._dec.release(); -- this._dec.init(); -+ if (!this._initDecoder()) { -+ this._abortMulti = true; -+ } - return true; - } - -@@ -179,7 +188,15 @@ export class IIPHandler implements IOscHandler, IResetHandler { - - let blob: Blob | ImageData; - if (metrics.mime === 'image/qoi') { -- const data = this._qoiDec.decode(this._dec.data8); -+ let data: Uint8Array; -+ try { -+ data = this._qoiDec.decode(this._dec.data8); -+ } catch (e) { -+ console.warn('IIP: could not decode QOI image', e); -+ this._dec.release(); -+ this._qoiDec.release(); -+ return true; -+ } - blob = new ImageData( - new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength), - this._qoiDec.width, -@@ -198,8 +215,13 @@ export class IIPHandler implements IOscHandler, IResetHandler { - blob = new Blob([this._dec.data8], { type: metrics.mime }); - } - this._dec.release(); -+ const generation = this._generation; - return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h }) - .then(bm => { -+ if (generation !== this._generation) { -+ bm.close(); -+ return true; -+ } - this._storage.addImage(bm); - return true; - }) -@@ -209,6 +231,18 @@ export class IIPHandler implements IOscHandler, IResetHandler { - }); - } - -+ // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue. -+ private _initDecoder(): boolean { -+ try { -+ this._dec.init(); -+ return true; -+ } catch (e) { -+ console.warn('IIP: could not allocate decoder', e); -+ this._dec.release(); -+ return false; -+ } -+ } -+ - private _resize(w: number, h: number): [number, number] { - const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width; - const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height; -diff --git a/src/ImageAddon.ts b/src/ImageAddon.ts -index 8fd39543118cd420e36c1614c1af370b6c7bbfbb..0c44d2a81642113417bf8dc10a4faa76d7cc5864 100644 ---- a/src/ImageAddon.ts -+++ b/src/ImageAddon.ts -@@ -113,6 +113,7 @@ export class ImageAddon implements ITerminalAddon, IImageApi { - } - - public dispose(): void { -+ for (const handler of this._handlers.values()) handler.reset(); - for (const obj of this._disposables) { - obj.dispose(); - } -diff --git a/src/ImageRenderer.ts b/src/ImageRenderer.ts -index 5854efaec1fdf9dfcb886023542998a563b6d2f2..3afaf9bd63ffd7a4cdf32bf0ac24cf33a8aa814f 100644 ---- a/src/ImageRenderer.ts -+++ b/src/ImageRenderer.ts -@@ -186,16 +186,17 @@ export class ImageRenderer extends Disposable implements IDisposable { - - this._rescaleImage(imgSpec, width, height); - const img = imgSpec.actual!; -- const cols = Math.ceil(img.width / width); -+ const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize; -+ const cols = Math.ceil(img.width / sourceWidth); - -- const sx = (tileId % cols) * width; -- const sy = Math.floor(tileId / cols) * height; -+ const sx = (tileId % cols) * sourceWidth; -+ const sy = Math.floor(tileId / cols) * sourceHeight; - const dx = col * width; - const dy = row * height; - - // safari bug: never access image source out of bounds -- const finalWidth = count * width + sx > img.width ? img.width - sx : count * width; -- const finalHeight = sy + height > img.height ? img.height - sy : height; -+ const finalWidth = count * sourceWidth + sx > img.width ? img.width - sx : count * sourceWidth; -+ const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight; - - // Floor all pixel offsets to get stable tile mapping without any overflows. - // Note: For not pixel perfect aligned cells like in the DOM renderer -@@ -204,7 +205,7 @@ export class ImageRenderer extends Disposable implements IDisposable { - ctx.drawImage( - img, - Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight), -- Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight) -+ Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight) - ); - } - -@@ -219,19 +220,20 @@ export class ImageRenderer extends Disposable implements IDisposable { - } - this._rescaleImage(imgSpec, width, height); - const img = imgSpec.actual!; -- const cols = Math.ceil(img.width / width); -- const sx = (tileId % cols) * width; -- const sy = Math.floor(tileId / cols) * height; -- const finalWidth = width + sx > img.width ? img.width - sx : width; -- const finalHeight = sy + height > img.height ? img.height - sy : height; -- -- const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight); -+ const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize; -+ const cols = Math.ceil(img.width / sourceWidth); -+ const sx = (tileId % cols) * sourceWidth; -+ const sy = Math.floor(tileId / cols) * sourceHeight; -+ const finalWidth = sourceWidth + sx > img.width ? img.width - sx : sourceWidth; -+ const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight; -+ -+ const canvas = ImageRenderer.createCanvas(this.document, Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight)); - const ctx = canvas.getContext('2d'); - if (ctx) { - ctx.drawImage( - img, - Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight), -- 0, 0, Math.floor(finalWidth), Math.floor(finalHeight) -+ 0, 0, canvas.width, canvas.height - ); - return canvas; - } -@@ -299,11 +301,16 @@ export class ImageRenderer extends Disposable implements IDisposable { - spec.actualCellSize.height = originalHeight; - return; - } -- const canvas = ImageRenderer.createCanvas( -- this.document, -- Math.ceil(spec.orig!.width * currentWidth / originalWidth), -- Math.ceil(spec.orig!.height * currentHeight / originalHeight) -- ); -+ const scaledWidth = Math.ceil(spec.orig!.width * currentWidth / originalWidth); -+ const scaledHeight = Math.ceil(spec.orig!.height * currentHeight / originalHeight); -+ // Upscale visible tiles directly; a full zoomed copy can dwarf the image budget. -+ if (scaledWidth * scaledHeight > spec.orig!.width * spec.orig!.height) { -+ spec.actual = spec.orig; -+ spec.actualCellSize.width = originalWidth; -+ spec.actualCellSize.height = originalHeight; -+ return; -+ } -+ const canvas = ImageRenderer.createCanvas(this.document, scaledWidth, scaledHeight); - const ctx = canvas.getContext('2d'); - if (ctx) { - ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height); -@@ -415,7 +422,11 @@ export class ImageRenderer extends Disposable implements IDisposable { - for (let i = 0; i < width; i += bWidth) { - ctx2.drawImage(blueprint, i, 0); - } -- ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap); -+ const placeholder = this._placeholder; -+ ImageRenderer.createImageBitmap(placeholder).then(bitmap => { -+ if (this._placeholder !== placeholder) bitmap?.close(); -+ else this._placeholderBitmap = bitmap; -+ }).catch(() => {}); - } - - public get document(): Document | undefined { -diff --git a/src/SixelHandler.ts b/src/SixelHandler.ts -index 1af2d85bcdd541ed60b1e707f6186a91f1bbf1b2..0711a122ea43d5212a2851add9e744b65550ec85 100644 ---- a/src/SixelHandler.ts -+++ b/src/SixelHandler.ts -@@ -10,6 +10,7 @@ import { RGBA8888 } from 'sixel/lib/Types'; - import { ImageRenderer } from './ImageRenderer'; - - import { DecoderAsync, Decoder } from 'sixel/lib/Decoder'; -+import { LIMITS } from 'sixel/lib/wasm'; - - // always free decoder ressources after decoding if it exceeds this limit - const MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB -@@ -18,48 +19,88 @@ const MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB - const DEFAULT_PALETTE = PALETTE_ANSI_256; - DEFAULT_PALETTE.set(PALETTE_VT340_COLOR); - -+// Why pooled: every decoder owns a wasm memory, and V8 caps live wasm memories -+// per process (~124 in a sandboxed renderer). Terminals borrow a decoder only -+// while a SIXEL sequence is open, so idle terminals hold none. -+const MAX_IDLE_DECODERS = 2; -+const idleDecoders = new Map(); -+let poolPrimed = false; -+ -+function primeDecoderPool(memoryLimit: number): void { -+ if (poolPrimed) return; -+ poolPrimed = true; -+ // Async compile once, off the parser's hot path; later decoders reuse the cached module. -+ DecoderAsync({ memoryLimit, palette: DEFAULT_PALETTE }).then( -+ d => releaseDecoder(d, memoryLimit), -+ () => { poolPrimed = false; } -+ ); -+} -+ -+function acquireDecoder(memoryLimit: number): Decoder { -+ return idleDecoders.get(memoryLimit)?.pop() ?? new Decoder({ memoryLimit, palette: DEFAULT_PALETTE }); -+} -+ -+function releaseDecoder(dec: Decoder, memoryLimit: number): void { -+ if (dec.memoryUsage > MEM_PERMA_LIMIT) { -+ dec.release(); -+ } -+ const idle = idleDecoders.get(memoryLimit) ?? []; -+ if (idle.length < MAX_IDLE_DECODERS) { -+ idle.push(dec); -+ idleDecoders.set(memoryLimit, idle); -+ } -+} -+ - - export class SixelHandler implements IDcsHandler, IResetHandler { - private _size = 0; - private _aborted = false; - private _dec: Decoder | undefined; -+ private _decMemoryLimit = 0; -+ // Color registers outlive a single image, so they live here rather than in a pooled decoder. -+ private readonly _palette = new Uint32Array(LIMITS.PALETTE_SIZE); - - constructor( - private readonly _opts: IImageAddonOptions, - private readonly _storage: SixelImageStorage, - private readonly _coreTerminal: ITerminalExt - ) { -- DecoderAsync({ -- memoryLimit: this._opts.pixelLimit * 4, -- palette: DEFAULT_PALETTE, -- paletteLimit: this._opts.sixelPaletteLimit -- }).then(d => this._dec = d); -+ this._palette.set(DEFAULT_PALETTE); -+ primeDecoderPool(this._opts.pixelLimit * 4); - } - - public reset(): void { -- /** -- * reset sixel decoder to defaults: -- * - release all memory -- * - nullify palette (4096) -- * - apply default palette (256) -- */ -- if (this._dec) { -- this._dec.release(); -- // FIXME: missing interface on decoder to nullify full palette -- (this._dec as any)._palette.fill(0); -- this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit); -- } -+ this._returnDecoder(); -+ this._palette.fill(0); -+ this._palette.set(DEFAULT_PALETTE); - } - - public hook(params: IParams): void { - this._size = 0; - this._aborted = false; -- if (this._dec) { -- const fillColor = params.params[1] === 1 ? 0 : extractActiveBg( -- this._coreTerminal._core._inputHandler._curAttrData, -- this._coreTerminal._core._themeService?.colors); -- this._dec.init(fillColor, null, this._opts.sixelPaletteLimit); -+ this._returnDecoder(); -+ const memoryLimit = this._opts.pixelLimit * 4; -+ try { -+ this._dec = acquireDecoder(memoryLimit); -+ } catch (e) { -+ // Why: exhausting wasm memory must drop this image, not throw out of the parser and wedge the write queue. -+ console.warn(`SIXEL: could not allocate decoder - ${e}`); -+ this._aborted = true; -+ return; - } -+ this._decMemoryLimit = memoryLimit; -+ const fillColor = params.params[1] === 1 ? 0 : extractActiveBg( -+ this._coreTerminal._core._inputHandler._curAttrData, -+ this._coreTerminal._core._themeService?.colors); -+ this._dec.init(fillColor, this._palette, this._opts.sixelPaletteLimit); -+ } -+ -+ private _returnDecoder(): void { -+ const dec = this._dec; -+ if (!dec) return; -+ this._dec = undefined; -+ this._palette.set(dec.palette); -+ releaseDecoder(dec, this._decMemoryLimit); - } - - public put(data: Uint32Array, start: number, end: number): void { -@@ -83,6 +124,14 @@ export class SixelHandler implements IDcsHandler, IResetHandler { - } - - public unhook(success: boolean): boolean | Promise { -+ try { -+ return this._unhook(success); -+ } finally { -+ this._returnDecoder(); -+ } -+ } -+ -+ private _unhook(success: boolean): boolean { - if (this._aborted || !success || !this._dec) { - return true; - } -@@ -100,9 +149,6 @@ export class SixelHandler implements IDcsHandler, IResetHandler { - - const canvas = ImageRenderer.createCanvas(undefined, width, height); - canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0); -- if (this._dec.memoryUsage > MEM_PERMA_LIMIT) { -- this._dec.release(); -- } - this._storage.addImage(canvas); - return true; - } -diff --git a/src/kitty/KittyGraphicsHandler.ts b/src/kitty/KittyGraphicsHandler.ts -index de889dfff75d9ecc8ab47a025e6989ffe75bb202..cf66e5b75c78645b1641e53d1425d88201134f78 100644 ---- a/src/kitty/KittyGraphicsHandler.ts -+++ b/src/kitty/KittyGraphicsHandler.ts -@@ -7,6 +7,7 @@ import { IDisposable } from '@xterm/xterm'; - import { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types'; - import { ImageRenderer } from '../ImageRenderer'; - import { CELL_SIZE_DEFAULT } from '../ImageStorage'; -+import { imageType } from '../IIPMetrics'; - import { KittyImageStorage } from './KittyImageStorage'; - import Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm'; - import { -@@ -37,6 +38,7 @@ const DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK; - // Kitty graphics protocol handler with streaming base64 decoding. - export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable { - private _aborted = false; -+ private _generation = 0; - private _decodeError = false; - - private _activeDecoder: Base64Decoder | null = null; -@@ -80,6 +82,7 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos - } - - public reset(): void { -+ this._generation++; - this._cleanupAllPending(); - if (this._activeDecoder) { - this._activeDecoder.release(); -@@ -200,8 +203,38 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos - this._activeDecoder = pending.decoder; - } - if (!this._activeDecoder) { -- this._activeDecoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes); -- this._activeDecoder.init(); -+ // Budget WASM capacity, including one page of decoder state and rounding. -+ const decoderCapacity = this._maxEncodedBytes + 131072; -+ if (decoderCapacity > this._opts.storageLimit * 1000000) { -+ this._aborted = true; -+ if (this._parsedCommand?.id !== undefined) { -+ this._sendResponse(this._parsedCommand.id, 'ENOMEM:pending image budget exceeded', this._parsedCommand.quiet ?? 0); -+ } -+ return; -+ } -+ const maxPending = Math.max(1, Math.floor(this._opts.storageLimit * 1000000 / decoderCapacity)); -+ while (this._pendingTransmissions.size >= maxPending) { -+ const oldest = this._pendingTransmissions.entries().next().value; -+ if (!oldest) break; -+ oldest[1].decoder.release(); -+ this._removePendingEntry(oldest[0]); -+ if (oldest[1].cmd.id !== undefined) { -+ this._sendResponse(oldest[1].cmd.id, 'ENOMEM:pending image budget exceeded', oldest[1].cmd.quiet ?? 0); -+ } -+ } -+ const decoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes); -+ try { -+ decoder.init(); -+ } catch (e) { -+ // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue. -+ console.warn('KITTY: could not allocate decoder', e); -+ this._aborted = true; -+ if (this._parsedCommand?.id !== undefined) { -+ this._sendResponse(this._parsedCommand.id, 'ENOMEM:could not allocate decoder', this._parsedCommand.quiet ?? 0); -+ } -+ return; -+ } -+ this._activeDecoder = decoder; - } - - if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) { -@@ -550,9 +583,11 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos - } - - private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise { -+ const generation = this._generation; - let bitmap: ImageBitmap | undefined = await this._createBitmap(image); - - try { -+ if (generation !== this._generation) throw new Error('image decode canceled'); - const cropX = Math.max(0, cmd.x ?? 0); - const cropY = Math.max(0, cmd.y ?? 0); - const cropW = cmd.sourceWidth || (bitmap.width - cropX); -@@ -660,6 +695,7 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos - } - } - -+ if (generation !== this._generation) throw new Error('image decode canceled'); - const zIndex = cmd.zIndex ?? 0; - this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex); - bitmap = undefined; // ownership transferred to storage -@@ -693,6 +729,12 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos - } - - if (image.format === KittyFormat.PNG) { -+ const metrics = imageType(bytes); -+ // IHDR dimensions are parsed with signed shifts, so a value >= 0x80000000 comes -+ // back negative and a bare `>` pixel-limit test passes it; require positive. -+ if (metrics.mime !== 'image/png' || !(metrics.width > 0) || !(metrics.height > 0) || metrics.width * metrics.height > this._opts.pixelLimit) { -+ throw new RangeError('PNG exceeds pixel limit or has invalid dimensions'); -+ } - const blob = new Blob([bytes as BlobPart], { type: 'image/png' }); - if (!window.createImageBitmap) { - const url = URL.createObjectURL(blob); -@@ -775,27 +817,45 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos - private async _decompressZlib(compressed: Uint8Array): Promise { - try { - return await this._decompress(compressed, 'deflate'); -- } catch { -+ } catch (error) { -+ if (error instanceof RangeError) throw error; - return await this._decompress(compressed, 'deflate-raw'); - } - } - - private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise { -- const ds = new DecompressionStream(format); -- const writer = ds.writable.getWriter(); -- writer.write(compressed as BufferSource); -- writer.close(); -- -+ const limit = Math.min(this._opts.kittySizeLimit, this._opts.pixelLimit * 4, this._opts.storageLimit * 1000000); -+ let offsetIn = 0; -+ // Bound inflation within one native transform before its output is budgeted. -+ const source = new ReadableStream({ -+ pull(controller) { -+ if (offsetIn >= compressed.length) { -+ controller.close(); -+ return; -+ } -+ const end = Math.min(offsetIn + 4096, compressed.length); -+ controller.enqueue(new Uint8Array(compressed.subarray(offsetIn, end))); -+ offsetIn = end; -+ } -+ }); -+ const reader = source.pipeThrough(new DecompressionStream(format)).getReader(); - const chunks: Uint8Array[] = []; -- const reader = ds.readable.getReader(); -- -- while (true) { -- const { done, value } = await reader.read(); -- if (done) break; -- chunks.push(value); -+ let totalLength = 0; -+ try { -+ while (true) { -+ const { done, value } = await reader.read(); -+ if (done) break; -+ totalLength += value.byteLength; -+ if (totalLength > limit) { -+ await reader.cancel().catch(() => {}); -+ throw new RangeError('decompressed image exceeds byte limit'); -+ } -+ chunks.push(value); -+ } -+ } finally { -+ reader.releaseLock(); - } - -- const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0); - const result = new Uint8Array(totalLength); - let offset = 0; - for (const chunk of chunks) { -diff --git a/src/kitty/KittyImageStorage.ts b/src/kitty/KittyImageStorage.ts -index 1f5c09ec9e2700f8f6dbd8436a1802217dfc99ef..016943a77c7e8e27da5899d54cd48d82761a87c8 100644 ---- a/src/kitty/KittyImageStorage.ts -+++ b/src/kitty/KittyImageStorage.ts -@@ -83,6 +83,25 @@ export class KittyImageStorage implements IDisposable { - this._evictUndisplayedImages(); - } - -+ // Encoded images awaiting placement are outside ImageStorage's pixel budget. -+ // Unplaced payloads are evicted first so a new upload cannot erase a visible -+ // image while abandoned blobs still hold budget; placed ones go only when -+ // that is not enough, because the byte cap is a hard bound. The new image is -+ // always stored, so an oversized one overshoots by at most one payload -+ // (itself bounded by kittySizeLimit) rather than being dropped after an OK ack. -+ const byteLimit = this._storage.getLimit() * 1000000; -+ this._images.delete(imageId); -+ let retainedBytes = 0; -+ for (const image of this._images.values()) retainedBytes += image.data.size; -+ for (const evictPlaced of [false, true]) { -+ for (const [oldestId, image] of this._images) { -+ if (retainedBytes + imageData.data.size <= byteLimit) break; -+ if (this._kittyIdToStorageId.has(oldestId) !== evictPlaced) continue; -+ retainedBytes -= image.data.size; -+ this.deleteById(oldestId); -+ } -+ } -+ - this._images.set(imageId, { - ...imageData, - id: imageId diff --git a/config/patches/@xterm__addon-image@0.10.0-beta.301.patch b/config/patches/@xterm__addon-image@0.10.0-beta.301.patch new file mode 100644 index 00000000000..b5271f466a4 --- /dev/null +++ b/config/patches/@xterm__addon-image@0.10.0-beta.301.patch @@ -0,0 +1,602 @@ +diff --git a/lib/addon-image.js b/lib/addon-image.js +index fe7c072fd19308c1134b40f36eab8242b627b5e4..e9f326b80ae13f294774e85bc574718bdfe7b33e 100644 +--- a/lib/addon-image.js ++++ b/lib/addon-image.js +@@ -1,3 +1,3 @@ + /*! For license information please see addon-image.js.LICENSE.txt */ +-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ImageAddon=t():e.ImageAddon=t()}(globalThis,()=>(()=>{"use strict";var e={939(e,t){function i(e){return 255&e}function A(e){return e>>>8&255}function s(e){return e>>>16&255}function r(e,t,i,A=255){return((255&A)<<24|(255&i)<<16|(255&t)<<8|255&e)>>>0}function o(e,t,i){return Math.max(e,Math.min(i,t))}function n(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),6*i<1?t+6*(e-t)*i:2*i<1?e:3*i<2?t+(e-t)*(4-6*i):t}function a(e,t,i){return(4278190080|Math.round(i/100*255)<<16|Math.round(t/100*255)<<8|Math.round(e/100*255))>>>0}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_FOREGROUND=t.DEFAULT_BACKGROUND=t.PALETTE_ANSI_256=t.PALETTE_VT340_GREY=t.PALETTE_VT340_COLOR=t.normalizeHLS=t.normalizeRGB=t.nearestColorIndex=t.fromRGBA8888=t.toRGBA8888=t.alpha=t.blue=t.green=t.red=t.BIG_ENDIAN=void 0,t.BIG_ENDIAN=255===new Uint8Array(new Uint32Array([4278190080]).buffer)[0],t.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly."),t.red=i,t.green=A,t.blue=s,t.alpha=function(e){return e>>>24&255},t.toRGBA8888=r,t.fromRGBA8888=function(e){return[255&e,e>>8&255,e>>16&255,e>>>24]},t.nearestColorIndex=function(e,t){const r=i(e),o=A(e),n=s(e);let a=Number.MAX_SAFE_INTEGER,h=-1;for(let e=0;e{const e=[r(0,0,0),r(205,0,0),r(0,205,0),r(205,205,0),r(0,0,238),r(205,0,205),r(0,250,205),r(229,229,229),r(127,127,127),r(255,0,0),r(0,255,0),r(255,255,0),r(92,92,255),r(255,0,255),r(0,255,255),r(255,255,255)],t=[0,95,135,175,215,255];for(let i=0;i<6;++i)for(let A=0;A<6;++A)for(let s=0;s<6;++s)e.push(r(t[i],t[A],t[s]));for(let t=8;t<=238;t+=10)e.push(r(t,t,t));return new Uint32Array(e)})(),t.DEFAULT_BACKGROUND=r(0,0,0,255),t.DEFAULT_FOREGROUND=r(255,255,255,255)},591(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.decodeAsync=t.decode=t.Decoder=t.DecoderAsync=void 0;const A=i(939),s=i(199),r=function(e){if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}}const h={memoryLimit:134217728,sixelColor:A.DEFAULT_FOREGROUND,fillColor:A.DEFAULT_BACKGROUND,palette:A.PALETTE_VT340_COLOR,paletteLimit:s.LIMITS.PALETTE_SIZE,truncate:!0};function g(e){const t=new a,i={env:{handle_band:t.handle_band.bind(t),mode_parsed:t.mode_parsed.bind(t)}};return WebAssembly.instantiate(o||r,i).then(i=>(o=o||i.module,new d(e,i.instance||i,t)))}t.DecoderAsync=g;class d{constructor(e,t,i){if(this._PIXEL_OFFSET=s.LIMITS.MAX_WIDTH+4,this._canvas=n,this._bandWidths=[],this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},h,e),this._opts.paletteLimit>s.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${s.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{const e=o||(o=new WebAssembly.Module(r));t=new WebAssembly.Instance(e,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),s.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),s.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(A.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(2===e){const e=this.width*this.height;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}this._maxWidth=this._width}else if(1===e)if(2===this._level){const e=Math.min(this._rasterWidth,s.LIMITS.MAX_WIDTH)*this._rasterHeight;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){const i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&4*i>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");const e=new Uint32Array(65536*Math.ceil(i/65536));e.set(this._canvas),this._canvas=e}}_handle_band(e){const t=this._PIXEL_OFFSET;let i=this._lastOffset;if(2===this._mode){let A=this.height-this._currentHeight,s=0;for(;s<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),i+e*s),s++,A--;this._lastOffset+=e*s,this._currentHeight+=s}else if(1===this._mode){this._realloc(i,6*e),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=6*e,this._currentHeight+=6}return 0}get width(){return 1!==this._mode?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return 1!==this._mode?this._height:this._wasm.current_width()?6*this._bandWidths.length+this._wasm.current_height():6*this._bandWidths.length}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,s.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){const i=this._PIXEL_OFFSET;let A=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*s,i*s+e),A+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,A+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(1===this._mode){if(this._minWidth===this._maxWidth){let t=!1;if(e)if(e!==this._minWidth)t=!0;else{const t=this._PIXEL_OFFSET;let i=this._lastOffset;this._realloc(i,6*e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A)}if(!t)return this._canvas.subarray(0,this.width*this.height)}const t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let e=0;e{if(this._disposed)return(0,A.toDisposable)(()=>{});const s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);const r=(0,A.toDisposable)(()=>{const e=this._listeners.indexOf(s);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(r):i.add(r)),r}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,A=t.length;it.fire(e))},e.map=function(e,t){return(i,A,s)=>e(e=>i.call(A,t(e)),void 0,s)},e.any=function(...e){return(t,i,s)=>{const r=new A.DisposableStore;for(const A of e)r.add(A(e=>t.call(i,e)));return s&&(Array.isArray(s)?s.push(r):s.add(r)),r}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(s||(t.EventUtils=s={}))},426(e,t){function i(e){return{dispose:e}}function A(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=A,t.combinedDisposable=function(...e){return i(()=>A(e))};class s{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=s;class r{constructor(){this._store=new s}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=r,r.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},917(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new A}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class A{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new A(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&void 0===this.payload}}t.ExtendedAttrs=A},721(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;const A=i(348),s=i(564),r=i(917);class o extends r.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new r.ExtendedAttrs,this.combinedData=""}static fromCharData(e){const t=new o;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,A.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[s.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[s.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[s.CHAR_DATA_CHAR_INDEX].length){const i=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const A=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=A&&A<=57343?this.content=1024*(i-55296)+A-56320+65536|e[s.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[s.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[s.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[s.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor())return!1;if(this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor())return!1;if(this.isInverse()!==e.isInverse())return!1;if(this.isBold()!==e.isBold())return!1;if(this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;const t=this.isUnderlineColorDefault(),i=e.isUnderlineColorDefault();if(!t||!i){if(t!==i)return!1;if(this.getUnderlineColor()!==e.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==e.getUnderlineColorMode())return!1}}return this.isOverline()===e.isOverline()&&this.isBlink()===e.isBlink()&&this.isInvisible()===e.isInvisible()&&this.isItalic()===e.isItalic()&&this.isDim()===e.isDim()&&this.isStrikethrough()===e.isStrikethrough()}}t.CellData=o},564(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=t.DEFAULT_COLOR<<9|256,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},348(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let A="";for(let s=t;s65535?(t-=65536,A+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):A+=String.fromCharCode(t)}return A},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let A=0,s=0;if(this._interim){const i=e.charCodeAt(s++);56320<=i&&i<=57343?t[A++]=1024*(this._interim-55296)+i-56320+65536:(t[A++]=this._interim,t[A++]=i),this._interim=0}for(let r=s;r=i)return this._interim=s,A;const o=e.charCodeAt(r);56320<=o&&o<=57343?t[A++]=1024*(s-55296)+o-56320+65536:(t[A++]=s,t[A++]=o);continue}65279!==s&&(t[A++]=s)}return A}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let A,s,r,o,n,a=0,h=0;if(this.interim[0]){let A=!1,s=this.interim[0];s&=192==(224&s)?31:224==(240&s)?15:7;let r,o=0;for(;(r=this.interim[++o])&&o<4;)s<<=6,s|=63&r;const n=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,g=n-o;for(;h=i)return 0;if(r=e[h++],128!=(192&r)){h--,A=!0;break}this.interim[o++]=r,s<<=6,s|=63&r}A||(2===n?s<128?h--:t[a++]=s:3===n?s<2048||s>=55296&&s<=57343||65279===s||(t[a++]=s):s<65536||s>1114111||(t[a++]=s)),this.interim.fill(0)}const g=i-4;let d=h;for(;d=i)return this.interim[0]=A,a;if(s=e[d++],128!=(192&s)){d--;continue}if(n=(31&A)<<6|63&s,n<128){d--;continue}t[a++]=n}else if(224==(240&A)){if(d>=i)return this.interim[0]=A,a;if(s=e[d++],128!=(192&s)){d--;continue}if(d>=i)return this.interim[0]=A,this.interim[1]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(n=(15&A)<<12|(63&s)<<6|63&r,n<2048||n>=55296&&n<=57343||65279===n)continue;t[a++]=n}else if(240==(248&A)){if(d>=i)return this.interim[0]=A,a;if(s=e[d++],128!=(192&s)){d--;continue}if(d>=i)return this.interim[0]=A,this.interim[1]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=A,this.interim[1]=s,this.interim[2]=r,a;if(o=e[d++],128!=(192&o)){d--;continue}if(n=(7&A)<<18|(63&s)<<12|(63&r)<<6|63&o,n<65536||n>1114111)continue;t[a++]=n}}return a}}},795(e,t,i){var A=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IIPHandler=void 0;const s=i(463),r=i(699),o=A(i(669)),n=A(i(61)),a=i(389),h=i(462),g={type:0,name:"Unnamed file",size:0,width:"auto",height:"auto",preserveAspectRatio:1,inline:0};t.IIPHandler=class{constructor(e,t,i,A){this._opts=e,this._renderer=t,this._storage=i,this._coreTerminal=A,this._aborted=!1,this._hp=new a.HeaderParser,this._header=g,this._isMultipart=!1,this._abortMulti=!1;const s=Math.ceil(4*this._opts.iipSizeLimit/3),r=Math.min(1048576,s);this._dec=new o.default(4194304,s,r),this._qoiDec=new n.default(4194304)}reset(){this._hp.reset(),this._dec.release(),this._qoiDec.release()}start(){this._aborted=!1,this._hp.reset()}put(e,t,i){if(!this._aborted)if(4===this._hp.state)0!==this._dec.put(e.subarray(t,i))&&(this._dec.release(),this._aborted=!0);else{const A=this._hp.parse(e,t,i);if(-1===A)return void(this._aborted=!0);if(A>0){if(1===this._hp.fields.type){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},g,this._hp.fields),!this._header.inline)return void(this._aborted=!0);this._dec.init()}else if(this._abortMulti)return void(this._aborted=!0);0!==this._dec.put(e.subarray(A,i))&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){var t,i,A;if(this._aborted)return!0;if(4!==this._hp.state&&this._hp.end())return!0;const o=this._hp.fields.type;if(3===o)return!0;if(5===o){let e=r.CELL_SIZE_DEFAULT.width,i=r.CELL_SIZE_DEFAULT.height;this._renderer.dimensions&&(e=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,i=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);const s=null!==(A=null===(t=this._coreTerminal._core._coreBrowserService)||void 0===t?void 0:t.dpr)&&void 0!==A?A:1,o=`]1337;ReportCellSize=${i.toFixed(3)};${e.toFixed(3)};${s.toFixed(3)}\\`;return this._coreTerminal.input(o,!1),!0}if(2===o)return this._header=Object.assign({},g,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._dec.init(),!0;if(4===o){if(!this._isMultipart)return!0;if(this._isMultipart=!1,this._abortMulti||2!==this._header.type)return!0}let n,a,d=0,l=0,I=h.UNSUPPORTED_TYPE;if((n=e)&&((n=!this._dec.end())?(I=(0,h.imageType)(this._dec.data8),(n="unsupported"!==I.mime)?(d=I.width,l=I.height,(n=d&&l&&d*l(this._storage.addImage(e),!0)).catch(e=>(console.warn(`IIP: decoding error ${I.mime} ${I.width}x${I.height}`,e),!0))}_resize(e,t){var i,A,s,o;const n=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.width)||r.CELL_SIZE_DEFAULT.width,a=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.height)||r.CELL_SIZE_DEFAULT.height,h=(null===(s=this._renderer.dimensions)||void 0===s?void 0:s.css.canvas.width)||n*this._coreTerminal.cols,g=(null===(o=this._renderer.dimensions)||void 0===o?void 0:o.css.canvas.height)||a*this._coreTerminal.rows,d=this._dim(this._header.width,h,n),l=this._dim(this._header.height,g,a);if(!d&&!l){const i=h/e,A=(g-a)/t,s=Math.min(i,A);return s<1?[e*s,t*s]:[e,t]}return d?!this._header.preserveAspectRatio&&d&&l?[d,l]:[d,t*d/e]:[e*l/t,l]}_dim(e,t,i){return"auto"===e?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}}},389(e,t){function i(e){let t="";for(let i=0;i57)throw new Error("illegal char");t=10*t+e[i]-48}return t}function s(e){const t=i(e);if(!t.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return t}Object.defineProperty(t,"__esModule",{value:!0}),t.HeaderParser=void 0;const r={inline:A,size:A,name:function(e){if("undefined"!=typeof Buffer)return Buffer.from(i(e),"base64").toString();const t=atob(i(e)),A=new Uint8Array(t.length);for(let e=0;e14)return-1;for(let h=t;h=d)return this._a();r[s++]=t}break;case 58:return 3!==A||this._storeValue(s)?(this.state=4,h+1):this._a();default:if(s>=d)return this._a();r[s++]=t}}return this.state=A,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){const t=i(this._buffer.subarray(0,e));return!!t&&(this._key=t,this.fields[t]=null,!0)}_storeValue(e){if(this._key){try{const t=this._buffer.slice(0,e);this.fields[this._key]=r[this._key]?r[this._key](t):t}catch(e){return!1}return!0}return!1}}},649(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.IIPImageStorage=void 0,t.IIPImageStorage=class{constructor(e){this._storage=e,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"}}addImage(e){this._storage.addImage(e,this._addImageOpts)}}},462(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UNSUPPORTED_TYPE=void 0,t.imageType=function(e){if(e.length<32)return t.UNSUPPORTED_TYPE;const i=new Uint32Array(e.buffer,e.byteOffset,8);if(1196314761===i[0]&&169478669===i[1]&&1380206665===i[3])return{mime:"image/png",width:e[16]<<24|e[17]<<16|e[18]<<8|e[19],height:e[20]<<24|e[21]<<16|e[22]<<8|e[23]};if(255===e[0]&&216===e[1]&&255===e[2]){const[t,i]=function(e){const t=e.length;let i=4,A=e[i]<<8|e[i+1];for(;;){if(i+=A,i>=t)return[0,0];if(255!==e[i])return[0,0];if(192===e[i+1]||194===e[i+1])return i+8>>14&16383)};case 32:return 157!==e[23]||1!==e[24]||42!==e[25]?t.UNSUPPORTED_TYPE:{mime:"image/webp",width:16383&(e[26]|e[27]<<8),height:16383&(e[28]|e[29]<<8)}}return t.UNSUPPORTED_TYPE}if(1887007846===i[1]&&(1718187617===i[2]||1936291425===i[2])){let i=-1;const A=Math.min(e.length-16,1024);for(let t=8;t0&&A>0)return{mime:"image/avif",width:t,height:A}}return t.UNSUPPORTED_TYPE}return t.UNSUPPORTED_TYPE},t.UNSUPPORTED_TYPE={mime:"unsupported",width:0,height:0}},463(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageRenderer=void 0;const A=i(939),s=i(426);class r extends s.Disposable{get canvas(){var e;return null===(e=this._layers.get("top"))||void 0===e?void 0:e.canvas}static createCanvas(e,t,i){const A=(null!=e?e:document).createElement("canvas");return A.width=0|t,A.height=0|i,A}static createImageData(e,t,i,A){if("function"!=typeof ImageData){const s=e.createImageData(t,i);return A&&s.data.set(new Uint8ClampedArray(A,0,t*i*4)),s}return A?new ImageData(new Uint8ClampedArray(A,0,t*i*4),t,i):new ImageData(t,i)}static createImageBitmap(e){return"function"!=typeof createImageBitmap?Promise.resolve(void 0):createImageBitmap(e)}constructor(e){super(),this._terminal=e,this._layers=new Map,this._optionsRefresh=this._register(new s.MutableDisposable),this._oldOpen=this._terminal._core.open,this._terminal._core.open=e=>{var t;null===(t=this._oldOpen)||void 0===t||t.call(this._terminal._core,e),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(e=>{var t;"fontSize"===e&&(this.rescaleCanvas(),null===(t=this._renderService)||void 0===t||t.refreshRows(0,this._terminal.rows))}),this._register((0,s.toDisposable)(()=>{var e;this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),null===(e=this._placeholderBitmap)||void 0===e||e.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}showPlaceholder(e){var t,i;e?this._placeholder||-1===this.cellSize.height||this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),null===(i=this._renderService)||void 0===i||i.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){var e,t;return{width:(null===(e=this.dimensions)||void 0===e?void 0:e.css.cell.width)||-1,height:(null===(t=this.dimensions)||void 0===t?void 0:t.css.cell.height)||-1}}clearLines(e,t,i){var A,s,r,o,n;const a=e*((null===(A=this.dimensions)||void 0===A?void 0:A.css.cell.height)||0),h=(null===(s=this.dimensions)||void 0===s?void 0:s.css.canvas.width)||0,g=(t+1-e)*((null===(r=this.dimensions)||void 0===r?void 0:r.css.cell.height)||0);i&&"top"!==i||null===(o=this._layers.get("top"))||void 0===o||o.clearRect(0,a,h,g),i&&"bottom"!==i||null===(n=this._layers.get("bottom"))||void 0===n||n.clearRect(0,a,h,g)}clearAll(e){if(!e||"top"===e){const e=this._layers.get("top");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}if(!e||"bottom"===e){const e=this._layers.get("bottom");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}}draw(e,t,i,A,s=1){const r=this._layers.get(e.layer);if(!r)return;const{width:o,height:n}=this.cellSize;if(-1===o||-1===n)return;this._rescaleImage(e,o,n);const a=e.actual,h=Math.ceil(a.width/o),g=t%h*o,d=Math.floor(t/h)*n,l=i*o,I=A*n,c=s*o+g>a.width?a.width-g:s*o,_=d+n>a.height?a.height-d:n;r.drawImage(a,Math.floor(g),Math.floor(d),Math.ceil(c),Math.ceil(_),Math.floor(l),Math.floor(I),Math.ceil(c),Math.ceil(_))}extractTile(e,t){const{width:i,height:A}=this.cellSize;if(-1===i||-1===A)return;this._rescaleImage(e,i,A);const s=e.actual,o=Math.ceil(s.width/i),n=t%o*i,a=Math.floor(t/o)*A,h=i+n>s.width?s.width-n:i,g=a+A>s.height?s.height-a:A,d=r.createCanvas(this.document,h,g),l=d.getContext("2d");return l?(l.drawImage(s,Math.floor(n),Math.floor(a),Math.floor(h),Math.floor(g),0,0,Math.floor(h),Math.floor(g)),d):void 0}drawPlaceholder(e,t,i=1){var A;const s=this._layers.get("top");if(s){const{width:r,height:o}=this.cellSize;if(-1===r||-1===o)return;if(this._placeholder?o>=this._placeholder.height&&this._createPlaceHolder(o+1):this._createPlaceHolder(Math.max(o+1,24)),!this._placeholder)return;s.drawImage(null!==(A=this._placeholderBitmap)&&void 0!==A?A:this._placeholder,e*r,t*o%2?0:1,r*i,o,e*r,t*o,r*i,o)}}rescaleCanvas(){var e,t;const i=(null===(e=this.dimensions)||void 0===e?void 0:e.css.canvas.width)||0,A=(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.height)||0;for(const e of this._layers.values())e.canvas.width===i&&e.canvas.height===A||(e.canvas.width=i,e.canvas.height=A)}_rescaleImage(e,t,i){if(t===e.actualCellSize.width&&i===e.actualCellSize.height)return;const{width:A,height:s}=e.origCellSize;if(t===A&&i===s)return e.actual=e.orig,e.actualCellSize.width=A,void(e.actualCellSize.height=s);const o=r.createCanvas(this.document,Math.ceil(e.orig.width*t/A),Math.ceil(e.orig.height*i/s)),n=o.getContext("2d");n&&(n.drawImage(e.orig,0,0,o.width,o.height),e.actual=o,e.actualCellSize.width=t,e.actualCellSize.height=i)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=e=>{var t;for(const e of[...this._layers.keys()])this.removeLayerFromDom(e);null===(t=this._oldSetRenderer)||void 0===t||t.call(this._renderService,e)}}insertLayerToDom(e="top"){var t,i;if(!this.document||!this._terminal._core.screenElement)return void console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");if(this._layers.has(e))return;const A=r.createCanvas(this.document,(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.width)||0,(null===(i=this.dimensions)||void 0===i?void 0:i.css.canvas.height)||0);A.classList.add(`xterm-image-layer-${e}`);const s=this._terminal._core.screenElement;s.style.isolation="isolate","bottom"===e?(A.style.zIndex="-1",s.insertBefore(A,s.firstChild)):(A.style.zIndex="0",s.appendChild(A));const o=A.getContext("2d",{alpha:!0});o?(this._layers.set(e,o),this.clearAll(e)):A.remove()}removeLayerFromDom(e="top"){const t=this._layers.get(e);t&&(t.canvas.remove(),this._layers.delete(e))}hasLayer(e){return this._layers.has(e)}_createPlaceHolder(e=24){var t;null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0;const i=32,s=r.createCanvas(this.document,i,e),o=s.getContext("2d",{alpha:!1});if(!o)return;const n=r.createImageData(o,i,e),a=new Uint32Array(n.data.buffer),h=(0,A.toRGBA8888)(0,0,0),g=(0,A.toRGBA8888)(255,255,255);a.fill(h);for(let t=0;tthis._placeholderBitmap=e)}else this._placeholder=void 0}get document(){var e;return null===(e=this._terminal._core._coreBrowserService)||void 0===e?void 0:e.window.document}}t.ImageRenderer=r},699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageStorage=t.CELL_SIZE_DEFAULT=void 0;const A=i(463),s=i(721);t.CELL_SIZE_DEFAULT={width:7,height:14};class r{constructor(e=-1,t=-1){this.imageId=e,this.tileId=t}}t.ImageStorage=class{constructor(e,t,i){this._terminal=e,this._renderer=t,this._opts=i,this._images=new Map,this._lastId=0,this._lowestId=0,this._fullyCleared=!1,this._needsFullClear=!1,this._pixelLimit=25e5,this._workCell=new s.CellData;try{this.setLimit(this._opts.storageLimit)}catch(e){e instanceof Error&&console.error(e.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){var e;for(const t of this._images.values())null===(e=t.marker)||void 0===e||e.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return 4*this._pixelLimit/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return 4*this._getStoredPixels()/1e6}_getStoredPixels(){let e=0;for(const t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){var t;const i=this._images.get(e);i&&(this._images.delete(e),window.ImageBitmap&&i.orig instanceof ImageBitmap&&i.orig.close(),null===(t=this.onImageDeleted)||void 0===t||t.call(this,e))}wipeAlternate(){var e;const t=[];for(const[i,A]of this._images.entries())"alternate"===A.bufferType&&(null===(e=A.marker)||void 0===e||e.dispose(),t.push(i));for(const e of t)this._delImg(e);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){var t;const i=this._images.get(e);i&&(null===(t=i.marker)||void 0===t||t.dispose(),this._delImg(e))}addImage(e,i){var A,s;this._evictOldest(e.width*e.height);let r=this._renderer.cellSize;-1!==r.width&&-1!==r.height||(r=t.CELL_SIZE_DEFAULT);const o=Math.ceil(e.width/r.width),n=Math.ceil(e.height/r.height),a=++this._lastId,h=this._terminal._core.buffer,g=this._terminal.cols,d=this._terminal.rows,l=h.x,I=h.y;let c=l,_=0;i.scrolling||(h.x=0,h.y=0,c=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y);for(let e=0;e=g);++i)this._writeToCell(t,c+i,a,e*o+i),_++;if(i.scrolling)e=d)break;h.x=c}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y),i.scrolling?"iip"===i.cursorPos?h.x=Math.min(c+o,g):h.x=c:(h.x=l,h.y=I);const C=[];for(const[e,t]of this._images.entries())t.tileCount<1&&(null===(A=t.marker)||void 0===A||A.dispose(),C.push(e));for(const e of C)this._delImg(e);const B=this._terminal.registerMarker(0);null==B||B.onDispose(()=>{this._images.get(a)&&this._delImg(a)}),"alternate"===this._terminal.buffer.active.type&&this._evictOnAlternate();const Q={orig:e,origCellSize:r,actual:e,actualCellSize:Object.assign({},r),marker:B||void 0,tileCount:_,bufferType:this._terminal.buffer.active.type,layer:i.layer,zIndex:i.zIndex};return this._images.set(a,Q),null===(s=this.onImageAdded)||void 0===s||s.call(this),a}render(e){var t,i;let A=!1,s=!1;for(const e of this._images.values())if("bottom"===e.layer?s=!0:A=!0,A&&s)break;if(A&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(s&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size)return this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),void(this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom"));!A&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!s&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);const{start:o,end:n}=e,a=this._terminal._core.buffer,h=this._terminal._core.cols;this._renderer.clearLines(o,n);const g=[],d=[];for(let e=o;e<=n;++e){const A=a.lines.get(e+a.ydisp);if(!A)return;for(let s=0;se.imgSpec.zIndex-t.imgSpec.zIndex);for(const e of d)this._renderer.drawPlaceholder(e.col,e.row,e.count);for(const e of g)this._renderer.draw(e.imgSpec,e.tileId,e.col,e.row,e.count)}viewportResize(e){var t,i;if(!this._images.size)return void(this._viewportMetrics=e);if(this._viewportMetrics.cols>=e.cols)return void(this._viewportMetrics=e);const A=this._terminal._core.buffer,s=A.lines.length,o=this._viewportMetrics.cols-1;for(let n=0;n=r)continue;let n=!1;for(let t=o+1;t>e.cols;++t)if(s.hasContent(t)){n=!0;break}if(n)continue;const h=Math.min(e.cols,r-a.tileId%r+o);let g=a.tileId;for(let e=o+1;e>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255}o.set(A.PALETTE_VT340_COLOR),t.SixelHandler=class{constructor(e,t,i){this._opts=e,this._storage=t,this._coreTerminal=i,this._size=0,this._aborted=!1,(0,r.DecoderAsync)({memoryLimit:4*this._opts.pixelLimit,palette:o,paletteLimit:this._opts.sixelPaletteLimit}).then(e=>this._dec=e)}reset(){this._dec&&(this._dec.release(),this._dec._palette.fill(0),this._dec.init(0,o,this._opts.sixelPaletteLimit))}hook(e){var t;if(this._size=0,this._aborted=!1,this._dec){const i=1===e.params[1]?0:function(e,t){let i=0;if(!t)return i;if(e.isInverse())if(e.isFgDefault())i=n(t.foreground.rgba);else if(e.isFgRGB()){const t=e.constructor.toColorRGB(e.getFgColor());i=(0,A.toRGBA8888)(...t)}else i=n(t.ansi[e.getFgColor()].rgba);else if(e.isBgDefault())i=n(t.background.rgba);else if(e.isBgRGB()){const t=e.constructor.toColorRGB(e.getBgColor());i=(0,A.toRGBA8888)(...t)}else i=n(t.ansi[e.getBgColor()].rgba);return i}(this._coreTerminal._core._inputHandler._curAttrData,null===(t=this._coreTerminal._core._themeService)||void 0===t?void 0:t.colors);this._dec.init(i,null,this._opts.sixelPaletteLimit)}}put(e,t,i){if(!this._aborted&&this._dec){if(this._size+=i-t,this._size>this._opts.sixelSizeLimit)return console.warn("SIXEL: too much data, aborting"),this._aborted=!0,void this._dec.release();try{this._dec.decode(e,t,i)}catch(e){console.warn(`SIXEL: error while decoding image - ${e}`),this._aborted=!0,this._dec.release()}}}unhook(e){var t;if(this._aborted||!e||!this._dec)return!0;const i=this._dec.width,A=this._dec.height;if(!i||!A)return A&&this._storage.advanceCursor(A),!0;const r=s.ImageRenderer.createCanvas(void 0,i,A);return null===(t=r.getContext("2d"))||void 0===t||t.putImageData(new ImageData(this._dec.data8,i,A),0,0),this._dec.memoryUsage>4194304&&this._dec.release(),this._storage.addImage(r),!0}}},994(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SixelImageStorage=void 0;const A=i(699);t.SixelImageStorage=class{constructor(e,t,i,A){this._storage=e,this._opts=t,this._renderer=i,this._terminal=A,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;-1!==t.width&&-1!==t.height||(t=A.CELL_SIZE_DEFAULT);const i=Math.ceil(e/t.height);for(let e=1;e512)return void(this._aborted=!0);if(this._controlData.set(e.subarray(t,s),this._controlLength),this._controlLength+=r,!this._inControlData){if(this._parsedCommand=(0,n.parseKittyCommand)(this._parseControlDataString()),void 0!==this._parsedCommand.id&&void 0!==this._parsedCommand.imageNumber)return this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",null!==(A=this._parsedCommand.quiet)&&void 0!==A?A:0),void(this._aborted=!0);if("d"===this._parsedCommand.action)return;const t=s+1;tthis._encodedSizeLimit){const e=null!==(a=this._activeDecoder)&&void 0!==a?a:null==g?void 0:g.decoder;return e&&e.release(),this._activeDecoder=null,g&&this._removePendingEntry(h),void(this._aborted=!0)}this._decodeError||((null==g?void 0:g.decoder)&&!this._activeDecoder&&(this._activeDecoder=g.decoder),this._activeDecoder||(this._activeDecoder=new o.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes),this._activeDecoder.init()),0!==this._activeDecoder.put(e.subarray(t,i))&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,g&&this._removePendingEntry(h)))}end(e){var t,i;if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();const A=this._parsedCommand;if("d"===A.action)return this._handleDelete(A);const s=null!==(i=null!==(t=A.id)&&void 0!==t?t:this._lastPendingKey)&&void 0!==i?i:0,r=1===A.more,o=this._pendingTransmissions.get(s);if(r)return this._activeDecoder&&(o?(o.totalEncodedSize+=this._totalEncodedSize,o.decodeError=o.decodeError||this._decodeError):this._pendingTransmissions.set(s,{cmd:Object.assign({},A),decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=s,this._activeDecoder=null),!0;o&&(this._lastPendingKey=void 0);let n=this._decodeError,a=A,h=this._activeDecoder;o&&(a=o.cmd,h=o.decoder,n=n||o.decodeError,this._pendingTransmissions.delete(s));let g=new Uint8Array(0);h&&(0!==h.end()&&(n=!0),g=h.data8),this._activeDecoder=null;const d=this._handleCommandWithBytesAndCmd(a,g,n);return h&&h.release(),d}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",null!==(o=e.quiet)&&void 0!==o?o:0)),A}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported action",null!==(n=e.quiet)&&void 0!==n?n:0),!0}}_handlePlacement(e){var t;if(void 0===e.id)return!0;const i=e.id,A=this._kittyStorage.getImage(i);return A?this._displayImage(A,e).then(t=>{var A;return this._sendResponse(i,t?"OK":"EINVAL:image rendering failed",null!==(A=e.quiet)&&void 0!==A?A:0,e.placementId),!0}):(this._sendResponse(i,"ENOENT:image not found",null!==(t=e.quiet)&&void 0!==t?t:0,e.placementId),!0)}_handleTransmit(e,t,i){var A,s,r,o,n,a;return"d"!==(null!==(A=e.transmission)&&void 0!==A?A:"d")?(void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",null!==(s=e.quiet)&&void 0!==s?s:0),!0):(i||0===t.length||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:null!==(r=e.width)&&void 0!==r?r:0,height:null!==(o=e.height)&&void 0!==o?o:0,format:null!==(n=e.format)&&void 0!==n?n:32,compression:null!==(a=e.compression)&&void 0!==a?a:""}),!0)}_handleTransmitDisplay(e,t,i){var A,s;if(i)return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:invalid base64 data",null!==(A=e.quiet)&&void 0!==A?A:0),!0;this._handleTransmit(e,t,i);const r=null!==(s=e.id)&&void 0!==s?s:this._kittyStorage.lastImageId,o=this._kittyStorage.getImage(r);if(o){const t=this._displayImage(o,e);return void 0!==e.id?t.then(t=>{var i;return this._sendResponse(r,t?"OK":"EINVAL:image rendering failed",null!==(i=e.quiet)&&void 0!==i?i:0),!0}):t.then(()=>!0)}return!0}_handleQuery(e,t,i){var A,s,r,o,n,a;const h=null!==(A=e.id)&&void 0!==A?A:0,g=null!==(s=e.quiet)&&void 0!==s?s:0;if("d"!==(null!==(r=e.transmission)&&void 0!==r?r:"d"))return this._sendResponse(h,"EINVAL:unsupported transmission medium",g),!0;if(i)return this._sendResponse(h,"EINVAL:invalid base64 data",g),!0;if(0===t.length)return this._sendResponse(h,"OK",g),!0;const d=null!==(o=e.format)&&void 0!==o?o:32;if(100===d)this._sendResponse(h,"OK",g);else{const i=null!==(n=e.width)&&void 0!==n?n:0,A=null!==(a=e.height)&&void 0!==a?a:0;if(!i||!A)return this._sendResponse(h,"EINVAL:width and height required for raw pixel data",g),!0;const s=i*A*(32===d?4:3);if(t.length=1)return;if(!s&&i>=2)return;const r=`_Gi=${e}${A?`,p=${A}`:""};${t}\\`;this._coreTerminal._core.coreService.triggerDataEvent(r)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){var i,A,o,n,a,h,g;let d=await this._createBitmap(e);try{const l=Math.max(0,null!==(o=t.x)&&void 0!==o?o:0),I=Math.max(0,null!==(n=t.y)&&void 0!==n?n:0),c=t.sourceWidth||d.width-l,_=t.sourceHeight||d.height-I,C=Math.max(0,d.width-l),B=Math.max(0,d.height-I),Q=Math.max(0,Math.min(c,C)),u=Math.max(0,Math.min(_,B));if(0===Q||0===u)throw new Error("invalid source rectangle");if(0!==l||0!==I||Q!==d.width||u!==d.height){const e=await createImageBitmap(d,l,I,Q,u);d.close(),d=e}const m=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.width)||r.CELL_SIZE_DEFAULT.width,E=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.height)||r.CELL_SIZE_DEFAULT.height;let f,D;void 0!==t.columns&&void 0!==t.rows?(f=t.columns,D=t.rows):void 0!==t.columns?(f=t.columns,D=Math.max(1,Math.ceil(d.height/d.width*(f*m)/E))):void 0!==t.rows?(D=t.rows,f=Math.max(1,Math.ceil(d.width/d.height*(D*E)/m))):(f=Math.ceil(d.width/m),D=Math.ceil(d.height/E));let p=d.width,w=d.height;if(void 0===t.columns&&void 0===t.rows||(p=Math.round(f*m),w=Math.round(D*E)),p*w>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");const y=this._coreTerminal._core.buffer,v=y.x,k=y.y,M=y.ybase,b=void 0!==t.zIndex&&t.zIndex<0?"bottom":"top";if(p!==d.width||w!==d.height){const e=await createImageBitmap(d,{resizeWidth:p,resizeHeight:w});d.close(),d=e}const L=Math.min(Math.max(0,null!==(a=t.xOffset)&&void 0!==a?a:0),m-1),S=Math.min(Math.max(0,null!==(h=t.yOffset)&&void 0!==h?h:0),E-1);if(0!==L||0!==S){const e=void 0!==t.columns?Math.round(f*m):d.width+L,i=void 0!==t.rows?Math.round(D*E):d.height+S,A=s.ImageRenderer.createCanvas(window.document,e,i),r=A.getContext("2d");if(!r)throw new Error("Failed to create offset canvas context");r.drawImage(d,L,S);const o=await createImageBitmap(A);if(A.width=A.height=0,d.close(),d=o,p=d.width,w=d.height,p*w>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");void 0===t.columns&&(f=Math.ceil(d.width/m)),void 0===t.rows&&(D=Math.ceil(d.height/E))}const N=null!==(g=t.zIndex)&&void 0!==g?g:0;if(this._kittyStorage.addImage(e.id,d,!0,b,N),d=void 0,1===t.cursorMovement){const e=y.ybase-M;y.x=v,y.y=Math.max(k-e,0)}else y.x=Math.min(v+f,this._coreTerminal.cols)}catch(e){throw null==d||d.close(),e}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if("z"===e.compression&&(t=await this._decompressZlib(t)),100===e.format){const e=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){const t=URL.createObjectURL(e),i=new Image;return new Promise((e,A)=>{i.addEventListener("load",()=>{var r;URL.revokeObjectURL(t);const o=s.ImageRenderer.createCanvas(window.document,i.width,i.height);null===(r=o.getContext("2d"))||void 0===r||r.drawImage(i,0,0),createImageBitmap(o).then(e).catch(A)}),i.addEventListener("error",()=>{URL.revokeObjectURL(t),A(new Error("Failed to load image"))}),i.src=t})}return createImageBitmap(e)}const i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");const r=i*A*(32===e.format?4:3);if(t.length>>24|t<<8,h[l++]=4278190080|t>>>16|i<<16,h[l++]=4278190080|i>>>8}let I=3*g,c=4*g;for(let e=g;ee+t.length,0),n=new Uint8Array(o);let a=0;for(const e of s)n.set(e,a),a+=e.length;return n}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}}},470(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseKittyCommand=function(e){const t={},i=e.split(",");for(const e of i){const i=e.indexOf("=");if(-1===i)continue;const A=e.substring(0,i),s=e.substring(i+1);if("a"===A){t.action=s;continue}if("o"===A){t.compression=s;continue}if("t"===A){t.transmission=s;continue}if("d"===A){t.deleteSelector=s;continue}const r=parseInt(s,10);switch(A){case"f":t.format=r;break;case"i":t.id=r;break;case"I":t.imageNumber=r;break;case"s":t.width=r;break;case"v":t.height=r;break;case"x":t.x=r;break;case"y":t.y=r;break;case"w":t.sourceWidth=r;break;case"h":t.sourceHeight=r;break;case"X":t.xOffset=r;break;case"Y":t.yOffset=r;break;case"c":t.columns=r;break;case"r":t.rows=r;break;case"m":t.more=r;break;case"q":t.quiet=r;break;case"C":t.cursorMovement=r;break;case"z":t.zIndex=r;break;case"p":t.placementId=r}}return t}},235(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyImageStorage=void 0;class i{constructor(e){this._storage=e,this._nextImageId=1,this._images=new Map,this._kittyIdToStorageId=new Map,this._storageIdToKittyId=new Map,this._handleStorageImageDeleted=e=>{const t=this._storageIdToKittyId.get(e);void 0!==t&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))},this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"},this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=e=>{var t;null===(t=this._previousOnImageDeleted)||void 0===t||t.call(this,e),this._handleStorageImageDeleted(e)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){const A=null!=e?e:this._nextImageId++,s=this._kittyIdToStorageId.get(A);return void 0!==s&&(this._storage.deleteImage(s),this._kittyIdToStorageId.delete(A),this._storageIdToKittyId.delete(s)),!this._images.has(A)&&this._images.size>=i._maxStoredImages&&this._evictUndisplayedImages(),this._images.set(A,Object.assign(Object.assign({},t),{id:A})),A}addImage(e,t,i,A,s){const r=this._kittyIdToStorageId.get(e);void 0!==r&&this._storageIdToKittyId.delete(r),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=s;const o=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,o),this._storageIdToKittyId.set(o,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);const t=this._kittyIdToStorageId.get(e);void 0!==t&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(const e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(const[e]of this._images){if(this._images.size<=i._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}}t.KittyImageStorage=i,i._maxStoredImages=256},669(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});const A=(0,i(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),s=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(e=>e.charCodeAt(0))),r=new Uint32Array(1024);r.fill(4278190080);for(let e=0;e>4|(e<<4&255)<<8;for(let e=0;e>2<<8|(e<<6&255)<<16;for(let e=0;ethis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):o}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=null!=e?e:this.maxBytes,this._bytes=null!=t?t:Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32;const s=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let e=this._bytes;for(;(e*=2)this._mem.buffer.byteLength){const t=Math.ceil((e+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(t),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=e}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;const t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}}},61(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});const A=(0,i(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="});t.default=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];const t=this.width*this.height,i=4*t,s=e.length,r=Math.max(i,s)+(Math.min(i,s)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}}},552(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.InWasm=function(e){if(e.d){const{t,s:A,d:s}=e;let r,o;const n=WebAssembly;return 0===t?A?e=>new n.Instance(o||(o=new n.Module(r||(r=i(s)))),e):e=>o?n.instantiate(o,e):n.instantiate(r||(r=i(s)),e).then(e=>(o=e.module)&&e.instance):1===t?A?()=>o||(o=new n.Module(r||(r=i(s)))):()=>o?Promise.resolve(o):n.compile(r||(r=i(s))).then(e=>o=e):A?()=>r||(r=i(s)):()=>Promise.resolve(r||(r=i(s)))}if("undefined"==typeof _wasmCtx)throw new Error('must run "inwasm"');_wasmCtx.add(e)};let i=e=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e{var e=A;Object.defineProperty(e,"__esModule",{value:!0}),e.ImageAddon=void 0;const t=i(414),s=i(795),r=i(463),o=i(699),n=i(23),a=i(235),h=i(566),g=i(994),d=i(649),l={enableSizeReports:!0,pixelLimit:16777216,sixelSupport:!0,sixelScrolling:!0,sixelPaletteLimit:4096,sixelSizeLimit:33554432,storageLimit:128,showPlaceholder:!0,iipSupport:!0,iipSizeLimit:33554432,kittySupport:!0,kittySizeLimit:33554432};e.ImageAddon=class{constructor(e){this._disposables=[],this._handlers=new Map,this._onImageAdded=new t.Emitter,this.onImageAdded=this._onImageAdded.event,this._opts=Object.assign({},l,e),this._defaultOpts=Object.assign({},l,e)}dispose(){for(const e of this._disposables)e.dispose();this._disposables.length=0,this._handlers.clear(),this._onImageAdded.dispose()}_disposeLater(...e){for(const t of e)this._disposables.push(t)}activate(e){var t;if(this._terminal=e,this._renderer=new r.ImageRenderer(e),this._storage=new o.ImageStorage(e,this._renderer,this._opts),this._storage.onImageAdded=()=>this._onImageAdded.fire(),this._opts.enableSizeReports){const i=null!==(t=e.options.windowOptions)&&void 0!==t?t:{};i.getWinSizePixels=!0,i.getCellSizePixels=!0,i.getWinSizeChars=!0,e.options.windowOptions=i}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},e=>this._decset(e)),e.parser.registerCsiHandler({prefix:"?",final:"l"},e=>this._decrst(e)),e.parser.registerCsiHandler({final:"c"},e=>this._da1(e)),e.parser.registerCsiHandler({prefix:"?",final:"S"},e=>this._xtermGraphicsAttributes(e)),e.onRender(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.render(e)}),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>{var e;return null===(e=this._storage)||void 0===e?void 0:e.wipeAlternate()}),e.onResize(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.viewportResize(e)})),this._opts.sixelSupport){const t=new g.SixelImageStorage(this._storage,this._opts,this._renderer,e),i=new h.SixelHandler(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){const t=new d.IIPImageStorage(this._storage),i=new s.IIPHandler(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){const t=new a.KittyImageStorage(this._storage),i=new n.KittyGraphicsHandler(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){var e;this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,null===(e=this._storage)||void 0===e||e.reset();for(const e of this._handlers.values())e.reset();return!1}get storageLimit(){var e;return(null===(e=this._storage)||void 0===e?void 0:e.getLimit())||-1}set storageLimit(e){var t;null===(t=this._storage)||void 0===t||t.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){var t;this._opts.showPlaceholder=e,null===(t=this._renderer)||void 0===t||t.showPlaceholder(e)}getImageAtBufferCell(e,t){var i;return null===(i=this._storage)||void 0===i?void 0:i.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){var i;return null===(i=this._storage)||void 0===i?void 0:i.extractTileAtBufferCell(e,t)}_report(e){var t;null===(t=this._terminal)||void 0===t||t._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=4096?(this._opts.sixelPaletteLimit=e[2],this._report(`[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`[?${e[0]};2S`),!0;case 4:return this._report(`[?${e[0]};0;4096S`),!0;default:return this._report(`[?${e[0]};2S`),!0}if(2===e[0])switch(e[1]){case 1:let a=null===(i=null===(t=this._renderer)||void 0===t?void 0:t.dimensions)||void 0===i?void 0:i.css.canvas.width,h=null===(s=null===(A=this._renderer)||void 0===A?void 0:A.dimensions)||void 0===s?void 0:s.css.canvas.height;if(!a||!h){const e=o.CELL_SIZE_DEFAULT;a=((null===(r=this._terminal)||void 0===r?void 0:r.cols)||80)*e.width,h=((null===(n=this._terminal)||void 0===n?void 0:n.rows)||24)*e.height}if(a*h(()=>{"use strict";var e={939(e,t){function i(e){return 255&e}function A(e){return e>>>8&255}function s(e){return e>>>16&255}function r(e,t,i,A=255){return((255&A)<<24|(255&i)<<16|(255&t)<<8|255&e)>>>0}function o(e,t,i){return Math.max(e,Math.min(i,t))}function n(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),6*i<1?t+6*(e-t)*i:2*i<1?e:3*i<2?t+(e-t)*(4-6*i):t}function a(e,t,i){return(4278190080|Math.round(i/100*255)<<16|Math.round(t/100*255)<<8|Math.round(e/100*255))>>>0}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_FOREGROUND=t.DEFAULT_BACKGROUND=t.PALETTE_ANSI_256=t.PALETTE_VT340_GREY=t.PALETTE_VT340_COLOR=t.normalizeHLS=t.normalizeRGB=t.nearestColorIndex=t.fromRGBA8888=t.toRGBA8888=t.alpha=t.blue=t.green=t.red=t.BIG_ENDIAN=void 0,t.BIG_ENDIAN=255===new Uint8Array(new Uint32Array([4278190080]).buffer)[0],t.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly."),t.red=i,t.green=A,t.blue=s,t.alpha=function(e){return e>>>24&255},t.toRGBA8888=r,t.fromRGBA8888=function(e){return[255&e,e>>8&255,e>>16&255,e>>>24]},t.nearestColorIndex=function(e,t){const r=i(e),o=A(e),n=s(e);let a=Number.MAX_SAFE_INTEGER,h=-1;for(let e=0;e{const e=[r(0,0,0),r(205,0,0),r(0,205,0),r(205,205,0),r(0,0,238),r(205,0,205),r(0,250,205),r(229,229,229),r(127,127,127),r(255,0,0),r(0,255,0),r(255,255,0),r(92,92,255),r(255,0,255),r(0,255,255),r(255,255,255)],t=[0,95,135,175,215,255];for(let i=0;i<6;++i)for(let A=0;A<6;++A)for(let s=0;s<6;++s)e.push(r(t[i],t[A],t[s]));for(let t=8;t<=238;t+=10)e.push(r(t,t,t));return new Uint32Array(e)})(),t.DEFAULT_BACKGROUND=r(0,0,0,255),t.DEFAULT_FOREGROUND=r(255,255,255,255)},591(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.decodeAsync=t.decode=t.Decoder=t.DecoderAsync=void 0;const A=i(939),s=i(199),r=function(e){if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}}const h={memoryLimit:134217728,sixelColor:A.DEFAULT_FOREGROUND,fillColor:A.DEFAULT_BACKGROUND,palette:A.PALETTE_VT340_COLOR,paletteLimit:s.LIMITS.PALETTE_SIZE,truncate:!0};function d(e){const t=new a,i={env:{handle_band:t.handle_band.bind(t),mode_parsed:t.mode_parsed.bind(t)}};return WebAssembly.instantiate(o||r,i).then(i=>(o=o||i.module,new g(e,i.instance||i,t)))}t.DecoderAsync=d;class g{constructor(e,t,i){if(this._PIXEL_OFFSET=s.LIMITS.MAX_WIDTH+4,this._canvas=n,this._bandWidths=[],this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},h,e),this._opts.paletteLimit>s.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${s.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{const e=o||(o=new WebAssembly.Module(r));t=new WebAssembly.Instance(e,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),s.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),s.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(A.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(2===e){const e=this.width*this.height;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}this._maxWidth=this._width}else if(1===e)if(2===this._level){const e=Math.min(this._rasterWidth,s.LIMITS.MAX_WIDTH)*this._rasterHeight;if(e>this._canvas.length){if(this._opts.memoryLimit&&4*e>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(e)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){const i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&4*i>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");const e=new Uint32Array(65536*Math.ceil(i/65536));e.set(this._canvas),this._canvas=e}}_handle_band(e){const t=this._PIXEL_OFFSET;let i=this._lastOffset;if(2===this._mode){let A=this.height-this._currentHeight,s=0;for(;s<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),i+e*s),s++,A--;this._lastOffset+=e*s,this._currentHeight+=s}else if(1===this._mode){this._realloc(i,6*e),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=6*e,this._currentHeight+=6}return 0}get width(){return 1!==this._mode?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return 1!==this._mode?this._height:this._wasm.current_width()?6*this._bandWidths.length+this._wasm.current_height():6*this._bandWidths.length}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,s.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=s.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){const i=this._PIXEL_OFFSET;let A=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*s,i*s+e),A+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,A+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(1===this._mode){if(this._minWidth===this._maxWidth){let t=!1;if(e)if(e!==this._minWidth)t=!0;else{const t=this._PIXEL_OFFSET;let i=this._lastOffset;this._realloc(i,6*e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A)}if(!t)return this._canvas.subarray(0,this.width*this.height)}const t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let e=0;e{if(this._disposed)return(0,A.toDisposable)(()=>{});const s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);const r=(0,A.toDisposable)(()=>{const e=this._listeners.indexOf(s);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(r):i.add(r)),r}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,A=t.length;it.fire(e))},e.map=function(e,t){return(i,A,s)=>e(e=>i.call(A,t(e)),void 0,s)},e.any=function(...e){return(t,i,s)=>{const r=new A.DisposableStore;for(const A of e)r.add(A(e=>t.call(i,e)));return s&&(Array.isArray(s)?s.push(r):s.add(r)),r}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(s||(t.EventUtils=s={}))},426(e,t){function i(e){return{dispose:e}}function A(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=A,t.combinedDisposable=function(...e){return i(()=>A(e))};class s{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=s;class r{constructor(){this._store=new s}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=r,r.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},917(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new A}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class A{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new A(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&void 0===this.payload}}t.ExtendedAttrs=A},721(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;const A=i(348),s=i(564),r=i(917);class o extends r.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new r.ExtendedAttrs,this.combinedData=""}static fromCharData(e){const t=new o;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,A.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[s.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[s.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[s.CHAR_DATA_CHAR_INDEX].length){const i=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const A=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=A&&A<=57343?this.content=1024*(i-55296)+A-56320+65536|e[s.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[s.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[s.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[s.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor())return!1;if(this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor())return!1;if(this.isInverse()!==e.isInverse())return!1;if(this.isBold()!==e.isBold())return!1;if(this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;const t=this.isUnderlineColorDefault(),i=e.isUnderlineColorDefault();if(!t||!i){if(t!==i)return!1;if(this.getUnderlineColor()!==e.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==e.getUnderlineColorMode())return!1}}return this.isOverline()===e.isOverline()&&this.isBlink()===e.isBlink()&&this.isInvisible()===e.isInvisible()&&this.isItalic()===e.isItalic()&&this.isDim()===e.isDim()&&this.isStrikethrough()===e.isStrikethrough()}}t.CellData=o},564(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=t.DEFAULT_COLOR<<9|256,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},348(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let A="";for(let s=t;s65535?(t-=65536,A+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):A+=String.fromCharCode(t)}return A},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let A=0,s=0;if(this._interim){const i=e.charCodeAt(s++);56320<=i&&i<=57343?t[A++]=1024*(this._interim-55296)+i-56320+65536:(t[A++]=this._interim,t[A++]=i),this._interim=0}for(let r=s;r=i)return this._interim=s,A;const o=e.charCodeAt(r);56320<=o&&o<=57343?t[A++]=1024*(s-55296)+o-56320+65536:(t[A++]=s,t[A++]=o);continue}65279!==s&&(t[A++]=s)}return A}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let A,s,r,o,n,a=0,h=0;if(this.interim[0]){let A=!1,s=this.interim[0];s&=192==(224&s)?31:224==(240&s)?15:7;let r,o=0;for(;(r=this.interim[++o])&&o<4;)s<<=6,s|=63&r;const n=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,d=n-o;for(;h=i)return 0;if(r=e[h++],128!=(192&r)){h--,A=!0;break}this.interim[o++]=r,s<<=6,s|=63&r}A||(2===n?s<128?h--:t[a++]=s:3===n?s<2048||s>=55296&&s<=57343||65279===s||(t[a++]=s):s<65536||s>1114111||(t[a++]=s)),this.interim.fill(0)}const d=i-4;let g=h;for(;g=i)return this.interim[0]=A,a;if(s=e[g++],128!=(192&s)){g--;continue}if(n=(31&A)<<6|63&s,n<128){g--;continue}t[a++]=n}else if(224==(240&A)){if(g>=i)return this.interim[0]=A,a;if(s=e[g++],128!=(192&s)){g--;continue}if(g>=i)return this.interim[0]=A,this.interim[1]=s,a;if(r=e[g++],128!=(192&r)){g--;continue}if(n=(15&A)<<12|(63&s)<<6|63&r,n<2048||n>=55296&&n<=57343||65279===n)continue;t[a++]=n}else if(240==(248&A)){if(g>=i)return this.interim[0]=A,a;if(s=e[g++],128!=(192&s)){g--;continue}if(g>=i)return this.interim[0]=A,this.interim[1]=s,a;if(r=e[g++],128!=(192&r)){g--;continue}if(g>=i)return this.interim[0]=A,this.interim[1]=s,this.interim[2]=r,a;if(o=e[g++],128!=(192&o)){g--;continue}if(n=(7&A)<<18|(63&s)<<12|(63&r)<<6|63&o,n<65536||n>1114111)continue;t[a++]=n}}return a}}},795(e,t,i){var A=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IIPHandler=void 0;const s=i(463),r=i(699),o=A(i(669)),n=A(i(61)),a=i(389),h=i(462),d={type:0,name:"Unnamed file",size:0,width:"auto",height:"auto",preserveAspectRatio:1,inline:0};t.IIPHandler=class{constructor(e,t,i,A){this._opts=e,this._renderer=t,this._storage=i,this._coreTerminal=A,this._generation=0,this._aborted=!1,this._hp=new a.HeaderParser,this._header=d,this._isMultipart=!1,this._abortMulti=!1;const s=Math.ceil(4*this._opts.iipSizeLimit/3),r=Math.min(1048576,s);this._dec=new o.default(0,s,r),this._qoiDec=new n.default(0)}reset(){this._generation++,this._hp.reset(),this._dec.release(),this._qoiDec.release()}start(){this._aborted=!1,this._hp.reset()}put(e,t,i){if(!this._aborted)if(4===this._hp.state)0!==this._dec.put(e.subarray(t,i))&&(this._dec.release(),this._aborted=!0);else{const A=this._hp.parse(e,t,i);if(-1===A)return void(this._aborted=!0);if(A>0){if(1===this._hp.fields.type){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},d,this._hp.fields),!this._header.inline)return void(this._aborted=!0);if(!this._initDecoder())return void(this._aborted=!0)}else if(this._abortMulti)return void(this._aborted=!0);0!==this._dec.put(e.subarray(A,i))&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){var t,i,A;if(this._aborted)return!0;if(4!==this._hp.state&&this._hp.end())return!0;const o=this._hp.fields.type;if(3===o)return!0;if(5===o){let e=r.CELL_SIZE_DEFAULT.width,i=r.CELL_SIZE_DEFAULT.height;this._renderer.dimensions&&(e=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,i=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);const s=null!==(A=null===(t=this._coreTerminal._core._coreBrowserService)||void 0===t?void 0:t.dpr)&&void 0!==A?A:1,o=`]1337;ReportCellSize=${i.toFixed(3)};${e.toFixed(3)};${s.toFixed(3)}\\`;return this._coreTerminal.input(o,!1),!0}if(2===o)return this._header=Object.assign({},d,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._initDecoder()||(this._abortMulti=!0),!0;if(4===o){if(!this._isMultipart)return!0;if(this._isMultipart=!1,this._abortMulti||2!==this._header.type)return!0}let n,a,g=0,l=0,c=h.UNSUPPORTED_TYPE;if((n=e)&&((n=!this._dec.end())?(c=(0,h.imageType)(this._dec.data8),(n="unsupported"!==c.mime)?(g=c.width,l=c.height,(n=g&&l&&g*lI!==this._generation?(e.close(),!0):(this._storage.addImage(e),!0)).catch(e=>(console.warn(`IIP: decoding error ${c.mime} ${c.width}x${c.height}`,e),!0))}_initDecoder(){try{return this._dec.init(),!0}catch(e){return console.warn("IIP: could not allocate decoder",e),this._dec.release(),!1}}_resize(e,t){var i,A,s,o;const n=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.width)||r.CELL_SIZE_DEFAULT.width,a=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.height)||r.CELL_SIZE_DEFAULT.height,h=(null===(s=this._renderer.dimensions)||void 0===s?void 0:s.css.canvas.width)||n*this._coreTerminal.cols,d=(null===(o=this._renderer.dimensions)||void 0===o?void 0:o.css.canvas.height)||a*this._coreTerminal.rows,g=this._dim(this._header.width,h,n),l=this._dim(this._header.height,d,a);if(!g&&!l){const i=h/e,A=(d-a)/t,s=Math.min(i,A);return s<1?[e*s,t*s]:[e,t]}return g?!this._header.preserveAspectRatio&&g&&l?[g,l]:[g,t*g/e]:[e*l/t,l]}_dim(e,t,i){return"auto"===e?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}}},389(e,t){function i(e){let t="";for(let i=0;i57)throw new Error("illegal char");t=10*t+e[i]-48}return t}function s(e){const t=i(e);if(!t.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return t}Object.defineProperty(t,"__esModule",{value:!0}),t.HeaderParser=void 0;const r={inline:A,size:A,name:function(e){if("undefined"!=typeof Buffer)return Buffer.from(i(e),"base64").toString();const t=atob(i(e)),A=new Uint8Array(t.length);for(let e=0;e14)return-1;for(let h=t;h=g)return this._a();r[s++]=t}break;case 58:return 3!==A||this._storeValue(s)?(this.state=4,h+1):this._a();default:if(s>=g)return this._a();r[s++]=t}}return this.state=A,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){const t=i(this._buffer.subarray(0,e));return!!t&&(this._key=t,this.fields[t]=null,!0)}_storeValue(e){if(this._key){try{const t=this._buffer.slice(0,e);this.fields[this._key]=r[this._key]?r[this._key](t):t}catch(e){return!1}return!0}return!1}}},649(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.IIPImageStorage=void 0,t.IIPImageStorage=class{constructor(e){this._storage=e,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"}}addImage(e){this._storage.addImage(e,this._addImageOpts)}}},462(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UNSUPPORTED_TYPE=void 0,t.imageType=function(e){if(e.length<32)return t.UNSUPPORTED_TYPE;const i=new Uint32Array(e.buffer,e.byteOffset,8);if(1196314761===i[0]&&169478669===i[1]&&1380206665===i[3])return{mime:"image/png",width:e[16]<<24|e[17]<<16|e[18]<<8|e[19],height:e[20]<<24|e[21]<<16|e[22]<<8|e[23]};if(255===e[0]&&216===e[1]&&255===e[2]){const[t,i]=function(e){const t=e.length;let i=4,A=e[i]<<8|e[i+1];for(;;){if(i+=A,i>=t)return[0,0];if(255!==e[i])return[0,0];if(192===e[i+1]||194===e[i+1])return i+8>>14&16383)};case 32:return 157!==e[23]||1!==e[24]||42!==e[25]?t.UNSUPPORTED_TYPE:{mime:"image/webp",width:16383&(e[26]|e[27]<<8),height:16383&(e[28]|e[29]<<8)}}return t.UNSUPPORTED_TYPE}if(1887007846===i[1]&&(1718187617===i[2]||1936291425===i[2])){let i=-1;const A=Math.min(e.length-16,1024);for(let t=8;t0&&A>0)return{mime:"image/avif",width:t,height:A}}return t.UNSUPPORTED_TYPE}return t.UNSUPPORTED_TYPE},t.UNSUPPORTED_TYPE={mime:"unsupported",width:0,height:0}},463(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageRenderer=void 0;const A=i(939),s=i(426);class r extends s.Disposable{get canvas(){var e;return null===(e=this._layers.get("top"))||void 0===e?void 0:e.canvas}static createCanvas(e,t,i){const A=(null!=e?e:document).createElement("canvas");return A.width=0|t,A.height=0|i,A}static createImageData(e,t,i,A){if("function"!=typeof ImageData){const s=e.createImageData(t,i);return A&&s.data.set(new Uint8ClampedArray(A,0,t*i*4)),s}return A?new ImageData(new Uint8ClampedArray(A,0,t*i*4),t,i):new ImageData(t,i)}static createImageBitmap(e){return"function"!=typeof createImageBitmap?Promise.resolve(void 0):createImageBitmap(e)}constructor(e){super(),this._terminal=e,this._layers=new Map,this._optionsRefresh=this._register(new s.MutableDisposable),this._oldOpen=this._terminal._core.open,this._terminal._core.open=e=>{var t;null===(t=this._oldOpen)||void 0===t||t.call(this._terminal._core,e),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(e=>{var t;"fontSize"===e&&(this.rescaleCanvas(),null===(t=this._renderService)||void 0===t||t.refreshRows(0,this._terminal.rows))}),this._register((0,s.toDisposable)(()=>{var e;this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),null===(e=this._placeholderBitmap)||void 0===e||e.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}showPlaceholder(e){var t,i;e?this._placeholder||-1===this.cellSize.height||this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),null===(i=this._renderService)||void 0===i||i.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){var e,t;return{width:(null===(e=this.dimensions)||void 0===e?void 0:e.css.cell.width)||-1,height:(null===(t=this.dimensions)||void 0===t?void 0:t.css.cell.height)||-1}}clearLines(e,t,i){var A,s,r,o,n;const a=e*((null===(A=this.dimensions)||void 0===A?void 0:A.css.cell.height)||0),h=(null===(s=this.dimensions)||void 0===s?void 0:s.css.canvas.width)||0,d=(t+1-e)*((null===(r=this.dimensions)||void 0===r?void 0:r.css.cell.height)||0);i&&"top"!==i||null===(o=this._layers.get("top"))||void 0===o||o.clearRect(0,a,h,d),i&&"bottom"!==i||null===(n=this._layers.get("bottom"))||void 0===n||n.clearRect(0,a,h,d)}clearAll(e){if(!e||"top"===e){const e=this._layers.get("top");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}if(!e||"bottom"===e){const e=this._layers.get("bottom");null==e||e.clearRect(0,0,e.canvas.width,e.canvas.height)}}draw(e,t,i,A,s=1){const r=this._layers.get(e.layer);if(!r)return;const{width:o,height:n}=this.cellSize;if(-1===o||-1===n)return;this._rescaleImage(e,o,n);const a=e.actual,{width:h,height:d}=e.actualCellSize,g=Math.ceil(a.width/h),l=t%g*h,c=Math.floor(t/g)*d,I=i*o,_=A*n,C=s*h+l>a.width?a.width-l:s*h,B=c+d>a.height?a.height-c:d;r.drawImage(a,Math.floor(l),Math.floor(c),Math.ceil(C),Math.ceil(B),Math.floor(I),Math.floor(_),Math.ceil(C*o/h),Math.ceil(B*n/d))}extractTile(e,t){const{width:i,height:A}=this.cellSize;if(-1===i||-1===A)return;this._rescaleImage(e,i,A);const s=e.actual,{width:o,height:n}=e.actualCellSize,a=Math.ceil(s.width/o),h=t%a*o,d=Math.floor(t/a)*n,g=o+h>s.width?s.width-h:o,l=d+n>s.height?s.height-d:n,c=r.createCanvas(this.document,Math.ceil(g*i/o),Math.ceil(l*A/n)),I=c.getContext("2d");return I?(I.drawImage(s,Math.floor(h),Math.floor(d),Math.floor(g),Math.floor(l),0,0,c.width,c.height),c):void 0}drawPlaceholder(e,t,i=1){var A;const s=this._layers.get("top");if(s){const{width:r,height:o}=this.cellSize;if(-1===r||-1===o)return;if(this._placeholder?o>=this._placeholder.height&&this._createPlaceHolder(o+1):this._createPlaceHolder(Math.max(o+1,24)),!this._placeholder)return;s.drawImage(null!==(A=this._placeholderBitmap)&&void 0!==A?A:this._placeholder,e*r,t*o%2?0:1,r*i,o,e*r,t*o,r*i,o)}}rescaleCanvas(){var e,t;const i=(null===(e=this.dimensions)||void 0===e?void 0:e.css.canvas.width)||0,A=(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.height)||0;for(const e of this._layers.values())e.canvas.width===i&&e.canvas.height===A||(e.canvas.width=i,e.canvas.height=A)}_rescaleImage(e,t,i){if(t===e.actualCellSize.width&&i===e.actualCellSize.height)return;const{width:A,height:s}=e.origCellSize;if(t===A&&i===s)return e.actual=e.orig,e.actualCellSize.width=A,void(e.actualCellSize.height=s);const o=Math.ceil(e.orig.width*t/A),n=Math.ceil(e.orig.height*i/s);if(o*n>e.orig.width*e.orig.height)return e.actual=e.orig,e.actualCellSize.width=A,void(e.actualCellSize.height=s);const a=r.createCanvas(this.document,o,n),h=a.getContext("2d");h&&(h.drawImage(e.orig,0,0,a.width,a.height),e.actual=a,e.actualCellSize.width=t,e.actualCellSize.height=i)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=e=>{var t;for(const e of[...this._layers.keys()])this.removeLayerFromDom(e);null===(t=this._oldSetRenderer)||void 0===t||t.call(this._renderService,e)}}insertLayerToDom(e="top"){var t,i;if(!this.document||!this._terminal._core.screenElement)return void console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");if(this._layers.has(e))return;const A=r.createCanvas(this.document,(null===(t=this.dimensions)||void 0===t?void 0:t.css.canvas.width)||0,(null===(i=this.dimensions)||void 0===i?void 0:i.css.canvas.height)||0);A.classList.add(`xterm-image-layer-${e}`);const s=this._terminal._core.screenElement;s.style.isolation="isolate","bottom"===e?(A.style.zIndex="-1",s.insertBefore(A,s.firstChild)):(A.style.zIndex="0",s.appendChild(A));const o=A.getContext("2d",{alpha:!0});o?(this._layers.set(e,o),this.clearAll(e)):A.remove()}removeLayerFromDom(e="top"){const t=this._layers.get(e);t&&(t.canvas.remove(),this._layers.delete(e))}hasLayer(e){return this._layers.has(e)}_createPlaceHolder(e=24){var t;null===(t=this._placeholderBitmap)||void 0===t||t.close(),this._placeholderBitmap=void 0;const i=32,s=r.createCanvas(this.document,i,e),o=s.getContext("2d",{alpha:!1});if(!o)return;const n=r.createImageData(o,i,e),a=new Uint32Array(n.data.buffer),h=(0,A.toRGBA8888)(0,0,0),d=(0,A.toRGBA8888)(255,255,255);a.fill(h);for(let t=0;t{this._placeholder!==c?null==e||e.close():this._placeholderBitmap=e}).catch(()=>{})}get document(){var e;return null===(e=this._terminal._core._coreBrowserService)||void 0===e?void 0:e.window.document}}t.ImageRenderer=r},699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ImageStorage=t.CELL_SIZE_DEFAULT=void 0;const A=i(463),s=i(721);t.CELL_SIZE_DEFAULT={width:7,height:14};class r{constructor(e=-1,t=-1){this.imageId=e,this.tileId=t}}t.ImageStorage=class{constructor(e,t,i){this._terminal=e,this._renderer=t,this._opts=i,this._images=new Map,this._lastId=0,this._lowestId=0,this._fullyCleared=!1,this._needsFullClear=!1,this._pixelLimit=25e5,this._workCell=new s.CellData;try{this.setLimit(this._opts.storageLimit)}catch(e){e instanceof Error&&console.error(e.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){var e;for(const t of this._images.values())null===(e=t.marker)||void 0===e||e.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return 4*this._pixelLimit/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return 4*this._getStoredPixels()/1e6}_getStoredPixels(){let e=0;for(const t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){var t;const i=this._images.get(e);i&&(this._images.delete(e),window.ImageBitmap&&i.orig instanceof ImageBitmap&&i.orig.close(),null===(t=this.onImageDeleted)||void 0===t||t.call(this,e))}wipeAlternate(){var e;const t=[];for(const[i,A]of this._images.entries())"alternate"===A.bufferType&&(null===(e=A.marker)||void 0===e||e.dispose(),t.push(i));for(const e of t)this._delImg(e);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){var t;const i=this._images.get(e);i&&(null===(t=i.marker)||void 0===t||t.dispose(),this._delImg(e))}addImage(e,i){var A,s;this._evictOldest(e.width*e.height);let r=this._renderer.cellSize;-1!==r.width&&-1!==r.height||(r=t.CELL_SIZE_DEFAULT);const o=Math.ceil(e.width/r.width),n=Math.ceil(e.height/r.height),a=++this._lastId,h=this._terminal._core.buffer,d=this._terminal.cols,g=this._terminal.rows,l=h.x,c=h.y;let I=l,_=0;i.scrolling||(h.x=0,h.y=0,I=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y);for(let e=0;e=d);++i)this._writeToCell(t,I+i,a,e*o+i),_++;if(i.scrolling)e=g)break;h.x=I}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(h.y),i.scrolling?"iip"===i.cursorPos?h.x=Math.min(I+o,d):h.x=I:(h.x=l,h.y=c);const C=[];for(const[e,t]of this._images.entries())t.tileCount<1&&(null===(A=t.marker)||void 0===A||A.dispose(),C.push(e));for(const e of C)this._delImg(e);const B=this._terminal.registerMarker(0);null==B||B.onDispose(()=>{this._images.get(a)&&this._delImg(a)}),"alternate"===this._terminal.buffer.active.type&&this._evictOnAlternate();const Q={orig:e,origCellSize:r,actual:e,actualCellSize:Object.assign({},r),marker:B||void 0,tileCount:_,bufferType:this._terminal.buffer.active.type,layer:i.layer,zIndex:i.zIndex};return this._images.set(a,Q),null===(s=this.onImageAdded)||void 0===s||s.call(this),a}render(e){var t,i;let A=!1,s=!1;for(const e of this._images.values())if("bottom"===e.layer?s=!0:A=!0,A&&s)break;if(A&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(s&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size)return this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),void(this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom"));!A&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!s&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);const{start:o,end:n}=e,a=this._terminal._core.buffer,h=this._terminal._core.cols;this._renderer.clearLines(o,n);const d=[],g=[];for(let e=o;e<=n;++e){const A=a.lines.get(e+a.ydisp);if(!A)return;for(let s=0;se.imgSpec.zIndex-t.imgSpec.zIndex);for(const e of g)this._renderer.drawPlaceholder(e.col,e.row,e.count);for(const e of d)this._renderer.draw(e.imgSpec,e.tileId,e.col,e.row,e.count)}viewportResize(e){var t,i;if(!this._images.size)return void(this._viewportMetrics=e);if(this._viewportMetrics.cols>=e.cols)return void(this._viewportMetrics=e);const A=this._terminal._core.buffer,s=A.lines.length,o=this._viewportMetrics.cols-1;for(let n=0;n=r)continue;let n=!1;for(let t=o+1;t>e.cols;++t)if(s.hasContent(t)){n=!0;break}if(n)continue;const h=Math.min(e.cols,r-a.tileId%r+o);let d=a.tileId;for(let e=o+1;e4194304&&e.release();const A=null!==(i=a.get(t))&&void 0!==i?i:[];A.length<2&&(A.push(e),a.set(t,A))}function g(e){return A.BIG_ENDIAN?e:(255&e)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255}t.SixelHandler=class{constructor(e,t,i){var A;this._opts=e,this._storage=t,this._coreTerminal=i,this._size=0,this._aborted=!1,this._decMemoryLimit=0,this._palette=new Uint32Array(o.LIMITS.PALETTE_SIZE),this._palette.set(n),A=4*this._opts.pixelLimit,h||(h=!0,(0,r.DecoderAsync)({memoryLimit:A,palette:n}).then(e=>d(e,A),()=>{h=!1}))}reset(){this._returnDecoder(),this._palette.fill(0),this._palette.set(n)}hook(e){var t;this._size=0,this._aborted=!1,this._returnDecoder();const i=4*this._opts.pixelLimit;try{this._dec=function(e){var t,i;return null!==(i=null===(t=a.get(e))||void 0===t?void 0:t.pop())&&void 0!==i?i:new r.Decoder({memoryLimit:e,palette:n})}(i)}catch(e){return console.warn(`SIXEL: could not allocate decoder - ${e}`),void(this._aborted=!0)}this._decMemoryLimit=i;const s=1===e.params[1]?0:function(e,t){let i=0;if(!t)return i;if(e.isInverse())if(e.isFgDefault())i=g(t.foreground.rgba);else if(e.isFgRGB()){const t=e.constructor.toColorRGB(e.getFgColor());i=(0,A.toRGBA8888)(...t)}else i=g(t.ansi[e.getFgColor()].rgba);else if(e.isBgDefault())i=g(t.background.rgba);else if(e.isBgRGB()){const t=e.constructor.toColorRGB(e.getBgColor());i=(0,A.toRGBA8888)(...t)}else i=g(t.ansi[e.getBgColor()].rgba);return i}(this._coreTerminal._core._inputHandler._curAttrData,null===(t=this._coreTerminal._core._themeService)||void 0===t?void 0:t.colors);this._dec.init(s,this._palette,this._opts.sixelPaletteLimit)}_returnDecoder(){const e=this._dec;e&&(this._dec=void 0,this._palette.set(e.palette),d(e,this._decMemoryLimit))}put(e,t,i){if(!this._aborted&&this._dec){if(this._size+=i-t,this._size>this._opts.sixelSizeLimit)return console.warn("SIXEL: too much data, aborting"),this._aborted=!0,void this._dec.release();try{this._dec.decode(e,t,i)}catch(e){console.warn(`SIXEL: error while decoding image - ${e}`),this._aborted=!0,this._dec.release()}}}unhook(e){try{return this._unhook(e)}finally{this._returnDecoder()}}_unhook(e){var t;if(this._aborted||!e||!this._dec)return!0;const i=this._dec.width,A=this._dec.height;if(!i||!A)return A&&this._storage.advanceCursor(A),!0;const r=s.ImageRenderer.createCanvas(void 0,i,A);return null===(t=r.getContext("2d"))||void 0===t||t.putImageData(new ImageData(this._dec.data8,i,A),0,0),this._storage.addImage(r),!0}}},994(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SixelImageStorage=void 0;const A=i(699);t.SixelImageStorage=class{constructor(e,t,i,A){this._storage=e,this._opts=t,this._renderer=i,this._terminal=A,this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;-1!==t.width&&-1!==t.height||(t=A.CELL_SIZE_DEFAULT);const i=Math.ceil(e/t.height);for(let e=1;e512)return void(this._aborted=!0);if(this._controlData.set(e.subarray(t,s),this._controlLength),this._controlLength+=r,!this._inControlData){if(this._parsedCommand=(0,a.parseKittyCommand)(this._parseControlDataString()),void 0!==this._parsedCommand.id&&void 0!==this._parsedCommand.imageNumber)return this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",null!==(A=this._parsedCommand.quiet)&&void 0!==A?A:0),void(this._aborted=!0);if("d"===this._parsedCommand.action)return;const t=s+1;tthis._encodedSizeLimit){const e=null!==(d=this._activeDecoder)&&void 0!==d?d:null==_?void 0:_.decoder;return e&&e.release(),this._activeDecoder=null,_&&this._removePendingEntry(I),void(this._aborted=!0)}if(!this._decodeError){if((null==_?void 0:_.decoder)&&!this._activeDecoder&&(this._activeDecoder=_.decoder),!this._activeDecoder){const e=this._maxEncodedBytes+131072;if(e>1e6*this._opts.storageLimit)return this._aborted=!0,void(void 0!==(null===(s=this._parsedCommand)||void 0===s?void 0:s.id)&&this._sendResponse(this._parsedCommand.id,"ENOMEM:pending image budget exceeded",null!==(g=this._parsedCommand.quiet)&&void 0!==g?g:0));const t=Math.max(1,Math.floor(1e6*this._opts.storageLimit/e));for(;this._pendingTransmissions.size>=t;){const e=this._pendingTransmissions.entries().next().value;if(!e)break;e[1].decoder.release(),this._removePendingEntry(e[0]),void 0!==e[1].cmd.id&&this._sendResponse(e[1].cmd.id,"ENOMEM:pending image budget exceeded",null!==(l=e[1].cmd.quiet)&&void 0!==l?l:0)}const i=new n.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes);try{i.init()}catch(e){return console.warn("KITTY: could not allocate decoder",e),this._aborted=!0,void(void 0!==(null===(r=this._parsedCommand)||void 0===r?void 0:r.id)&&this._sendResponse(this._parsedCommand.id,"ENOMEM:could not allocate decoder",null!==(c=this._parsedCommand.quiet)&&void 0!==c?c:0))}this._activeDecoder=i}0!==this._activeDecoder.put(e.subarray(t,i))&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,_&&this._removePendingEntry(I))}}end(e){var t,i;if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();const A=this._parsedCommand;if("d"===A.action)return this._handleDelete(A);const s=null!==(i=null!==(t=A.id)&&void 0!==t?t:this._lastPendingKey)&&void 0!==i?i:0,r=1===A.more,o=this._pendingTransmissions.get(s);if(r)return this._activeDecoder&&(o?(o.totalEncodedSize+=this._totalEncodedSize,o.decodeError=o.decodeError||this._decodeError):this._pendingTransmissions.set(s,{cmd:Object.assign({},A),decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=s,this._activeDecoder=null),!0;o&&(this._lastPendingKey=void 0);let n=this._decodeError,a=A,h=this._activeDecoder;o&&(a=o.cmd,h=o.decoder,n=n||o.decodeError,this._pendingTransmissions.delete(s));let d=new Uint8Array(0);h&&(0!==h.end()&&(n=!0),d=h.data8),this._activeDecoder=null;const g=this._handleCommandWithBytesAndCmd(a,d,n);return h&&h.release(),g}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",null!==(o=e.quiet)&&void 0!==o?o:0)),A}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported action",null!==(n=e.quiet)&&void 0!==n?n:0),!0}}_handlePlacement(e){var t;if(void 0===e.id)return!0;const i=e.id,A=this._kittyStorage.getImage(i);return A?this._displayImage(A,e).then(t=>{var A;return this._sendResponse(i,t?"OK":"EINVAL:image rendering failed",null!==(A=e.quiet)&&void 0!==A?A:0,e.placementId),!0}):(this._sendResponse(i,"ENOENT:image not found",null!==(t=e.quiet)&&void 0!==t?t:0,e.placementId),!0)}_handleTransmit(e,t,i){var A,s,r,o,n,a;return"d"!==(null!==(A=e.transmission)&&void 0!==A?A:"d")?(void 0!==e.id&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",null!==(s=e.quiet)&&void 0!==s?s:0),!0):(i||0===t.length||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:null!==(r=e.width)&&void 0!==r?r:0,height:null!==(o=e.height)&&void 0!==o?o:0,format:null!==(n=e.format)&&void 0!==n?n:32,compression:null!==(a=e.compression)&&void 0!==a?a:""}),!0)}_handleTransmitDisplay(e,t,i){var A,s;if(i)return void 0!==e.id&&this._sendResponse(e.id,"EINVAL:invalid base64 data",null!==(A=e.quiet)&&void 0!==A?A:0),!0;this._handleTransmit(e,t,i);const r=null!==(s=e.id)&&void 0!==s?s:this._kittyStorage.lastImageId,o=this._kittyStorage.getImage(r);if(o){const t=this._displayImage(o,e);return void 0!==e.id?t.then(t=>{var i;return this._sendResponse(r,t?"OK":"EINVAL:image rendering failed",null!==(i=e.quiet)&&void 0!==i?i:0),!0}):t.then(()=>!0)}return!0}_handleQuery(e,t,i){var A,s,r,o,n,a;const h=null!==(A=e.id)&&void 0!==A?A:0,d=null!==(s=e.quiet)&&void 0!==s?s:0;if("d"!==(null!==(r=e.transmission)&&void 0!==r?r:"d"))return this._sendResponse(h,"EINVAL:unsupported transmission medium",d),!0;if(i)return this._sendResponse(h,"EINVAL:invalid base64 data",d),!0;if(0===t.length)return this._sendResponse(h,"OK",d),!0;const g=null!==(o=e.format)&&void 0!==o?o:32;if(100===g)this._sendResponse(h,"OK",d);else{const i=null!==(n=e.width)&&void 0!==n?n:0,A=null!==(a=e.height)&&void 0!==a?a:0;if(!i||!A)return this._sendResponse(h,"EINVAL:width and height required for raw pixel data",d),!0;const s=i*A*(32===g?4:3);if(t.length=1)return;if(!s&&i>=2)return;const r=`_Gi=${e}${A?`,p=${A}`:""};${t}\\`;this._coreTerminal._core.coreService.triggerDataEvent(r)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){var i,A,o,n,a,h,d;const g=this._generation;let l=await this._createBitmap(e);try{if(g!==this._generation)throw new Error("image decode canceled");const c=Math.max(0,null!==(o=t.x)&&void 0!==o?o:0),I=Math.max(0,null!==(n=t.y)&&void 0!==n?n:0),_=t.sourceWidth||l.width-c,C=t.sourceHeight||l.height-I,B=Math.max(0,l.width-c),Q=Math.max(0,l.height-I),u=Math.max(0,Math.min(_,B)),m=Math.max(0,Math.min(C,Q));if(0===u||0===m)throw new Error("invalid source rectangle");if(0!==c||0!==I||u!==l.width||m!==l.height){const e=await createImageBitmap(l,c,I,u,m);l.close(),l=e}const E=(null===(i=this._renderer.dimensions)||void 0===i?void 0:i.css.cell.width)||r.CELL_SIZE_DEFAULT.width,f=(null===(A=this._renderer.dimensions)||void 0===A?void 0:A.css.cell.height)||r.CELL_SIZE_DEFAULT.height;let D,p;void 0!==t.columns&&void 0!==t.rows?(D=t.columns,p=t.rows):void 0!==t.columns?(D=t.columns,p=Math.max(1,Math.ceil(l.height/l.width*(D*E)/f))):void 0!==t.rows?(p=t.rows,D=Math.max(1,Math.ceil(l.width/l.height*(p*f)/E))):(D=Math.ceil(l.width/E),p=Math.ceil(l.height/f));let w=l.width,y=l.height;if(void 0===t.columns&&void 0===t.rows||(w=Math.round(D*E),y=Math.round(p*f)),w*y>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");const v=this._coreTerminal._core.buffer,M=v.x,k=v.y,b=v.ybase,L=void 0!==t.zIndex&&t.zIndex<0?"bottom":"top";if(w!==l.width||y!==l.height){const e=await createImageBitmap(l,{resizeWidth:w,resizeHeight:y});l.close(),l=e}const S=Math.min(Math.max(0,null!==(a=t.xOffset)&&void 0!==a?a:0),E-1),N=Math.min(Math.max(0,null!==(h=t.yOffset)&&void 0!==h?h:0),f-1);if(0!==S||0!==N){const e=void 0!==t.columns?Math.round(D*E):l.width+S,i=void 0!==t.rows?Math.round(p*f):l.height+N,A=s.ImageRenderer.createCanvas(window.document,e,i),r=A.getContext("2d");if(!r)throw new Error("Failed to create offset canvas context");r.drawImage(l,S,N);const o=await createImageBitmap(A);if(A.width=A.height=0,l.close(),l=o,w=l.width,y=l.height,w*y>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");void 0===t.columns&&(D=Math.ceil(l.width/E)),void 0===t.rows&&(p=Math.ceil(l.height/f))}if(g!==this._generation)throw new Error("image decode canceled");const H=null!==(d=t.zIndex)&&void 0!==d?d:0;if(this._kittyStorage.addImage(e.id,l,!0,L,H),l=void 0,1===t.cursorMovement){const e=v.ybase-b;v.x=M,v.y=Math.max(k-e,0)}else v.x=Math.min(M+D,this._coreTerminal.cols)}catch(e){throw null==l||l.close(),e}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if("z"===e.compression&&(t=await this._decompressZlib(t)),100===e.format){const e=(0,o.imageType)(t);if("image/png"!==e.mime||!(e.width>0)||!(e.height>0)||e.width*e.height>this._opts.pixelLimit)throw new RangeError("PNG exceeds pixel limit or has invalid dimensions");const i=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){const e=URL.createObjectURL(i),t=new Image;return new Promise((i,A)=>{t.addEventListener("load",()=>{var r;URL.revokeObjectURL(e);const o=s.ImageRenderer.createCanvas(window.document,t.width,t.height);null===(r=o.getContext("2d"))||void 0===r||r.drawImage(t,0,0),createImageBitmap(o).then(i).catch(A)}),t.addEventListener("error",()=>{URL.revokeObjectURL(e),A(new Error("Failed to load image"))}),t.src=e})}return createImageBitmap(i)}const i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");const r=i*A*(32===e.format?4:3);if(t.length>>24|t<<8,d[c++]=4278190080|t>>>16|i<<16,d[c++]=4278190080|i>>>8}let I=3*g,_=4*g;for(let e=g;e=e.length)return void t.close();const i=Math.min(A+4096,e.length);t.enqueue(new Uint8Array(e.subarray(A,i))),A=i}}).pipeThrough(new DecompressionStream(t)).getReader(),r=[];let o=0;try{for(;;){const{done:e,value:t}=await s.read();if(e)break;if(o+=t.byteLength,o>i)throw await s.cancel().catch(()=>{}),new RangeError("decompressed image exceeds byte limit");r.push(t)}}finally{s.releaseLock()}const n=new Uint8Array(o);let a=0;for(const e of r)n.set(e,a),a+=e.length;return n}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}}},470(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseKittyCommand=function(e){const t={},i=e.split(",");for(const e of i){const i=e.indexOf("=");if(-1===i)continue;const A=e.substring(0,i),s=e.substring(i+1);if("a"===A){t.action=s;continue}if("o"===A){t.compression=s;continue}if("t"===A){t.transmission=s;continue}if("d"===A){t.deleteSelector=s;continue}const r=parseInt(s,10);switch(A){case"f":t.format=r;break;case"i":t.id=r;break;case"I":t.imageNumber=r;break;case"s":t.width=r;break;case"v":t.height=r;break;case"x":t.x=r;break;case"y":t.y=r;break;case"w":t.sourceWidth=r;break;case"h":t.sourceHeight=r;break;case"X":t.xOffset=r;break;case"Y":t.yOffset=r;break;case"c":t.columns=r;break;case"r":t.rows=r;break;case"m":t.more=r;break;case"q":t.quiet=r;break;case"C":t.cursorMovement=r;break;case"z":t.zIndex=r;break;case"p":t.placementId=r}}return t}},235(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyImageStorage=void 0;class i{constructor(e){this._storage=e,this._nextImageId=1,this._images=new Map,this._kittyIdToStorageId=new Map,this._storageIdToKittyId=new Map,this._handleStorageImageDeleted=e=>{const t=this._storageIdToKittyId.get(e);void 0!==t&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))},this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"},this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=e=>{var t;null===(t=this._previousOnImageDeleted)||void 0===t||t.call(this,e),this._handleStorageImageDeleted(e)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){const A=null!=e?e:this._nextImageId++,s=this._kittyIdToStorageId.get(A);void 0!==s&&(this._storage.deleteImage(s),this._kittyIdToStorageId.delete(A),this._storageIdToKittyId.delete(s)),!this._images.has(A)&&this._images.size>=i._maxStoredImages&&this._evictUndisplayedImages();const r=1e6*this._storage.getLimit();this._images.delete(A);let o=0;for(const e of this._images.values())o+=e.data.size;for(const e of[!1,!0])for(const[i,A]of this._images){if(o+t.data.size<=r)break;this._kittyIdToStorageId.has(i)===e&&(o-=A.data.size,this.deleteById(i))}return this._images.set(A,Object.assign(Object.assign({},t),{id:A})),A}addImage(e,t,i,A,s){const r=this._kittyIdToStorageId.get(e);void 0!==r&&this._storageIdToKittyId.delete(r),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=s;const o=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,o),this._storageIdToKittyId.set(o,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);const t=this._kittyIdToStorageId.get(e);void 0!==t&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(const e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(const[e]of this._images){if(this._images.size<=i._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}}t.KittyImageStorage=i,i._maxStoredImages=256},669(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});const A=(0,i(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),s=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(e=>e.charCodeAt(0))),r=new Uint32Array(1024);r.fill(4278190080);for(let e=0;e>4|(e<<4&255)<<8;for(let e=0;e>2<<8|(e<<6&255)<<16;for(let e=0;ethis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):o}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=null!=e?e:this.maxBytes,this._bytes=null!=t?t:Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32;const s=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let e=this._bytes;for(;(e*=2)this._mem.buffer.byteLength){const t=Math.ceil((e+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(t),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=e}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;const t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}}},61(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});const A=(0,i(552).InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="});t.default=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];const t=this.width*this.height,i=4*t,s=e.length,r=Math.max(i,s)+(Math.min(i,s)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}}},552(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.InWasm=function(e){if(e.d){const{t,s:A,d:s}=e;let r,o;const n=WebAssembly;return 0===t?A?e=>new n.Instance(o||(o=new n.Module(r||(r=i(s)))),e):e=>o?n.instantiate(o,e):n.instantiate(r||(r=i(s)),e).then(e=>(o=e.module)&&e.instance):1===t?A?()=>o||(o=new n.Module(r||(r=i(s)))):()=>o?Promise.resolve(o):n.compile(r||(r=i(s))).then(e=>o=e):A?()=>r||(r=i(s)):()=>Promise.resolve(r||(r=i(s)))}if("undefined"==typeof _wasmCtx)throw new Error('must run "inwasm"');_wasmCtx.add(e)};let i=e=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);if("undefined"!=typeof Buffer)return Buffer.from(e,"base64");const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e{var e=A;Object.defineProperty(e,"__esModule",{value:!0}),e.ImageAddon=void 0;const t=i(414),s=i(795),r=i(463),o=i(699),n=i(23),a=i(235),h=i(566),d=i(994),g=i(649),l={enableSizeReports:!0,pixelLimit:16777216,sixelSupport:!0,sixelScrolling:!0,sixelPaletteLimit:4096,sixelSizeLimit:33554432,storageLimit:128,showPlaceholder:!0,iipSupport:!0,iipSizeLimit:33554432,kittySupport:!0,kittySizeLimit:33554432};e.ImageAddon=class{constructor(e){this._disposables=[],this._handlers=new Map,this._onImageAdded=new t.Emitter,this.onImageAdded=this._onImageAdded.event,this._opts=Object.assign({},l,e),this._defaultOpts=Object.assign({},l,e)}dispose(){for(const e of this._handlers.values())e.reset();for(const e of this._disposables)e.dispose();this._disposables.length=0,this._handlers.clear(),this._onImageAdded.dispose()}_disposeLater(...e){for(const t of e)this._disposables.push(t)}activate(e){var t;if(this._terminal=e,this._renderer=new r.ImageRenderer(e),this._storage=new o.ImageStorage(e,this._renderer,this._opts),this._storage.onImageAdded=()=>this._onImageAdded.fire(),this._opts.enableSizeReports){const i=null!==(t=e.options.windowOptions)&&void 0!==t?t:{};i.getWinSizePixels=!0,i.getCellSizePixels=!0,i.getWinSizeChars=!0,e.options.windowOptions=i}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},e=>this._decset(e)),e.parser.registerCsiHandler({prefix:"?",final:"l"},e=>this._decrst(e)),e.parser.registerCsiHandler({final:"c"},e=>this._da1(e)),e.parser.registerCsiHandler({prefix:"?",final:"S"},e=>this._xtermGraphicsAttributes(e)),e.onRender(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.render(e)}),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>{var e;return null===(e=this._storage)||void 0===e?void 0:e.wipeAlternate()}),e.onResize(e=>{var t;return null===(t=this._storage)||void 0===t?void 0:t.viewportResize(e)})),this._opts.sixelSupport){const t=new d.SixelImageStorage(this._storage,this._opts,this._renderer,e),i=new h.SixelHandler(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){const t=new g.IIPImageStorage(this._storage),i=new s.IIPHandler(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){const t=new a.KittyImageStorage(this._storage),i=new n.KittyGraphicsHandler(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){var e;this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,null===(e=this._storage)||void 0===e||e.reset();for(const e of this._handlers.values())e.reset();return!1}get storageLimit(){var e;return(null===(e=this._storage)||void 0===e?void 0:e.getLimit())||-1}set storageLimit(e){var t;null===(t=this._storage)||void 0===t||t.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){var t;this._opts.showPlaceholder=e,null===(t=this._renderer)||void 0===t||t.showPlaceholder(e)}getImageAtBufferCell(e,t){var i;return null===(i=this._storage)||void 0===i?void 0:i.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){var i;return null===(i=this._storage)||void 0===i?void 0:i.extractTileAtBufferCell(e,t)}_report(e){var t;null===(t=this._terminal)||void 0===t||t._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=4096?(this._opts.sixelPaletteLimit=e[2],this._report(`[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`[?${e[0]};2S`),!0;case 4:return this._report(`[?${e[0]};0;4096S`),!0;default:return this._report(`[?${e[0]};2S`),!0}if(2===e[0])switch(e[1]){case 1:let a=null===(i=null===(t=this._renderer)||void 0===t?void 0:t.dimensions)||void 0===i?void 0:i.css.canvas.width,h=null===(s=null===(A=this._renderer)||void 0===A?void 0:A.dimensions)||void 0===s?void 0:s.css.canvas.height;if(!a||!h){const e=o.CELL_SIZE_DEFAULT;a=((null===(r=this._terminal)||void 0===r?void 0:r.cols)||80)*e.width,h=((null===(n=this._terminal)||void 0===n?void 0:n.rows)||24)*e.height}if(a*h {\nreturn ","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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'\n};\n//# sourceMappingURL=wasm.js.map","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Limit held memory in base64 decoder (encoded bytes).\n KEEP_DATA = 4194304,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n this._dec.init();\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n this._dec.init();\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n const data = this._qoiDec.decode(this._dec.data8);\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode — cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat — points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const finalWidth = width + sx > img.width ? img.width - sx : width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document,\n Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n );\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport type {\n ITerminalExt, IImageAddonOptions, IImageSpec, ICellSize, IAddImageOpts\n} from './Types';\nimport type { IBufferLine } from 'common/buffer/Types';\nimport { CellData } from 'common/buffer/CellData';\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\nclass ImageTileInfo {\n constructor(\n public imageId = -1,\n public tileId = -1) {\n }\n}\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n private _workCell: CellData = new CellData();\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase)!;\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp);\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n const e = line.getExtended(col)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (++col < cols) {\n const nextE = line.getExtended(col)?.payload;\n if (!(nextE instanceof ImageTileInfo) || nextE.imageId !== imageId || nextE.tileId !== startTile + count) {\n break;\n }\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row)!;\n const e = line.getExtended(oldCol)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line.hasContent(rightCol)) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLine, x: number, imageId: number, tileId: number): void {\n const workCell = this._workCell;\n line.loadCell(x, workCell);\n if (this._workCell.hasExtendedAttrs()) {\n const old = workCell.extended.payload;\n if (old instanceof ImageTileInfo) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n }\n // fall-through: always create new ExtendedAttrs entry\n const extattr = workCell.extended.clone();\n extattr.payload = new ImageTileInfo(imageId, tileId);\n workCell.extended = extattr;\n workCell.updateExtended();\n line.setCell(x, workCell);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y);\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n const payload = line.getExtended(x)?.payload;\n if (payload instanceof ImageTileInfo) {\n const spec = this._images.get(payload.imageId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n","/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n DecoderAsync({\n memoryLimit: this._opts.pixelLimit * 4,\n palette: DEFAULT_PALETTE,\n paletteLimit: this._opts.sixelPaletteLimit\n }).then(d => this._dec = d);\n }\n\n public reset(): void {\n /**\n * reset sixel decoder to defaults:\n * - release all memory\n * - nullify palette (4096)\n * - apply default palette (256)\n */\n if (this._dec) {\n this._dec.release();\n // FIXME: missing interface on decoder to nullify full palette\n (this._dec as any)._palette.fill(0);\n this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n }\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n if (this._dec) {\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n this._dec.release();\n }\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded → 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n this._activeDecoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n this._activeDecoder.init();\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received — clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first — handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload — image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) — ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency —\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw × r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly — no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB→RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes — ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] → uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1–3 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch {\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const ds = new DecompressionStream(format);\n const writer = ds.writable.getWriter();\n writer.write(compressed as BufferSource);\n writer.close();\n\n const chunks: Uint8Array[] = [];\n const reader = ds.readable.getReader();\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) — only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair — same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId → placementId → storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map","\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 §4 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","red","n","green","blue","toRGBA8888","r","g","b","a","clamp","low","high","value","Math","max","min","h2c","t1","t2","c","normalizeRGB","round","Object","defineProperty","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","PALETTE_ANSI_256","PALETTE_VT340_GREY","PALETTE_VT340_COLOR","normalizeHLS","nearestColorIndex","fromRGBA8888","alpha","BIG_ENDIAN","Uint8Array","Uint32Array","buffer","console","warn","color","palette","Number","MAX_SAFE_INTEGER","idx","i","length","dr","dg","db","d","h","l","s","v","HLStoRGB","p","push","decodeAsync","decode","Decoder","DecoderAsync","Colors_1","__webpack_require__","wasm_1","WASM_BYTES","Buffer","from","bytestring","atob","result","charCodeAt","decodeBase64","LIMITS","BYTES","WASM_MODULE","NULL_CANVAS","CallbackProxy","constructor","this","bandHandler","width","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","memoryLimit","sixelColor","fillColor","paletteLimit","PALETTE_SIZE","truncate","opts","cbProxy","importObj","env","bind","WebAssembly","instantiate","then","inst","instance","_instance","_cbProxy","_PIXEL_OFFSET","MAX_WIDTH","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","_opts","assign","Error","_handle_band","_initCanvas","Module","Instance","_wasm","_chunk","memory","get_chunk_address","CHUNK_SIZE","_states","get_state_address","_palette","get_palette_address","set","_pSrc","get_p0_address","init","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","height","release","_realloc","offset","additionalPixels","newCanvas","ceil","adv","remaining","subarray","current_width","current_height","memoryUsage","byteLength","properties","level","memUsage","rasterAttributes","numerator","denominator","data","start","end","decodeString","j","data32","currentWidth","fill","escape","final","finalOffset","bw","currentHeight","data8","Uint8ClampedArray","dec","async","Lifecycle_1","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","toDisposable","entry","fn","slice","indexOf","splice","Array","isArray","add","fire","call","listeners","len","dispose","forward","to","e","map","undefined","any","events","store","DisposableStore","runAndSubscribe","handler","initial","arg","_disposables","Set","_isDisposed","isDisposed","o","clear","Disposable","_store","_register","None","freeze","_value","AttributeData","fg","bg","extended","ExtendedAttrs","toColorRGB","fromColorRGB","clone","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","underlineStyle","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isProtected","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","updateExtended","isEmpty","getUnderlineColor","underlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","urlId","val","payload","TextDecoder_1","Constants_1","AttributeData_1","CellData","content","combinedData","fromCharData","obj","setFromCharData","isCombined","getWidth","getChars","stringFromCodePoint","getCode","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","code","second","CHAR_DATA_WIDTH_INDEX","getAsCharData","attributesEquals","other","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","CHAR_DATA_CODE_INDEX","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","String","fromCharCode","codepoint","_interim","input","target","size","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","type","missing","fourStop","ImageRenderer_1","ImageStorage_1","Base64Decoder_wasm_1","__importDefault","QoiDecoder_wasm_1","IIPHeaderParser_1","IIPMetrics_1","DEFAULT_HEADER","name","preserveAspectRatio","inline","_renderer","_storage","_coreTerminal","_aborted","_hp","HeaderParser","_header","_isMultipart","_abortMulti","maxEncodedBytes","iipSizeLimit","initialBytes","_dec","default","_qoiDec","reset","put","state","dataPos","parse","fields","success","seqType","w","CELL_SIZE_DEFAULT","dimensions","css","canvas","cols","rows","scale","_c","_a","_core","_coreBrowserService","dpr","report","toFixed","cond","blob","metrics","UNSUPPORTED_TYPE","imageType","mime","pixelLimit","_resize","floor","ImageData","byteOffset","ImageRenderer","createCanvas","_b","getContext","putImageData","addImage","Blob","createImageBitmap","resizeWidth","resizeHeight","bm","catch","cw","cell","ch","_d","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","parseInt","toStr","toInt","toSize","match","DECODERS","toString","bs","TextDecoder","FILE_MARKER","MULTIPARTFILE_MARKER","FILEPART_MARKER","FILEEND_MARKER","REPORTCELLSIZE_MARKER","MAX_FIELDCHARS","_buffer","_position","_key","k","_storeValue","_storeKey","_addImageOpts","scrolling","layer","zIndex","cursorPos","img","d32","blockLength","jpgSize","dim","limit","_layers","get","localDocument","document","createElement","createImageData","ctx","imgData","Promise","resolve","_terminal","super","Map","_optionsRefresh","MutableDisposable","_oldOpen","open","parent","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","_renderService","refreshRows","removeLayerFromDom","_oldSetRenderer","setRenderer","_placeholderBitmap","close","_placeholder","showPlaceholder","cellSize","_createPlaceHolder","clearLines","y","clearRect","_e","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sx","sy","dx","dy","finalWidth","finalHeight","drawImage","extractTile","drawPlaceholder","values","spec","actualCellSize","originalWidth","originalHeight","origCellSize","orig","renderer","key","keys","insertLayerToDom","has","classList","style","isolation","insertBefore","firstChild","appendChild","remove","delete","hasLayer","bWidth","blueprint","black","white","shift","x","screen","ctx2","bitmap","window","CellData_1","ImageTileInfo","imageId","_images","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","_workCell","setLimit","storageLimit","error","message","getLimit","_viewportMetrics","marker","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","id","ImageBitmap","onImageDeleted","wipeAlternate","zero","entries","bufferType","deleteImage","termCols","termRows","originX","originY","tileCount","_inputHandler","_dirtyRowTracker","markDirty","line","lines","ybase","_writeToCell","lineFeed","endMarker","registerMarker","onDispose","active","_evictOnAlternate","onImageAdded","render","range","hasTopImages","hasBottomImages","drawCalls","placeholderCalls","ydisp","getExtended","startTile","startCol","nextE","sort","viewportResize","oldCol","tilesPerRow","hasData","rightCol","hasContent","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","workCell","loadCell","old","oldSpec","extattr","setCell","Decoder_1","DEFAULT_PALETTE","convertLe","_size","sixelPaletteLimit","hook","params","attr","colors","foreground","rgba","t","ansi","background","extractActiveBg","_curAttrData","_themeService","sixelSizeLimit","unhook","advanceCursor","sixelScrolling","KittyGraphicsTypes_1","_kittyStorage","_decodeError","_activeDecoder","_inControlData","_controlData","_controlLength","_encodedSizeLimit","_totalEncodedSize","_parsedCommand","_pendingTransmissions","_maxEncodedBytes","kittySizeLimit","_initialEncodedBytes","_cleanupAllPending","_removePendingEntry","_lastPendingKey","pending","decoder","controlEnd","copyLength","parseKittyCommand","_parseControlDataString","imageNumber","_sendResponse","quiet","action","payloadStart","_streamPayload","pendingKey","previousEncodedSize","totalEncodedSize","decoderToRelease","_handleNoPayloadCommand","cmd","_handleDelete","isMoreComing","more","decodeError","finalCmd","imageBytes","_handleCommandWithBytesAndCmd","str","fromCodePoint","_handlePlacement","bytes","_handleTransmit","transmission","_handleTransmitDisplay","_handleQuery","image","getImage","_displayImage","placementId","storeImage","format","compression","_f","lastImageId","expectedBytes","deleteSelector","deleteAll","deleteById","isOk","response","coreService","triggerDataEvent","_decodeAndDisplay","_createBitmap","cropX","cropY","cropW","sourceWidth","cropH","sourceHeight","maxCropW","maxCropH","finalCropW","finalCropH","cropped","imgCols","imgRows","columns","savedX","savedY","savedYbase","scaled","xOffset","yOffset","canvasW","canvasH","offsetCanvas","offsetCtx","offsetBitmap","_g","cursorMovement","scrolled","arrayBuffer","_decompressZlib","url","URL","createObjectURL","Image","reject","addEventListener","revokeObjectURL","src","pixelCount","src32","dst32","alignedPixels","srcOffset","dstOffset","b0","b1","b2","srcByte","dstByte","compressed","_decompress","ds","DecompressionStream","writer","writable","getWriter","write","chunks","reader","readable","getReader","done","read","totalLength","reduce","sum","chunk","images","_kittyIdToStorageId","kittyIdToStorageId","pendingTransmissions","parts","split","part","eqIdx","substring","numValue","KittyImageStorage","_nextImageId","_storageIdToKittyId","_handleStorageImageDeleted","storageId","kittyId","_previousOnImageDeleted","_wrappedOnImageDeleted","imageData","oldStorageId","_maxStoredImages","_evictUndisplayedImages","wasmDecode","InWasm","MAP","el","D","EMPTY","keepSize","maxBytes","_inst","_ended","_bytes","_m32","_mem","m","grow","Memory","requested","needed","newSize","addPages","loadedBytes","freeBytes","wasmQoiDecode","ib","dl","chunkP","def","W","z","compile","_wasmCtx","fromBase64","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","Event_1","IIPHandler_1","KittyGraphicsHandler_1","KittyImageStorage_1","SixelHandler_1","SixelImageStorage_1","IIPImageStorage_1","enableSizeReports","sixelSupport","iipSupport","kittySupport","_handlers","_onImageAdded","Emitter","_defaultOpts","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelStorage","SixelImageStorage","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipStorage","IIPImageStorage","iipHandler","IIPHandler","registerOscHandler","kittyStorage","kittyHandler","KittyGraphicsHandler","registerApcHandler","storageUsage","_report","sqrt"],"sourceRoot":""} +\ No newline at end of file ++{"version":3,"file":"addon-image.js","mappings":"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","sources":["webpack://ImageAddon/webpack/universalModuleDefinition","webpack://ImageAddon/../node_modules/sixel/lib/Colors.js","webpack://ImageAddon/../node_modules/sixel/lib/Decoder.js","webpack://ImageAddon/../node_modules/sixel/lib/wasm.js","webpack://ImageAddon/../src/common/Event.ts","webpack://ImageAddon/../src/common/Lifecycle.ts","webpack://ImageAddon/../src/common/buffer/AttributeData.ts","webpack://ImageAddon/../src/common/buffer/CellData.ts","webpack://ImageAddon/../src/common/buffer/Constants.ts","webpack://ImageAddon/../src/common/input/TextDecoder.ts","webpack://ImageAddon/./src/IIPHandler.ts","webpack://ImageAddon/./src/IIPHeaderParser.ts","webpack://ImageAddon/./src/IIPImageStorage.ts","webpack://ImageAddon/./src/IIPMetrics.ts","webpack://ImageAddon/./src/ImageRenderer.ts","webpack://ImageAddon/./src/ImageStorage.ts","webpack://ImageAddon/./src/SixelHandler.ts","webpack://ImageAddon/./src/SixelImageStorage.ts","webpack://ImageAddon/./src/kitty/KittyGraphicsHandler.ts","webpack://ImageAddon/./src/kitty/KittyGraphicsTypes.ts","webpack://ImageAddon/./src/kitty/KittyImageStorage.ts","webpack://ImageAddon/../node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js","webpack://ImageAddon/../node_modules/xterm-wasm-parts/lib/qoi/QoiDecoder.wasm.js","webpack://ImageAddon/javascript/node_modules/inwasm-runtime/lib/index.cjs","webpack://ImageAddon/webpack/bootstrap","webpack://ImageAddon/./src/ImageAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageAddon\"] = factory();\n\telse\n\t\troot[\"ImageAddon\"] = factory();\n})(globalThis, () => {\nreturn ","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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'\n};\n//# sourceMappingURL=wasm.js.map","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Held memory in base64/QOI decoders between images. Zero because each kept\n // decoder pins a wasm memory, and V8 caps those per process (~124 in a\n // sandboxed renderer), so idle terminals must not hold one.\n KEEP_DATA = 0,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _generation = 0;\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._generation++;\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n if (!this._initDecoder()) {\n this._aborted = true;\n return;\n }\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n if (!this._initDecoder()) {\n this._abortMulti = true;\n }\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n let data: Uint8Array;\n try {\n data = this._qoiDec.decode(this._dec.data8);\n } catch (e) {\n console.warn('IIP: could not decode QOI image', e);\n this._dec.release();\n this._qoiDec.release();\n return true;\n }\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n const generation = this._generation;\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n if (generation !== this._generation) {\n bm.close();\n return true;\n }\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n private _initDecoder(): boolean {\n try {\n this._dec.init();\n return true;\n } catch (e) {\n console.warn('IIP: could not allocate decoder', e);\n this._dec.release();\n return false;\n }\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode — cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat — points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * sourceWidth + sx > img.width ? img.width - sx : count * sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const finalWidth = sourceWidth + sx > img.width ? img.width - sx : sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n const canvas = ImageRenderer.createCanvas(this.document, Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight));\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, canvas.width, canvas.height\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const scaledWidth = Math.ceil(spec.orig!.width * currentWidth / originalWidth);\n const scaledHeight = Math.ceil(spec.orig!.height * currentHeight / originalHeight);\n // Upscale visible tiles directly; a full zoomed copy can dwarf the image budget.\n if (scaledWidth * scaledHeight > spec.orig!.width * spec.orig!.height) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(this.document, scaledWidth, scaledHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n const placeholder = this._placeholder;\n ImageRenderer.createImageBitmap(placeholder).then(bitmap => {\n if (this._placeholder !== placeholder) bitmap?.close();\n else this._placeholderBitmap = bitmap;\n }).catch(() => {});\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport type {\n ITerminalExt, IImageAddonOptions, IImageSpec, ICellSize, IAddImageOpts\n} from './Types';\nimport type { IBufferLine } from 'common/buffer/Types';\nimport { CellData } from 'common/buffer/CellData';\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\nclass ImageTileInfo {\n constructor(\n public imageId = -1,\n public tileId = -1) {\n }\n}\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n private _workCell: CellData = new CellData();\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase)!;\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp);\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n const e = line.getExtended(col)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (++col < cols) {\n const nextE = line.getExtended(col)?.payload;\n if (!(nextE instanceof ImageTileInfo) || nextE.imageId !== imageId || nextE.tileId !== startTile + count) {\n break;\n }\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row)!;\n const e = line.getExtended(oldCol)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line.hasContent(rightCol)) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLine, x: number, imageId: number, tileId: number): void {\n const workCell = this._workCell;\n line.loadCell(x, workCell);\n if (this._workCell.hasExtendedAttrs()) {\n const old = workCell.extended.payload;\n if (old instanceof ImageTileInfo) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n }\n // fall-through: always create new ExtendedAttrs entry\n const extattr = workCell.extended.clone();\n extattr.payload = new ImageTileInfo(imageId, tileId);\n workCell.extended = extattr;\n workCell.updateExtended();\n line.setCell(x, workCell);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y);\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n const payload = line.getExtended(x)?.payload;\n if (payload instanceof ImageTileInfo) {\n const spec = this._images.get(payload.imageId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n","/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\nimport { LIMITS } from 'sixel/lib/wasm';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n// Why pooled: every decoder owns a wasm memory, and V8 caps live wasm memories\n// per process (~124 in a sandboxed renderer). Terminals borrow a decoder only\n// while a SIXEL sequence is open, so idle terminals hold none.\nconst MAX_IDLE_DECODERS = 2;\nconst idleDecoders = new Map();\nlet poolPrimed = false;\n\nfunction primeDecoderPool(memoryLimit: number): void {\n if (poolPrimed) return;\n poolPrimed = true;\n // Async compile once, off the parser's hot path; later decoders reuse the cached module.\n DecoderAsync({ memoryLimit, palette: DEFAULT_PALETTE }).then(\n d => releaseDecoder(d, memoryLimit),\n () => { poolPrimed = false; }\n );\n}\n\nfunction acquireDecoder(memoryLimit: number): Decoder {\n return idleDecoders.get(memoryLimit)?.pop() ?? new Decoder({ memoryLimit, palette: DEFAULT_PALETTE });\n}\n\nfunction releaseDecoder(dec: Decoder, memoryLimit: number): void {\n if (dec.memoryUsage > MEM_PERMA_LIMIT) {\n dec.release();\n }\n const idle = idleDecoders.get(memoryLimit) ?? [];\n if (idle.length < MAX_IDLE_DECODERS) {\n idle.push(dec);\n idleDecoders.set(memoryLimit, idle);\n }\n}\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n private _decMemoryLimit = 0;\n // Color registers outlive a single image, so they live here rather than in a pooled decoder.\n private readonly _palette = new Uint32Array(LIMITS.PALETTE_SIZE);\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n this._palette.set(DEFAULT_PALETTE);\n primeDecoderPool(this._opts.pixelLimit * 4);\n }\n\n public reset(): void {\n this._returnDecoder();\n this._palette.fill(0);\n this._palette.set(DEFAULT_PALETTE);\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n this._returnDecoder();\n const memoryLimit = this._opts.pixelLimit * 4;\n try {\n this._dec = acquireDecoder(memoryLimit);\n } catch (e) {\n // Why: exhausting wasm memory must drop this image, not throw out of the parser and wedge the write queue.\n console.warn(`SIXEL: could not allocate decoder - ${e}`);\n this._aborted = true;\n return;\n }\n this._decMemoryLimit = memoryLimit;\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, this._palette, this._opts.sixelPaletteLimit);\n }\n\n private _returnDecoder(): void {\n const dec = this._dec;\n if (!dec) return;\n this._dec = undefined;\n this._palette.set(dec.palette);\n releaseDecoder(dec, this._decMemoryLimit);\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n try {\n return this._unhook(success);\n } finally {\n this._returnDecoder();\n }\n }\n\n private _unhook(success: boolean): boolean {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { imageType } from '../IIPMetrics';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _generation = 0;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._generation++;\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded → 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n // Budget WASM capacity, including one page of decoder state and rounding.\n const decoderCapacity = this._maxEncodedBytes + 131072;\n if (decoderCapacity > this._opts.storageLimit * 1000000) {\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:pending image budget exceeded', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n const maxPending = Math.max(1, Math.floor(this._opts.storageLimit * 1000000 / decoderCapacity));\n while (this._pendingTransmissions.size >= maxPending) {\n const oldest = this._pendingTransmissions.entries().next().value;\n if (!oldest) break;\n oldest[1].decoder.release();\n this._removePendingEntry(oldest[0]);\n if (oldest[1].cmd.id !== undefined) {\n this._sendResponse(oldest[1].cmd.id, 'ENOMEM:pending image budget exceeded', oldest[1].cmd.quiet ?? 0);\n }\n }\n const decoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n try {\n decoder.init();\n } catch (e) {\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n console.warn('KITTY: could not allocate decoder', e);\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:could not allocate decoder', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n this._activeDecoder = decoder;\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received — clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first — handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload — image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) — ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n const generation = this._generation;\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n if (generation !== this._generation) throw new Error('image decode canceled');\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency —\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw × r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n if (generation !== this._generation) throw new Error('image decode canceled');\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const metrics = imageType(bytes);\n // IHDR dimensions are parsed with signed shifts, so a value >= 0x80000000 comes\n // back negative and a bare `>` pixel-limit test passes it; require positive.\n if (metrics.mime !== 'image/png' || !(metrics.width > 0) || !(metrics.height > 0) || metrics.width * metrics.height > this._opts.pixelLimit) {\n throw new RangeError('PNG exceeds pixel limit or has invalid dimensions');\n }\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly — no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB→RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes — ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] → uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1–3 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch (error) {\n if (error instanceof RangeError) throw error;\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const limit = Math.min(this._opts.kittySizeLimit, this._opts.pixelLimit * 4, this._opts.storageLimit * 1000000);\n let offsetIn = 0;\n // Bound inflation within one native transform before its output is budgeted.\n const source = new ReadableStream({\n pull(controller) {\n if (offsetIn >= compressed.length) {\n controller.close();\n return;\n }\n const end = Math.min(offsetIn + 4096, compressed.length);\n controller.enqueue(new Uint8Array(compressed.subarray(offsetIn, end)));\n offsetIn = end;\n }\n });\n const reader = source.pipeThrough(new DecompressionStream(format)).getReader();\n const chunks: Uint8Array[] = [];\n let totalLength = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n totalLength += value.byteLength;\n if (totalLength > limit) {\n await reader.cancel().catch(() => {});\n throw new RangeError('decompressed image exceeds byte limit');\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) — only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair — same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId → placementId → storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n // Encoded images awaiting placement are outside ImageStorage's pixel budget.\n // Unplaced payloads are evicted first so a new upload cannot erase a visible\n // image while abandoned blobs still hold budget; placed ones go only when\n // that is not enough, because the byte cap is a hard bound. The new image is\n // always stored, so an oversized one overshoots by at most one payload\n // (itself bounded by kittySizeLimit) rather than being dropped after an OK ack.\n const byteLimit = this._storage.getLimit() * 1000000;\n this._images.delete(imageId);\n let retainedBytes = 0;\n for (const image of this._images.values()) retainedBytes += image.data.size;\n for (const evictPlaced of [false, true]) {\n for (const [oldestId, image] of this._images) {\n if (retainedBytes + imageData.data.size <= byteLimit) break;\n if (this._kittyIdToStorageId.has(oldestId) !== evictPlaced) continue;\n retainedBytes -= image.data.size;\n this.deleteById(oldestId);\n }\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map","\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 §4 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const handler of this._handlers.values()) handler.reset();\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","red","n","green","blue","toRGBA8888","r","g","b","a","clamp","low","high","value","Math","max","min","h2c","t1","t2","c","normalizeRGB","round","Object","defineProperty","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","PALETTE_ANSI_256","PALETTE_VT340_GREY","PALETTE_VT340_COLOR","normalizeHLS","nearestColorIndex","fromRGBA8888","alpha","BIG_ENDIAN","Uint8Array","Uint32Array","buffer","console","warn","color","palette","Number","MAX_SAFE_INTEGER","idx","i","length","dr","dg","db","d","h","l","s","v","HLStoRGB","p","push","decodeAsync","decode","Decoder","DecoderAsync","Colors_1","__webpack_require__","wasm_1","WASM_BYTES","Buffer","from","bytestring","atob","result","charCodeAt","decodeBase64","LIMITS","BYTES","WASM_MODULE","NULL_CANVAS","CallbackProxy","constructor","this","bandHandler","width","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","memoryLimit","sixelColor","fillColor","paletteLimit","PALETTE_SIZE","truncate","opts","cbProxy","importObj","env","bind","WebAssembly","instantiate","then","inst","instance","_instance","_cbProxy","_PIXEL_OFFSET","MAX_WIDTH","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","_opts","assign","Error","_handle_band","_initCanvas","Module","Instance","_wasm","_chunk","memory","get_chunk_address","CHUNK_SIZE","_states","get_state_address","_palette","get_palette_address","set","_pSrc","get_p0_address","init","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","height","release","_realloc","offset","additionalPixels","newCanvas","ceil","adv","remaining","subarray","current_width","current_height","memoryUsage","byteLength","properties","level","memUsage","rasterAttributes","numerator","denominator","data","start","end","decodeString","j","data32","currentWidth","fill","escape","final","finalOffset","bw","currentHeight","data8","Uint8ClampedArray","dec","async","Lifecycle_1","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","toDisposable","entry","fn","slice","indexOf","splice","Array","isArray","add","fire","call","listeners","len","dispose","forward","to","e","map","undefined","any","events","store","DisposableStore","runAndSubscribe","handler","initial","arg","_disposables","Set","_isDisposed","isDisposed","o","clear","Disposable","_store","_register","None","freeze","_value","AttributeData","fg","bg","extended","ExtendedAttrs","toColorRGB","fromColorRGB","clone","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","underlineStyle","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isProtected","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","updateExtended","isEmpty","getUnderlineColor","underlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","urlId","val","payload","TextDecoder_1","Constants_1","AttributeData_1","CellData","content","combinedData","fromCharData","obj","setFromCharData","isCombined","getWidth","getChars","stringFromCodePoint","getCode","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","code","second","CHAR_DATA_WIDTH_INDEX","getAsCharData","attributesEquals","other","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","CHAR_DATA_CODE_INDEX","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","String","fromCharCode","codepoint","_interim","input","target","size","startPos","interim","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","type","missing","fourStop","ImageRenderer_1","ImageStorage_1","Base64Decoder_wasm_1","__importDefault","QoiDecoder_wasm_1","IIPHeaderParser_1","IIPMetrics_1","DEFAULT_HEADER","name","preserveAspectRatio","inline","_renderer","_storage","_coreTerminal","_generation","_aborted","_hp","HeaderParser","_header","_isMultipart","_abortMulti","maxEncodedBytes","iipSizeLimit","initialBytes","_dec","default","_qoiDec","reset","put","state","dataPos","parse","fields","_initDecoder","success","seqType","w","CELL_SIZE_DEFAULT","dimensions","css","canvas","cols","rows","scale","_c","_a","_core","_coreBrowserService","dpr","report","toFixed","cond","blob","metrics","UNSUPPORTED_TYPE","imageType","mime","pixelLimit","_resize","floor","ImageData","byteOffset","ImageRenderer","createCanvas","_b","getContext","putImageData","addImage","Blob","generation","createImageBitmap","resizeWidth","resizeHeight","bm","close","catch","cw","cell","ch","_d","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","parseInt","toStr","toInt","toSize","match","DECODERS","toString","bs","TextDecoder","FILE_MARKER","MULTIPARTFILE_MARKER","FILEPART_MARKER","FILEEND_MARKER","REPORTCELLSIZE_MARKER","MAX_FIELDCHARS","_buffer","_position","_key","k","_storeValue","_storeKey","_addImageOpts","scrolling","layer","zIndex","cursorPos","img","d32","blockLength","jpgSize","dim","limit","_layers","get","localDocument","document","createElement","createImageData","ctx","imgData","Promise","resolve","_terminal","super","Map","_optionsRefresh","MutableDisposable","_oldOpen","open","parent","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","_renderService","refreshRows","removeLayerFromDom","_oldSetRenderer","setRenderer","_placeholderBitmap","_placeholder","showPlaceholder","cellSize","_createPlaceHolder","clearLines","y","clearRect","_e","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sourceWidth","sourceHeight","actualCellSize","sx","sy","dx","dy","finalWidth","finalHeight","drawImage","extractTile","drawPlaceholder","values","spec","originalWidth","originalHeight","origCellSize","orig","scaledWidth","scaledHeight","renderer","key","keys","insertLayerToDom","has","classList","style","isolation","insertBefore","firstChild","appendChild","remove","delete","hasLayer","bWidth","blueprint","black","white","shift","x","screen","ctx2","placeholder","bitmap","window","CellData_1","ImageTileInfo","imageId","_images","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","_workCell","setLimit","storageLimit","error","message","getLimit","_viewportMetrics","marker","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","id","ImageBitmap","onImageDeleted","wipeAlternate","zero","entries","bufferType","deleteImage","termCols","termRows","originX","originY","tileCount","_inputHandler","_dirtyRowTracker","markDirty","line","lines","ybase","_writeToCell","lineFeed","endMarker","registerMarker","onDispose","active","_evictOnAlternate","onImageAdded","render","range","hasTopImages","hasBottomImages","drawCalls","placeholderCalls","ydisp","getExtended","startTile","startCol","nextE","sort","viewportResize","oldCol","tilesPerRow","hasData","rightCol","hasContent","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","workCell","loadCell","old","oldSpec","extattr","setCell","Decoder_1","DEFAULT_PALETTE","idleDecoders","poolPrimed","releaseDecoder","idle","convertLe","_size","_decMemoryLimit","_returnDecoder","hook","params","pop","acquireDecoder","attr","colors","foreground","rgba","t","ansi","background","extractActiveBg","_curAttrData","_themeService","sixelPaletteLimit","sixelSizeLimit","unhook","_unhook","advanceCursor","sixelScrolling","KittyGraphicsTypes_1","_kittyStorage","_decodeError","_activeDecoder","_inControlData","_controlData","_controlLength","_encodedSizeLimit","_totalEncodedSize","_parsedCommand","_pendingTransmissions","_maxEncodedBytes","kittySizeLimit","_initialEncodedBytes","_cleanupAllPending","_removePendingEntry","_lastPendingKey","pending","decoder","controlEnd","copyLength","parseKittyCommand","_parseControlDataString","imageNumber","_sendResponse","quiet","action","payloadStart","_streamPayload","pendingKey","previousEncodedSize","_f","totalEncodedSize","decoderToRelease","_g","decoderCapacity","_h","maxPending","oldest","next","cmd","_j","_k","_handleNoPayloadCommand","_handleDelete","isMoreComing","more","decodeError","finalCmd","imageBytes","_handleCommandWithBytesAndCmd","str","fromCodePoint","_handlePlacement","bytes","_handleTransmit","transmission","_handleTransmitDisplay","_handleQuery","image","getImage","_displayImage","placementId","storeImage","format","compression","lastImageId","expectedBytes","deleteSelector","deleteAll","deleteById","isOk","response","coreService","triggerDataEvent","_decodeAndDisplay","_createBitmap","cropX","cropY","cropW","cropH","maxCropW","maxCropH","finalCropW","finalCropH","cropped","imgCols","imgRows","columns","savedX","savedY","savedYbase","scaled","xOffset","yOffset","canvasW","canvasH","offsetCanvas","offsetCtx","offsetBitmap","cursorMovement","scrolled","arrayBuffer","_decompressZlib","url","URL","createObjectURL","Image","reject","addEventListener","revokeObjectURL","src","pixelCount","src32","dst32","alignedPixels","srcOffset","dstOffset","b0","b1","b2","srcByte","dstByte","compressed","_decompress","offsetIn","reader","ReadableStream","pull","controller","enqueue","pipeThrough","DecompressionStream","getReader","chunks","totalLength","done","read","cancel","releaseLock","chunk","images","_kittyIdToStorageId","kittyIdToStorageId","pendingTransmissions","parts","split","part","eqIdx","substring","numValue","KittyImageStorage","_nextImageId","_storageIdToKittyId","_handleStorageImageDeleted","storageId","kittyId","_previousOnImageDeleted","_wrappedOnImageDeleted","imageData","oldStorageId","_maxStoredImages","_evictUndisplayedImages","byteLimit","retainedBytes","evictPlaced","oldestId","wasmDecode","InWasm","MAP","el","D","EMPTY","keepSize","maxBytes","_inst","_ended","_bytes","_m32","_mem","m","grow","Memory","requested","needed","newSize","addPages","loadedBytes","freeBytes","wasmQoiDecode","ib","dl","chunkP","def","W","z","compile","_wasmCtx","fromBase64","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","Event_1","IIPHandler_1","KittyGraphicsHandler_1","KittyImageStorage_1","SixelHandler_1","SixelImageStorage_1","IIPImageStorage_1","enableSizeReports","sixelSupport","iipSupport","kittySupport","_handlers","_onImageAdded","Emitter","_defaultOpts","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelStorage","SixelImageStorage","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipStorage","IIPImageStorage","iipHandler","IIPHandler","registerOscHandler","kittyStorage","kittyHandler","KittyGraphicsHandler","registerApcHandler","storageUsage","_report","sqrt"],"sourceRoot":""} +\ No newline at end of file +diff --git a/lib/addon-image.mjs b/lib/addon-image.mjs +index 096b58a76fb8aa77dfe925cc1f69290be25fdab2..c94df3b87f9eb245bcc9a8f13f3376ae15e3149c 100644 +--- a/lib/addon-image.mjs ++++ b/lib/addon-image.mjs +@@ -14,5 +14,5 @@ + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +-var ot=Object.create;var ve=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var L=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var dt=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let A of ht(e))!gt.call(s,A)&&A!==t&&ve(s,A,{get:()=>e[A],enumerable:!(i=at(e,A))||i.enumerable});return s};var R=(s,e,t)=>(t=s!=null?ot(lt(s)):{},dt(e||!s||!s.__esModule?ve(t,"default",{value:s,enumerable:!0}):t,s));var Z=L(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.DEFAULT_FOREGROUND=u.DEFAULT_BACKGROUND=u.PALETTE_ANSI_256=u.PALETTE_VT340_GREY=u.PALETTE_VT340_COLOR=u.normalizeHLS=u.normalizeRGB=u.nearestColorIndex=u.fromRGBA8888=u.toRGBA8888=u.alpha=u.blue=u.green=u.red=u.BIG_ENDIAN=void 0;u.BIG_ENDIAN=new Uint8Array(new Uint32Array([4278190080]).buffer)[0]===255;u.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly.");function Fe(s){return s&255}u.red=Fe;function Ne(s){return s>>>8&255}u.green=Ne;function ke(s){return s>>>16&255}u.blue=ke;function ct(s){return s>>>24&255}u.alpha=ct;function f(s,e,t,i=255){return((i&255)<<24|(t&255)<<16|(e&255)<<8|s&255)>>>0}u.toRGBA8888=f;function ut(s){return[s&255,s>>8&255,s>>16&255,s>>>24]}u.fromRGBA8888=ut;function mt(s,e){let t=Fe(s),i=Ne(s),A=ke(s),r=Number.MAX_SAFE_INTEGER,o=-1;for(let n=0;n1&&(t-=1),t*6<1?e+(s-e)*6*t:t*2<1?s:t*3<2?e+(s-e)*(4-t*6):e}function _t(s,e,t){if(!t){let r=Math.round(e*255);return f(r,r,r)}let i=e<.5?e*(1+t):e+t-e*t,A=2*e-i;return f(Ie(0,255,Math.round(ce(i,A,s+1/3)*255)),Ie(0,255,Math.round(ce(i,A,s)*255)),Ie(0,255,Math.round(ce(i,A,s-1/3)*255)))}function c(s,e,t){return(4278190080|Math.round(t/100*255)<<16|Math.round(e/100*255)<<8|Math.round(s/100*255))>>>0}u.normalizeRGB=c;function Ct(s,e,t){return _t((s+240%360)/360,e/100,t/100)}u.normalizeHLS=Ct;u.PALETTE_VT340_COLOR=new Uint32Array([c(0,0,0),c(20,20,80),c(80,13,13),c(20,80,20),c(80,20,80),c(20,80,80),c(80,80,20),c(53,53,53),c(26,26,26),c(33,33,60),c(60,26,26),c(33,60,33),c(60,33,60),c(33,60,60),c(60,60,33),c(80,80,80)]);u.PALETTE_VT340_GREY=new Uint32Array([c(0,0,0),c(13,13,13),c(26,26,26),c(40,40,40),c(6,6,6),c(20,20,20),c(33,33,33),c(46,46,46),c(0,0,0),c(13,13,13),c(26,26,26),c(40,40,40),c(6,6,6),c(20,20,20),c(33,33,33),c(46,46,46)]);u.PALETTE_ANSI_256=(()=>{let s=[f(0,0,0),f(205,0,0),f(0,205,0),f(205,205,0),f(0,0,238),f(205,0,205),f(0,250,205),f(229,229,229),f(127,127,127),f(255,0,0),f(0,255,0),f(255,255,0),f(92,92,255),f(255,0,255),f(0,255,255),f(255,255,255)],e=[0,95,135,175,215,255];for(let t=0;t<6;++t)for(let i=0;i<6;++i)for(let A=0;A<6;++A)s.push(f(e[t],e[i],e[A]));for(let t=8;t<=238;t+=10)s.push(f(t,t,t));return new Uint32Array(s)})();u.DEFAULT_BACKGROUND=f(0,0,0,255);u.DEFAULT_FOREGROUND=f(255,255,255,255)});var Ce=L(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.InWasm=pt;var F=s=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(s);if(typeof Buffer<"u")return Buffer.from(s,"base64");let e=atob(s),t=new Uint8Array(e.length);for(let i=0;inew o.Instance(r||(r=new o.Module(A||(A=F(i)))),n):n=>r?o.instantiate(r,n):o.instantiate(A||(A=F(i)),n).then(a=>(r=a.module)&&a.instance):e===1?t?()=>r||(r=new o.Module(A||(A=F(i)))):()=>r?Promise.resolve(r):o.compile(A||(A=F(i))).then(n=>r=n):t?()=>A||(A=F(i)):()=>Promise.resolve(A||(A=F(i)))}if(typeof _wasmCtx>"u")throw new Error('must run "inwasm"');_wasmCtx.add(s)}});var fe=L(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});var ft=Ce(),Bt=(0,ft.InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),S=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(s=>s.charCodeAt(0))),N=new Uint32Array(1024);N.fill(4278190080);for(let s=0;s>4|(s<<4&255)<<8;for(let s=0;s>2<<8|(s<<6&255)<<16;for(let s=0;sthis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):Qt}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=e??this.maxBytes,this._bytes=t??Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32,A=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let i=this._bytes;for(;(i*=2)this._mem.buffer.byteLength){let A=Math.ceil((i+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(A),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=i}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;let t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}};pe.default=Ee});var Ge=L(Qe=>{"use strict";Object.defineProperty(Qe,"__esModule",{value:!0});var Dt=Ce(),bt=(0,Dt.InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="}),Be=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];let t=this.width*this.height,i=t*4,A=e.length,r=Math.max(i,A)+(Math.min(i,A)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}};Qe.default=Be});var Xe=L(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});re.LIMITS=void 0;re.LIMITS={CHUNK_SIZE:16384,PALETTE_SIZE:4096,MAX_WIDTH:16384,BYTES:"AGFzbQEAAAABJAdgAAF/YAJ/fwBgA39/fwF/YAF/AX9gAABgBH9/f38AYAF/AAIlAgNlbnYLaGFuZGxlX2JhbmQAAwNlbnYLbW9kZV9wYXJzZWQAAwMTEgQAAAAAAQQBAQUBAAACAgAGAwQFAXABBwcFBAEBBwcGCAF/AUGAihoLB9wBDgZtZW1vcnkCABFnZXRfc3RhdGVfYWRkcmVzcwADEWdldF9jaHVua19hZGRyZXNzAAQOZ2V0X3AwX2FkZHJlc3MABRNnZXRfcGFsZXR0ZV9hZGRyZXNzAAYEaW5pdAALBmRlY29kZQAMDWN1cnJlbnRfd2lkdGgADQ5jdXJyZW50X2hlaWdodAAOGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtfaW5pdGlhbGl6ZQACCXN0YWNrU2F2ZQARDHN0YWNrUmVzdG9yZQASCnN0YWNrQWxsb2MAEwkMAQBBAQsGCgcJDxACDAEBCq5UEgMAAQsFAEGgCAsGAEGQiQELBgBBsIkCCwUAQZAJC+okAQh/QeQIKAIAIQVB4AgoAgAhA0HoCCgCACEIIAFBkIkBaiIJQf8BOgAAIAAgAUgEQCAAQZCJAWohBgNAIAMhBCAGQQFqIQECQCAGLQAAQf8AcSIDQTBrQQlLBEAgASEGDAELQewIKAIAQQJ0QewIaiICKAIAIQADQCACIAMgAEEKbGpBMGsiADYCACABLQAAIQMgAUEBaiIGIQEgA0H/AHEiA0Ewa0EKSQ0ACwsCQAJAAkACQAJAAkACQAJ/AkACQCADQT9rIgBBP00EQCAERQ0BIARBIUYEQAJAQfAIKAIAIgFBASABGyIHIAhqIgFB1AgoAgAiA0gNACADQf//AEoNAANAIANBAnQiAkGgiQJqIgRBoAgpAwA3AwAgAkGoiQJqQaAIKQMANwMAIAJBsIkCakGgCCkDADcDACACQbiJAmpBoAgpAwA3AwAgAkHAiQJqQaAIKQMANwMAIAJByIkCakGgCCkDADcDACACQdCJAmpBoAgpAwA3AwAgAkHYiQJqQaAIKQMANwMAIAJB4IkCakGgCCkDADcDACACQeiJAmpBoAgpAwA3AwAgAkHwiQJqQaAIKQMANwMAIAJB+IkCakGgCCkDADcDACACQYCKAmpBoAgpAwA3AwAgAkGIigJqQaAIKQMANwMAIAJBkIoCakGgCCkDADcDACACQZiKAmpBoAgpAwA3AwAgAkGgigJqQaAIKQMANwMAIAJBqIoCakGgCCkDADcDACACQbCKAmpBoAgpAwA3AwAgAkG4igJqQaAIKQMANwMAIAJBwIoCakGgCCkDADcDACACQciKAmpBoAgpAwA3AwAgAkHQigJqQaAIKQMANwMAIAJB2IoCakGgCCkDADcDACACQeCKAmpBoAgpAwA3AwAgAkHoigJqQaAIKQMANwMAIAJB8IoCakGgCCkDADcDACACQfiKAmpBoAgpAwA3AwAgAkGAiwJqQaAIKQMANwMAIAJBiIsCakGgCCkDADcDACACQZCLAmpBoAgpAwA3AwAgAkGYiwJqQaAIKQMANwMAIAJBoIsCakGgCCkDADcDACACQaiLAmpBoAgpAwA3AwAgAkGwiwJqQaAIKQMANwMAIAJBuIsCakGgCCkDADcDACACQcCLAmpBoAgpAwA3AwAgAkHIiwJqQaAIKQMANwMAIAJB0IsCakGgCCkDADcDACACQdiLAmpBoAgpAwA3AwAgAkHgiwJqQaAIKQMANwMAIAJB6IsCakGgCCkDADcDACACQfCLAmpBoAgpAwA3AwAgAkH4iwJqQaAIKQMANwMAIAJBgIwCakGgCCkDADcDACACQYiMAmpBoAgpAwA3AwAgAkGQjAJqQaAIKQMANwMAIAJBmIwCakGgCCkDADcDACACQaCMAmpBoAgpAwA3AwAgAkGojAJqQaAIKQMANwMAIAJBsIwCakGgCCkDADcDACACQbiMAmpBoAgpAwA3AwAgAkHAjAJqQaAIKQMANwMAIAJByIwCakGgCCkDADcDACACQdCMAmpBoAgpAwA3AwAgAkHYjAJqQaAIKQMANwMAIAJB4IwCakGgCCkDADcDACACQeiMAmpBoAgpAwA3AwAgAkHwjAJqQaAIKQMANwMAIAJB+IwCakGgCCkDADcDACACQYCNAmpBoAgpAwA3AwAgAkGIjQJqQaAIKQMANwMAIAJBkI0CakGgCCkDADcDACACQZiNAmpBoAgpAwA3AwAgAkGwiQZqIARBgAT8CgAAQdQIKAIAQQJ0QcCJCmogBEGABPwKAABB1AgoAgBBAnRB0IkOaiAEQYAE/AoAAEHUCCgCAEECdEHgiRJqIARBgAT8CgAAQdQIKAIAQQJ0QfCJFmogBEGABPwKAABB1AhB1AgoAgAiAkGAAWoiAzYCACABIANIDQEgAkGA/wBIDQALCwJAIABFDQAgCEH//wBLDQBBgIABIAhrIAcgAUH//wBLGyECAkAgAEEBcUUNACACRQ0AIAhBAnRBoIkCaiEDIAIhBCACQQdxIgcEQANAIAMgBTYCACADQQRqIQMgBEEBayEEIAdBAWsiBw0ACwsgAkEBa0EHSQ0AA0AgAyAFNgIcIAMgBTYCGCADIAU2AhQgAyAFNgIQIAMgBTYCDCADIAU2AgggAyAFNgIEIAMgBTYCACADQSBqIQMgBEEIayIEDQALCwJAIABBAnFFDQAgAkUNACAIQQJ0QbCJBmohAyACIQQgAkEHcSIHBEADQCADIAU2AgAgA0EEaiEDIARBAWshBCAHQQFrIgcNAAsLIAJBAWtBB0kNAANAIAMgBTYCHCADIAU2AhggAyAFNgIUIAMgBTYCECADIAU2AgwgAyAFNgIIIAMgBTYCBCADIAU2AgAgA0EgaiEDIARBCGsiBA0ACwsCQCAAQQRxRQ0AIAJFDQAgCEECdEHAiQpqIQMgAiEEIAJBB3EiBwRAA0AgAyAFNgIAIANBBGohAyAEQQFrIQQgB0EBayIHDQALCyACQQFrQQdJDQADQCADIAU2AhwgAyAFNgIYIAMgBTYCFCADIAU2AhAgAyAFNgIMIAMgBTYCCCADIAU2AgQgAyAFNgIAIANBIGohAyAEQQhrIgQNAAsLAkAgAEEIcUUNACACRQ0AIAhBAnRB0IkOaiEDIAIhBCACQQdxIgcEQANAIAMgBTYCACADQQRqIQMgBEEBayEEIAdBAWsiBw0ACwsgAkEBa0EHSQ0AA0AgAyAFNgIcIAMgBTYCGCADIAU2AhQgAyAFNgIQIAMgBTYCDCADIAU2AgggAyAFNgIEIAMgBTYCACADQSBqIQMgBEEIayIEDQALCwJAIABBEHFFDQAgAkUNACAIQQJ0QeCJEmohAyACIQQgAkEHcSIHBEADQCADIAU2AgAgA0EEaiEDIARBAWshBCAHQQFrIgcNAAsLIAJBAWtBB0kNAANAIAMgBTYCHCADIAU2AhggAyAFNgIUIAMgBTYCECADIAU2AgwgAyAFNgIIIAMgBTYCBCADIAU2AgAgA0EgaiEDIARBCGsiBA0ACwsgAEEgcUUNACACRQ0AIAJBAWshByAIQQJ0QfCJFmohAyACQQdxIgQEQANAIAMgBTYCACADQQRqIQMgAkEBayECIARBAWsiBA0ACwsgB0EHSQ0AA0AgAyAFNgIcIAMgBTYCGCADIAU2AhQgAyAFNgIQIAMgBTYCDCADIAU2AgggAyAFNgIEIAMgBTYCACADQSBqIQMgAkEIayICDQALC0HcCEHcCCgCACAAcjYCACAGQQFqIgIgBi0AAEH/AHEiA0E/ayIAQT9LDQQaDAMLAkBB7AgoAgAiBEEBRgRAQfAIKAIAIgNBzAgoAgAiAUkNASADIAFwIQMMAQtB+AgoAgAhAkH0CCgCACEBAkACQCAEQQVHDQAgAUEBRw0AIAJB6QJODQQMAQsgAkHkAEoNA0H8CCgCAEHkAEoNA0GACSgCAEHkAEoNAwsCQCABRQ0AIAFBAkoNACACQfwIKAIAQYAJKAIAIAFBAnRBiAhqKAIAEQIAIQFB8AgoAgAiA0HMCCgCACICTwR/IAMgAnAFIAMLQQJ0QZAJaiABNgIAC0HwCCgCACIDQcwIKAIAIgFJDQAgAyABcCEDCyADQQJ0QZAJaigCACEFDAELIANB/QBxQSFHBEAgCCEBIAYhAgwECyAEQSNHDQQCQEHsCCgCACICQQFGBEBB8AgoAgAiAUHMCCgCACIASQ0BIAEgAHAhAQwBC0H4CCgCACEBQfQIKAIAIQACQAJAIAJBBUcNACAAQQFHDQAgAUHpAkgNAQwHCyABQeQASg0GQfwIKAIAQeQASg0GQYAJKAIAQeQASg0GCwJAIABFDQAgAEECSg0AIAFB/AgoAgBBgAkoAgAgAEECdEGICGooAgARAgAhAEHwCCgCACIBQcwIKAIAIgJPBH8gASACcAUgAQtBAnRBkAlqIAA2AgALQfAIKAIAIgFBzAgoAgAiAEkNACABIABwIQELIAFBAnRBkAlqKAIAIQUMBAsgCCEBIAYhAgtB1AgoAgAhBgNAAkAgASAGSA0AIAZB//8ASg0AIAZBAnQiBEGgiQJqIgZBoAgpAwA3AwAgBEGoiQJqQaAIKQMANwMAIARBsIkCakGgCCkDADcDACAEQbiJAmpBoAgpAwA3AwAgBEHAiQJqQaAIKQMANwMAIARByIkCakGgCCkDADcDACAEQdCJAmpBoAgpAwA3AwAgBEHYiQJqQaAIKQMANwMAIARB4IkCakGgCCkDADcDACAEQeiJAmpBoAgpAwA3AwAgBEHwiQJqQaAIKQMANwMAIARB+IkCakGgCCkDADcDACAEQYCKAmpBoAgpAwA3AwAgBEGIigJqQaAIKQMANwMAIARBkIoCakGgCCkDADcDACAEQZiKAmpBoAgpAwA3AwAgBEGgigJqQaAIKQMANwMAIARBqIoCakGgCCkDADcDACAEQbCKAmpBoAgpAwA3AwAgBEG4igJqQaAIKQMANwMAIARBwIoCakGgCCkDADcDACAEQciKAmpBoAgpAwA3AwAgBEHQigJqQaAIKQMANwMAIARB2IoCakGgCCkDADcDACAEQeCKAmpBoAgpAwA3AwAgBEHoigJqQaAIKQMANwMAIARB8IoCakGgCCkDADcDACAEQfiKAmpBoAgpAwA3AwAgBEGAiwJqQaAIKQMANwMAIARBiIsCakGgCCkDADcDACAEQZCLAmpBoAgpAwA3AwAgBEGYiwJqQaAIKQMANwMAIARBoIsCakGgCCkDADcDACAEQaiLAmpBoAgpAwA3AwAgBEGwiwJqQaAIKQMANwMAIARBuIsCakGgCCkDADcDACAEQcCLAmpBoAgpAwA3AwAgBEHIiwJqQaAIKQMANwMAIARB0IsCakGgCCkDADcDACAEQdiLAmpBoAgpAwA3AwAgBEHgiwJqQaAIKQMANwMAIARB6IsCakGgCCkDADcDACAEQfCLAmpBoAgpAwA3AwAgBEH4iwJqQaAIKQMANwMAIARBgIwCakGgCCkDADcDACAEQYiMAmpBoAgpAwA3AwAgBEGQjAJqQaAIKQMANwMAIARBmIwCakGgCCkDADcDACAEQaCMAmpBoAgpAwA3AwAgBEGojAJqQaAIKQMANwMAIARBsIwCakGgCCkDADcDACAEQbiMAmpBoAgpAwA3AwAgBEHAjAJqQaAIKQMANwMAIARByIwCakGgCCkDADcDACAEQdCMAmpBoAgpAwA3AwAgBEHYjAJqQaAIKQMANwMAIARB4IwCakGgCCkDADcDACAEQeiMAmpBoAgpAwA3AwAgBEHwjAJqQaAIKQMANwMAIARB+IwCakGgCCkDADcDACAEQYCNAmpBoAgpAwA3AwAgBEGIjQJqQaAIKQMANwMAIARBkI0CakGgCCkDADcDACAEQZiNAmpBoAgpAwA3AwAgBEGwiQZqIAZBgAT8CgAAQdQIKAIAQQJ0QcCJCmogBkGABPwKAABB1AgoAgBBAnRB0IkOaiAGQYAE/AoAAEHUCCgCAEECdEHgiRJqIAZBgAT8CgAAQdQIKAIAQQJ0QfCJFmogBkGABPwKAABB1AhB1AgoAgBBgAFqIgY2AgALIAFB//8ATQRAIABBAXEgAWxBAnRBoIkCaiAFNgIAIABBAXZBAXEgAWxBAnRBsIkGaiAFNgIAIABBAnZBAXEgAWxBAnRBwIkKaiAFNgIAIABBA3ZBAXEgAWxBAnRB0IkOaiAFNgIAIABBBHZBAXEgAWxBAnRB4IkSaiAFNgIAIABBBXYgAWxBAnRB8IkWaiAFNgIAQdQIKAIAIQYLIAFBAWohAUHcCEHcCCgCACAAcjYCACACLQAAIQAgAkEBaiIEIQIgAEH/AHEiA0E/ayIAQcAASQ0ACyAECyECQQAhBCACIQYgASEIIANB/QBxQSFGDQELIANBJGsOCgEDAwMDAwMDAwIDC0HsCEIBNwIADAQLQdgIIAFB2AgoAgAiACAAIAFIGyIAQYCAASAAQYCAAUgbNgIADAILQegIIAFB2AgoAgAiACAAIAFIGyIAQYCAASAAQYCAAUgbIgA2AgBB2AggADYCACAAQQRrEAAEQEHoCEEENgIAQdgIQQQ2AgBB0AhBATYCAA8LEAgMAQsCQCADQTtHDQBB7AgoAgAiAEEHSg0AQewIIABBAWo2AgAgAEECdEHwCGpBADYCAAsgAiEGIAQhAyABIQgMAQtBBCEIIAIhBiAEIQMLIAYgCUkNAAsLQeQIIAU2AgBB4AggAzYCAEHoCCAINgIAC9ELAgF+CH9B2AhCBDcDAEGojQJBoAgpAwAiADcDAEGgjQIgADcDAEGYjQIgADcDAEGQjQIgADcDAEGIjQIgADcDAEGAjQIgADcDAEH4jAIgADcDAEHwjAIgADcDAEHojAIgADcDAEHgjAIgADcDAEHYjAIgADcDAEHQjAIgADcDAEHIjAIgADcDAEHAjAIgADcDAEG4jAIgADcDAEGwjAIgADcDAEGojAIgADcDAEGgjAIgADcDAEGYjAIgADcDAEGQjAIgADcDAEGIjAIgADcDAEGAjAIgADcDAEH4iwIgADcDAEHwiwIgADcDAEHoiwIgADcDAEHgiwIgADcDAEHYiwIgADcDAEHQiwIgADcDAEHIiwIgADcDAEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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"}});var Ve=L(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.decodeAsync=y.decode=y.Decoder=y.DecoderAsync=void 0;var J=Z(),Q=Xe();function xt(s){if(typeof Buffer<"u")return Buffer.from(s,"base64");let e=atob(s),t=new Uint8Array(e.length);for(let i=0;i1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}},St={memoryLimit:2048*65536,sixelColor:J.DEFAULT_FOREGROUND,fillColor:J.DEFAULT_BACKGROUND,palette:J.PALETTE_VT340_COLOR,paletteLimit:Q.LIMITS.PALETTE_SIZE,truncate:!0};function je(s){let e=new Te,t={env:{handle_band:e.handle_band.bind(e),mode_parsed:e.mode_parsed.bind(e)}};return WebAssembly.instantiate(K||Ze,t).then(i=>(K=K||i.module,new P(s,i.instance||i,e)))}y.DecoderAsync=je;var P=class{constructor(e,t,i){if(this._PIXEL_OFFSET=Q.LIMITS.MAX_WIDTH+4,this._canvas=ne,this._bandWidths=[],this._maxWidth=0,this._minWidth=Q.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},St,e),this._opts.paletteLimit>Q.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${Q.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{let A=K||(K=new WebAssembly.Module(Ze));t=new WebAssembly.Instance(A,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),Q.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),Q.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(J.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(e===2){let t=this.width*this.height;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}this._maxWidth=this._width}else if(e===1)if(this._level===2){let t=Math.min(this._rasterWidth,Q.LIMITS.MAX_WIDTH)*this._rasterHeight;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){let i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&i*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");let A=new Uint32Array(Math.ceil(i/65536)*65536);A.set(this._canvas),this._canvas=A}}_handle_band(e){let t=this._PIXEL_OFFSET,i=this._lastOffset;if(this._mode===2){let A=this.height-this._currentHeight,r=0;for(;r<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*r,t*r+e),i+e*r),r++,A--;this._lastOffset+=e*r,this._currentHeight+=r}else if(this._mode===1){this._realloc(i,e*6),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=e*6,this._currentHeight+=6}return 0}get width(){return this._mode!==1?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return this._mode!==1?this._height:this._wasm.current_width()?this._bandWidths.length*6+this._wasm.current_height():this._bandWidths.length*6}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,Q.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=Q.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){let i=this._PIXEL_OFFSET,A=this._lastOffset,r=0;for(;r<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*r,i*r+e),A+e*r),r++,t--;t&&this._canvas.fill(this._fillColor,A+e*r)}return this._canvas.subarray(0,this.width*this.height)}if(this._mode===1){if(this._minWidth===this._maxWidth){let r=!1;if(e)if(e!==this._minWidth)r=!0;else{let o=this._PIXEL_OFFSET,n=this._lastOffset;this._realloc(n,e*6);for(let a=0;a<6;++a)this._canvas.set(this._pSrc.subarray(o*a,o*a+e),n+e*a)}if(!r)return this._canvas.subarray(0,this.width*this.height)}let t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let r=0;r{if(this._disposed)return G(()=>{});let A={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(A);let r=G(()=>{let o=this._listeners.indexOf(A);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return i&&(Array.isArray(i)?i.push(r):i.add(r)),r},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let i=0,A=t.length;i{function s(r,o){return r(n=>o.fire(n))}A.forward=s;function e(r,o){return(n,a,l)=>r(h=>n.call(a,o(h)),void 0,l)}A.map=e;function t(...r){return(o,n,a)=>{let l=new H;for(let h of r)l.add(h(g=>o.call(n,g)));return a&&(Array.isArray(a)?a.push(l):a.add(l)),l}}A.any=t;function i(r,o,n){return o(n),r(a=>o(a))}A.runAndSubscribe=i})(It||={});var ue=R(Z());var D=class s extends k{constructor(t){super();this._terminal=t;this._layers=new Map;this._optionsRefresh=this._register(new z);this._oldOpen=this._terminal._core.open,this._terminal._core.open=i=>{this._oldOpen?.call(this._terminal._core,i),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(i=>{i==="fontSize"&&(this.rescaleCanvas(),this._renderService?.refreshRows(0,this._terminal.rows))}),this._register(G(()=>{this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}get canvas(){return this._layers.get("top")?.canvas}static createCanvas(t,i,A){let r=(t??document).createElement("canvas");return r.width=i|0,r.height=A|0,r}static createImageData(t,i,A,r){if(typeof ImageData!="function"){let o=t.createImageData(i,A);return r&&o.data.set(new Uint8ClampedArray(r,0,i*A*4)),o}return r?new ImageData(new Uint8ClampedArray(r,0,i*A*4),i,A):new ImageData(i,A)}static createImageBitmap(t){return typeof createImageBitmap!="function"?Promise.resolve(void 0):createImageBitmap(t)}showPlaceholder(t){t?!this._placeholder&&this.cellSize.height!==-1&&this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),this._renderService?.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){return{width:this.dimensions?.css.cell.width||-1,height:this.dimensions?.css.cell.height||-1}}clearLines(t,i,A){let r=t*(this.dimensions?.css.cell.height||0),o=this.dimensions?.css.canvas.width||0,n=(i+1-t)*(this.dimensions?.css.cell.height||0);(!A||A==="top")&&this._layers.get("top")?.clearRect(0,r,o,n),(!A||A==="bottom")&&this._layers.get("bottom")?.clearRect(0,r,o,n)}clearAll(t){if(!t||t==="top"){let i=this._layers.get("top");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}if(!t||t==="bottom"){let i=this._layers.get("bottom");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}}draw(t,i,A,r,o=1){let n=this._layers.get(t.layer);if(!n)return;let{width:a,height:l}=this.cellSize;if(a===-1||l===-1)return;this._rescaleImage(t,a,l);let h=t.actual,g=Math.ceil(h.width/a),d=i%g*a,m=Math.floor(i/g)*l,I=A*a,C=r*l,p=o*a+d>h.width?h.width-d:o*a,_=m+l>h.height?h.height-m:l;n.drawImage(h,Math.floor(d),Math.floor(m),Math.ceil(p),Math.ceil(_),Math.floor(I),Math.floor(C),Math.ceil(p),Math.ceil(_))}extractTile(t,i){let{width:A,height:r}=this.cellSize;if(A===-1||r===-1)return;this._rescaleImage(t,A,r);let o=t.actual,n=Math.ceil(o.width/A),a=i%n*A,l=Math.floor(i/n)*r,h=A+a>o.width?o.width-a:A,g=l+r>o.height?o.height-l:r,d=s.createCanvas(this.document,h,g),m=d.getContext("2d");if(m)return m.drawImage(o,Math.floor(a),Math.floor(l),Math.floor(h),Math.floor(g),0,0,Math.floor(h),Math.floor(g)),d}drawPlaceholder(t,i,A=1){let r=this._layers.get("top");if(r){let{width:o,height:n}=this.cellSize;if(o===-1||n===-1||(this._placeholder?n>=this._placeholder.height&&this._createPlaceHolder(n+1):this._createPlaceHolder(Math.max(n+1,24)),!this._placeholder))return;r.drawImage(this._placeholderBitmap??this._placeholder,t*o,i*n%2?0:1,o*A,n,t*o,i*n,o*A,n)}}rescaleCanvas(){let t=this.dimensions?.css.canvas.width||0,i=this.dimensions?.css.canvas.height||0;for(let A of this._layers.values())(A.canvas.width!==t||A.canvas.height!==i)&&(A.canvas.width=t,A.canvas.height=i)}_rescaleImage(t,i,A){if(i===t.actualCellSize.width&&A===t.actualCellSize.height)return;let{width:r,height:o}=t.origCellSize;if(i===r&&A===o){t.actual=t.orig,t.actualCellSize.width=r,t.actualCellSize.height=o;return}let n=s.createCanvas(this.document,Math.ceil(t.orig.width*i/r),Math.ceil(t.orig.height*A/o)),a=n.getContext("2d");a&&(a.drawImage(t.orig,0,0,n.width,n.height),t.actual=n,t.actualCellSize.width=i,t.actualCellSize.height=A)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=t=>{for(let i of[...this._layers.keys()])this.removeLayerFromDom(i);this._oldSetRenderer?.call(this._renderService,t)}}insertLayerToDom(t="top"){if(!this.document||!this._terminal._core.screenElement){console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");return}if(this._layers.has(t))return;let i=s.createCanvas(this.document,this.dimensions?.css.canvas.width||0,this.dimensions?.css.canvas.height||0);i.classList.add(`xterm-image-layer-${t}`);let A=this._terminal._core.screenElement;A.style.isolation="isolate",t==="bottom"?(i.style.zIndex="-1",A.insertBefore(i,A.firstChild)):(i.style.zIndex="0",A.appendChild(i));let r=i.getContext("2d",{alpha:!0});if(!r){i.remove();return}this._layers.set(t,r),this.clearAll(t)}removeLayerFromDom(t="top"){let i=this._layers.get(t);i&&(i.canvas.remove(),this._layers.delete(t))}hasLayer(t){return this._layers.has(t)}_createPlaceHolder(t=24){this._placeholderBitmap?.close(),this._placeholderBitmap=void 0;let i=32,A=s.createCanvas(this.document,i,t),r=A.getContext("2d",{alpha:!1});if(!r)return;let o=s.createImageData(r,i,t),n=new Uint32Array(o.data.buffer),a=(0,ue.toRGBA8888)(0,0,0),l=(0,ue.toRGBA8888)(255,255,255);n.fill(a);for(let d=0;dthis._placeholderBitmap=d)}get document(){return this._terminal._core._coreBrowserService?.window.document}};function He(s){return s>65535?(s-=65536,String.fromCharCode((s>>10)+55296)+String.fromCharCode(s%1024+56320)):String.fromCharCode(s)}var j=class s{constructor(){this.fg=0;this.bg=0;this.extended=new U}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let e=new s;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},U=class s{constructor(e=0,t=0){this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new s(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.payload===void 0}};var V=class s extends j{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new U;this.combinedData=""}static fromCharData(t){let i=new s;return i.setFromCharData(t),i}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?He(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(t){this.fg=t[0],this.bg=0;let i=!1;if(t[1].length>2)i=!0;else if(t[1].length===2){let A=t[1].charCodeAt(0);if(55296<=A&&A<=56319){let r=t[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(A-55296)*1024+r-56320+65536|t[2]<<22:i=!0}else i=!0}else this.content=t[1].charCodeAt(0)|t[2]<<22;i&&(this.combinedData=t[1],this.content=2097152|t[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor()||this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor()||this.isInverse()!==t.isInverse()||this.isBold()!==t.isBold()||this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;let i=this.isUnderlineColorDefault(),A=t.isUnderlineColorDefault();if(!(i&&A)&&(i!==A||this.getUnderlineColor()!==t.getUnderlineColor()||this.getUnderlineColorMode()!==t.getUnderlineColorMode()))return!1}return!(this.isOverline()!==t.isOverline()||this.isBlink()!==t.isBlink()||this.isInvisible()!==t.isInvisible()||this.isItalic()!==t.isItalic()||this.isDim()!==t.isDim()||this.isStrikethrough()!==t.isStrikethrough())}};var b={width:7,height:14},w=class{constructor(e=-1,t=-1){this.imageId=e;this.tileId=t}},$=class{constructor(e,t,i){this._terminal=e;this._renderer=t;this._opts=i;this._images=new Map;this._lastId=0;this._lowestId=0;this._fullyCleared=!1;this._needsFullClear=!1;this._pixelLimit=25e5;this._workCell=new V;try{this.setLimit(this._opts.storageLimit)}catch(A){A instanceof Error&&console.error(A.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){for(let e of this._images.values())e.marker?.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return this._pixelLimit*4/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return this._getStoredPixels()*4/1e6}_getStoredPixels(){let e=0;for(let t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){let t=this._images.get(e);t&&(this._images.delete(e),window.ImageBitmap&&t.orig instanceof ImageBitmap&&t.orig.close(),this.onImageDeleted?.(e))}wipeAlternate(){let e=[];for(let[t,i]of this._images.entries())i.bufferType==="alternate"&&(i.marker?.dispose(),e.push(t));for(let t of e)this._delImg(t);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){let t=this._images.get(e);t&&(t.marker?.dispose(),this._delImg(e))}addImage(e,t){this._evictOldest(e.width*e.height);let i=this._renderer.cellSize;(i.width===-1||i.height===-1)&&(i=b);let A=Math.ceil(e.width/i.width),r=Math.ceil(e.height/i.height),o=++this._lastId,n=this._terminal._core.buffer,a=this._terminal.cols,l=this._terminal.rows,h=n.x,g=n.y,d=h,m=0;t.scrolling||(n.x=0,n.y=0,d=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(n.y);for(let _=0;_=a);++B)this._writeToCell(E,d+B,o,_*A+B),m++;if(t.scrolling)_=l)break;n.x=d}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(n.y),t.scrolling?t.cursorPos==="iip"?n.x=Math.min(d+A,a):n.x=d:(n.x=h,n.y=g);let I=[];for(let[_,E]of this._images.entries())E.tileCount<1&&(E.marker?.dispose(),I.push(_));for(let _ of I)this._delImg(_);let C=this._terminal.registerMarker(0);C?.onDispose(()=>{this._images.get(o)&&this._delImg(o)}),this._terminal.buffer.active.type==="alternate"&&this._evictOnAlternate();let p={orig:e,origCellSize:i,actual:e,actualCellSize:{...i},marker:C||void 0,tileCount:m,bufferType:this._terminal.buffer.active.type,layer:t.layer,zIndex:t.zIndex};return this._images.set(o,p),this.onImageAdded?.(),o}render(e){let t=!1,i=!1;for(let h of this._images.values())if(h.layer==="bottom"?i=!0:t=!0,t&&i)break;if(t&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(i&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size){this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom");return}!t&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!i&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);let{start:A,end:r}=e,o=this._terminal._core.buffer,n=this._terminal._core.cols;this._renderer.clearLines(A,r);let a=[],l=[];for(let h=A;h<=r;++h){let g=o.lines.get(h+o.ydisp);if(!g)return;for(let d=0;dh.imgSpec.zIndex-g.imgSpec.zIndex);for(let h of l)this._renderer.drawPlaceholder(h.col,h.row,h.count);for(let h of a)this._renderer.draw(h.imgSpec,h.tileId,h.col,h.row,h.count)}viewportResize(e){if(!this._images.size){this._viewportMetrics=e;return}if(this._viewportMetrics.cols>=e.cols){this._viewportMetrics=e;return}let t=this._terminal._core.buffer,i=t.lines.length,A=this._viewportMetrics.cols-1;for(let r=0;r=h)continue;let g=!1;for(let I=A+1;I>e.cols;++I)if(o.hasContent(I)){g=!0;break}if(g)continue;let d=Math.min(e.cols,h-n.tileId%h+A),m=n.tileId;for(let I=A+1;I57)throw new Error("illegal char");e=e*10+s[t]-48}return e}function Ue(s){let e=ee(s);if(!e.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return e}function wt(s){if(typeof Buffer<"u")return Buffer.from(ee(s),"base64").toString();let e=atob(ee(s)),t=new Uint8Array(e.length);for(let i=0;i14)return-1;for(let n=t;n=xe)return this._a();o[r++]=a}break;case 58:return A===3&&!this._storeValue(r)?this._a():(this.state=4,n+1);default:if(r>=xe)return this._a();o[r++]=a}}return this.state=A,this._position=r,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){let t=ee(this._buffer.subarray(0,e));return t?(this._key=t,this.fields[t]=null,!0):!1}_storeValue(e){if(this._key){try{let t=this._buffer.slice(0,e);this.fields[this._key]=Oe[this._key]?Oe[this._key](t):t}catch{return!1}return!0}return!1}};var M={mime:"unsupported",width:0,height:0};function Pe(s){if(s.length<32)return M;let e=new Uint32Array(s.buffer,s.byteOffset,8);if(e[0]===1196314761&&e[1]===169478669&&e[3]===1380206665)return{mime:"image/png",width:s[16]<<24|s[17]<<16|s[18]<<8|s[19],height:s[20]<<24|s[21]<<16|s[22]<<8|s[23]};if(s[0]===255&&s[1]===216&&s[2]===255){let[t,i]=yt(s);return{mime:"image/jpeg",width:t,height:i}}if(e[0]===944130375&&(s[4]===55||s[4]===57)&&s[5]===97)return{mime:"image/gif",width:s[7]<<8|s[6],height:s[9]<<8|s[8]};if(e[0]===1718185841)return{mime:"image/qoi",width:s[4]<<24|s[5]<<16|s[6]<<8|s[7],height:s[8]<<24|s[9]<<16|s[10]<<8|s[11]};if(e[0]===1179011410&&e[2]===1346520407&&(e[3]&16777215)===3690582){switch(s[15]){case 88:return{mime:"image/webp",width:(s[24]|s[25]<<8|s[26]<<16)+1,height:(s[27]|s[28]<<8|s[29]<<16)+1};case 76:if(s[20]!==47)return M;let t=s[21]|s[22]<<8|s[23]<<16|s[24]<<24;return{mime:"image/webp",width:(t&16383)+1,height:(t>>>14&16383)+1};case 32:return s[23]!==157||s[24]!==1||s[25]!==42?M:{mime:"image/webp",width:(s[26]|s[27]<<8)&16383,height:(s[28]|s[29]<<8)&16383}}return M}if(e[1]===1887007846&&(e[2]===1718187617||e[2]===1936291425)){let t=-1,i=Math.min(s.length-16,1024);for(let A=8;A0&&r>0)return{mime:"image/avif",width:A,height:r}}return M}return M}function yt(s){let e=s.length,t=4,i=s[t]<<8|s[t+1];for(;;){if(t+=i,t>=e)return[0,0];if(s[t]!==255)return[0,0];if(s[t+1]===192||s[t+1]===194)return t+80){if(this._hp.fields.type===1){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},Se,this._hp.fields),!this._header.inline){this._aborted=!0;return}this._dec.init()}else if(this._abortMulti){this._aborted=!0;return}this._dec.put(e.subarray(A,i))!==0&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){if(this._aborted||this._hp.state!==4&&this._hp.end())return!0;let t=this._hp.fields.type;if(t===3)return!0;if(t===5){let a=b.width,l=b.height;this._renderer.dimensions&&(a=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,l=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);let h=this._coreTerminal._core._coreBrowserService?.dpr??1,g=`\x1B]1337;ReportCellSize=${l.toFixed(3)};${a.toFixed(3)};${h.toFixed(3)}\x1B\\`;return this._coreTerminal.input(g,!1),!0}if(t===2)return this._header=Object.assign({},Se,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._dec.init(),!0;if(t===4&&(!this._isMultipart||(this._isMultipart=!1,this._abortMulti||this._header.type!==2)))return!0;let i=0,A=0,r,o=M;if((r=e)&&((r=!this._dec.end())?(o=Pe(this._dec.data8),(r=o.mime!=="unsupported")?(i=o.width,A=o.height,(r=i&&A&&i*A(this._storage.addImage(a),!0)).catch(a=>(console.warn(`IIP: decoding error ${o.mime} ${o.width}x${o.height}`,a),!0))}_resize(e,t){let i=this._renderer.dimensions?.css.cell.width||b.width,A=this._renderer.dimensions?.css.cell.height||b.height,r=this._renderer.dimensions?.css.canvas.width||i*this._coreTerminal.cols,o=this._renderer.dimensions?.css.canvas.height||A*this._coreTerminal.rows,n=this._dim(this._header.width,r,i),a=this._dim(this._header.height,o,A);if(!n&&!a){let l=r/e,h=(o-A)/t,g=Math.min(l,h);return g<1?[e*g,t*g]:[e,t]}return n?this._header.preserveAspectRatio||!n||!a?[n,t*n/e]:[n,a]:[e*a/t,a]}_dim(e,t,i){return e==="auto"?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}};var ze=R(fe());function Me(s){let e={},t=s.split(",");for(let i of t){let A=i.indexOf("=");if(A===-1)continue;let r=i.substring(0,A),o=i.substring(A+1);if(r==="a"){e.action=o;continue}if(r==="o"){e.compression=o;continue}if(r==="t"){e.transmission=o;continue}if(r==="d"){e.deleteSelector=o;continue}let n=parseInt(o,10);switch(r){case"f":e.format=n;break;case"i":e.id=n;break;case"I":e.imageNumber=n;break;case"s":e.width=n;break;case"v":e.height=n;break;case"x":e.x=n;break;case"y":e.y=n;break;case"w":e.sourceWidth=n;break;case"h":e.sourceHeight=n;break;case"X":e.xOffset=n;break;case"Y":e.yOffset=n;break;case"c":e.columns=n;break;case"r":e.rows=n;break;case"m":e.more=n;break;case"q":e.quiet=n;break;case"C":e.cursorMovement=n;break;case"z":e.zIndex=n;break;case"p":e.placementId=n;break}}return e}var We=0,Ae=class{constructor(e,t,i,A){this._opts=e;this._renderer=t;this._kittyStorage=i;this._coreTerminal=A;this._aborted=!1;this._decodeError=!1;this._activeDecoder=null;this._inControlData=!0;this._controlData=new Uint32Array(512);this._controlLength=0;this._encodedSizeLimit=0;this._totalEncodedSize=0;this._parsedCommand=null;this._pendingTransmissions=new Map;this._maxEncodedBytes=Math.ceil(this._opts.kittySizeLimit*4/3),this._initialEncodedBytes=Math.min(4194304,this._maxEncodedBytes)}reset(){this._cleanupAllPending(),this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),this._kittyStorage.reset()}dispose(){this.reset()}_removePendingEntry(e){this._pendingTransmissions.delete(e),this._lastPendingKey===e&&(this._lastPendingKey=void 0)}_cleanupAllPending(){for(let e of this._pendingTransmissions.values())e.decoder.release();this._pendingTransmissions.clear(),this._lastPendingKey=void 0}start(){this._aborted=!1,this._decodeError=!1,this._inControlData=!0,this._controlLength=0,this._parsedCommand=null,this._encodedSizeLimit=this._maxEncodedBytes,this._totalEncodedSize=0,this._activeDecoder=null}put(e,t,i){if(!this._aborted)if(!this._inControlData)this._streamPayload(e,t,i);else{let A=i;for(let o=t;o512){this._aborted=!0;return}if(this._controlData.set(e.subarray(t,A),this._controlLength),this._controlLength+=r,!this._inControlData){if(this._parsedCommand=Me(this._parseControlDataString()),this._parsedCommand.id!==void 0&&this._parsedCommand.imageNumber!==void 0){this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",this._parsedCommand.quiet??0),this._aborted=!0;return}if(this._parsedCommand.action==="d")return;let o=A+1;othis._encodedSizeLimit){let a=this._activeDecoder??r?.decoder;a&&a.release(),this._activeDecoder=null,r&&this._removePendingEntry(A),this._aborted=!0;return}this._decodeError||(r?.decoder&&!this._activeDecoder&&(this._activeDecoder=r.decoder),this._activeDecoder||(this._activeDecoder=new ze.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes),this._activeDecoder.init()),this._activeDecoder.put(e.subarray(t,i))!==We&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,r&&this._removePendingEntry(A)))}end(e){if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();let t=this._parsedCommand;if(t.action==="d")return this._handleDelete(t);let i=t.id??this._lastPendingKey??0,A=t.more===1,r=this._pendingTransmissions.get(i);if(A)return this._activeDecoder&&(r?(r.totalEncodedSize+=this._totalEncodedSize,r.decodeError=r.decodeError||this._decodeError):this._pendingTransmissions.set(i,{cmd:{...t},decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=i,this._activeDecoder=null),!0;r&&(this._lastPendingKey=void 0);let o=this._decodeError,n=t,a=this._activeDecoder;r&&(n=r.cmd,a=r.decoder,o=o||r.decodeError,this._pendingTransmissions.delete(i));let l=new Uint8Array(0);a&&(a.end()!==We&&(o=!0),l=a.data8),this._activeDecoder=null;let h=this._handleCommandWithBytesAndCmd(n,l,o);return a&&a.release(),h}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",e.quiet??0)),r}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported action",e.quiet??0),!0}}_handlePlacement(e){if(e.id===void 0)return!0;let t=e.id,i=this._kittyStorage.getImage(t);return i?this._displayImage(i,e).then(r=>(this._sendResponse(t,r?"OK":"EINVAL:image rendering failed",e.quiet??0,e.placementId),!0)):(this._sendResponse(t,"ENOENT:image not found",e.quiet??0,e.placementId),!0)}_handleTransmit(e,t,i){return(e.transmission??"d")!=="d"?(e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",e.quiet??0),!0):(i||t.length===0||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:e.width??0,height:e.height??0,format:e.format??32,compression:e.compression??""}),!0)}_handleTransmitDisplay(e,t,i){if(i)return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:invalid base64 data",e.quiet??0),!0;this._handleTransmit(e,t,i);let A=e.id??this._kittyStorage.lastImageId,r=this._kittyStorage.getImage(A);if(r){let o=this._displayImage(r,e);return e.id!==void 0?o.then(n=>(this._sendResponse(A,n?"OK":"EINVAL:image rendering failed",e.quiet??0),!0)):o.then(()=>!0)}return!0}_handleQuery(e,t,i){let A=e.id??0,r=e.quiet??0;if((e.transmission??"d")!=="d")return this._sendResponse(A,"EINVAL:unsupported transmission medium",r),!0;if(i)return this._sendResponse(A,"EINVAL:invalid base64 data",r),!0;if(t.length===0)return this._sendResponse(A,"OK",r),!0;let n=e.format??32;if(n===100)this._sendResponse(A,"OK",r);else{let a=e.width??0,l=e.height??0;if(!a||!l)return this._sendResponse(A,"EINVAL:width and height required for raw pixel data",r),!0;let h=n===32?4:3,g=a*l*h;if(t.length=1||!r&&i>=2)return;let o=A?`,p=${A}`:"",n=`\x1B_Gi=${e}${o};${t}\x1B\\`;this._coreTerminal._core.coreService.triggerDataEvent(n)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){let i=await this._createBitmap(e);try{let A=Math.max(0,t.x??0),r=Math.max(0,t.y??0),o=t.sourceWidth||i.width-A,n=t.sourceHeight||i.height-r,a=Math.max(0,i.width-A),l=Math.max(0,i.height-r),h=Math.max(0,Math.min(o,a)),g=Math.max(0,Math.min(n,l));if(h===0||g===0)throw new Error("invalid source rectangle");if(A!==0||r!==0||h!==i.width||g!==i.height){let T=await createImageBitmap(i,A,r,h,g);i.close(),i=T}let d=this._renderer.dimensions?.css.cell.width||b.width,m=this._renderer.dimensions?.css.cell.height||b.height,I,C;t.columns!==void 0&&t.rows!==void 0?(I=t.columns,C=t.rows):t.columns!==void 0?(I=t.columns,C=Math.max(1,Math.ceil(i.height/i.width*(I*d)/m))):t.rows!==void 0?(C=t.rows,I=Math.max(1,Math.ceil(i.width/i.height*(C*m)/d))):(I=Math.ceil(i.width/d),C=Math.ceil(i.height/m));let p=i.width,_=i.height;if((t.columns!==void 0||t.rows!==void 0)&&(p=Math.round(I*d),_=Math.round(C*m)),p*_>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");let E=this._coreTerminal._core.buffer,B=E.x,Y=E.y,q=E.ybase,At=t.zIndex!==void 0&&t.zIndex<0?"bottom":"top";if(p!==i.width||_!==i.height){let T=await createImageBitmap(i,{resizeWidth:p,resizeHeight:_});i.close(),i=T}let ge=Math.min(Math.max(0,t.xOffset??0),d-1),de=Math.min(Math.max(0,t.yOffset??0),m-1);if(ge!==0||de!==0){let T=t.columns!==void 0?Math.round(I*d):i.width+ge,rt=t.rows!==void 0?Math.round(C*m):i.height+de,W=D.createCanvas(window.document,T,rt),Re=W.getContext("2d");if(!Re)throw new Error("Failed to create offset canvas context");Re.drawImage(i,ge,de);let nt=await createImageBitmap(W);if(W.width=W.height=0,i.close(),i=nt,p=i.width,_=i.height,p*_>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");t.columns===void 0&&(I=Math.ceil(i.width/d)),t.rows===void 0&&(C=Math.ceil(i.height/m))}let st=t.zIndex??0;if(this._kittyStorage.addImage(e.id,i,!0,At,st),i=void 0,t.cursorMovement===1){let T=E.ybase-q;E.x=B,E.y=Math.max(Y-T,0)}else E.x=Math.min(B+I,this._coreTerminal.cols)}catch(A){throw i?.close(),A}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if(e.compression==="z"&&(t=await this._decompressZlib(t)),e.format===100){let p=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){let _=URL.createObjectURL(p),E=new Image;return new Promise((B,Y)=>{E.addEventListener("load",()=>{URL.revokeObjectURL(_);let q=D.createCanvas(window.document,E.width,E.height);q.getContext("2d")?.drawImage(E,0,0),createImageBitmap(q).then(B).catch(Y)}),E.addEventListener("error",()=>{URL.revokeObjectURL(_),Y(new Error("Failed to load image"))}),E.src=_})}return createImageBitmap(p)}let i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");let r=e.format===32?4:3,o=i*A*r;if(t.length>>24|E<<8,h[m++]=4278190080|E>>>16|B<<16,h[m++]=4278190080|B>>>8}let I=g*3,C=g*4;for(let p=g;ph+g.length,0),a=new Uint8Array(n),l=0;for(let h of r)a.set(h,l),l+=h.length;return a}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}};var O=class O{constructor(e){this._storage=e;this._nextImageId=1;this._images=new Map;this._kittyIdToStorageId=new Map;this._storageIdToKittyId=new Map;this._handleStorageImageDeleted=e=>{let t=this._storageIdToKittyId.get(e);t!==void 0&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))};this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"};this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=t=>{this._previousOnImageDeleted?.(t),this._handleStorageImageDeleted(t)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){let i=e??this._nextImageId++,A=this._kittyIdToStorageId.get(i);return A!==void 0&&(this._storage.deleteImage(A),this._kittyIdToStorageId.delete(i),this._storageIdToKittyId.delete(A)),!this._images.has(i)&&this._images.size>=O._maxStoredImages&&this._evictUndisplayedImages(),this._images.set(i,{...t,id:i}),i}addImage(e,t,i,A,r){let o=this._kittyIdToStorageId.get(e);o!==void 0&&this._storageIdToKittyId.delete(o),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=r;let n=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,n),this._storageIdToKittyId.set(n,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);let t=this._kittyIdToStorageId.get(e);t!==void 0&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(let e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(let[e]of this._images){if(this._images.size<=O._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}};O._maxStoredImages=256;var se=O;var x=R(Z());var $e=R(Ve());var Lt=4194304,Le=x.PALETTE_ANSI_256;Le.set(x.PALETTE_VT340_COLOR);var ae=class{constructor(e,t,i){this._opts=e;this._storage=t;this._coreTerminal=i;this._size=0;this._aborted=!1;(0,$e.DecoderAsync)({memoryLimit:this._opts.pixelLimit*4,palette:Le,paletteLimit:this._opts.sixelPaletteLimit}).then(A=>this._dec=A)}reset(){this._dec&&(this._dec.release(),this._dec._palette.fill(0),this._dec.init(0,Le,this._opts.sixelPaletteLimit))}hook(e){if(this._size=0,this._aborted=!1,this._dec){let t=e.params[1]===1?0:Rt(this._coreTerminal._core._inputHandler._curAttrData,this._coreTerminal._core._themeService?.colors);this._dec.init(t,null,this._opts.sixelPaletteLimit)}}put(e,t,i){if(!(this._aborted||!this._dec)){if(this._size+=i-t,this._size>this._opts.sixelSizeLimit){console.warn("SIXEL: too much data, aborting"),this._aborted=!0,this._dec.release();return}try{this._dec.decode(e,t,i)}catch(A){console.warn(`SIXEL: error while decoding image - ${A}`),this._aborted=!0,this._dec.release()}}}unhook(e){if(this._aborted||!e||!this._dec)return!0;let t=this._dec.width,i=this._dec.height;if(!t||!i)return i&&this._storage.advanceCursor(i),!0;let A=D.createCanvas(void 0,t,i);return A.getContext("2d")?.putImageData(new ImageData(this._dec.data8,t,i),0,0),this._dec.memoryUsage>Lt&&this._dec.release(),this._storage.addImage(A),!0}};function Rt(s,e){let t=0;if(!e)return t;if(s.isInverse())if(s.isFgDefault())t=oe(e.foreground.rgba);else if(s.isFgRGB()){let i=s.constructor.toColorRGB(s.getFgColor());t=(0,x.toRGBA8888)(...i)}else t=oe(e.ansi[s.getFgColor()].rgba);else if(s.isBgDefault())t=oe(e.background.rgba);else if(s.isBgRGB()){let i=s.constructor.toColorRGB(s.getBgColor());t=(0,x.toRGBA8888)(...i)}else t=oe(e.ansi[s.getBgColor()].rgba);return t}function oe(s){return x.BIG_ENDIAN?s:(s&255)<<24|(s>>>8&255)<<16|(s>>>16&255)<<8|s>>>24&255}var he=class{constructor(e,t,i,A){this._storage=e;this._opts=t;this._renderer=i;this._terminal=A;this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;(t.width===-1||t.height===-1)&&(t=b);let i=Math.ceil(e/t.height);for(let A=1;Athis._onImageAdded.fire(),this._opts.enableSizeReports){let t=e.options.windowOptions??{};t.getWinSizePixels=!0,t.getCellSizePixels=!0,t.getWinSizeChars=!0,e.options.windowOptions=t}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},t=>this._decset(t)),e.parser.registerCsiHandler({prefix:"?",final:"l"},t=>this._decrst(t)),e.parser.registerCsiHandler({final:"c"},t=>this._da1(t)),e.parser.registerCsiHandler({prefix:"?",final:"S"},t=>this._xtermGraphicsAttributes(t)),e.onRender(t=>this._storage?.render(t)),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>this._storage?.wipeAlternate()),e.onResize(t=>this._storage?.viewportResize(t))),this._opts.sixelSupport){let t=new he(this._storage,this._opts,this._renderer,e),i=new ae(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){let t=new le(this._storage),i=new ie(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){let t=new se(this._storage),i=new Ae(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,this._storage?.reset();for(let e of this._handlers.values())e.reset();return!1}get storageLimit(){return this._storage?.getLimit()||-1}set storageLimit(e){this._storage?.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){this._opts.showPlaceholder=e,this._renderer?.showPlaceholder(e)}getImageAtBufferCell(e,t){return this._storage?.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){return this._storage?.extractTileAtBufferCell(e,t)}_report(e){this._terminal?._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=tt?(this._opts.sixelPaletteLimit=e[2],this._report(`\x1B[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`\x1B[?${e[0]};2S`),!0;case 4:return this._report(`\x1B[?${e[0]};0;${tt}S`),!0;default:return this._report(`\x1B[?${e[0]};2S`),!0}if(e[0]===2)switch(e[1]){case 1:let t=this._renderer?.dimensions?.css.canvas.width,i=this._renderer?.dimensions?.css.canvas.height;if(!t||!i){let r=b;t=(this._terminal?.cols||80)*r.width,i=(this._terminal?.rows||24)*r.height}if(t*i()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var _t=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let A of ct(e))!mt.call(r,A)&&A!==t&&Ue(r,A,{get:()=>e[A],enumerable:!(i=It(e,A))||i.enumerable});return r};var L=(r,e,t)=>(t=r!=null?gt(ut(r)):{},_t(e||!r||!r.__esModule?Ue(t,"default",{value:r,enumerable:!0}):t,r));var V=R(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.DEFAULT_FOREGROUND=m.DEFAULT_BACKGROUND=m.PALETTE_ANSI_256=m.PALETTE_VT340_GREY=m.PALETTE_VT340_COLOR=m.normalizeHLS=m.normalizeRGB=m.nearestColorIndex=m.fromRGBA8888=m.toRGBA8888=m.alpha=m.blue=m.green=m.red=m.BIG_ENDIAN=void 0;m.BIG_ENDIAN=new Uint8Array(new Uint32Array([4278190080]).buffer)[0]===255;m.BIG_ENDIAN&&console.warn("BE platform detected. This version of node-sixel works only on LE properly.");function Oe(r){return r&255}m.red=Oe;function Je(r){return r>>>8&255}m.green=Je;function Pe(r){return r>>>16&255}m.blue=Pe;function Et(r){return r>>>24&255}m.alpha=Et;function B(r,e,t,i=255){return((i&255)<<24|(t&255)<<16|(e&255)<<8|r&255)>>>0}m.toRGBA8888=B;function pt(r){return[r&255,r>>8&255,r>>16&255,r>>>24]}m.fromRGBA8888=pt;function ft(r,e){let t=Oe(r),i=Je(r),A=Pe(r),s=Number.MAX_SAFE_INTEGER,n=-1;for(let o=0;o1&&(t-=1),t*6<1?e+(r-e)*6*t:t*2<1?r:t*3<2?e+(r-e)*(4-t*6):e}function Bt(r,e,t){if(!t){let s=Math.round(e*255);return B(s,s,s)}let i=e<.5?e*(1+t):e+t-e*t,A=2*e-i;return B(_e(0,255,Math.round(Ce(i,A,r+1/3)*255)),_e(0,255,Math.round(Ce(i,A,r)*255)),_e(0,255,Math.round(Ce(i,A,r-1/3)*255)))}function u(r,e,t){return(4278190080|Math.round(t/100*255)<<16|Math.round(e/100*255)<<8|Math.round(r/100*255))>>>0}m.normalizeRGB=u;function Qt(r,e,t){return Bt((r+240%360)/360,e/100,t/100)}m.normalizeHLS=Qt;m.PALETTE_VT340_COLOR=new Uint32Array([u(0,0,0),u(20,20,80),u(80,13,13),u(20,80,20),u(80,20,80),u(20,80,80),u(80,80,20),u(53,53,53),u(26,26,26),u(33,33,60),u(60,26,26),u(33,60,33),u(60,33,60),u(33,60,60),u(60,60,33),u(80,80,80)]);m.PALETTE_VT340_GREY=new Uint32Array([u(0,0,0),u(13,13,13),u(26,26,26),u(40,40,40),u(6,6,6),u(20,20,20),u(33,33,33),u(46,46,46),u(0,0,0),u(13,13,13),u(26,26,26),u(40,40,40),u(6,6,6),u(20,20,20),u(33,33,33),u(46,46,46)]);m.PALETTE_ANSI_256=(()=>{let r=[B(0,0,0),B(205,0,0),B(0,205,0),B(205,205,0),B(0,0,238),B(205,0,205),B(0,250,205),B(229,229,229),B(127,127,127),B(255,0,0),B(0,255,0),B(255,255,0),B(92,92,255),B(255,0,255),B(0,255,255),B(255,255,255)],e=[0,95,135,175,215,255];for(let t=0;t<6;++t)for(let i=0;i<6;++i)for(let A=0;A<6;++A)r.push(B(e[t],e[i],e[A]));for(let t=8;t<=238;t+=10)r.push(B(t,t,t));return new Uint32Array(r)})();m.DEFAULT_BACKGROUND=B(0,0,0,255);m.DEFAULT_FOREGROUND=B(255,255,255,255)});var Be=R(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});fe.InWasm=bt;var F=r=>{if(Uint8Array.fromBase64)return Uint8Array.fromBase64(r);if(typeof Buffer<"u")return Buffer.from(r,"base64");let e=atob(r),t=new Uint8Array(e.length);for(let i=0;inew n.Instance(s||(s=new n.Module(A||(A=F(i)))),o):o=>s?n.instantiate(s,o):n.instantiate(A||(A=F(i)),o).then(a=>(s=a.module)&&a.instance):e===1?t?()=>s||(s=new n.Module(A||(A=F(i)))):()=>s?Promise.resolve(s):n.compile(A||(A=F(i))).then(o=>s=o):t?()=>A||(A=F(i)):()=>Promise.resolve(A||(A=F(i)))}if(typeof _wasmCtx>"u")throw new Error('must run "inwasm"');_wasmCtx.add(r)}});var be=R(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});var wt=Be(),yt=(0,wt.InWasm)({s:1,t:0,d:"AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML"}),M=new Uint8Array("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").map(r=>r.charCodeAt(0))),N=new Uint32Array(1024);N.fill(4278190080);for(let r=0;r>4|(r<<4&255)<<8;for(let r=0;r>2<<8|(r<<6&255)<<16;for(let r=0;rthis.maxBytes||this.maxBytes>4294901760)throw new Error("invalid byte settings")}get data8(){return this._inst?this._d.subarray(0,this._m32[1282]):xt}release(){this._inst&&(this._bytes>this.keepSize?this._inst=this._m32=this._d=this._mem=null:(this._m32[1280]=0,this._m32[1281]=0,this._m32[1282]=0))}init(e,t){if(this.maxBytes=e??this.maxBytes,this._bytes=t??Math.min(this._bytes,this.maxBytes),this._bytes>this.maxBytes||this.maxBytes>4294901760)throw Error("invalid byte settings");let i=this._m32,A=this._bytes+5152;this._inst?this._mem.buffer.byteLengththis.maxBytes)return-3;let i=this._bytes;for(;(i*=2)this._mem.buffer.byteLength){let A=Math.ceil((i+5152-this._mem.buffer.byteLength)/65536);this._mem.grow(A),this._m32=new Uint32Array(this._mem.buffer,0),this._d=new Uint8Array(this._mem.buffer,5152)}this._bytes=i}return 0}put(e){if(!this._inst||this._ended)return-2;if(this._realloc(e.length))return-3;let t=this._m32;return this._d.set(e,t[1280]),t[1280]+=e.length,t[1280]-t[1281]>=131072?this._inst.exports.dec():0}end(){return this._ended=!0,this._inst?this._inst.exports.end():-2}get loadedBytes(){return this._inst?this._m32[1280]:0}get freeBytes(){return this._inst?this.maxBytes-this._m32[1280]:0}};De.default=Qe});var Ye=R(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});var Mt=Be(),St=(0,Mt.InWasm)({s:1,t:0,d:"AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=="}),we=class{constructor(e){this.keepSize=e,this.width=0,this.height=0}decode(e){this.width=e[4]<<24|e[5]<<16|e[6]<<8|e[7],this.height=e[8]<<24|e[9]<<16|e[10]<<8|e[11];let t=this.width*this.height,i=t*4,A=e.length,s=Math.max(i,A)+(Math.min(i,A)>>1)+4096;this._inst?this._mem.buffer.byteLengththis.keepSize&&(this._inst=this._d=this._mem=null)}};ye.default=we});var Fe=R(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});ae.LIMITS=void 0;ae.LIMITS={CHUNK_SIZE:16384,PALETTE_SIZE:4096,MAX_WIDTH:16384,BYTES:"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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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"}});var it=R(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.decodeAsync=y.decode=y.Decoder=y.DecoderAsync=void 0;var J=V(),Q=Fe();function Rt(r){if(typeof Buffer<"u")return Buffer.from(r,"base64");let e=atob(r),t=new Uint8Array(e.length);for(let i=0;i1,this.modeHandler=e=>1}handle_band(e){return this.bandHandler(e)}mode_parsed(e){return this.modeHandler(e)}},vt={memoryLimit:2048*65536,sixelColor:J.DEFAULT_FOREGROUND,fillColor:J.DEFAULT_BACKGROUND,palette:J.PALETTE_VT340_COLOR,paletteLimit:Q.LIMITS.PALETTE_SIZE,truncate:!0};function tt(r){let e=new Ne,t={env:{handle_band:e.handle_band.bind(e),mode_parsed:e.mode_parsed.bind(e)}};return WebAssembly.instantiate(P||et,t).then(i=>(P=P||i.module,new K(r,i.instance||i,e)))}y.DecoderAsync=tt;var K=class{constructor(e,t,i){if(this._PIXEL_OFFSET=Q.LIMITS.MAX_WIDTH+4,this._canvas=he,this._bandWidths=[],this._maxWidth=0,this._minWidth=Q.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0,this._opts=Object.assign({},vt,e),this._opts.paletteLimit>Q.LIMITS.PALETTE_SIZE)throw new Error(`DecoderOptions.paletteLimit must not exceed ${Q.LIMITS.PALETTE_SIZE}`);if(t)i.bandHandler=this._handle_band.bind(this),i.modeHandler=this._initCanvas.bind(this);else{let A=P||(P=new WebAssembly.Module(et));t=new WebAssembly.Instance(A,{env:{handle_band:this._handle_band.bind(this),mode_parsed:this._initCanvas.bind(this)}})}this._instance=t,this._wasm=this._instance.exports,this._chunk=new Uint8Array(this._wasm.memory.buffer,this._wasm.get_chunk_address(),Q.LIMITS.CHUNK_SIZE),this._states=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_state_address(),12),this._palette=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_palette_address(),Q.LIMITS.PALETTE_SIZE),this._palette.set(this._opts.palette),this._pSrc=new Uint32Array(this._wasm.memory.buffer,this._wasm.get_p0_address()),this._wasm.init(J.DEFAULT_FOREGROUND,0,this._opts.paletteLimit,0)}get _fillColor(){return this._states[0]}get _truncate(){return this._states[8]}get _rasterWidth(){return this._states[6]}get _rasterHeight(){return this._states[7]}get _width(){return this._states[2]?this._states[2]-4:0}get _height(){return this._states[3]}get _level(){return this._states[9]}get _mode(){return this._states[10]}get _paletteLimit(){return this._states[11]}_initCanvas(e){if(e===2){let t=this.width*this.height;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}this._maxWidth=this._width}else if(e===1)if(this._level===2){let t=Math.min(this._rasterWidth,Q.LIMITS.MAX_WIDTH)*this._rasterHeight;if(t>this._canvas.length){if(this._opts.memoryLimit&&t*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");this._canvas=new Uint32Array(t)}}else this._canvas.length<65536&&(this._canvas=new Uint32Array(65536));return 0}_realloc(e,t){let i=e+t;if(i>this._canvas.length){if(this._opts.memoryLimit&&i*4>this._opts.memoryLimit)throw this.release(),new Error("image exceeds memory limit");let A=new Uint32Array(Math.ceil(i/65536)*65536);A.set(this._canvas),this._canvas=A}}_handle_band(e){let t=this._PIXEL_OFFSET,i=this._lastOffset;if(this._mode===2){let A=this.height-this._currentHeight,s=0;for(;s<6&&A>0;)this._canvas.set(this._pSrc.subarray(t*s,t*s+e),i+e*s),s++,A--;this._lastOffset+=e*s,this._currentHeight+=s}else if(this._mode===1){this._realloc(i,e*6),this._maxWidth=Math.max(this._maxWidth,e),this._minWidth=Math.min(this._minWidth,e);for(let A=0;A<6;++A)this._canvas.set(this._pSrc.subarray(t*A,t*A+e),i+e*A);this._bandWidths.push(e),this._lastOffset+=e*6,this._currentHeight+=6}return 0}get width(){return this._mode!==1?this._width:Math.max(this._maxWidth,this._wasm.current_width())}get height(){return this._mode!==1?this._height:this._wasm.current_width()?this._bandWidths.length*6+this._wasm.current_height():this._bandWidths.length*6}get palette(){return this._palette.subarray(0,this._paletteLimit)}get memoryUsage(){return this._canvas.byteLength+this._wasm.memory.buffer.byteLength+8*this._bandWidths.length}get properties(){return{width:this.width,height:this.height,mode:this._mode,level:this._level,truncate:!!this._truncate,paletteLimit:this._paletteLimit,fillColor:this._fillColor,memUsage:this.memoryUsage,rasterAttributes:{numerator:this._states[4],denominator:this._states[5],width:this._rasterWidth,height:this._rasterHeight}}}init(e=this._opts.fillColor,t=this._opts.palette,i=this._opts.paletteLimit,A=this._opts.truncate){this._wasm.init(this._opts.sixelColor,e,i,A?1:0),t&&this._palette.set(t.subarray(0,Q.LIMITS.PALETTE_SIZE)),this._bandWidths.length=0,this._maxWidth=0,this._minWidth=Q.LIMITS.MAX_WIDTH,this._lastOffset=0,this._currentHeight=0}decode(e,t=0,i=e.length){let A=t;for(;A0){let i=this._PIXEL_OFFSET,A=this._lastOffset,s=0;for(;s<6&&t>0;)this._canvas.set(this._pSrc.subarray(i*s,i*s+e),A+e*s),s++,t--;t&&this._canvas.fill(this._fillColor,A+e*s)}return this._canvas.subarray(0,this.width*this.height)}if(this._mode===1){if(this._minWidth===this._maxWidth){let s=!1;if(e)if(e!==this._minWidth)s=!0;else{let n=this._PIXEL_OFFSET,o=this._lastOffset;this._realloc(o,e*6);for(let a=0;a<6;++a)this._canvas.set(this._pSrc.subarray(n*a,n*a+e),o+e*a)}if(!s)return this._canvas.subarray(0,this.width*this.height)}let t=new Uint32Array(this.width*this.height);t.fill(this._fillColor);let i=0,A=0;for(let s=0;s{if(this._disposed)return G(()=>{});let A={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(A);let s=G(()=>{let n=this._listeners.indexOf(A);n!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(n,1))});return i&&(Array.isArray(i)?i.push(s):i.add(s)),s},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let i=0,A=t.length;i{function r(s,n){return s(o=>n.fire(o))}A.forward=r;function e(s,n){return(o,a,h)=>s(l=>o.call(a,n(l)),void 0,h)}A.map=e;function t(...s){return(n,o,a)=>{let h=new H;for(let l of s)h.add(l(d=>n.call(o,d)));return a&&(Array.isArray(a)?a.push(h):a.add(h)),h}}A.any=t;function i(s,n,o){return n(o),s(a=>n(a))}A.runAndSubscribe=i})(Ct||={});var Ee=L(V());var D=class r extends k{constructor(t){super();this._terminal=t;this._layers=new Map;this._optionsRefresh=this._register(new Z);this._oldOpen=this._terminal._core.open,this._terminal._core.open=i=>{this._oldOpen?.call(this._terminal._core,i),this._open()},this._terminal._core.screenElement&&this._open(),this._optionsRefresh.value=this._terminal._core.optionsService.onOptionChange(i=>{i==="fontSize"&&(this.rescaleCanvas(),this._renderService?.refreshRows(0,this._terminal.rows))}),this._register(G(()=>{this.removeLayerFromDom(),this.removeLayerFromDom("bottom"),this._terminal._core&&this._oldOpen&&(this._terminal._core.open=this._oldOpen,this._oldOpen=void 0),this._renderService&&this._oldSetRenderer&&(this._renderService.setRenderer=this._oldSetRenderer,this._oldSetRenderer=void 0),this._renderService=void 0,this._layers.clear(),this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0}))}get canvas(){return this._layers.get("top")?.canvas}static createCanvas(t,i,A){let s=(t??document).createElement("canvas");return s.width=i|0,s.height=A|0,s}static createImageData(t,i,A,s){if(typeof ImageData!="function"){let n=t.createImageData(i,A);return s&&n.data.set(new Uint8ClampedArray(s,0,i*A*4)),n}return s?new ImageData(new Uint8ClampedArray(s,0,i*A*4),i,A):new ImageData(i,A)}static createImageBitmap(t){return typeof createImageBitmap!="function"?Promise.resolve(void 0):createImageBitmap(t)}showPlaceholder(t){t?!this._placeholder&&this.cellSize.height!==-1&&this._createPlaceHolder(Math.max(this.cellSize.height+1,24)):(this._placeholderBitmap?.close(),this._placeholderBitmap=void 0,this._placeholder=void 0),this._renderService?.refreshRows(0,this._terminal.rows)}get dimensions(){return this._terminal.dimensions}get cellSize(){return{width:this.dimensions?.css.cell.width||-1,height:this.dimensions?.css.cell.height||-1}}clearLines(t,i,A){let s=t*(this.dimensions?.css.cell.height||0),n=this.dimensions?.css.canvas.width||0,o=(i+1-t)*(this.dimensions?.css.cell.height||0);(!A||A==="top")&&this._layers.get("top")?.clearRect(0,s,n,o),(!A||A==="bottom")&&this._layers.get("bottom")?.clearRect(0,s,n,o)}clearAll(t){if(!t||t==="top"){let i=this._layers.get("top");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}if(!t||t==="bottom"){let i=this._layers.get("bottom");i?.clearRect(0,0,i.canvas.width,i.canvas.height)}}draw(t,i,A,s,n=1){let o=this._layers.get(t.layer);if(!o)return;let{width:a,height:h}=this.cellSize;if(a===-1||h===-1)return;this._rescaleImage(t,a,h);let l=t.actual,{width:d,height:g}=t.actualCellSize,I=Math.ceil(l.width/d),c=i%I*d,_=Math.floor(i/I)*g,C=A*a,p=s*h,f=n*d+c>l.width?l.width-c:n*d,E=_+g>l.height?l.height-_:g;o.drawImage(l,Math.floor(c),Math.floor(_),Math.ceil(f),Math.ceil(E),Math.floor(C),Math.floor(p),Math.ceil(f*a/d),Math.ceil(E*h/g))}extractTile(t,i){let{width:A,height:s}=this.cellSize;if(A===-1||s===-1)return;this._rescaleImage(t,A,s);let n=t.actual,{width:o,height:a}=t.actualCellSize,h=Math.ceil(n.width/o),l=i%h*o,d=Math.floor(i/h)*a,g=o+l>n.width?n.width-l:o,I=d+a>n.height?n.height-d:a,c=r.createCanvas(this.document,Math.ceil(g*A/o),Math.ceil(I*s/a)),_=c.getContext("2d");if(_)return _.drawImage(n,Math.floor(l),Math.floor(d),Math.floor(g),Math.floor(I),0,0,c.width,c.height),c}drawPlaceholder(t,i,A=1){let s=this._layers.get("top");if(s){let{width:n,height:o}=this.cellSize;if(n===-1||o===-1||(this._placeholder?o>=this._placeholder.height&&this._createPlaceHolder(o+1):this._createPlaceHolder(Math.max(o+1,24)),!this._placeholder))return;s.drawImage(this._placeholderBitmap??this._placeholder,t*n,i*o%2?0:1,n*A,o,t*n,i*o,n*A,o)}}rescaleCanvas(){let t=this.dimensions?.css.canvas.width||0,i=this.dimensions?.css.canvas.height||0;for(let A of this._layers.values())(A.canvas.width!==t||A.canvas.height!==i)&&(A.canvas.width=t,A.canvas.height=i)}_rescaleImage(t,i,A){if(i===t.actualCellSize.width&&A===t.actualCellSize.height)return;let{width:s,height:n}=t.origCellSize;if(i===s&&A===n){t.actual=t.orig,t.actualCellSize.width=s,t.actualCellSize.height=n;return}let o=Math.ceil(t.orig.width*i/s),a=Math.ceil(t.orig.height*A/n);if(o*a>t.orig.width*t.orig.height){t.actual=t.orig,t.actualCellSize.width=s,t.actualCellSize.height=n;return}let h=r.createCanvas(this.document,o,a),l=h.getContext("2d");l&&(l.drawImage(t.orig,0,0,h.width,h.height),t.actual=h,t.actualCellSize.width=i,t.actualCellSize.height=A)}_open(){this._renderService=this._terminal._core._renderService,this._oldSetRenderer=this._renderService.setRenderer.bind(this._renderService),this._renderService.setRenderer=t=>{for(let i of[...this._layers.keys()])this.removeLayerFromDom(i);this._oldSetRenderer?.call(this._renderService,t)}}insertLayerToDom(t="top"){if(!this.document||!this._terminal._core.screenElement){console.warn("image addon: cannot insert output canvas to DOM, missing document or screenElement");return}if(this._layers.has(t))return;let i=r.createCanvas(this.document,this.dimensions?.css.canvas.width||0,this.dimensions?.css.canvas.height||0);i.classList.add(`xterm-image-layer-${t}`);let A=this._terminal._core.screenElement;A.style.isolation="isolate",t==="bottom"?(i.style.zIndex="-1",A.insertBefore(i,A.firstChild)):(i.style.zIndex="0",A.appendChild(i));let s=i.getContext("2d",{alpha:!0});if(!s){i.remove();return}this._layers.set(t,s),this.clearAll(t)}removeLayerFromDom(t="top"){let i=this._layers.get(t);i&&(i.canvas.remove(),this._layers.delete(t))}hasLayer(t){return this._layers.has(t)}_createPlaceHolder(t=24){this._placeholderBitmap?.close(),this._placeholderBitmap=void 0;let i=32,A=r.createCanvas(this.document,i,t),s=A.getContext("2d",{alpha:!1});if(!s)return;let n=r.createImageData(s,i,t),o=new Uint32Array(n.data.buffer),a=(0,Ee.toRGBA8888)(0,0,0),h=(0,Ee.toRGBA8888)(255,255,255);o.fill(a);for(let I=0;I{this._placeholder!==g?I?.close():this._placeholderBitmap=I}).catch(()=>{})}get document(){return this._terminal._core._coreBrowserService?.window.document}};function Ke(r){return r>65535?(r-=65536,String.fromCharCode((r>>10)+55296)+String.fromCharCode(r%1024+56320)):String.fromCharCode(r)}var $=class r{constructor(){this.fg=0;this.bg=0;this.extended=new U}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let e=new r;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},U=class r{constructor(e=0,t=0){this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new r(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.payload===void 0}};var ee=class r extends ${constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new U;this.combinedData=""}static fromCharData(t){let i=new r;return i.setFromCharData(t),i}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?Ke(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(t){this.fg=t[0],this.bg=0;let i=!1;if(t[1].length>2)i=!0;else if(t[1].length===2){let A=t[1].charCodeAt(0);if(55296<=A&&A<=56319){let s=t[1].charCodeAt(1);56320<=s&&s<=57343?this.content=(A-55296)*1024+s-56320+65536|t[2]<<22:i=!0}else i=!0}else this.content=t[1].charCodeAt(0)|t[2]<<22;i&&(this.combinedData=t[1],this.content=2097152|t[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor()||this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor()||this.isInverse()!==t.isInverse()||this.isBold()!==t.isBold()||this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;let i=this.isUnderlineColorDefault(),A=t.isUnderlineColorDefault();if(!(i&&A)&&(i!==A||this.getUnderlineColor()!==t.getUnderlineColor()||this.getUnderlineColorMode()!==t.getUnderlineColorMode()))return!1}return!(this.isOverline()!==t.isOverline()||this.isBlink()!==t.isBlink()||this.isInvisible()!==t.isInvisible()||this.isItalic()!==t.isItalic()||this.isDim()!==t.isDim()||this.isStrikethrough()!==t.isStrikethrough())}};var b={width:7,height:14},w=class{constructor(e=-1,t=-1){this.imageId=e;this.tileId=t}},te=class{constructor(e,t,i){this._terminal=e;this._renderer=t;this._opts=i;this._images=new Map;this._lastId=0;this._lowestId=0;this._fullyCleared=!1;this._needsFullClear=!1;this._pixelLimit=25e5;this._workCell=new ee;try{this.setLimit(this._opts.storageLimit)}catch(A){A instanceof Error&&console.error(A.message),console.warn(`storageLimit is set to ${this.getLimit()} MB`)}this._viewportMetrics={cols:this._terminal.cols,rows:this._terminal.rows}}dispose(){this.reset()}reset(){for(let e of this._images.values())e.marker?.dispose();this._images.clear(),this._renderer.clearAll()}getLimit(){return this._pixelLimit*4/1e6}setLimit(e){if(e<.5||e>1e3)throw RangeError("invalid storageLimit, should be at least 0.5 MB and not exceed 1G");this._pixelLimit=e/4*1e6>>>0,this._evictOldest(0)}getUsage(){return this._getStoredPixels()*4/1e6}_getStoredPixels(){let e=0;for(let t of this._images.values())t.orig&&(e+=t.orig.width*t.orig.height,t.actual&&t.actual!==t.orig&&(e+=t.actual.width*t.actual.height));return e}_delImg(e){let t=this._images.get(e);t&&(this._images.delete(e),window.ImageBitmap&&t.orig instanceof ImageBitmap&&t.orig.close(),this.onImageDeleted?.(e))}wipeAlternate(){let e=[];for(let[t,i]of this._images.entries())i.bufferType==="alternate"&&(i.marker?.dispose(),e.push(t));for(let t of e)this._delImg(t);this._needsFullClear=!0,this._fullyCleared=!1}deleteImage(e){let t=this._images.get(e);t&&(t.marker?.dispose(),this._delImg(e))}addImage(e,t){this._evictOldest(e.width*e.height);let i=this._renderer.cellSize;(i.width===-1||i.height===-1)&&(i=b);let A=Math.ceil(e.width/i.width),s=Math.ceil(e.height/i.height),n=++this._lastId,o=this._terminal._core.buffer,a=this._terminal.cols,h=this._terminal.rows,l=o.x,d=o.y,g=l,I=0;t.scrolling||(o.x=0,o.y=0,g=0),this._terminal._core._inputHandler._dirtyRowTracker.markDirty(o.y);for(let p=0;p=a);++E)this._writeToCell(f,g+E,n,p*A+E),I++;if(t.scrolling)p=h)break;o.x=g}this._terminal._core._inputHandler._dirtyRowTracker.markDirty(o.y),t.scrolling?t.cursorPos==="iip"?o.x=Math.min(g+A,a):o.x=g:(o.x=l,o.y=d);let c=[];for(let[p,f]of this._images.entries())f.tileCount<1&&(f.marker?.dispose(),c.push(p));for(let p of c)this._delImg(p);let _=this._terminal.registerMarker(0);_?.onDispose(()=>{this._images.get(n)&&this._delImg(n)}),this._terminal.buffer.active.type==="alternate"&&this._evictOnAlternate();let C={orig:e,origCellSize:i,actual:e,actualCellSize:{...i},marker:_||void 0,tileCount:I,bufferType:this._terminal.buffer.active.type,layer:t.layer,zIndex:t.zIndex};return this._images.set(n,C),this.onImageAdded?.(),n}render(e){let t=!1,i=!1;for(let l of this._images.values())if(l.layer==="bottom"?i=!0:t=!0,t&&i)break;if(t&&!this._renderer.hasLayer("top")&&(this._renderer.insertLayerToDom("top"),!this._renderer.hasLayer("top")))return;if(i&&!this._renderer.hasLayer("bottom")&&this._renderer.insertLayerToDom("bottom"),this._renderer.rescaleCanvas(),!this._images.size){this._fullyCleared||(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1),this._renderer.hasLayer("top")&&this._renderer.removeLayerFromDom("top"),this._renderer.hasLayer("bottom")&&this._renderer.removeLayerFromDom("bottom");return}!t&&this._renderer.hasLayer("top")&&(this._renderer.clearAll("top"),this._renderer.removeLayerFromDom("top")),!i&&this._renderer.hasLayer("bottom")&&(this._renderer.clearAll("bottom"),this._renderer.removeLayerFromDom("bottom")),this._needsFullClear&&(this._renderer.clearAll(),this._fullyCleared=!0,this._needsFullClear=!1);let{start:A,end:s}=e,n=this._terminal._core.buffer,o=this._terminal._core.cols;this._renderer.clearLines(A,s);let a=[],h=[];for(let l=A;l<=s;++l){let d=n.lines.get(l+n.ydisp);if(!d)return;for(let g=0;gl.imgSpec.zIndex-d.imgSpec.zIndex);for(let l of h)this._renderer.drawPlaceholder(l.col,l.row,l.count);for(let l of a)this._renderer.draw(l.imgSpec,l.tileId,l.col,l.row,l.count)}viewportResize(e){if(!this._images.size){this._viewportMetrics=e;return}if(this._viewportMetrics.cols>=e.cols){this._viewportMetrics=e;return}let t=this._terminal._core.buffer,i=t.lines.length,A=this._viewportMetrics.cols-1;for(let s=0;s=l)continue;let d=!1;for(let c=A+1;c>e.cols;++c)if(n.hasContent(c)){d=!0;break}if(d)continue;let g=Math.min(e.cols,l-o.tileId%l+A),I=o.tileId;for(let c=A+1;c57)throw new Error("illegal char");e=e*10+r[t]-48}return e}function qe(r){let e=ie(r);if(!e.match(/^((auto)|(\d+?((px)|(%)){0,1}))$/))throw new Error("illegal size");return e}function Tt(r){if(typeof Buffer<"u")return Buffer.from(ie(r),"base64").toString();let e=atob(ie(r)),t=new Uint8Array(e.length);for(let i=0;i14)return-1;for(let o=t;o=Le)return this._a();n[s++]=a}break;case 58:return A===3&&!this._storeValue(s)?this._a():(this.state=4,o+1);default:if(s>=Le)return this._a();n[s++]=a}}return this.state=A,this._position=s,-2}_a(){return this.fields.type=0,this.state=1,-1}_storeKey(e){let t=ie(this._buffer.subarray(0,e));return t?(this._key=t,this.fields[t]=null,!0):!1}_storeValue(e){if(this._key){try{let t=this._buffer.slice(0,e);this.fields[this._key]=We[this._key]?We[this._key](t):t}catch{return!1}return!0}return!1}};var S={mime:"unsupported",width:0,height:0};function re(r){if(r.length<32)return S;let e=new Uint32Array(r.buffer,r.byteOffset,8);if(e[0]===1196314761&&e[1]===169478669&&e[3]===1380206665)return{mime:"image/png",width:r[16]<<24|r[17]<<16|r[18]<<8|r[19],height:r[20]<<24|r[21]<<16|r[22]<<8|r[23]};if(r[0]===255&&r[1]===216&&r[2]===255){let[t,i]=Lt(r);return{mime:"image/jpeg",width:t,height:i}}if(e[0]===944130375&&(r[4]===55||r[4]===57)&&r[5]===97)return{mime:"image/gif",width:r[7]<<8|r[6],height:r[9]<<8|r[8]};if(e[0]===1718185841)return{mime:"image/qoi",width:r[4]<<24|r[5]<<16|r[6]<<8|r[7],height:r[8]<<24|r[9]<<16|r[10]<<8|r[11]};if(e[0]===1179011410&&e[2]===1346520407&&(e[3]&16777215)===3690582){switch(r[15]){case 88:return{mime:"image/webp",width:(r[24]|r[25]<<8|r[26]<<16)+1,height:(r[27]|r[28]<<8|r[29]<<16)+1};case 76:if(r[20]!==47)return S;let t=r[21]|r[22]<<8|r[23]<<16|r[24]<<24;return{mime:"image/webp",width:(t&16383)+1,height:(t>>>14&16383)+1};case 32:return r[23]!==157||r[24]!==1||r[25]!==42?S:{mime:"image/webp",width:(r[26]|r[27]<<8)&16383,height:(r[28]|r[29]<<8)&16383}}return S}if(e[1]===1887007846&&(e[2]===1718187617||e[2]===1936291425)){let t=-1,i=Math.min(r.length-16,1024);for(let A=8;A0&&s>0)return{mime:"image/avif",width:A,height:s}}return S}return S}function Lt(r){let e=r.length,t=4,i=r[t]<<8|r[t+1];for(;;){if(t+=i,t>=e)return[0,0];if(r[t]!==255)return[0,0];if(r[t+1]===192||r[t+1]===194)return t+80){if(this._hp.fields.type===1){if(this._isMultipart&&(this._isMultipart=!1,this._abortMulti=!1,this._dec.release()),this._header=Object.assign({},Re,this._hp.fields),!this._header.inline){this._aborted=!0;return}if(!this._initDecoder()){this._aborted=!0;return}}else if(this._abortMulti){this._aborted=!0;return}this._dec.put(e.subarray(A,i))!==0&&(this._dec.release(),this._aborted=!0,this._isMultipart&&(this._abortMulti=!0))}}}end(e){if(this._aborted||this._hp.state!==4&&this._hp.end())return!0;let t=this._hp.fields.type;if(t===3)return!0;if(t===5){let h=b.width,l=b.height;this._renderer.dimensions&&(h=this._renderer.dimensions.css.canvas.width/this._coreTerminal.cols,l=this._renderer.dimensions.css.canvas.height/this._coreTerminal.rows);let d=this._coreTerminal._core._coreBrowserService?.dpr??1,g=`\x1B]1337;ReportCellSize=${l.toFixed(3)};${h.toFixed(3)};${d.toFixed(3)}\x1B\\`;return this._coreTerminal.input(g,!1),!0}if(t===2)return this._header=Object.assign({},Re,this._hp.fields),this._isMultipart=!0,this._abortMulti=!1,this._dec.release(),this._initDecoder()||(this._abortMulti=!0),!0;if(t===4&&(!this._isMultipart||(this._isMultipart=!1,this._abortMulti||this._header.type!==2)))return!0;let i=0,A=0,s,n=S;if((s=e)&&((s=!this._dec.end())?(n=re(this._dec.data8),(s=n.mime!=="unsupported")?(i=n.width,A=n.height,(s=i&&A&&i*Aa!==this._generation?(h.close(),!0):(this._storage.addImage(h),!0)).catch(h=>(console.warn(`IIP: decoding error ${n.mime} ${n.width}x${n.height}`,h),!0))}_initDecoder(){try{return this._dec.init(),!0}catch(e){return console.warn("IIP: could not allocate decoder",e),this._dec.release(),!1}}_resize(e,t){let i=this._renderer.dimensions?.css.cell.width||b.width,A=this._renderer.dimensions?.css.cell.height||b.height,s=this._renderer.dimensions?.css.canvas.width||i*this._coreTerminal.cols,n=this._renderer.dimensions?.css.canvas.height||A*this._coreTerminal.rows,o=this._dim(this._header.width,s,i),a=this._dim(this._header.height,n,A);if(!o&&!a){let h=s/e,l=(n-A)/t,d=Math.min(h,l);return d<1?[e*d,t*d]:[e,t]}return o?this._header.preserveAspectRatio||!o||!a?[o,t*o/e]:[o,a]:[e*a/t,a]}_dim(e,t,i){return e==="auto"?0:e.endsWith("%")?parseInt(e.slice(0,-1),10)*t/100:e.endsWith("px")?parseInt(e.slice(0,-2),10):parseInt(e,10)*i}};var $e=L(be());function ve(r){let e={},t=r.split(",");for(let i of t){let A=i.indexOf("=");if(A===-1)continue;let s=i.substring(0,A),n=i.substring(A+1);if(s==="a"){e.action=n;continue}if(s==="o"){e.compression=n;continue}if(s==="t"){e.transmission=n;continue}if(s==="d"){e.deleteSelector=n;continue}let o=parseInt(n,10);switch(s){case"f":e.format=o;break;case"i":e.id=o;break;case"I":e.imageNumber=o;break;case"s":e.width=o;break;case"v":e.height=o;break;case"x":e.x=o;break;case"y":e.y=o;break;case"w":e.sourceWidth=o;break;case"h":e.sourceHeight=o;break;case"X":e.xOffset=o;break;case"Y":e.yOffset=o;break;case"c":e.columns=o;break;case"r":e.rows=o;break;case"m":e.more=o;break;case"q":e.quiet=o;break;case"C":e.cursorMovement=o;break;case"z":e.zIndex=o;break;case"p":e.placementId=o;break}}return e}var Ve=0,ne=class{constructor(e,t,i,A){this._opts=e;this._renderer=t;this._kittyStorage=i;this._coreTerminal=A;this._aborted=!1;this._generation=0;this._decodeError=!1;this._activeDecoder=null;this._inControlData=!0;this._controlData=new Uint32Array(512);this._controlLength=0;this._encodedSizeLimit=0;this._totalEncodedSize=0;this._parsedCommand=null;this._pendingTransmissions=new Map;this._maxEncodedBytes=Math.ceil(this._opts.kittySizeLimit*4/3),this._initialEncodedBytes=Math.min(4194304,this._maxEncodedBytes)}reset(){this._generation++,this._cleanupAllPending(),this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),this._kittyStorage.reset()}dispose(){this.reset()}_removePendingEntry(e){this._pendingTransmissions.delete(e),this._lastPendingKey===e&&(this._lastPendingKey=void 0)}_cleanupAllPending(){for(let e of this._pendingTransmissions.values())e.decoder.release();this._pendingTransmissions.clear(),this._lastPendingKey=void 0}start(){this._aborted=!1,this._decodeError=!1,this._inControlData=!0,this._controlLength=0,this._parsedCommand=null,this._encodedSizeLimit=this._maxEncodedBytes,this._totalEncodedSize=0,this._activeDecoder=null}put(e,t,i){if(!this._aborted)if(!this._inControlData)this._streamPayload(e,t,i);else{let A=i;for(let n=t;n512){this._aborted=!0;return}if(this._controlData.set(e.subarray(t,A),this._controlLength),this._controlLength+=s,!this._inControlData){if(this._parsedCommand=ve(this._parseControlDataString()),this._parsedCommand.id!==void 0&&this._parsedCommand.imageNumber!==void 0){this._sendResponse(this._parsedCommand.id,"EINVAL:cannot specify both i and I keys",this._parsedCommand.quiet??0),this._aborted=!0;return}if(this._parsedCommand.action==="d")return;let n=A+1;nthis._encodedSizeLimit){let a=this._activeDecoder??s?.decoder;a&&a.release(),this._activeDecoder=null,s&&this._removePendingEntry(A),this._aborted=!0;return}if(!this._decodeError){if(s?.decoder&&!this._activeDecoder&&(this._activeDecoder=s.decoder),!this._activeDecoder){let a=this._maxEncodedBytes+131072;if(a>this._opts.storageLimit*1e6){this._aborted=!0,this._parsedCommand?.id!==void 0&&this._sendResponse(this._parsedCommand.id,"ENOMEM:pending image budget exceeded",this._parsedCommand.quiet??0);return}let h=Math.max(1,Math.floor(this._opts.storageLimit*1e6/a));for(;this._pendingTransmissions.size>=h;){let d=this._pendingTransmissions.entries().next().value;if(!d)break;d[1].decoder.release(),this._removePendingEntry(d[0]),d[1].cmd.id!==void 0&&this._sendResponse(d[1].cmd.id,"ENOMEM:pending image budget exceeded",d[1].cmd.quiet??0)}let l=new $e.default(4194304,this._maxEncodedBytes,this._initialEncodedBytes);try{l.init()}catch(d){console.warn("KITTY: could not allocate decoder",d),this._aborted=!0,this._parsedCommand?.id!==void 0&&this._sendResponse(this._parsedCommand.id,"ENOMEM:could not allocate decoder",this._parsedCommand.quiet??0);return}this._activeDecoder=l}this._activeDecoder.put(e.subarray(t,i))!==Ve&&(this._activeDecoder.release(),this._activeDecoder=null,this._decodeError=!0,s&&this._removePendingEntry(A))}}end(e){if(this._aborted||!e)return this._activeDecoder&&(this._activeDecoder.release(),this._activeDecoder=null),!0;if(this._inControlData)return this._handleNoPayloadCommand();let t=this._parsedCommand;if(t.action==="d")return this._handleDelete(t);let i=t.id??this._lastPendingKey??0,A=t.more===1,s=this._pendingTransmissions.get(i);if(A)return this._activeDecoder&&(s?(s.totalEncodedSize+=this._totalEncodedSize,s.decodeError=s.decodeError||this._decodeError):this._pendingTransmissions.set(i,{cmd:{...t},decoder:this._activeDecoder,totalEncodedSize:this._totalEncodedSize,decodeError:this._decodeError}),this._lastPendingKey=i,this._activeDecoder=null),!0;s&&(this._lastPendingKey=void 0);let n=this._decodeError,o=t,a=this._activeDecoder;s&&(o=s.cmd,a=s.decoder,n=n||s.decodeError,this._pendingTransmissions.delete(i));let h=new Uint8Array(0);a&&(a.end()!==Ve&&(n=!0),h=a.data8),this._activeDecoder=null;let l=this._handleCommandWithBytesAndCmd(o,h,n);return a&&a.release(),l}_parseControlDataString(){let e="";for(let t=0;t0&&this._sendResponse(e.id,"OK",e.quiet??0)),s}case"T":return this._handleTransmitDisplay(e,t,i);case"q":return this._handleQuery(e,t,i);case"p":return this._handlePlacement(e);default:return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported action",e.quiet??0),!0}}_handlePlacement(e){if(e.id===void 0)return!0;let t=e.id,i=this._kittyStorage.getImage(t);return i?this._displayImage(i,e).then(s=>(this._sendResponse(t,s?"OK":"EINVAL:image rendering failed",e.quiet??0,e.placementId),!0)):(this._sendResponse(t,"ENOENT:image not found",e.quiet??0,e.placementId),!0)}_handleTransmit(e,t,i){return(e.transmission??"d")!=="d"?(e.id!==void 0&&this._sendResponse(e.id,"EINVAL:unsupported transmission medium",e.quiet??0),!0):(i||t.length===0||this._kittyStorage.storeImage(e.id,{data:new Blob([t]),width:e.width??0,height:e.height??0,format:e.format??32,compression:e.compression??""}),!0)}_handleTransmitDisplay(e,t,i){if(i)return e.id!==void 0&&this._sendResponse(e.id,"EINVAL:invalid base64 data",e.quiet??0),!0;this._handleTransmit(e,t,i);let A=e.id??this._kittyStorage.lastImageId,s=this._kittyStorage.getImage(A);if(s){let n=this._displayImage(s,e);return e.id!==void 0?n.then(o=>(this._sendResponse(A,o?"OK":"EINVAL:image rendering failed",e.quiet??0),!0)):n.then(()=>!0)}return!0}_handleQuery(e,t,i){let A=e.id??0,s=e.quiet??0;if((e.transmission??"d")!=="d")return this._sendResponse(A,"EINVAL:unsupported transmission medium",s),!0;if(i)return this._sendResponse(A,"EINVAL:invalid base64 data",s),!0;if(t.length===0)return this._sendResponse(A,"OK",s),!0;let o=e.format??32;if(o===100)this._sendResponse(A,"OK",s);else{let a=e.width??0,h=e.height??0;if(!a||!h)return this._sendResponse(A,"EINVAL:width and height required for raw pixel data",s),!0;let l=o===32?4:3,d=a*h*l;if(t.length=1||!s&&i>=2)return;let n=A?`,p=${A}`:"",o=`\x1B_Gi=${e}${n};${t}\x1B\\`;this._coreTerminal._core.coreService.triggerDataEvent(o)}_displayImage(e,t){return this._decodeAndDisplay(e,t).then(()=>!0).catch(()=>!1)}async _decodeAndDisplay(e,t){let i=this._generation,A=await this._createBitmap(e);try{if(i!==this._generation)throw new Error("image decode canceled");let s=Math.max(0,t.x??0),n=Math.max(0,t.y??0),o=t.sourceWidth||A.width-s,a=t.sourceHeight||A.height-n,h=Math.max(0,A.width-s),l=Math.max(0,A.height-n),d=Math.max(0,Math.min(o,h)),g=Math.max(0,Math.min(a,l));if(d===0||g===0)throw new Error("invalid source rectangle");if(s!==0||n!==0||d!==A.width||g!==A.height){let T=await createImageBitmap(A,s,n,d,g);A.close(),A=T}let I=this._renderer.dimensions?.css.cell.width||b.width,c=this._renderer.dimensions?.css.cell.height||b.height,_,C;t.columns!==void 0&&t.rows!==void 0?(_=t.columns,C=t.rows):t.columns!==void 0?(_=t.columns,C=Math.max(1,Math.ceil(A.height/A.width*(_*I)/c))):t.rows!==void 0?(C=t.rows,_=Math.max(1,Math.ceil(A.width/A.height*(C*c)/I))):(_=Math.ceil(A.width/I),C=Math.ceil(A.height/c));let p=A.width,f=A.height;if((t.columns!==void 0||t.rows!==void 0)&&(p=Math.round(_*I),f=Math.round(C*c)),p*f>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");let E=this._coreTerminal._core.buffer,q=E.x,W=E.y,z=E.ybase,at=t.zIndex!==void 0&&t.zIndex<0?"bottom":"top";if(p!==A.width||f!==A.height){let T=await createImageBitmap(A,{resizeWidth:p,resizeHeight:f});A.close(),A=T}let ue=Math.min(Math.max(0,t.xOffset??0),I-1),me=Math.min(Math.max(0,t.yOffset??0),c-1);if(ue!==0||me!==0){let T=t.columns!==void 0?Math.round(_*I):A.width+ue,lt=t.rows!==void 0?Math.round(C*c):A.height+me,X=D.createCanvas(window.document,T,lt),Ge=X.getContext("2d");if(!Ge)throw new Error("Failed to create offset canvas context");Ge.drawImage(A,ue,me);let dt=await createImageBitmap(X);if(X.width=X.height=0,A.close(),A=dt,p=A.width,f=A.height,p*f>this._opts.pixelLimit)throw new Error("image exceeds pixel limit");t.columns===void 0&&(_=Math.ceil(A.width/I)),t.rows===void 0&&(C=Math.ceil(A.height/c))}if(i!==this._generation)throw new Error("image decode canceled");let ht=t.zIndex??0;if(this._kittyStorage.addImage(e.id,A,!0,at,ht),A=void 0,t.cursorMovement===1){let T=E.ybase-z;E.x=q,E.y=Math.max(W-T,0)}else E.x=Math.min(q+_,this._coreTerminal.cols)}catch(s){throw A?.close(),s}}async _createBitmap(e){let t=new Uint8Array(await e.data.arrayBuffer());if(e.compression==="z"&&(t=await this._decompressZlib(t)),e.format===100){let C=re(t);if(C.mime!=="image/png"||!(C.width>0)||!(C.height>0)||C.width*C.height>this._opts.pixelLimit)throw new RangeError("PNG exceeds pixel limit or has invalid dimensions");let p=new Blob([t],{type:"image/png"});if(!window.createImageBitmap){let f=URL.createObjectURL(p),E=new Image;return new Promise((q,W)=>{E.addEventListener("load",()=>{URL.revokeObjectURL(f);let z=D.createCanvas(window.document,E.width,E.height);z.getContext("2d")?.drawImage(E,0,0),createImageBitmap(z).then(q).catch(W)}),E.addEventListener("error",()=>{URL.revokeObjectURL(f),W(new Error("Failed to load image"))}),E.src=f})}return createImageBitmap(p)}let i=e.width,A=e.height;if(!i||!A)throw new Error("Width and height required for raw pixel data");let s=e.format===32?4:3,n=i*A*s;if(t.length>>24|f<<8,l[I++]=4278190080|f>>>16|E<<16,l[I++]=4278190080|E>>>8}let c=d*3,_=d*4;for(let C=d;C=e.length){d.close();return}let g=Math.min(A+4096,e.length);d.enqueue(new Uint8Array(e.subarray(A,g))),A=g}}).pipeThrough(new DecompressionStream(t)).getReader(),o=[],a=0;try{for(;;){let{done:d,value:g}=await n.read();if(d)break;if(a+=g.byteLength,a>i)throw await n.cancel().catch(()=>{}),new RangeError("decompressed image exceeds byte limit");o.push(g)}}finally{n.releaseLock()}let h=new Uint8Array(a),l=0;for(let d of o)h.set(d,l),l+=d.length;return h}get images(){return this._kittyStorage.images}get _kittyIdToStorageId(){return this._kittyStorage.kittyIdToStorageId}get pendingTransmissions(){return this._pendingTransmissions}};var O=class O{constructor(e){this._storage=e;this._nextImageId=1;this._images=new Map;this._kittyIdToStorageId=new Map;this._storageIdToKittyId=new Map;this._handleStorageImageDeleted=e=>{let t=this._storageIdToKittyId.get(e);t!==void 0&&(this._kittyIdToStorageId.delete(t),this._storageIdToKittyId.delete(e),this._images.delete(t))};this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"iip"};this._previousOnImageDeleted=this._storage.onImageDeleted,this._wrappedOnImageDeleted=t=>{this._previousOnImageDeleted?.(t),this._handleStorageImageDeleted(t)},this._storage.onImageDeleted=this._wrappedOnImageDeleted}reset(){this._nextImageId=1,this._images.clear(),this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}dispose(){this.reset(),this._storage.onImageDeleted===this._wrappedOnImageDeleted&&(this._storage.onImageDeleted=this._previousOnImageDeleted)}storeImage(e,t){let i=e??this._nextImageId++,A=this._kittyIdToStorageId.get(i);A!==void 0&&(this._storage.deleteImage(A),this._kittyIdToStorageId.delete(i),this._storageIdToKittyId.delete(A)),!this._images.has(i)&&this._images.size>=O._maxStoredImages&&this._evictUndisplayedImages();let s=this._storage.getLimit()*1e6;this._images.delete(i);let n=0;for(let o of this._images.values())n+=o.data.size;for(let o of[!1,!0])for(let[a,h]of this._images){if(n+t.data.size<=s)break;this._kittyIdToStorageId.has(a)===o&&(n-=h.data.size,this.deleteById(a))}return this._images.set(i,{...t,id:i}),i}addImage(e,t,i,A,s){let n=this._kittyIdToStorageId.get(e);n!==void 0&&this._storageIdToKittyId.delete(n),this._addImageOpts.scrolling=i,this._addImageOpts.layer=A,this._addImageOpts.zIndex=s;let o=this._storage.addImage(t,this._addImageOpts);this._kittyIdToStorageId.set(e,o),this._storageIdToKittyId.set(o,e)}getImage(e){return this._images.get(e)}deleteById(e){this._images.delete(e);let t=this._kittyIdToStorageId.get(e);t!==void 0&&(this._storage.deleteImage(t),this._kittyIdToStorageId.delete(e),this._storageIdToKittyId.delete(t))}deleteAll(){this._images.clear();for(let e of this._kittyIdToStorageId.values())this._storage.deleteImage(e);this._kittyIdToStorageId.clear(),this._storageIdToKittyId.clear()}get images(){return this._images}get kittyIdToStorageId(){return this._kittyIdToStorageId}get lastImageId(){return this._nextImageId-1}_evictUndisplayedImages(){for(let[e]of this._images){if(this._images.size<=O._maxStoredImages/2)break;this._kittyIdToStorageId.has(e)||this._images.delete(e)}}};O._maxStoredImages=256;var oe=O;var x=L(V());var ge=L(it()),At=L(Fe());var kt=4194304,Y=x.PALETTE_ANSI_256;Y.set(x.PALETTE_VT340_COLOR);var Ht=2,He=new Map,ke=!1;function Gt(r){ke||(ke=!0,(0,ge.DecoderAsync)({memoryLimit:r,palette:Y}).then(e=>rt(e,r),()=>{ke=!1}))}function Ut(r){return He.get(r)?.pop()??new ge.Decoder({memoryLimit:r,palette:Y})}function rt(r,e){r.memoryUsage>kt&&r.release();let t=He.get(e)??[];t.lengththis._opts.sixelSizeLimit){console.warn("SIXEL: too much data, aborting"),this._aborted=!0,this._dec.release();return}try{this._dec.decode(e,t,i)}catch(A){console.warn(`SIXEL: error while decoding image - ${A}`),this._aborted=!0,this._dec.release()}}}unhook(e){try{return this._unhook(e)}finally{this._returnDecoder()}}_unhook(e){if(this._aborted||!e||!this._dec)return!0;let t=this._dec.width,i=this._dec.height;if(!t||!i)return i&&this._storage.advanceCursor(i),!0;let A=D.createCanvas(void 0,t,i);return A.getContext("2d")?.putImageData(new ImageData(this._dec.data8,t,i),0,0),this._storage.addImage(A),!0}};function Ot(r,e){let t=0;if(!e)return t;if(r.isInverse())if(r.isFgDefault())t=le(e.foreground.rgba);else if(r.isFgRGB()){let i=r.constructor.toColorRGB(r.getFgColor());t=(0,x.toRGBA8888)(...i)}else t=le(e.ansi[r.getFgColor()].rgba);else if(r.isBgDefault())t=le(e.background.rgba);else if(r.isBgRGB()){let i=r.constructor.toColorRGB(r.getBgColor());t=(0,x.toRGBA8888)(...i)}else t=le(e.ansi[r.getBgColor()].rgba);return t}function le(r){return x.BIG_ENDIAN?r:(r&255)<<24|(r>>>8&255)<<16|(r>>>16&255)<<8|r>>>24&255}var Ie=class{constructor(e,t,i,A){this._storage=e;this._opts=t;this._renderer=i;this._terminal=A;this._addImageOpts={scrolling:!0,layer:"top",zIndex:0,cursorPos:"vt340"}}addImage(e){this._addImageOpts.scrolling=this._opts.sixelScrolling,this._storage.addImage(e,this._addImageOpts)}advanceCursor(e){if(this._opts.sixelScrolling){let t=this._renderer.cellSize;(t.width===-1||t.height===-1)&&(t=b);let i=Math.ceil(e/t.height);for(let A=1;Athis._onImageAdded.fire(),this._opts.enableSizeReports){let t=e.options.windowOptions??{};t.getWinSizePixels=!0,t.getCellSizePixels=!0,t.getWinSizeChars=!0,e.options.windowOptions=t}if(this._disposeLater(this._renderer,this._storage,e.parser.registerCsiHandler({prefix:"?",final:"h"},t=>this._decset(t)),e.parser.registerCsiHandler({prefix:"?",final:"l"},t=>this._decrst(t)),e.parser.registerCsiHandler({final:"c"},t=>this._da1(t)),e.parser.registerCsiHandler({prefix:"?",final:"S"},t=>this._xtermGraphicsAttributes(t)),e.onRender(t=>this._storage?.render(t)),e.parser.registerCsiHandler({intermediates:"!",final:"p"},()=>this.reset()),e.parser.registerEscHandler({final:"c"},()=>this.reset()),e._core._inputHandler.onRequestReset(()=>this.reset()),e.buffer.onBufferChange(()=>this._storage?.wipeAlternate()),e.onResize(t=>this._storage?.viewportResize(t))),this._opts.sixelSupport){let t=new Ie(this._storage,this._opts,this._renderer,e),i=new de(this._opts,t,e);this._handlers.set("sixel",i),this._disposeLater(e._core._inputHandler._parser.registerDcsHandler({final:"q"},i))}if(this._opts.iipSupport){let t=new ce(this._storage),i=new se(this._opts,this._renderer,t,e);this._handlers.set("iip",i),this._disposeLater(e._core._inputHandler._parser.registerOscHandler(1337,i))}if(this._opts.kittySupport){let t=new oe(this._storage),i=new ne(this._opts,this._renderer,t,e);this._handlers.set("kitty",i),this._disposeLater(t,i,e._core._inputHandler._parser.registerApcHandler({final:"G"},i))}}reset(){this._opts.sixelScrolling=this._defaultOpts.sixelScrolling,this._opts.sixelPaletteLimit=this._defaultOpts.sixelPaletteLimit,this._storage?.reset();for(let e of this._handlers.values())e.reset();return!1}get storageLimit(){return this._storage?.getLimit()||-1}set storageLimit(e){this._storage?.setLimit(e),this._opts.storageLimit=e}get storageUsage(){return this._storage?this._storage.getUsage():-1}get showPlaceholder(){return this._opts.showPlaceholder}set showPlaceholder(e){this._opts.showPlaceholder=e,this._renderer?.showPlaceholder(e)}getImageAtBufferCell(e,t){return this._storage?.getImageAtBufferCell(e,t)}extractTileAtBufferCell(e,t){return this._storage?.extractTileAtBufferCell(e,t)}_report(e){this._terminal?._core.input(e,!1)}_decset(e){for(let t=0;t2&&!(e[2]instanceof Array)&&e[2]<=nt?(this._opts.sixelPaletteLimit=e[2],this._report(`\x1B[?${e[0]};0;${this._opts.sixelPaletteLimit}S`)):this._report(`\x1B[?${e[0]};2S`),!0;case 4:return this._report(`\x1B[?${e[0]};0;${nt}S`),!0;default:return this._report(`\x1B[?${e[0]};2S`),!0}if(e[0]===2)switch(e[1]){case 1:let t=this._renderer?.dimensions?.css.canvas.width,i=this._renderer?.dimensions?.css.canvas.height;if(!t||!i){let s=b;t=(this._terminal?.cols||80)*s.width,i=(this._terminal?.rows||24)*s.height}if(t*i {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map", null, null, "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat \u2014 points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const finalWidth = width + sx > img.width ? img.width - sx : width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document,\n Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n );\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport type {\n ITerminalExt, IImageAddonOptions, IImageSpec, ICellSize, IAddImageOpts\n} from './Types';\nimport type { IBufferLine } from 'common/buffer/Types';\nimport { CellData } from 'common/buffer/CellData';\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\nclass ImageTileInfo {\n constructor(\n public imageId = -1,\n public tileId = -1) {\n }\n}\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n private _workCell: CellData = new CellData();\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase)!;\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp);\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n const e = line.getExtended(col)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (++col < cols) {\n const nextE = line.getExtended(col)?.payload;\n if (!(nextE instanceof ImageTileInfo) || nextE.imageId !== imageId || nextE.tileId !== startTile + count) {\n break;\n }\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row)!;\n const e = line.getExtended(oldCol)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line.hasContent(rightCol)) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLine, x: number, imageId: number, tileId: number): void {\n const workCell = this._workCell;\n line.loadCell(x, workCell);\n if (this._workCell.hasExtendedAttrs()) {\n const old = workCell.extended.payload;\n if (old instanceof ImageTileInfo) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n }\n // fall-through: always create new ExtendedAttrs entry\n const extattr = workCell.extended.clone();\n extattr.payload = new ImageTileInfo(imageId, tileId);\n workCell.extended = extattr;\n workCell.updateExtended();\n line.setCell(x, workCell);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y);\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n const payload = line.getExtended(x)?.payload;\n if (payload instanceof ImageTileInfo) {\n const spec = this._images.get(payload.imageId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Limit held memory in base64 decoder (encoded bytes).\n KEEP_DATA = 4194304,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n this._dec.init();\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n this._dec.init();\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n const data = this._qoiDec.decode(this._dec.data8);\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded \u2192 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n this._activeDecoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n this._activeDecoder.init();\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received \u2014 clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first \u2014 handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload \u2014 image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) \u2014 ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency \u2014\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw \u00D7 r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly \u2014 no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB\u2192RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes \u2014 ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] \u2192 uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1\u20133 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch {\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const ds = new DecompressionStream(format);\n const writer = ds.writable.getWriter();\n writer.write(compressed as BufferSource);\n writer.close();\n\n const chunks: Uint8Array[] = [];\n const reader = ds.readable.getReader();\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) \u2014 only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair \u2014 same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId \u2192 placementId \u2192 storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n DecoderAsync({\n memoryLimit: this._opts.pixelLimit * 4,\n palette: DEFAULT_PALETTE,\n paletteLimit: this._opts.sixelPaletteLimit\n }).then(d => this._dec = d);\n }\n\n public reset(): void {\n /**\n * reset sixel decoder to defaults:\n * - release all memory\n * - nullify palette (4096)\n * - apply default palette (256)\n */\n if (this._dec) {\n this._dec.release();\n // FIXME: missing interface on decoder to nullify full palette\n (this._dec as any)._palette.fill(0);\n this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n }\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n if (this._dec) {\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n this._dec.release();\n }\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode \u2014 cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 \u00A74 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"], +- "mappings": ";;;;;;;;;;;;;;;;02BAYaA,EAAA,WAAa,IAAI,WAAW,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,IAClFA,EAAA,YACF,QAAQ,KAAK,6EAA6E,EAI5F,SAAgBC,GAAIC,EAAW,CAC7B,OAAOA,EAAI,GACb,CAFAF,EAAA,IAAAC,GAIA,SAAgBE,GAAMD,EAAW,CAC/B,OAAQA,IAAM,EAAK,GACrB,CAFAF,EAAA,MAAAG,GAIA,SAAgBC,GAAKF,EAAW,CAC9B,OAAQA,IAAM,GAAM,GACtB,CAFAF,EAAA,KAAAI,GAIA,SAAgBC,GAAMH,EAAW,CAC/B,OAAQA,IAAM,GAAM,GACtB,CAFAF,EAAA,MAAAK,GAQA,SAAgBC,EAAWC,EAAWC,EAAWC,EAAWC,EAAY,IAAG,CACzE,QAASA,EAAI,MAAS,IAAMD,EAAI,MAAS,IAAMD,EAAI,MAAS,EAAKD,EAAI,OAAW,CAClF,CAFAP,EAAA,WAAAM,EAQA,SAAgBK,GAAaC,EAAe,CAC1C,MAAO,CAACA,EAAQ,IAAOA,GAAS,EAAK,IAAOA,GAAS,GAAM,IAAMA,IAAU,EAAE,CAC/E,CAFAZ,EAAA,aAAAW,GASA,SAAgBE,GAAkBD,EAAiBE,EAAmB,CACpE,IAAMP,EAAIN,GAAIW,CAAK,EACbJ,EAAIL,GAAMS,CAAK,EACfH,EAAIL,GAAKQ,CAAK,EAEhBG,EAAM,OAAO,iBACbC,EAAM,GAGV,QAASC,EAAI,EAAGA,EAAIH,EAAQ,OAAQ,EAAEG,EAAG,CACvC,IAAMC,EAAKX,EAAIO,EAAQG,CAAC,EAAE,CAAC,EACrBE,EAAKX,EAAIM,EAAQG,CAAC,EAAE,CAAC,EACrBG,EAAKX,EAAIK,EAAQG,CAAC,EAAE,CAAC,EACrBI,EAAIH,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EACnC,GAAI,CAACC,EAAG,OAAOJ,EACXI,EAAIN,IACNA,EAAMM,EACNL,EAAMC,GAIV,OAAOD,CACT,CAtBAhB,EAAA,kBAAAa,GA4BA,SAASS,GAAMC,EAAaC,EAAcC,EAAa,CACrD,OAAO,KAAK,IAAIF,EAAK,KAAK,IAAIE,EAAOD,CAAI,CAAC,CAC5C,CAEA,SAASE,GAAIC,EAAYC,EAAYC,EAAS,CAC5C,OAAIA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACTA,EAAI,EAAI,EACXD,GAAMD,EAAKC,GAAM,EAAIC,EACrBA,EAAI,EAAI,EACNF,EACAE,EAAI,EAAI,EACND,GAAMD,EAAKC,IAAO,EAAIC,EAAI,GAC1BD,CACV,CAEA,SAASE,GAASC,EAAWC,EAAWC,EAAS,CAC/C,GAAI,CAACA,EAAG,CACN,IAAMC,EAAI,KAAK,MAAMF,EAAI,GAAG,EAC5B,OAAO1B,EAAW4B,EAAGA,EAAGA,CAAC,EAE3B,IAAMP,EAAKK,EAAI,GAAMA,GAAK,EAAIC,GAAKD,EAAIC,EAAID,EAAIC,EACzCL,EAAK,EAAII,EAAIL,EACnB,OAAOrB,EACLgB,GAAM,EAAG,IAAK,KAAK,MAAMI,GAAIC,EAAIC,EAAIG,EAAI,EAAI,CAAC,EAAI,GAAG,CAAC,EACtDT,GAAM,EAAG,IAAK,KAAK,MAAMI,GAAIC,EAAIC,EAAIG,CAAC,EAAI,GAAG,CAAC,EAC9CT,GAAM,EAAG,IAAK,KAAK,MAAMI,GAAIC,EAAIC,EAAIG,EAAI,EAAI,CAAC,EAAI,GAAG,CAAC,CAAC,CAE3D,CAKA,SAAgBI,EAAa5B,EAAWC,EAAWC,EAAS,CAC1D,OAAQ,WAAa,KAAK,MAAMA,EAAI,IAAM,GAAG,GAAK,GAAK,KAAK,MAAMD,EAAI,IAAM,GAAG,GAAK,EAAI,KAAK,MAAMD,EAAI,IAAM,GAAG,KAAO,CACzH,CAFAP,EAAA,aAAAmC,EAQA,SAAgBC,GAAaL,EAAWC,EAAWC,EAAS,CAE1D,OAAOH,IAAUC,EAAI,IAAM,KAAO,IAAKC,EAAI,IAAKC,EAAI,GAAG,CACzD,CAHAjC,EAAA,aAAAoC,GAqCapC,EAAA,oBAAsB,IAAI,YAAY,CACjDmC,EAAc,EAAI,EAAI,CAAC,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACxB,EA0BYnC,EAAA,mBAAqB,IAAI,YAAY,CAChDmC,EAAc,EAAI,EAAI,CAAC,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAc,EAAI,EAAI,CAAC,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAc,EAAI,EAAI,CAAC,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAc,EAAI,EAAI,CAAC,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACvBA,EAAa,GAAI,GAAI,EAAE,EACxB,EAOYnC,EAAA,kBAAoB,IAAK,CAEpC,IAAMqC,EAAgB,CACpB/B,EAAW,EAAG,EAAG,CAAC,EAClBA,EAAW,IAAK,EAAG,CAAC,EACpBA,EAAW,EAAG,IAAK,CAAC,EACpBA,EAAW,IAAK,IAAK,CAAC,EACtBA,EAAW,EAAG,EAAG,GAAG,EACpBA,EAAW,IAAK,EAAG,GAAG,EACtBA,EAAW,EAAG,IAAK,GAAG,EACtBA,EAAW,IAAK,IAAK,GAAG,EACxBA,EAAW,IAAK,IAAK,GAAG,EACxBA,EAAW,IAAK,EAAG,CAAC,EACpBA,EAAW,EAAG,IAAK,CAAC,EACpBA,EAAW,IAAK,IAAK,CAAC,EACtBA,EAAW,GAAI,GAAI,GAAG,EACtBA,EAAW,IAAK,EAAG,GAAG,EACtBA,EAAW,EAAG,IAAK,GAAG,EACtBA,EAAW,IAAK,IAAK,GAAG,GAGpBe,EAAI,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,GAAG,EACpC,QAASd,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB,QAASC,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB,QAASC,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB4B,EAAE,KAAK/B,EAAWe,EAAEd,CAAC,EAAGc,EAAEb,CAAC,EAAGa,EAAEZ,CAAC,CAAC,CAAC,EAKzC,QAASyB,EAAI,EAAGA,GAAK,IAAKA,GAAK,GAC7BG,EAAE,KAAK/B,EAAW4B,EAAGA,EAAGA,CAAC,CAAC,EAE5B,OAAO,IAAI,YAAYG,CAAC,CAC1B,GAAE,EASWrC,EAAA,mBAA+BM,EAAW,EAAG,EAAG,EAAG,GAAG,EACtDN,EAAA,mBAA+BM,EAAW,IAAK,IAAK,IAAK,GAAG,IChRzE,IAAAgC,GAAAC,EAAAC,IAAA,cAKA,OAAO,eAAeA,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,OAASC,GACjB,IAAIC,EAAK,GAAM,CACX,GAAI,WAAW,WACX,OAAO,WAAW,WAAW,CAAC,EAClC,GAAI,OAAO,OAAW,IAClB,OAAO,OAAO,KAAK,EAAG,QAAQ,EAClC,IAAMC,EAAI,KAAK,CAAC,EACVC,EAAI,IAAI,WAAWD,EAAE,MAAM,EACjC,QAAS,EAAI,EAAG,EAAIC,EAAE,OAAQ,EAAE,EAC5BA,EAAE,CAAC,EAAID,EAAE,WAAW,CAAC,EACzB,OAAOC,CACX,EACA,SAASH,GAAOI,EAAK,CACjB,GAAIA,EAAI,EAAG,CACP,GAAM,CAAE,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAE,EAAIH,EAChBF,EACAM,EACEC,EAAI,YACV,OAAIJ,IAAM,EACFC,EACQI,GAAM,IAAID,EAAE,SAASD,IAAMA,EAAI,IAAIC,EAAE,OAAOP,IAAMA,EAAID,EAAEM,CAAC,EAAE,GAAIG,CAAC,EACpEA,GAAMF,EACRC,EAAE,YAAYD,EAAGE,CAAC,EAClBD,EAAE,YAAYP,IAAMA,EAAID,EAAEM,CAAC,GAAIG,CAAC,EAAE,KAAKP,IAAMK,EAAIL,EAAE,SAAWA,EAAE,QAAQ,EAE9EE,IAAM,EACFC,EACO,IAAME,IAAMA,EAAI,IAAIC,EAAE,OAAOP,IAAMA,EAAID,EAAEM,CAAC,EAAE,GAChD,IAAMC,EACP,QAAQ,QAAQA,CAAC,EACjBC,EAAE,QAAQP,IAAMA,EAAID,EAAEM,CAAC,EAAE,EAAE,KAAKJ,GAAKK,EAAIL,CAAC,EAEhDG,EACO,IAAMJ,IAAMA,EAAID,EAAEM,CAAC,GACvB,IAAM,QAAQ,QAAQL,IAAMA,EAAID,EAAEM,CAAC,EAAE,CAChD,CACA,GAAI,OAAO,SAAa,IACpB,MAAM,IAAI,MAAM,mBAAmB,EACvC,SAAS,IAAIH,CAAG,CACpB,IC7CA,IAAAO,GAAAC,EAAAC,IAAA,cACA,OAAO,eAAeA,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAK5D,IAAMC,GAAmB,KAInBC,MAAiBD,GAAiB,QAAuD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,0lCAA0lC,CAA8C,EAuJ5uCE,EAAM,IAAI,WAAW,mEACtB,MAAM,EAAE,EACR,IAAIC,GAAMA,EAAG,WAAW,CAAC,CAAC,CAAC,EAE1BC,EAAI,IAAI,YAAY,IAAI,EAC9BA,EAAE,KAAK,UAAU,EACjB,QAASC,EAAI,EAAGA,EAAIH,EAAI,OAAQ,EAAEG,EAC9BD,EAAEF,EAAIG,CAAC,CAAC,EAAIA,GAAK,EACrB,QAASA,EAAI,EAAGA,EAAIH,EAAI,OAAQ,EAAEG,EAC9BD,EAAE,IAAMF,EAAIG,CAAC,CAAC,EAAIA,GAAK,GAAMA,GAAK,EAAK,MAAS,EACpD,QAASA,EAAI,EAAGA,EAAIH,EAAI,OAAQ,EAAEG,EAC9BD,EAAE,IAAMF,EAAIG,CAAC,CAAC,EAAKA,GAAK,GAAM,GAAMA,GAAK,EAAK,MAAS,GAC3D,QAASA,EAAI,EAAGA,EAAIH,EAAI,OAAQ,EAAEG,EAC9BD,EAAE,IAAMF,EAAIG,CAAC,CAAC,EAAIA,GAAK,GAC3B,IAAMC,GAAQ,IAAI,WAAW,CAAC,EAWxBC,GAAN,KAAoB,CAMhB,YAAYC,EAAUC,EAAUC,EAAc,CAO1C,GANA,KAAK,MAAQ,KACb,KAAK,OAAS,GACd,KAAK,OAAS,EACd,KAAK,SAAWF,GAAsD,QACtE,KAAK,SAAWC,GAAsD,WACtE,KAAK,OAASC,GAAkE,MAC5E,KAAK,OAAS,KAAK,UAAY,KAAK,SAAW,WAC/C,MAAM,IAAI,MAAM,uBAAuB,CAE/C,CAKA,IAAI,OAAQ,CACR,OAAO,KAAK,MAAQ,KAAK,GAAG,SAAS,EAAG,KAAK,KAAK,IAAuB,CAAC,EAAIJ,EAClF,CAMA,SAAU,CACD,KAAK,QAEN,KAAK,OAAS,KAAK,SACnB,KAAK,MAAQ,KAAK,KAAO,KAAK,GAAK,KAAK,KAAO,MAG/C,KAAK,KAAK,IAAuB,EAAI,EACrC,KAAK,KAAK,IAAuB,EAAI,EACrC,KAAK,KAAK,IAAuB,EAAI,GAE7C,CASA,KAAKG,EAAUC,EAAc,CAGzB,GAFA,KAAK,SAAWD,GAAsD,KAAK,SAC3E,KAAK,OAASC,GAAkE,KAAK,IAAI,KAAK,OAAQ,KAAK,QAAQ,EAC/G,KAAK,OAAS,KAAK,UAAY,KAAK,SAAW,WAC/C,MAAM,MAAM,uBAAuB,EAEvC,IAAIC,EAAI,KAAK,KACPC,EAAQ,KAAK,OAAS,KACvB,KAAK,MAOD,KAAK,KAAK,OAAO,WAAaA,IACnC,KAAK,KAAK,KAAK,KAAK,MAAMA,EAAQ,KAAK,KAAK,OAAO,YAAc,KAAK,CAAC,EACvED,EAAI,IAAI,YAAY,KAAK,KAAK,OAAQ,CAAC,EACvC,KAAK,GAAK,IAAI,WAAW,KAAK,KAAK,OAAQ,IAA6B,IATxE,KAAK,KAAO,IAAI,YAAY,OAAO,CAAE,QAAS,KAAK,KAAKC,EAAQ,KAAK,CAAE,CAAC,EACxE,KAAK,MAAQX,GAAW,CAAE,IAAK,CAAE,OAAQ,KAAK,IAAK,CAAE,CAAC,EACtDU,EAAI,IAAI,YAAY,KAAK,KAAK,OAAQ,CAAC,EACvCA,EAAE,IAAIP,EAAG,GAAgB,EACzB,KAAK,GAAK,IAAI,WAAW,KAAK,KAAK,OAAQ,IAA6B,GAO5EO,EAAE,IAAuB,EAAI,EAC7BA,EAAE,IAAuB,EAAI,EAC7BA,EAAE,IAAuB,EAAI,EAC7B,KAAK,KAAOA,EACZ,KAAK,OAAS,EAClB,CAOA,SAASE,EAAW,CAChB,IAAMC,EAAS,KAAK,KAAK,IAAuB,EAAID,EACpD,GAAI,KAAK,OAASC,EAAQ,CACtB,GAAIA,EAAS,KAAK,SACd,MAAO,GAEX,IAAIC,EAAU,KAAK,OACnB,MAAQA,GAAW,GAAKD,GAAQ,CAEhC,GADAC,EAAU,KAAK,IAAIA,EAAS,KAAK,QAAQ,EACrCA,EAAUD,EACV,MAAO,GAEX,GAAIC,EAAU,KAAgC,KAAK,KAAK,OAAO,WAAY,CACvE,IAAMC,EAAW,KAAK,MAAMD,EAAU,KAAgC,KAAK,KAAK,OAAO,YAAc,KAAK,EAC1G,KAAK,KAAK,KAAKC,CAAQ,EACvB,KAAK,KAAO,IAAI,YAAY,KAAK,KAAK,OAAQ,CAAC,EAC/C,KAAK,GAAK,IAAI,WAAW,KAAK,KAAK,OAAQ,IAA6B,CAC5E,CACA,KAAK,OAASD,CAClB,CACA,MAAO,EACX,CAOA,IAAIE,EAAM,CACN,GAAI,CAAC,KAAK,OAAS,KAAK,OACpB,MAAO,GAEX,GAAI,KAAK,SAASA,EAAK,MAAM,EACzB,MAAO,GAEX,IAAMN,EAAI,KAAK,KACf,YAAK,GAAG,IAAIM,EAAMN,EAAE,IAAuB,CAAC,EAC5CA,EAAE,IAAuB,GAAKM,EAAK,OAE5BN,EAAE,IAAuB,EAAIA,EAAE,IAAuB,GAAK,OAC5D,KAAK,MAAM,QAAQ,IAAI,EACvB,CACV,CAKA,KAAM,CACF,YAAK,OAAS,GACP,KAAK,MACN,KAAK,MAAM,QAAQ,IAAI,EACvB,EACV,CAIA,IAAI,aAAc,CACd,OAAO,KAAK,MACN,KAAK,KAAK,IAAuB,EACjC,CACV,CAIA,IAAI,WAAY,CACZ,OAAO,KAAK,MACN,KAAK,SAAW,KAAK,KAAK,IAAuB,EACjD,CACV,CACJ,EACAZ,GAAQ,QAAUQ,KCjVlB,IAAAW,GAAAC,EAAAC,IAAA,cACA,OAAO,eAAeA,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAK5D,IAAMC,GAAmB,KACnBC,MAAoBD,GAAiB,QAA2D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,84BAA84B,CAAkD,EAC3iCE,GAAN,KAAiB,CACb,YAAYC,EAAU,CAClB,KAAK,SAAWA,EAChB,KAAK,MAAQ,EACb,KAAK,OAAS,CAClB,CACA,OAAOC,EAAG,CACN,KAAK,MAAQA,EAAE,CAAC,GAAK,GAAKA,EAAE,CAAC,GAAK,GAAKA,EAAE,CAAC,GAAK,EAAIA,EAAE,CAAC,EACtD,KAAK,OAASA,EAAE,CAAC,GAAK,GAAKA,EAAE,CAAC,GAAK,GAAKA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,EACzD,IAAMC,EAAS,KAAK,MAAQ,KAAK,OAC3BC,EAAKD,EAAS,EACdE,EAAKH,EAAE,OAwBPI,EAAQ,KAAK,IAAIF,EAAIC,CAAE,GAAK,KAAK,IAAID,EAAIC,CAAE,GAAK,GAAK,KACtD,KAAK,MAID,KAAK,KAAK,OAAO,WAAaC,IACnC,KAAK,KAAK,KAAK,KAAK,MAAMA,EAAQ,KAAK,KAAK,OAAO,YAAc,KAAK,CAAC,EACvE,KAAK,GAAK,OALV,KAAK,KAAO,IAAI,YAAY,OAAO,CAAE,QAAS,KAAK,KAAKA,EAAQ,KAAK,CAAE,CAAC,EACxE,KAAK,MAAQP,GAAc,CAAE,IAAK,CAAE,OAAQ,KAAK,IAAK,CAAE,CAAC,GAMxD,KAAK,KACN,KAAK,GAAK,IAAI,WAAW,KAAK,KAAK,MAAM,GAG7C,IAAMQ,EAAU,KAAK,KAAK,OAAO,WAAaF,EAAM,KACpD,YAAK,GAAG,IAAIH,EAAGK,CAAM,EACrB,KAAK,MAAM,QAAQ,IAAIA,EAAQF,EAAIF,CAAM,EAClC,KAAK,GAAG,SAAS,KAAqB,KAAsBC,CAAE,CACzE,CACA,SAAU,CACD,KAAK,OAEN,KAAK,KAAK,OAAO,WAAa,KAAK,WACnC,KAAK,MAAQ,KAAK,GAAK,KAAK,KAAO,KAE3C,CACJ,EACAP,GAAQ,QAAUG,mGCpELQ,GAAA,OAAS,CACpB,WAAY,MACZ,aAAc,KACd,UAAW,MACX,MAAO,wtdCCT,IAAAC,EAAA,IACAC,EAAA,KAIA,SAASC,GAAa,EAAS,CAC7B,GAAI,OAAO,OAAW,IACpB,OAAO,OAAO,KAAK,EAAG,QAAQ,EAEhC,IAAMC,EAAa,KAAK,CAAC,EACnBC,EAAS,IAAI,WAAWD,EAAW,MAAM,EAC/C,QAAS,EAAI,EAAG,EAAIC,EAAO,OAAQ,EAAE,EACnCA,EAAO,CAAC,EAAID,EAAW,WAAW,CAAC,EAErC,OAAOC,CACT,CAEA,IAAMC,GAAaH,GAAaD,EAAA,OAAO,KAAK,EACxCK,EAGEC,GAAc,IAAI,YAIlBC,GAAN,KAAmB,CAAnB,aAAA,CACS,KAAA,YAAeC,GAAkB,EACjC,KAAA,YAAeC,GAAoB,CAO5C,CANS,YAAYD,EAAa,CAC9B,OAAO,KAAK,YAAYA,CAAK,CAC/B,CACO,YAAYC,EAAY,CAC7B,OAAO,KAAK,YAAYA,CAAI,CAC9B,GAKIC,GAA2C,CAC/C,YAAa,KAAO,MACpB,WAAYX,EAAA,mBACZ,UAAWA,EAAA,mBACX,QAASA,EAAA,oBACT,aAAcC,EAAA,OAAO,aACrB,SAAU,IAQZ,SAAgBW,GAAaC,EAAsB,CACjD,IAAMC,EAAU,IAAIN,GACdO,EAAY,CAChB,IAAK,CACH,YAAaD,EAAQ,YAAY,KAAKA,CAAO,EAC7C,YAAaA,EAAQ,YAAY,KAAKA,CAAO,IAGjD,OAAO,YAAY,YAAYR,GAAeD,GAAYU,CAAS,EAChE,KAAMC,IACLV,EAAcA,GAAeU,EAAK,OAC3B,IAAIC,EAAQJ,EAAMG,EAAK,UAAYA,EAAMF,CAAO,EACxD,CACL,CAbAI,EAAA,aAAAN,GAgDA,IAAaK,EAAb,KAAoB,CAwGlB,YACEJ,EACAM,EACAC,EAAwB,CAGxB,GAvGM,KAAA,cAAgBnB,EAAA,OAAO,UAAY,EAEnC,KAAA,QAAuBM,GACvB,KAAA,YAAwB,CAAA,EACxB,KAAA,UAAY,EACZ,KAAA,UAAYN,EAAA,OAAO,UACnB,KAAA,YAAc,EACd,KAAA,eAAiB,EA+FvB,KAAK,MAAQ,OAAO,OAAO,CAAA,EAAIU,GAAiBE,CAAI,EAChD,KAAK,MAAM,aAAeZ,EAAA,OAAO,aACnC,MAAM,IAAI,MAAM,+CAA+CA,EAAA,OAAO,YAAY,EAAE,EAEtF,GAAKkB,EASHC,EAAU,YAAc,KAAK,aAAa,KAAK,IAAI,EACnDA,EAAU,YAAc,KAAK,YAAY,KAAK,IAAI,MAVpC,CACd,IAAMC,EAASf,IAAgBA,EAAc,IAAI,YAAY,OAAOD,EAAU,GAC9Ec,EAAY,IAAI,YAAY,SAASE,EAAQ,CAC3C,IAAK,CACH,YAAa,KAAK,aAAa,KAAK,IAAI,EACxC,YAAa,KAAK,YAAY,KAAK,IAAI,GAE1C,EAKH,KAAK,UAAYF,EACjB,KAAK,MAAQ,KAAK,UAAU,QAC5B,KAAK,OAAS,IAAI,WAAW,KAAK,MAAM,OAAO,OAAQ,KAAK,MAAM,kBAAiB,EAAIlB,EAAA,OAAO,UAAU,EACxG,KAAK,QAAU,IAAI,YAAY,KAAK,MAAM,OAAO,OAAQ,KAAK,MAAM,kBAAiB,EAAI,EAAE,EAC3F,KAAK,SAAW,IAAI,YAAY,KAAK,MAAM,OAAO,OAAQ,KAAK,MAAM,oBAAmB,EAAIA,EAAA,OAAO,YAAY,EAC/G,KAAK,SAAS,IAAI,KAAK,MAAM,OAAO,EACpC,KAAK,MAAQ,IAAI,YAAY,KAAK,MAAM,OAAO,OAAQ,KAAK,MAAM,eAAc,CAAE,EAClF,KAAK,MAAM,KAAKD,EAAA,mBAAoB,EAAG,KAAK,MAAM,aAAc,CAAC,CACnE,CApHA,IAAY,YAAU,CAAe,OAAO,KAAK,QAAQ,CAAC,CAAG,CAC7D,IAAY,WAAS,CAAa,OAAO,KAAK,QAAQ,CAAC,CAAG,CAC1D,IAAY,cAAY,CAAa,OAAO,KAAK,QAAQ,CAAC,CAAG,CAC7D,IAAY,eAAa,CAAa,OAAO,KAAK,QAAQ,CAAC,CAAG,CAC9D,IAAY,QAAM,CAAa,OAAO,KAAK,QAAQ,CAAC,EAAI,KAAK,QAAQ,CAAC,EAAI,EAAI,CAAG,CACjF,IAAY,SAAO,CAAa,OAAO,KAAK,QAAQ,CAAC,CAAG,CACxD,IAAY,QAAM,CAAa,OAAO,KAAK,QAAQ,CAAC,CAAG,CACvD,IAAY,OAAK,CAAgB,OAAO,KAAK,QAAQ,EAAE,CAAG,CAC1D,IAAY,eAAa,CAAa,OAAO,KAAK,QAAQ,EAAE,CAAG,CAEvD,YAAYU,EAAe,CACjC,GAAIA,IAAI,EAAmB,CACzB,IAAMY,EAAS,KAAK,MAAQ,KAAK,OACjC,GAAIA,EAAS,KAAK,QAAQ,OAAQ,CAChC,GAAI,KAAK,MAAM,aAAeA,EAAS,EAAI,KAAK,MAAM,YACpD,WAAK,QAAO,EACN,IAAI,MAAM,4BAA4B,EAE9C,KAAK,QAAU,IAAI,YAAYA,CAAM,EAEvC,KAAK,UAAY,KAAK,eACbZ,IAAI,EACb,GAAI,KAAK,SAAW,EAAG,CAErB,IAAMY,EAAS,KAAK,IAAI,KAAK,aAAcrB,EAAA,OAAO,SAAS,EAAI,KAAK,cACpE,GAAIqB,EAAS,KAAK,QAAQ,OAAQ,CAChC,GAAI,KAAK,MAAM,aAAeA,EAAS,EAAI,KAAK,MAAM,YACpD,WAAK,QAAO,EACN,IAAI,MAAM,4BAA4B,EAE9C,KAAK,QAAU,IAAI,YAAYA,CAAM,QAInC,KAAK,QAAQ,OAAS,QACxB,KAAK,QAAU,IAAI,YAAY,KAAK,GAI1C,MAAO,EACT,CAEQ,SAASC,EAAgBC,EAAwB,CACvD,IAAMF,EAASC,EAASC,EACxB,GAAIF,EAAS,KAAK,QAAQ,OAAQ,CAChC,GAAI,KAAK,MAAM,aAAeA,EAAS,EAAI,KAAK,MAAM,YACpD,WAAK,QAAO,EACN,IAAI,MAAM,4BAA4B,EAG9C,IAAMG,EAAY,IAAI,YAAY,KAAK,KAAKH,EAAS,KAAK,EAAI,KAAK,EACnEG,EAAU,IAAI,KAAK,OAAO,EAC1B,KAAK,QAAUA,EAEnB,CAEQ,aAAahB,EAAa,CAChC,IAAMiB,EAAM,KAAK,cACbH,EAAS,KAAK,YAClB,GAAI,KAAK,QAAK,EAAmB,CAC/B,IAAII,EAAY,KAAK,OAAS,KAAK,eAC/BC,EAAI,EACR,KAAOA,EAAI,GAAKD,EAAY,GAC1B,KAAK,QAAQ,IAAI,KAAK,MAAM,SAASD,EAAME,EAAGF,EAAME,EAAInB,CAAK,EAAGc,EAASd,EAAQmB,CAAC,EAClFA,IACAD,IAEF,KAAK,aAAelB,EAAQmB,EAC5B,KAAK,gBAAkBA,UACd,KAAK,QAAK,EAAmB,CACtC,KAAK,SAASL,EAAQd,EAAQ,CAAC,EAC/B,KAAK,UAAY,KAAK,IAAI,KAAK,UAAWA,CAAK,EAC/C,KAAK,UAAY,KAAK,IAAI,KAAK,UAAWA,CAAK,EAC/C,QAASoB,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB,KAAK,QAAQ,IAAI,KAAK,MAAM,SAASH,EAAMG,EAAGH,EAAMG,EAAIpB,CAAK,EAAGc,EAASd,EAAQoB,CAAC,EAEpF,KAAK,YAAY,KAAKpB,CAAK,EAC3B,KAAK,aAAeA,EAAQ,EAC5B,KAAK,gBAAkB,EAEzB,MAAO,EACT,CA0CA,IAAW,OAAK,CACd,OAAO,KAAK,QAAK,EACb,KAAK,OACL,KAAK,IAAI,KAAK,UAAW,KAAK,MAAM,cAAa,CAAE,CACzD,CAOA,IAAW,QAAM,CACf,OAAO,KAAK,QAAK,EACb,KAAK,QACL,KAAK,MAAM,cAAa,EACtB,KAAK,YAAY,OAAS,EAAI,KAAK,MAAM,eAAc,EACvD,KAAK,YAAY,OAAS,CAClC,CAKA,IAAW,SAAO,CAChB,OAAO,KAAK,SAAS,SAAS,EAAG,KAAK,aAAa,CACrD,CAWA,IAAW,aAAW,CACpB,OAAO,KAAK,QAAQ,WAAa,KAAK,MAAM,OAAO,OAAO,WAAa,EAAI,KAAK,YAAY,MAC9F,CAKA,IAAW,YAAU,CACnB,MAAO,CACL,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,KAAM,KAAK,MACX,MAAO,KAAK,OACZ,SAAU,CAAC,CAAC,KAAK,UACjB,aAAc,KAAK,cACnB,UAAW,KAAK,WAChB,SAAU,KAAK,YACf,iBAAkB,CAChB,UAAW,KAAK,QAAQ,CAAC,EACzB,YAAa,KAAK,QAAQ,CAAC,EAC3B,MAAO,KAAK,aACZ,OAAQ,KAAK,eAGnB,CAOO,KACLqB,EAAsB,KAAK,MAAM,UACjCC,EAA8B,KAAK,MAAM,QACzCC,EAAuB,KAAK,MAAM,aAClCC,EAAoB,KAAK,MAAM,SAAQ,CAEvC,KAAK,MAAM,KAAK,KAAK,MAAM,WAAYH,EAAWE,EAAcC,EAAW,EAAI,CAAC,EAC5EF,GACF,KAAK,SAAS,IAAIA,EAAQ,SAAS,EAAG9B,EAAA,OAAO,YAAY,CAAC,EAE5D,KAAK,YAAY,OAAS,EAC1B,KAAK,UAAY,EACjB,KAAK,UAAYA,EAAA,OAAO,UACxB,KAAK,YAAc,EACnB,KAAK,eAAiB,CACxB,CAMO,OAAOiC,EAAsBC,EAAgB,EAAGC,EAAcF,EAAK,OAAM,CAC9E,IAAIG,EAAIF,EACR,KAAOE,EAAID,GAAK,CACd,IAAME,EAAS,KAAK,IAAIF,EAAMC,EAAGpC,EAAA,OAAO,UAAU,EAClD,KAAK,OAAO,IAAIiC,EAAK,SAASG,EAAGA,GAAKC,CAAM,CAAC,EAC7C,KAAK,MAAM,OAAO,EAAGA,CAAM,EAE/B,CAOO,aAAaJ,EAAcC,EAAgB,EAAGC,EAAcF,EAAK,OAAM,CAC5E,IAAIG,EAAIF,EACR,KAAOE,EAAID,GAAK,CACd,IAAME,EAAS,KAAK,IAAIF,EAAMC,EAAGpC,EAAA,OAAO,UAAU,EAClD,QAAS4B,EAAI,EAAGU,EAAIF,EAAGR,EAAIS,EAAQ,EAAET,EAAG,EAAEU,EACxC,KAAK,OAAOV,CAAC,EAAIK,EAAK,WAAWK,CAAC,EAEpCF,GAAKC,EACL,KAAK,MAAM,OAAO,EAAGA,CAAM,EAE/B,CAMA,IAAW,QAAM,CACf,GAAI,KAAK,QAAK,GAAqB,CAAC,KAAK,OAAS,CAAC,KAAK,OACtD,OAAO/B,GAIT,IAAMiC,EAAe,KAAK,MAAM,cAAa,EAE7C,GAAI,KAAK,QAAK,EAAmB,CAC/B,IAAIb,EAAY,KAAK,OAAS,KAAK,eACnC,GAAIA,EAAY,EAAG,CACjB,IAAMD,EAAM,KAAK,cACbH,EAAS,KAAK,YACdK,EAAI,EACR,KAAOA,EAAI,GAAKD,EAAY,GAC1B,KAAK,QAAQ,IAAI,KAAK,MAAM,SAASD,EAAME,EAAGF,EAAME,EAAIY,CAAY,EAAGjB,EAASiB,EAAeZ,CAAC,EAChGA,IACAD,IAEEA,GACF,KAAK,QAAQ,KAAK,KAAK,WAAYJ,EAASiB,EAAeZ,CAAC,EAGhE,OAAO,KAAK,QAAQ,SAAS,EAAG,KAAK,MAAQ,KAAK,MAAM,EAG1D,GAAI,KAAK,QAAK,EAAmB,CAC/B,GAAI,KAAK,YAAc,KAAK,UAAW,CACrC,IAAIa,EAAS,GACb,GAAID,EACF,GAAIA,IAAiB,KAAK,UACxBC,EAAS,OACJ,CACL,IAAMf,EAAM,KAAK,cACbH,EAAS,KAAK,YAClB,KAAK,SAASA,EAAQiB,EAAe,CAAC,EACtC,QAASX,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB,KAAK,QAAQ,IAAI,KAAK,MAAM,SAASH,EAAMG,EAAGH,EAAMG,EAAIW,CAAY,EAAGjB,EAASiB,EAAeX,CAAC,EAItG,GAAI,CAACY,EACH,OAAO,KAAK,QAAQ,SAAS,EAAG,KAAK,MAAQ,KAAK,MAAM,EAM5D,IAAMC,EAAQ,IAAI,YAAY,KAAK,MAAQ,KAAK,MAAM,EACtDA,EAAM,KAAK,KAAK,UAAU,EAC1B,IAAIC,EAAc,EACdR,EAAQ,EACZ,QAASN,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQ,EAAEA,EAAG,CAChD,IAAMe,EAAK,KAAK,YAAYf,CAAC,EAC7B,QAASQ,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvBK,EAAM,IAAI,KAAK,QAAQ,SAASP,EAAOA,GAASS,CAAE,EAAGD,CAAW,EAChEA,GAAe,KAAK,MAIxB,GAAIH,EAAc,CAChB,IAAMd,EAAM,KAAK,cAEXmB,EAAgB,KAAK,MAAM,eAAc,EAC/C,QAAShB,EAAI,EAAGA,EAAIgB,EAAe,EAAEhB,EACnCa,EAAM,IAAI,KAAK,MAAM,SAAShB,EAAMG,EAAGH,EAAMG,EAAIW,CAAY,EAAGG,EAAc,KAAK,MAAQd,CAAC,EAGhG,OAAOa,EAIT,OAAOnC,EACT,CAMA,IAAW,OAAK,CACd,OAAO,IAAI,kBAAkB,KAAK,OAAO,OAAQ,EAAG,KAAK,MAAQ,KAAK,OAAS,CAAC,CAClF,CAcO,SAAO,CACZ,KAAK,QAAUA,GACf,KAAK,YAAY,OAAS,EAC1B,KAAK,UAAY,EACjB,KAAK,UAAYN,EAAA,OAAO,UAGxB,KAAK,MAAM,KAAKD,EAAA,mBAAoB,EAAG,KAAK,MAAM,aAAc,CAAC,CACnE,GAxWFkB,EAAA,QAAAD,EA2XC,SAAgB6B,GACfZ,EACArB,EAAsB,CAEtB,IAAMkC,EAAM,IAAI9B,EAAQJ,CAAI,EAC5B,OAAAkC,EAAI,KAAI,EACR,OAAOb,GAAS,SAAWa,EAAI,aAAab,CAAI,EAAIa,EAAI,OAAOb,CAAI,EAC5D,CACL,MAAOa,EAAI,MACX,OAAQA,EAAI,OACZ,OAAQA,EAAI,OACZ,MAAOA,EAAI,MAEf,CAbC7B,EAAA,OAAA4B,GAoBM,eAAeE,GACpBd,EACArB,EAAsB,CAEtB,IAAMkC,EAAM,MAAMnC,GAAaC,CAAI,EACnC,OAAAkC,EAAI,KAAI,EACR,OAAOb,GAAS,SAAWa,EAAI,aAAab,CAAI,EAAIa,EAAI,OAAOb,CAAI,EAC5D,CACL,MAAOa,EAAI,MACX,OAAQA,EAAI,OACZ,OAAQA,EAAI,OACZ,MAAOA,EAAI,MAEf,CAbA7B,EAAA,YAAA8B,KC7eO,SAASC,EAAaC,EAA6B,CACxD,MAAO,CAAE,QAASA,CAAG,CACvB,CAuBO,IAAMC,EAAN,KAA6C,CAA7C,cACL,KAAiB,aAAe,IAAI,IACpC,KAAQ,YAAc,GAEtB,IAAW,YAAsB,CAC/B,OAAO,KAAK,WACd,CAEO,IAA2BC,EAAS,CACzC,OAAI,KAAK,YACPA,EAAE,QAAQ,EAEV,KAAK,aAAa,IAAIA,CAAC,EAElBA,CACT,CAEO,SAAgB,CACrB,GAAI,MAAK,YAGT,MAAK,YAAc,GACnB,QAAWC,KAAK,KAAK,aACnBA,EAAE,QAAQ,EAEZ,KAAK,aAAa,MAAM,EAC1B,CAEO,OAAc,CACnB,QAAWA,KAAK,KAAK,aACnBA,EAAE,QAAQ,EAEZ,KAAK,aAAa,MAAM,CAC1B,CACF,EAEsBC,EAAf,KAAiD,CAAjD,cAGL,KAAmB,OAAS,IAAIH,EAEzB,SAAgB,CACrB,KAAK,OAAO,QAAQ,CACtB,CAEU,UAAiCC,EAAS,CAClD,OAAO,KAAK,OAAO,IAAIA,CAAC,CAC1B,CACF,EAZsBE,EACG,KAAoB,OAAO,OAAO,CAAE,SAAU,CAAE,CAAE,CAAC,EAarE,IAAMC,EAAN,KAAsE,CAAtE,cAEL,KAAQ,YAAc,GAEtB,IAAW,OAAuB,CAChC,OAAO,KAAK,YAAc,OAAY,KAAK,MAC7C,CAEA,IAAW,MAAMC,EAAsB,CACjC,KAAK,aAAeA,IAAU,KAAK,SAGvC,KAAK,QAAQ,QAAQ,EACrB,KAAK,OAASA,EAChB,CAEO,OAAc,CACnB,KAAK,MAAQ,MACf,CAEO,SAAgB,CACrB,KAAK,YAAc,GACnB,KAAK,QAAQ,QAAQ,EACrB,KAAK,OAAS,MAChB,CACF,EClGO,IAAMC,EAAN,KAAiB,CAAjB,cACL,KAAQ,WAAqD,CAAC,EAC9D,KAAQ,UAAY,GAGpB,IAAW,OAAmB,CAC5B,OAAI,KAAK,OACA,KAAK,QAEd,KAAK,OAAS,CAACC,EAAyBC,EAAgBC,IAAkD,CACxG,GAAI,KAAK,UACP,OAAOC,EAAa,IAAM,CAAC,CAAC,EAG9B,IAAMC,EAAQ,CAAE,GAAIJ,EAAU,SAAAC,CAAS,EACvC,KAAK,WAAa,KAAK,WAAW,MAAM,EACxC,KAAK,WAAW,KAAKG,CAAK,EAE1B,IAAMC,EAASF,EAAa,IAAM,CAChC,IAAMG,EAAM,KAAK,WAAW,QAAQF,CAAK,EACrCE,IAAQ,KACV,KAAK,WAAa,KAAK,WAAW,MAAM,EACxC,KAAK,WAAW,OAAOA,EAAK,CAAC,EAEjC,CAAC,EAED,OAAIJ,IACE,MAAM,QAAQA,CAAW,EAC3BA,EAAY,KAAKG,CAAM,EAEvBH,EAAY,IAAIG,CAAM,GAInBA,CACT,EACO,KAAK,OACd,CAEO,KAAKE,EAAgB,CAC1B,GAAI,KAAK,WAAa,CAAC,KAAK,WAAW,OACrC,OAEF,GAAI,KAAK,WAAW,SAAW,EAAG,CAChC,KAAK,WAAW,CAAC,EAAE,GAAG,KAAK,KAAK,WAAW,CAAC,EAAE,SAAUA,CAAK,EAC7D,MACF,CACA,IAAMC,EAAY,KAAK,WACvB,QAAS,EAAI,EAAGC,EAAMD,EAAU,OAAQ,EAAIC,EAAK,EAAE,EACjDD,EAAU,CAAC,EAAE,GAAG,KAAKA,EAAU,CAAC,EAAE,SAAUD,CAAK,CAErD,CAEO,SAAgB,CACjB,KAAK,YAGT,KAAK,UAAY,GACjB,KAAK,WAAW,OAAS,EAC3B,CACF,EAEiBG,OAAV,CACE,SAASC,EAAWC,EAAiBC,EAA6B,CACvE,OAAOD,EAAKE,GAAKD,EAAG,KAAKC,CAAC,CAAC,CAC7B,CAFOJ,EAAS,QAAAC,EAIT,SAASI,EAAUR,EAAkBQ,EAA6B,CACvE,MAAO,CAACf,EAAyBC,EAAgBC,IACxCK,EAAMS,GAAKhB,EAAS,KAAKC,EAAUc,EAAIC,CAAC,CAAC,EAAG,OAAWd,CAAW,CAE7E,CAJOQ,EAAS,IAAAK,EAQT,SAASE,KAAUC,EAAgC,CACxD,MAAO,CAAClB,EAAyBC,EAAgBC,IAAkD,CACjG,IAAMiB,EAAQ,IAAIC,EAClB,QAAWb,KAASW,EAClBC,EAAM,IAAIZ,EAAMO,GAAKd,EAAS,KAAKC,EAAUa,CAAC,CAAC,CAAC,EAElD,OAAIZ,IACE,MAAM,QAAQA,CAAW,EAC3BA,EAAY,KAAKiB,CAAK,EAEtBjB,EAAY,IAAIiB,CAAK,GAGlBA,CACT,CACF,CAfOT,EAAS,IAAAO,EAmBT,SAASI,EAAmBd,EAAkBe,EAAqCC,EAA0B,CAClH,OAAAD,EAAQC,CAAO,EACRhB,EAAMO,GAAKQ,EAAQR,CAAC,CAAC,CAC9B,CAHOJ,EAAS,gBAAAW,IAhCDX,KAAA,ICvEjB,IAAAc,GAA2B,OAgBpB,IAAMC,EAAN,MAAMC,UAAsBC,CAAkC,CAmDnE,YAAoBC,EAAyB,CAC3C,MAAM,EADY,eAAAA,EAhDpB,KAAQ,QAAU,IAAI,IAGtB,KAAQ,gBAAkB,KAAK,UAAU,IAAIC,CAAmB,EA+C9D,KAAK,SAAW,KAAK,UAAU,MAAM,KACrC,KAAK,UAAU,MAAM,KAAQC,GAA8B,CACzD,KAAK,UAAU,KAAK,KAAK,UAAU,MAAOA,CAAM,EAChD,KAAK,MAAM,CACb,EACI,KAAK,UAAU,MAAM,eACvB,KAAK,MAAM,EAGb,KAAK,gBAAgB,MAAQ,KAAK,UAAU,MAAM,eAAe,eAAeC,GAAU,CACpFA,IAAW,aACb,KAAK,cAAc,EACnB,KAAK,gBAAgB,YAAY,EAAG,KAAK,UAAU,IAAI,EAE3D,CAAC,EACD,KAAK,UAAUC,EAAa,IAAM,CAChC,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,QAAQ,EAC5B,KAAK,UAAU,OAAS,KAAK,WAC/B,KAAK,UAAU,MAAM,KAAO,KAAK,SACjC,KAAK,SAAW,QAEd,KAAK,gBAAkB,KAAK,kBAC9B,KAAK,eAAe,YAAc,KAAK,gBACvC,KAAK,gBAAkB,QAEzB,KAAK,eAAiB,OACtB,KAAK,QAAQ,MAAM,EACnB,KAAK,oBAAoB,MAAM,EAC/B,KAAK,mBAAqB,OAC1B,KAAK,aAAe,MACtB,CAAC,CAAC,CACJ,CAnFA,IAAW,QAAwC,CAAE,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,MAAQ,CAU7F,OAAc,aAAaC,EAAqCC,EAAeC,EAAmC,CAUhH,IAAMC,GAAUH,GAAiB,UAAU,cAAc,QAAQ,EACjE,OAAAG,EAAO,MAAQF,EAAQ,EACvBE,EAAO,OAASD,EAAS,EAClBC,CACT,CAGA,OAAc,gBAAgBC,EAA+BH,EAAeC,EAAgBG,EAAiC,CAC3H,GAAI,OAAO,WAAc,WAAY,CACnC,IAAMC,EAAUF,EAAI,gBAAgBH,EAAOC,CAAM,EACjD,OAAIG,GACFC,EAAQ,KAAK,IAAI,IAAI,kBAAkBD,EAAQ,EAAGJ,EAAQC,EAAS,CAAC,CAAC,EAEhEI,CACT,CACA,OAAOD,EACH,IAAI,UAAU,IAAI,kBAAkBA,EAAQ,EAAGJ,EAAQC,EAAS,CAAC,EAAGD,EAAOC,CAAM,EACjF,IAAI,UAAUD,EAAOC,CAAM,CACjC,CAGA,OAAc,kBAAkBK,EAA0D,CACxF,OAAI,OAAO,mBAAsB,WACxB,QAAQ,QAAQ,MAAS,EAE3B,kBAAkBA,CAAG,CAC9B,CA0CO,gBAAgBC,EAAsB,CACvCA,EACE,CAAC,KAAK,cAAgB,KAAK,SAAS,SAAW,IACjD,KAAK,mBAAmB,KAAK,IAAI,KAAK,SAAS,OAAS,EAAG,EAA4B,CAAC,GAG1F,KAAK,oBAAoB,MAAM,EAC/B,KAAK,mBAAqB,OAC1B,KAAK,aAAe,QAEtB,KAAK,gBAAgB,YAAY,EAAG,KAAK,UAAU,IAAI,CACzD,CAMA,IAAW,YAA4C,CACrD,OAAO,KAAK,UAAU,UACxB,CAKA,IAAW,UAAsB,CAC/B,MAAO,CACL,MAAO,KAAK,YAAY,IAAI,KAAK,OAAS,GAC1C,OAAQ,KAAK,YAAY,IAAI,KAAK,QAAU,EAC9C,CACF,CAKO,WAAWC,EAAeC,EAAaC,EAA0B,CACtE,IAAMC,EAAIH,GAAS,KAAK,YAAY,IAAI,KAAK,QAAU,GACjDI,EAAI,KAAK,YAAY,IAAI,OAAO,OAAS,EACzCC,GAAKJ,EAAM,EAAID,IAAU,KAAK,YAAY,IAAI,KAAK,QAAU,IAC/D,CAACE,GAASA,IAAU,QACtB,KAAK,QAAQ,IAAI,KAAK,GAAG,UAAU,EAAGC,EAAGC,EAAGC,CAAC,GAE3C,CAACH,GAASA,IAAU,WACtB,KAAK,QAAQ,IAAI,QAAQ,GAAG,UAAU,EAAGC,EAAGC,EAAGC,CAAC,CAEpD,CAKO,SAASH,EAA0B,CACxC,GAAI,CAACA,GAASA,IAAU,MAAO,CAC7B,IAAMP,EAAM,KAAK,QAAQ,IAAI,KAAK,EAClCA,GAAK,UAAU,EAAG,EAAGA,EAAI,OAAO,MAAOA,EAAI,OAAO,MAAM,CAC1D,CACA,GAAI,CAACO,GAASA,IAAU,SAAU,CAChC,IAAMP,EAAM,KAAK,QAAQ,IAAI,QAAQ,EACrCA,GAAK,UAAU,EAAG,EAAGA,EAAI,OAAO,MAAOA,EAAI,OAAO,MAAM,CAC1D,CACF,CAKO,KAAKW,EAAqBC,EAAgBC,EAAaC,EAAaC,EAAgB,EAAS,CAClG,IAAMf,EAAM,KAAK,QAAQ,IAAIW,EAAQ,KAAK,EAC1C,GAAI,CAACX,EACH,OAEF,GAAM,CAAE,MAAAH,EAAO,OAAAC,CAAO,EAAI,KAAK,SAG/B,GAAID,IAAU,IAAMC,IAAW,GAC7B,OAGF,KAAK,cAAca,EAASd,EAAOC,CAAM,EACzC,IAAMK,EAAMQ,EAAQ,OACdK,EAAO,KAAK,KAAKb,EAAI,MAAQN,CAAK,EAElCoB,EAAML,EAASI,EAAQnB,EACvBqB,EAAK,KAAK,MAAMN,EAASI,CAAI,EAAIlB,EACjCqB,EAAKN,EAAMhB,EACXuB,EAAKN,EAAMhB,EAGXuB,EAAaN,EAAQlB,EAAQoB,EAAKd,EAAI,MAAQA,EAAI,MAAQc,EAAKF,EAAQlB,EACvEyB,EAAcJ,EAAKpB,EAASK,EAAI,OAASA,EAAI,OAASe,EAAKpB,EAMjEE,EAAI,UACFG,EACA,KAAK,MAAMc,CAAE,EAAG,KAAK,MAAMC,CAAE,EAAG,KAAK,KAAKG,CAAU,EAAG,KAAK,KAAKC,CAAW,EAC5E,KAAK,MAAMH,CAAE,EAAG,KAAK,MAAMC,CAAE,EAAG,KAAK,KAAKC,CAAU,EAAG,KAAK,KAAKC,CAAW,CAC9E,CACF,CAKO,YAAYX,EAAqBC,EAA+C,CACrF,GAAM,CAAE,MAAAf,EAAO,OAAAC,CAAO,EAAI,KAAK,SAE/B,GAAID,IAAU,IAAMC,IAAW,GAC7B,OAEF,KAAK,cAAca,EAASd,EAAOC,CAAM,EACzC,IAAMK,EAAMQ,EAAQ,OACdK,EAAO,KAAK,KAAKb,EAAI,MAAQN,CAAK,EAClCoB,EAAML,EAASI,EAAQnB,EACvBqB,EAAK,KAAK,MAAMN,EAASI,CAAI,EAAIlB,EACjCuB,EAAaxB,EAAQoB,EAAKd,EAAI,MAAQA,EAAI,MAAQc,EAAKpB,EACvDyB,EAAcJ,EAAKpB,EAASK,EAAI,OAASA,EAAI,OAASe,EAAKpB,EAE3DC,EAASV,EAAc,aAAa,KAAK,SAAUgC,EAAYC,CAAW,EAC1EtB,EAAMD,EAAO,WAAW,IAAI,EAClC,GAAIC,EACF,OAAAA,EAAI,UACFG,EACA,KAAK,MAAMc,CAAE,EAAG,KAAK,MAAMC,CAAE,EAAG,KAAK,MAAMG,CAAU,EAAG,KAAK,MAAMC,CAAW,EAC9E,EAAG,EAAG,KAAK,MAAMD,CAAU,EAAG,KAAK,MAAMC,CAAW,CACtD,EACOvB,CAEX,CAKO,gBAAgBc,EAAaC,EAAaC,EAAgB,EAAS,CACxE,IAAMf,EAAM,KAAK,QAAQ,IAAI,KAAK,EAClC,GAAIA,EAAK,CACP,GAAM,CAAE,MAAAH,EAAO,OAAAC,CAAO,EAAI,KAAK,SAY/B,GATID,IAAU,IAAMC,IAAW,KAI1B,KAAK,aAECA,GAAU,KAAK,aAAc,QACtC,KAAK,mBAAmBA,EAAS,CAAC,EAFlC,KAAK,mBAAmB,KAAK,IAAIA,EAAS,EAAG,EAA4B,CAAC,EAIxE,CAAC,KAAK,cAAc,OACxBE,EAAI,UACF,KAAK,oBAAsB,KAAK,aAChCa,EAAMhB,EACLiB,EAAMhB,EAAU,EAAI,EAAI,EACzBD,EAAQkB,EACRjB,EACAe,EAAMhB,EACNiB,EAAMhB,EACND,EAAQkB,EACRjB,CACF,CACF,CACF,CAMO,eAAsB,CAC3B,IAAMW,EAAI,KAAK,YAAY,IAAI,OAAO,OAAS,EACzCC,EAAI,KAAK,YAAY,IAAI,OAAO,QAAU,EAChD,QAAWV,KAAO,KAAK,QAAQ,OAAO,GAChCA,EAAI,OAAO,QAAUS,GAAKT,EAAI,OAAO,SAAWU,KAClDV,EAAI,OAAO,MAAQS,EACnBT,EAAI,OAAO,OAASU,EAG1B,CAKQ,cAAca,EAAkBC,EAAsBC,EAA6B,CACzF,GAAID,IAAiBD,EAAK,eAAe,OAASE,IAAkBF,EAAK,eAAe,OACtF,OAEF,GAAM,CAAE,MAAOG,EAAe,OAAQC,CAAe,EAAIJ,EAAK,aAC9D,GAAIC,IAAiBE,GAAiBD,IAAkBE,EAAgB,CACtEJ,EAAK,OAASA,EAAK,KACnBA,EAAK,eAAe,MAAQG,EAC5BH,EAAK,eAAe,OAASI,EAC7B,MACF,CACA,IAAM5B,EAASV,EAAc,aAC3B,KAAK,SACL,KAAK,KAAKkC,EAAK,KAAM,MAAQC,EAAeE,CAAa,EACzD,KAAK,KAAKH,EAAK,KAAM,OAASE,EAAgBE,CAAc,CAC9D,EACM3B,EAAMD,EAAO,WAAW,IAAI,EAC9BC,IACFA,EAAI,UAAUuB,EAAK,KAAO,EAAG,EAAGxB,EAAO,MAAOA,EAAO,MAAM,EAC3DwB,EAAK,OAASxB,EACdwB,EAAK,eAAe,MAAQC,EAC5BD,EAAK,eAAe,OAASE,EAEjC,CAKQ,OAAc,CACpB,KAAK,eAAiB,KAAK,UAAU,MAAM,eAC3C,KAAK,gBAAkB,KAAK,eAAe,YAAY,KAAK,KAAK,cAAc,EAC/E,KAAK,eAAe,YAAeG,GAAkB,CACnD,QAAWC,IAAO,CAAC,GAAG,KAAK,QAAQ,KAAK,CAAC,EACvC,KAAK,mBAAmBA,CAAG,EAE7B,KAAK,iBAAiB,KAAK,KAAK,eAAgBD,CAAQ,CAC1D,CACF,CAEO,iBAAiBrB,EAAoB,MAAa,CAEvD,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,UAAU,MAAM,cAAe,CACzD,QAAQ,KAAK,oFAAoF,EACjG,MACF,CACA,GAAI,KAAK,QAAQ,IAAIA,CAAK,EACxB,OAEF,IAAMR,EAASV,EAAc,aAC3B,KAAK,SAAU,KAAK,YAAY,IAAI,OAAO,OAAS,EACpD,KAAK,YAAY,IAAI,OAAO,QAAU,CACxC,EACAU,EAAO,UAAU,IAAI,qBAAqBQ,CAAK,EAAE,EACjD,IAAMuB,EAAgB,KAAK,UAAU,MAAM,cAI3CA,EAAc,MAAM,UAAY,UAC5BvB,IAAU,UAKZR,EAAO,MAAM,OAAS,KACtB+B,EAAc,aAAa/B,EAAQ+B,EAAc,UAAU,IAK3D/B,EAAO,MAAM,OAAS,IACtB+B,EAAc,YAAY/B,CAAM,GAElC,IAAMC,EAAMD,EAAO,WAAW,KAAM,CAAE,MAAO,EAAK,CAAC,EACnD,GAAI,CAACC,EAAK,CACRD,EAAO,OAAO,EACd,MACF,CACA,KAAK,QAAQ,IAAIQ,EAAOP,CAAG,EAC3B,KAAK,SAASO,CAAK,CACrB,CAEO,mBAAmBA,EAAoB,MAAa,CACzD,IAAMP,EAAM,KAAK,QAAQ,IAAIO,CAAK,EAC9BP,IACFA,EAAI,OAAO,OAAO,EAClB,KAAK,QAAQ,OAAOO,CAAK,EAE7B,CAEO,SAASA,EAA4B,CAC1C,OAAO,KAAK,QAAQ,IAAIA,CAAK,CAC/B,CAEQ,mBAAmBT,EAAiB,GAAoC,CAC9E,KAAK,oBAAoB,MAAM,EAC/B,KAAK,mBAAqB,OAG1B,IAAMiC,EAAS,GACTC,EAAY3C,EAAc,aAAa,KAAK,SAAU0C,EAAQjC,CAAM,EACpEE,EAAMgC,EAAU,WAAW,KAAM,CAAE,MAAO,EAAM,CAAC,EACvD,GAAI,CAAChC,EAAK,OACV,IAAME,EAAUb,EAAc,gBAAgBW,EAAK+B,EAAQjC,CAAM,EAC3DmC,EAAM,IAAI,YAAY/B,EAAQ,KAAK,MAAM,EACzCgC,KAAQ,eAAW,EAAG,EAAG,CAAC,EAC1BC,KAAQ,eAAW,IAAK,IAAK,GAAG,EACtCF,EAAI,KAAKC,CAAK,EACd,QAAS1B,EAAI,EAAGA,EAAIV,EAAQ,EAAEU,EAAG,CAC/B,IAAM4B,EAAQ5B,EAAI,EACZ6B,EAAS7B,EAAIuB,EACnB,QAASO,EAAI,EAAGA,EAAIP,EAAQO,GAAK,EAC/BL,EAAII,EAASC,EAAIF,CAAK,EAAID,CAE9B,CACAnC,EAAI,aAAaE,EAAS,EAAG,CAAC,EAG9B,IAAML,EAAS,OAAO,MAAQkC,EAAS,EAAK,EAAEA,EAAS,IAAM,KAC7D,KAAK,aAAe1C,EAAc,aAAa,KAAK,SAAUQ,EAAOC,CAAM,EAC3E,IAAMyC,EAAO,KAAK,aAAa,WAAW,KAAM,CAAE,MAAO,EAAM,CAAC,EAChE,GAAI,CAACA,EAAM,CACT,KAAK,aAAe,OACpB,MACF,CACA,QAASC,EAAI,EAAGA,EAAI3C,EAAO2C,GAAKT,EAC9BQ,EAAK,UAAUP,EAAWQ,EAAG,CAAC,EAEhCnD,EAAc,kBAAkB,KAAK,YAAY,EAAE,KAAKoD,GAAU,KAAK,mBAAqBA,CAAM,CACpG,CAEA,IAAW,UAAiC,CAC1C,OAAO,KAAK,UAAU,MAAM,qBAAqB,OAAO,QAC1D,CACF,EC3ZO,SAASC,GAAoBC,EAA2B,CAC7D,OAAIA,EAAY,OACdA,GAAa,MACN,OAAO,cAAcA,GAAa,IAAM,KAAM,EAAI,OAAO,aAAcA,EAAY,KAAS,KAAM,GAEpG,OAAO,aAAaA,CAAS,CACtC,CCTO,IAAMC,EAAN,MAAMC,CAAwC,CAA9C,cAsBL,KAAO,GAAK,EACZ,KAAO,GAAK,EACZ,KAAO,SAA2B,IAAIC,EAvBtC,OAAc,WAAWC,EAA0B,CACjD,MAAO,CACLA,IAAU,GAAuB,IACjCA,IAAU,EAAyB,IACnCA,EAAQ,GACV,CACF,CAEA,OAAc,aAAaA,EAA0B,CACnD,OAAQA,EAAM,CAAC,EAAI,MAAQ,IAAwBA,EAAM,CAAC,EAAI,MAAQ,EAAyBA,EAAM,CAAC,EAAI,GAC5G,CAEO,OAAwB,CAC7B,IAAMC,EAAS,IAAIH,EACnB,OAAAG,EAAO,GAAK,KAAK,GACjBA,EAAO,GAAK,KAAK,GACjBA,EAAO,SAAW,KAAK,SAAS,MAAM,EAC/BA,CACT,CAQO,WAA0B,CAAE,OAAO,KAAK,GAAK,QAAiB,CAC9D,QAA0B,CAAE,OAAO,KAAK,GAAK,SAAc,CAC3D,aAA0B,CAC/B,OAAI,KAAK,iBAAiB,GAAK,KAAK,SAAS,iBAAmB,EACvD,EAEF,KAAK,GAAK,SACnB,CACO,SAA0B,CAAE,OAAO,KAAK,GAAK,SAAe,CAC5D,aAA0B,CAAE,OAAO,KAAK,GAAK,UAAmB,CAChE,UAA0B,CAAE,OAAO,KAAK,GAAK,QAAgB,CAC7D,OAA0B,CAAE,OAAO,KAAK,GAAK,SAAa,CAC1D,iBAA0B,CAAE,OAAO,KAAK,GAAK,UAAuB,CACpE,aAA0B,CAAE,OAAO,KAAK,GAAK,SAAmB,CAChE,YAA0B,CAAE,OAAO,KAAK,GAAK,UAAkB,CAG/D,gBAAyB,CAAE,OAAO,KAAK,GAAK,QAAoB,CAChE,gBAAyB,CAAE,OAAO,KAAK,GAAK,QAAoB,CAChE,SAAyB,CAAE,OAAQ,KAAK,GAAK,YAAwB,QAAmB,CACxF,SAAyB,CAAE,OAAQ,KAAK,GAAK,YAAwB,QAAmB,CACxF,aAAyB,CAAE,OAAQ,KAAK,GAAK,YAAwB,WAAsB,KAAK,GAAK,YAAwB,QAAoB,CACjJ,aAAyB,CAAE,OAAQ,KAAK,GAAK,YAAwB,WAAsB,KAAK,GAAK,YAAwB,QAAoB,CACjJ,aAAyB,CAAE,OAAQ,KAAK,GAAK,YAAwB,CAAG,CACxE,aAAyB,CAAE,OAAQ,KAAK,GAAK,YAAwB,CAAG,CACxE,oBAA8B,CAAE,OAAO,KAAK,KAAO,GAAK,KAAK,KAAO,CAAG,CAGvE,YAAqB,CAC1B,OAAQ,KAAK,GAAK,SAAoB,CACpC,cACA,cAA0B,OAAO,KAAK,GAAK,IAC3C,cAA0B,OAAO,KAAK,GAAK,SAC3C,QAA0B,MAAO,EACnC,CACF,CACO,YAAqB,CAC1B,OAAQ,KAAK,GAAK,SAAoB,CACpC,cACA,cAA0B,OAAO,KAAK,GAAK,IAC3C,cAA0B,OAAO,KAAK,GAAK,SAC3C,QAA0B,MAAO,EACnC,CACF,CAGO,kBAA2B,CAChC,OAAO,KAAK,GAAK,SACnB,CACO,gBAAuB,CACxB,KAAK,SAAS,QAAQ,EACxB,KAAK,IAAM,WAEX,KAAK,IAAM,SAEf,CACO,mBAA4B,CACjC,GAAK,KAAK,GAAK,WAAyB,CAAC,KAAK,SAAS,eACrD,OAAQ,KAAK,SAAS,eAAiB,SAAoB,CACzD,cACA,cAA0B,OAAO,KAAK,SAAS,eAAiB,IAChE,cAA0B,OAAO,KAAK,SAAS,eAAiB,SAChE,QAA0B,OAAO,KAAK,WAAW,CACnD,CAEF,OAAO,KAAK,WAAW,CACzB,CACO,uBAAgC,CACrC,OAAQ,KAAK,GAAK,WAAyB,CAAC,KAAK,SAAS,eACtD,KAAK,SAAS,eAAiB,SAC/B,KAAK,eAAe,CAC1B,CACO,qBAA+B,CACpC,OAAQ,KAAK,GAAK,WAAyB,CAAC,KAAK,SAAS,gBACrD,KAAK,SAAS,eAAiB,YAAwB,SACxD,KAAK,QAAQ,CACnB,CACO,yBAAmC,CACxC,OAAQ,KAAK,GAAK,WAAyB,CAAC,KAAK,SAAS,gBACrD,KAAK,SAAS,eAAiB,YAAwB,WAClD,KAAK,SAAS,eAAiB,YAAwB,SAC7D,KAAK,YAAY,CACvB,CACO,yBAAmC,CACxC,OAAQ,KAAK,GAAK,WAAyB,CAAC,KAAK,SAAS,gBACrD,KAAK,SAAS,eAAiB,YAAwB,EACxD,KAAK,YAAY,CACvB,CACO,mBAAoC,CACzC,OAAO,KAAK,GAAK,UACZ,KAAK,GAAK,UAAuB,KAAK,SAAS,kBAEtD,CACO,2BAAoC,CACzC,OAAO,KAAK,SAAS,sBACvB,CACF,EAOaF,EAAN,MAAMG,CAAwC,CAsDnD,YACEC,EAAc,EACdC,EAAgB,EAChB,CAxDF,KAAQ,KAAe,EAiCvB,KAAQ,OAAiB,EAwBvB,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAzDA,IAAW,KAAc,CACvB,OAAI,KAAK,OAEJ,KAAK,KAAO,WACZ,KAAK,gBAAkB,GAGrB,KAAK,IACd,CACA,IAAW,IAAIJ,EAAe,CAAE,KAAK,KAAOA,CAAO,CAEnD,IAAW,gBAAiC,CAE1C,OAAI,KAAK,UAGD,KAAK,KAAO,YAA6B,EACnD,CACA,IAAW,eAAeA,EAAuB,CAC/C,KAAK,MAAQ,WACb,KAAK,MAASA,GAAS,GAAM,SAC/B,CAEA,IAAW,gBAAyB,CAClC,OAAO,KAAK,KAAQ,QACtB,CACA,IAAW,eAAeA,EAAe,CACvC,KAAK,MAAQ,UACb,KAAK,MAAQA,EAAS,QACxB,CAGA,IAAW,OAAgB,CACzB,OAAO,KAAK,MACd,CACA,IAAW,MAAMA,EAAe,CAC9B,KAAK,OAASA,CAChB,CAEA,IAAW,wBAAiC,CAC1C,IAAMK,GAAO,KAAK,KAAO,aAA4B,GACrD,OAAIA,EAAM,EACDA,EAAM,WAERA,CACT,CACA,IAAW,uBAAuBL,EAAe,CAC/C,KAAK,MAAQ,UACb,KAAK,MAASA,GAAS,GAAM,UAC/B,CAUO,OAAwB,CAC7B,OAAO,IAAIE,EAAc,KAAK,KAAM,KAAK,MAAM,CACjD,CAMO,SAAmB,CACxB,OAAO,KAAK,iBAAmB,GAAuB,KAAK,SAAW,GAAK,KAAK,UAAY,MAC9F,CACF,ECtMO,IAAMI,EAAN,MAAMC,UAAiBC,CAAmC,CAA1D,kCAQL,KAAO,QAAU,EACjB,KAAO,GAAK,EACZ,KAAO,GAAK,EACZ,KAAO,SAA2B,IAAIC,EACtC,KAAO,aAAe,GAVtB,OAAc,aAAaC,EAA2B,CACpD,IAAMC,EAAM,IAAIJ,EAChB,OAAAI,EAAI,gBAAgBD,CAAK,EAClBC,CACT,CAQO,YAAqB,CAC1B,OAAO,KAAK,QAAU,OACxB,CAEO,UAAmB,CACxB,OAAO,KAAK,SAAW,EACzB,CAEO,UAAmB,CACxB,OAAI,KAAK,QAAU,QACV,KAAK,aAEV,KAAK,QAAU,QACVC,GAAoB,KAAK,QAAU,OAAsB,EAE3D,EACT,CAOO,SAAkB,CACvB,OAAQ,KAAK,WAAW,EACpB,KAAK,aAAa,WAAW,KAAK,aAAa,OAAS,CAAC,EACzD,KAAK,QAAU,OACrB,CAEO,gBAAgBF,EAAuB,CAC5C,KAAK,GAAKA,EAAM,CAAoB,EACpC,KAAK,GAAK,EACV,IAAIG,EAAW,GAEf,GAAIH,EAAM,CAAoB,EAAE,OAAS,EACvCG,EAAW,WAEJH,EAAM,CAAoB,EAAE,SAAW,EAAG,CACjD,IAAMI,EAAOJ,EAAM,CAAoB,EAAE,WAAW,CAAC,EAGrD,GAAI,OAAUI,GAAQA,GAAQ,MAAQ,CACpC,IAAMC,EAASL,EAAM,CAAoB,EAAE,WAAW,CAAC,EACnD,OAAUK,GAAUA,GAAU,MAChC,KAAK,SAAYD,EAAO,OAAU,KAAQC,EAAS,MAAS,MAAYL,EAAM,CAAqB,GAAK,GAGxGG,EAAW,EAEf,MAEEA,EAAW,EAEf,MAEE,KAAK,QAAUH,EAAM,CAAoB,EAAE,WAAW,CAAC,EAAKA,EAAM,CAAqB,GAAK,GAE1FG,IACF,KAAK,aAAeH,EAAM,CAAoB,EAC9C,KAAK,QAAU,QAA4BA,EAAM,CAAqB,GAAK,GAE/E,CAEO,eAA0B,CAC/B,MAAO,CAAC,KAAK,GAAI,KAAK,SAAS,EAAG,KAAK,SAAS,EAAG,KAAK,QAAQ,CAAC,CACnE,CAEO,iBAAiBM,EAAgC,CAatD,GAZI,KAAK,eAAe,IAAMA,EAAM,eAAe,GAAK,KAAK,WAAW,IAAMA,EAAM,WAAW,GAG3F,KAAK,eAAe,IAAMA,EAAM,eAAe,GAAK,KAAK,WAAW,IAAMA,EAAM,WAAW,GAG3F,KAAK,UAAU,IAAMA,EAAM,UAAU,GAGrC,KAAK,OAAO,IAAMA,EAAM,OAAO,GAG/B,KAAK,YAAY,IAAMA,EAAM,YAAY,EAC3C,MAAO,GAET,GAAI,KAAK,YAAY,EAAG,CACtB,GAAI,KAAK,kBAAkB,IAAMA,EAAM,kBAAkB,EACvD,MAAO,GAET,IAAMC,EAAc,KAAK,wBAAwB,EAC3CC,EAAeF,EAAM,wBAAwB,EACnD,GAAI,EAAEC,GAAeC,KACfD,IAAgBC,GAGhB,KAAK,kBAAkB,IAAMF,EAAM,kBAAkB,GAGrD,KAAK,sBAAsB,IAAMA,EAAM,sBAAsB,GAC/D,MAAO,EAGb,CAgBA,MAfI,OAAK,WAAW,IAAMA,EAAM,WAAW,GAGvC,KAAK,QAAQ,IAAMA,EAAM,QAAQ,GAGjC,KAAK,YAAY,IAAMA,EAAM,YAAY,GAGzC,KAAK,SAAS,IAAMA,EAAM,SAAS,GAGnC,KAAK,MAAM,IAAMA,EAAM,MAAM,GAG7B,KAAK,gBAAgB,IAAMA,EAAM,gBAAgB,EAIvD,CAEF,ECxIO,IAAMG,EAA+B,CAC1C,MAAO,EACP,OAAQ,EACV,EAEMC,EAAN,KAAoB,CAClB,YACSC,EAAU,GACVC,EAAS,GAAI,CADb,aAAAD,EACA,YAAAC,CACT,CACF,EASaC,EAAN,KAA0C,CAmB/C,YACUC,EACAC,EACAC,EACR,CAHQ,eAAAF,EACA,eAAAC,EACA,WAAAC,EApBV,KAAQ,QAAmC,IAAI,IAE/C,KAAQ,QAAU,EAElB,KAAQ,UAAY,EAEpB,KAAQ,cAAgB,GAExB,KAAQ,gBAAkB,GAE1B,KAAQ,YAAsB,KAC9B,KAAQ,UAAsB,IAAIC,EAWhC,GAAI,CACF,KAAK,SAAS,KAAK,MAAM,YAAY,CACvC,OAASC,EAAY,CACfA,aAAa,OACf,QAAQ,MAAMA,EAAE,OAAO,EAEzB,QAAQ,KAAK,0BAA0B,KAAK,SAAS,CAAC,KAAK,CAC7D,CACA,KAAK,iBAAmB,CACtB,KAAM,KAAK,UAAU,KACrB,KAAM,KAAK,UAAU,IACvB,CACF,CAEO,SAAgB,CACrB,KAAK,MAAM,CACb,CAEO,OAAc,CACnB,QAAWC,KAAQ,KAAK,QAAQ,OAAO,EACrCA,EAAK,QAAQ,QAAQ,EAIvB,KAAK,QAAQ,MAAM,EACnB,KAAK,UAAU,SAAS,CAC1B,CAEO,UAAmB,CACxB,OAAO,KAAK,YAAc,EAAI,GAChC,CAEO,SAASC,EAAqB,CACnC,GAAIA,EAAQ,IAAOA,EAAQ,IACzB,MAAM,WAAW,mEAAmE,EAEtF,KAAK,YAAeA,EAAQ,EAAI,MAAa,EAC7C,KAAK,aAAa,CAAC,CACrB,CAEO,UAAmB,CACxB,OAAO,KAAK,iBAAiB,EAAI,EAAI,GACvC,CAEQ,kBAA2B,CACjC,IAAIC,EAAe,EACnB,QAAWF,KAAQ,KAAK,QAAQ,OAAO,EACjCA,EAAK,OACPE,GAAgBF,EAAK,KAAK,MAAQA,EAAK,KAAK,OACxCA,EAAK,QAAUA,EAAK,SAAWA,EAAK,OACtCE,GAAgBF,EAAK,OAAO,MAAQA,EAAK,OAAO,SAItD,OAAOE,CACT,CAEQ,QAAQC,EAAkB,CAChC,IAAMH,EAAO,KAAK,QAAQ,IAAIG,CAAE,EAC3BH,IACL,KAAK,QAAQ,OAAOG,CAAE,EAElB,OAAO,aAAeH,EAAK,gBAAgB,aAC7CA,EAAK,KAAK,MAAM,EAElB,KAAK,iBAAiBG,CAAE,EAC1B,CAKO,eAAsB,CAE3B,IAAMC,EAAO,CAAC,EACd,OAAW,CAACD,EAAIH,CAAI,IAAK,KAAK,QAAQ,QAAQ,EACxCA,EAAK,aAAe,cACtBA,EAAK,QAAQ,QAAQ,EACrBI,EAAK,KAAKD,CAAE,GAGhB,QAAWA,KAAMC,EACf,KAAK,QAAQD,CAAE,EAGjB,KAAK,gBAAkB,GACvB,KAAK,cAAgB,EACvB,CAMO,YAAYA,EAAkB,CACnC,IAAMH,EAAO,KAAK,QAAQ,IAAIG,CAAE,EAC5BH,IACFA,EAAK,QAAQ,QAAQ,EACrB,KAAK,QAAQG,CAAE,EAEnB,CAaO,SAASE,EAAsCC,EAA6B,CAEjF,KAAK,aAAaD,EAAI,MAAQA,EAAI,MAAM,EAGxC,IAAIE,EAAW,KAAK,UAAU,UAC1BA,EAAS,QAAU,IAAMA,EAAS,SAAW,MAC/CA,EAAWjB,GAEb,IAAMkB,EAAO,KAAK,KAAKH,EAAI,MAAQE,EAAS,KAAK,EAC3CE,EAAO,KAAK,KAAKJ,EAAI,OAASE,EAAS,MAAM,EAE7Cf,EAAU,EAAE,KAAK,QAEjBkB,EAAS,KAAK,UAAU,MAAM,OAC9BC,EAAW,KAAK,UAAU,KAC1BC,EAAW,KAAK,UAAU,KAC1BC,EAAUH,EAAO,EACjBI,EAAUJ,EAAO,EACnBK,EAASF,EACTG,EAAY,EAEXV,EAAK,YACRI,EAAO,EAAI,EACXA,EAAO,EAAI,EACXK,EAAS,GAGX,KAAK,UAAU,MAAM,cAAc,iBAAiB,UAAUL,EAAO,CAAC,EACtE,QAASO,EAAM,EAAGA,EAAMR,EAAM,EAAEQ,EAAK,CACnC,IAAMC,EAAOR,EAAO,MAAM,IAAIA,EAAO,EAAIA,EAAO,KAAK,EACrD,QAASS,EAAM,EAAGA,EAAMX,GAClB,EAAAO,EAASI,GAAOR,GADQ,EAAEQ,EAE9B,KAAK,aAAaD,EAAMH,EAASI,EAAK3B,EAASyB,EAAMT,EAAOW,CAAG,EAC/DH,IAEF,GAAIV,EAAK,UACHW,EAAMR,EAAO,GAAG,KAAK,UAAU,MAAM,cAAc,SAAS,UAE5D,EAAEC,EAAO,GAAKE,EAAU,MAE9BF,EAAO,EAAIK,CACb,CACA,KAAK,UAAU,MAAM,cAAc,iBAAiB,UAAUL,EAAO,CAAC,EAGlEJ,EAAK,UACHA,EAAK,YAAc,MACrBI,EAAO,EAAI,KAAK,IAAIK,EAASP,EAAMG,CAAQ,EAE3CD,EAAO,EAAIK,GAGbL,EAAO,EAAIG,EACXH,EAAO,EAAII,GAIb,IAAMV,EAAO,CAAC,EACd,OAAW,CAACD,EAAIH,CAAI,IAAK,KAAK,QAAQ,QAAQ,EACxCA,EAAK,UAAY,IACnBA,EAAK,QAAQ,QAAQ,EACrBI,EAAK,KAAKD,CAAE,GAGhB,QAAWA,KAAMC,EACf,KAAK,QAAQD,CAAE,EAKjB,IAAMiB,EAAY,KAAK,UAAU,eAAe,CAAC,EACjDA,GAAW,UAAU,IAAM,CACZ,KAAK,QAAQ,IAAI5B,CAAO,GAEnC,KAAK,QAAQA,CAAO,CAExB,CAAC,EAIG,KAAK,UAAU,OAAO,OAAO,OAAS,aACxC,KAAK,kBAAkB,EAIzB,IAAM6B,EAAsB,CAC1B,KAAMhB,EACN,aAAcE,EACd,OAAQF,EACR,eAAgB,CAAE,GAAGE,CAAS,EAC9B,OAAQa,GAAa,OACrB,UAAAJ,EACA,WAAY,KAAK,UAAU,OAAO,OAAO,KACzC,MAAOV,EAAK,MACZ,OAAQA,EAAK,MACf,EAGA,YAAK,QAAQ,IAAId,EAAS6B,CAAO,EACjC,KAAK,eAAe,EACb7B,CACT,CAQO,OAAO8B,EAA6C,CAEzD,IAAIC,EAAe,GACfC,EAAkB,GACtB,QAAWxB,KAAQ,KAAK,QAAQ,OAAO,EAMrC,GALIA,EAAK,QAAU,SACjBwB,EAAkB,GAElBD,EAAe,GAEbA,GAAgBC,EAAiB,MAIvC,GAAID,GAAgB,CAAC,KAAK,UAAU,SAAS,KAAK,IAChD,KAAK,UAAU,iBAAiB,KAAK,EACjC,CAAC,KAAK,UAAU,SAAS,KAAK,GAAG,OAUvC,GARIC,GAAmB,CAAC,KAAK,UAAU,SAAS,QAAQ,GACtD,KAAK,UAAU,iBAAiB,QAAQ,EAI1C,KAAK,UAAU,cAAc,EAGzB,CAAC,KAAK,QAAQ,KAAM,CACjB,KAAK,gBACR,KAAK,UAAU,SAAS,EACxB,KAAK,cAAgB,GACrB,KAAK,gBAAkB,IAErB,KAAK,UAAU,SAAS,KAAK,GAC/B,KAAK,UAAU,mBAAmB,KAAK,EAErC,KAAK,UAAU,SAAS,QAAQ,GAClC,KAAK,UAAU,mBAAmB,QAAQ,EAE5C,MACF,CAGI,CAACD,GAAgB,KAAK,UAAU,SAAS,KAAK,IAChD,KAAK,UAAU,SAAS,KAAK,EAC7B,KAAK,UAAU,mBAAmB,KAAK,GAErC,CAACC,GAAmB,KAAK,UAAU,SAAS,QAAQ,IACtD,KAAK,UAAU,SAAS,QAAQ,EAChC,KAAK,UAAU,mBAAmB,QAAQ,GAIxC,KAAK,kBACP,KAAK,UAAU,SAAS,EACxB,KAAK,cAAgB,GACrB,KAAK,gBAAkB,IAGzB,GAAM,CAAE,MAAAC,EAAO,IAAAC,CAAI,EAAIJ,EACjBZ,EAAS,KAAK,UAAU,MAAM,OAC9BF,EAAO,KAAK,UAAU,MAAM,KAGlC,KAAK,UAAU,WAAWiB,EAAOC,CAAG,EAGpC,IAAMC,EAAgG,CAAC,EACjGC,EAAkE,CAAC,EAGzE,QAASX,EAAMQ,EAAOR,GAAOS,EAAK,EAAET,EAAK,CACvC,IAAMC,EAAOR,EAAO,MAAM,IAAIO,EAAMP,EAAO,KAAK,EAChD,GAAI,CAACQ,EAAM,OACX,QAASC,EAAM,EAAGA,EAAMX,EAAM,EAAEW,EAAK,CACnC,IAAMpB,EAAImB,EAAK,YAAYC,CAAG,GAAG,QACjC,GAAIpB,aAAaR,EAAe,CAC9B,IAAMC,EAAUO,EAAE,QAClB,GAAIP,IAAY,QAAaA,IAAY,GACvC,SAEF,IAAM6B,EAAU,KAAK,QAAQ,IAAI7B,CAAO,EACxC,GAAIO,EAAE,SAAW,GAAI,CACnB,IAAM8B,EAAY9B,EAAE,OACd+B,EAAWX,EACbY,EAAQ,EAOZ,KAAO,EAAEZ,EAAMX,GAAM,CACnB,IAAMwB,EAAQd,EAAK,YAAYC,CAAG,GAAG,QACrC,GAAI,EAAEa,aAAiBzC,IAAkByC,EAAM,UAAYxC,GAAWwC,EAAM,SAAWH,EAAYE,EACjG,MAEFA,GACF,CACAZ,IACIE,EACEA,EAAQ,QACVM,EAAU,KAAK,CAAE,QAAAN,EAAS,OAAQQ,EAAW,IAAKC,EAAU,IAAAb,EAAK,MAAAc,CAAM,CAAC,EAEjE,KAAK,MAAM,iBACpBH,EAAiB,KAAK,CAAE,IAAKE,EAAU,IAAAb,EAAK,MAAAc,CAAM,CAAC,EAErD,KAAK,cAAgB,EACvB,CACF,CACF,CACF,CAGAJ,EAAU,KAAK,CAACM,EAAGC,IAAMD,EAAE,QAAQ,OAASC,EAAE,QAAQ,MAAM,EAG5D,QAAWC,KAAQP,EACjB,KAAK,UAAU,gBAAgBO,EAAK,IAAKA,EAAK,IAAKA,EAAK,KAAK,EAI/D,QAAWA,KAAQR,EACjB,KAAK,UAAU,KAAKQ,EAAK,QAASA,EAAK,OAAQA,EAAK,IAAKA,EAAK,IAAKA,EAAK,KAAK,CAEjF,CAEO,eAAeC,EAA+C,CAEnE,GAAI,CAAC,KAAK,QAAQ,KAAM,CACtB,KAAK,iBAAmBA,EACxB,MACF,CAIA,GAAI,KAAK,iBAAiB,MAAQA,EAAQ,KAAM,CAC9C,KAAK,iBAAmBA,EACxB,MACF,CAGA,IAAM1B,EAAS,KAAK,UAAU,MAAM,OAC9BD,EAAOC,EAAO,MAAM,OACpB2B,EAAS,KAAK,iBAAiB,KAAO,EAC5C,QAASpB,EAAM,EAAGA,EAAMR,EAAM,EAAEQ,EAAK,CACnC,IAAMC,EAAOR,EAAO,MAAM,IAAIO,CAAG,EAC3BlB,EAAImB,EAAK,YAAYmB,CAAM,GAAG,QACpC,GAAItC,aAAaR,EAAe,CAC9B,IAAMC,EAAUO,EAAE,QAClB,GAAIP,IAAY,QAAaA,IAAY,GACvC,SAEF,IAAM6B,EAAU,KAAK,QAAQ,IAAI7B,CAAO,EACxC,GAAI,CAAC6B,EACH,SAGF,IAAMiB,EAAc,KAAK,MAAMjB,EAAQ,QAAQ,OAAS,GAAKA,EAAQ,eAAe,KAAK,EACzF,GAAKtB,EAAE,OAASuC,EAAe,GAAKA,EAClC,SAGF,IAAIC,EAAU,GACd,QAASC,EAAWH,EAAS,EAAGG,EAAWJ,EAAQ,KAAM,EAAEI,EACzD,GAAItB,EAAK,WAAWsB,CAAQ,EAAG,CAC7BD,EAAU,GACV,KACF,CAEF,GAAIA,EACF,SAGF,IAAMb,EAAM,KAAK,IAAIU,EAAQ,KAAME,EAAevC,EAAE,OAASuC,EAAeD,CAAM,EAC9EI,EAAW1C,EAAE,OACjB,QAAS2C,EAAYL,EAAS,EAAGK,EAAYhB,EAAK,EAAEgB,EAClD,KAAK,aAAaxB,EAAMwB,EAAWlD,EAAS,EAAEiD,CAAQ,EACtDpB,EAAQ,WAEZ,CACF,CAEA,KAAK,iBAAmBe,CAC1B,CAKO,qBAAqBO,EAAWC,EAA0C,CAE/E,IAAM1B,EADS,KAAK,UAAU,MAAM,OAChB,MAAM,IAAI0B,CAAC,EAC/B,GAAI1B,EAAM,CACR,IAAMnB,EAAImB,EAAK,YAAYyB,CAAC,GAAG,QAC/B,GAAI5C,aAAaR,GAAiBQ,EAAE,SAAWA,EAAE,UAAY,GAAI,CAC/D,IAAM8C,EAAO,KAAK,QAAQ,IAAI9C,EAAE,OAAO,GAAG,KAC1C,GAAI,OAAO,aAAe8C,aAAgB,YAAa,CACrD,IAAMC,EAASC,EAAc,aAAa,OAAO,SAAUF,EAAK,MAAOA,EAAK,MAAM,EAClF,OAAAC,EAAO,WAAW,IAAI,GAAG,UAAUD,EAAM,EAAG,EAAGA,EAAK,MAAOA,EAAK,MAAM,EAC/DC,CACT,CACA,OAAOD,CACT,CACF,CACF,CAKO,wBAAwBF,EAAWC,EAA0C,CAElF,IAAM1B,EADS,KAAK,UAAU,MAAM,OAChB,MAAM,IAAI0B,CAAC,EAC/B,GAAI1B,EAAM,CACR,IAAMnB,EAAImB,EAAK,YAAYyB,CAAC,GAAG,QAC/B,GAAI5C,aAAaR,GAAiBQ,EAAE,SAAWA,EAAE,UAAY,IAAMA,EAAE,SAAW,GAAI,CAClF,IAAMC,EAAO,KAAK,QAAQ,IAAID,EAAE,OAAO,EACvC,GAAIC,EACF,OAAO,KAAK,UAAU,YAAYA,EAAMD,EAAE,MAAM,CAEpD,CACF,CACF,CAIQ,aAAaiD,EAAsB,CACzC,IAAMC,EAAO,KAAK,iBAAiB,EAC/BC,EAAUD,EACd,KAAO,KAAK,YAAcC,EAAUF,GAAQ,KAAK,QAAQ,MAAM,CAC7D,IAAMhD,EAAO,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,EAC1CA,GAAQA,EAAK,OACfkD,GAAWlD,EAAK,KAAK,MAAQA,EAAK,KAAK,OACnCA,EAAK,QAAUA,EAAK,OAASA,EAAK,SACpCkD,GAAWlD,EAAK,OAAO,MAAQA,EAAK,OAAO,QAE7CA,EAAK,QAAQ,QAAQ,EACrB,KAAK,QAAQ,KAAK,SAAS,EAE/B,CACA,OAAOiD,EAAOC,CAChB,CAEQ,aAAahC,EAAmByB,EAAWnD,EAAiBC,EAAsB,CACxF,IAAM0D,EAAW,KAAK,UAEtB,GADAjC,EAAK,SAASyB,EAAGQ,CAAQ,EACrB,KAAK,UAAU,iBAAiB,EAAG,CACrC,IAAMC,EAAMD,EAAS,SAAS,QAC9B,GAAIC,aAAe7D,EAAe,CAIhC,IAAM8D,EAAU,KAAK,QAAQ,IAAID,EAAI,OAAO,EACxCC,GAEFA,EAAQ,YAEVD,EAAI,QAAU5D,EACd4D,EAAI,OAAS3D,EACb,MACF,CACF,CAEA,IAAM6D,EAAUH,EAAS,SAAS,MAAM,EACxCG,EAAQ,QAAU,IAAI/D,EAAcC,EAASC,CAAM,EACnD0D,EAAS,SAAWG,EACpBH,EAAS,eAAe,EACxBjC,EAAK,QAAQyB,EAAGQ,CAAQ,CAC1B,CAEQ,mBAA0B,CAEhC,QAAWnD,KAAQ,KAAK,QAAQ,OAAO,EACjCA,EAAK,aAAe,cACtBA,EAAK,UAAY,GAIrB,IAAMU,EAAS,KAAK,UAAU,MAAM,OACpC,QAASkC,EAAI,EAAGA,EAAI,KAAK,UAAU,KAAM,EAAEA,EAAG,CAC5C,IAAM1B,EAAOR,EAAO,MAAM,IAAIkC,CAAC,EAC/B,GAAK1B,EAGL,QAASyB,EAAI,EAAGA,EAAI,KAAK,UAAU,KAAM,EAAEA,EAAG,CAC5C,IAAMY,EAAUrC,EAAK,YAAYyB,CAAC,GAAG,QACrC,GAAIY,aAAmBhE,EAAe,CACpC,IAAMS,EAAO,KAAK,QAAQ,IAAIuD,EAAQ,OAAO,EACzCvD,GACFA,EAAK,WAET,CACF,CACF,CAEA,IAAMI,EAAO,CAAC,EACd,OAAW,CAACD,EAAIH,CAAI,IAAK,KAAK,QAAQ,QAAQ,EACxCA,EAAK,aAAe,aAAe,CAACA,EAAK,YAC3CA,EAAK,QAAQ,QAAQ,EACrBI,EAAK,KAAKD,CAAE,GAGhB,QAAWA,KAAMC,EACf,KAAK,QAAQD,CAAE,CAEnB,CACF,EC9jBA,IAAAqD,GAA0B,QAC1BC,GAAuB,QC2CvB,SAASC,GAAMC,EAA2B,CACxC,IAAIC,EAAI,GACR,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQ,EAAEE,EACjCD,GAAK,OAAO,aAAaD,EAAKE,CAAC,CAAC,EAElC,OAAOD,CACT,CAGA,SAASE,GAAMH,EAA2B,CACxC,IAAII,EAAI,EACR,QAASF,EAAI,EAAGA,EAAIF,EAAK,OAAQ,EAAEE,EAAG,CACpC,GAAIF,EAAKE,CAAC,EAAI,IAAMF,EAAKE,CAAC,EAAI,GAC5B,MAAM,IAAI,MAAM,cAAc,EAEhCE,EAAIA,EAAI,GAAKJ,EAAKE,CAAC,EAAI,EACzB,CACA,OAAOE,CACT,CAGA,SAASC,GAAOL,EAA2B,CACzC,IAAMI,EAAIL,GAAMC,CAAI,EACpB,GAAI,CAACI,EAAE,MAAM,kCAAkC,EAC7C,MAAM,IAAI,MAAM,cAAc,EAEhC,OAAOA,CACT,CAGA,SAASE,GAAON,EAA2B,CACzC,GAAI,OAAO,OAAW,IACpB,OAAO,OAAO,KAAKD,GAAMC,CAAI,EAAG,QAAQ,EAAE,SAAS,EAErD,IAAMO,EAAK,KAAKR,GAAMC,CAAI,CAAC,EACrBQ,EAAI,IAAI,WAAWD,EAAG,MAAM,EAClC,QAAS,EAAI,EAAG,EAAIC,EAAE,OAAQ,EAAE,EAC9BA,EAAE,CAAC,EAAID,EAAG,WAAW,CAAC,EAExB,OAAO,IAAI,YAAY,EAAE,OAAOC,CAAC,CACnC,CAEA,IAAMC,GAAiE,CACrE,OAAQN,GACR,KAAMA,GACN,KAAMG,GACN,MAAOD,GACP,OAAQA,GACR,oBAAqBF,EACvB,EAKMO,GAAc,CAAC,GAAI,IAAK,IAAK,GAAG,EAEhCC,GAAuB,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,GAAG,EAEpFC,GAAkB,CAAC,GAAI,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,GAAG,EAEtDC,GAAiB,CAAC,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GAAG,EAEjDC,GAAwB,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,GAAG,EAG1FC,GAAiB,KAGVC,GAAN,KAAmB,CAAnB,cACL,KAAO,MAAqB,EAC5B,KAAQ,QAAU,IAAI,YAAYD,EAAc,EAChD,KAAQ,UAAY,EACpB,KAAQ,KAAO,GACf,KAAO,OAA4E,CAAC,EAE7E,OAAc,CACnB,KAAK,QAAQ,KAAK,CAAC,EACnB,KAAK,MAAQ,EACb,KAAK,UAAY,EACjB,KAAK,OAAS,CAAC,EACf,KAAK,KAAO,EACd,CAEO,KAAc,CACnB,GAAI,KAAK,QAAU,EAAmB,CACpC,GAAI,KAAK,YAAcF,GAAe,OAAQ,CAC5C,QAASI,EAAI,EAAGA,EAAIJ,GAAe,OAAQ,EAAEI,EAC3C,GAAI,KAAK,QAAQA,CAAC,IAAMJ,GAAeI,CAAC,EAAG,OAAO,KAAK,GAAG,EAE5D,YAAK,OAAO,KAAU,EACtB,KAAK,MAAQ,EACN,CACT,CACA,GAAI,KAAK,YAAcH,GAAsB,OAAQ,CACnD,QAASG,EAAI,EAAGA,EAAIH,GAAsB,OAAQ,EAAEG,EAClD,GAAI,KAAK,QAAQA,CAAC,IAAMH,GAAsBG,CAAC,EAAG,OAAO,KAAK,GAAG,EAEnE,YAAK,OAAO,KAAU,EACtB,KAAK,MAAQ,EACN,CACT,CACA,OAAO,KAAK,GAAG,CACjB,CACA,OAAI,KAAK,QAAU,EAAwB,EACvC,KAAK,QAAU,GACd,KAAK,OAAO,OAAS,EAEnB,KAAK,YAAY,KAAK,SAAS,GACpC,KAAK,MAAQ,EACN,GAFuC,KAAK,GAAG,EAIjD,KAAK,GAAG,CACjB,CAEO,MAAMjB,EAAmBkB,EAAeC,EAAqB,CAClE,IAAIC,EAAQ,KAAK,MACbC,EAAM,KAAK,UACTC,EAAS,KAAK,QAEpB,GADIF,IAAU,GAAqBA,IAAU,GACzCA,IAAU,GAAqBC,EAAM,GAAI,MAAO,GACpD,QAASnB,EAAIgB,EAAOhB,EAAIiB,EAAK,EAAEjB,EAAG,CAChC,IAAMqB,EAAIvB,EAAKE,CAAC,EAChB,OAAQqB,EAAG,CACT,IAAK,IACH,GAAI,CAAC,KAAK,YAAYF,CAAG,EAAG,OAAO,KAAK,GAAG,EAC3CD,EAAQ,EACRC,EAAM,EACN,MACF,IAAK,IACH,GAAID,IAAU,EAAmB,CAC/B,GAAIE,EAAO,CAAC,IAAM,GAAI,CAEpB,IAAIL,EAAI,EACR,KAAOA,EAAIP,GAAY,OAAQ,EAAEO,EAC/B,GAAIK,EAAOL,CAAC,IAAMP,GAAYO,CAAC,EAAG,OAAO,KAAK,GAAG,EAGnD,GADA,KAAK,OAAO,KAAU,EAClBI,IAAQT,GAAgB,OAAQ,CAClC,KAAOK,EAAIL,GAAgB,OAAQ,EAAEK,EACnC,GAAIK,EAAOL,CAAC,IAAML,GAAgBK,CAAC,EAAG,OAAO,KAAK,GAAG,EAEvD,YAAK,OAAO,KAAU,EACtB,KAAK,MAAQ,EACNf,EAAI,CACb,CACF,SAAWoB,EAAO,CAAC,IAAM,GAAI,CAE3B,QAASL,EAAI,EAAGA,EAAIN,GAAqB,OAAQ,EAAEM,EACjD,GAAIK,EAAOL,CAAC,IAAMN,GAAqBM,CAAC,EAAG,OAAO,KAAK,GAAG,EAE5D,KAAK,OAAO,KAAU,CACxB,KACE,QAAO,KAAK,GAAG,EAEjBG,EAAQ,EACRC,EAAM,CACR,SAAWD,IAAU,EAAiB,CACpC,GAAI,CAAC,KAAK,UAAUC,CAAG,EAAG,OAAO,KAAK,GAAG,EACzCD,EAAQ,EACRC,EAAM,CACR,SAAWD,IAAU,EAAmB,CACtC,GAAIC,GAAON,GAAgB,OAAO,KAAK,GAAG,EAC1CO,EAAOD,GAAK,EAAIE,CAClB,CACA,MACF,IAAK,IACH,OAAIH,IAAU,GACR,CAAC,KAAK,YAAYC,CAAG,EAAU,KAAK,GAAG,GAE7C,KAAK,MAAQ,EACNnB,EAAI,GACb,QACE,GAAImB,GAAON,GAAgB,OAAO,KAAK,GAAG,EAC1CO,EAAOD,GAAK,EAAIE,CACpB,CACF,CACA,YAAK,MAAQH,EACb,KAAK,UAAYC,EACV,EACT,CAEQ,IAAa,CACnB,YAAK,OAAO,KAAO,EACnB,KAAK,MAAQ,EACN,EACT,CAEQ,UAAUA,EAAsB,CACtC,IAAMJ,EAAIlB,GAAM,KAAK,QAAQ,SAAS,EAAGsB,CAAG,CAAC,EAC7C,OAAIJ,GACF,KAAK,KAAOA,EACZ,KAAK,OAAOA,CAAC,EAAI,KACV,IAEF,EACT,CAEQ,YAAYI,EAAsB,CACxC,GAAI,KAAK,KAAM,CACb,GAAI,CACF,IAAMjB,EAAI,KAAK,QAAQ,MAAM,EAAGiB,CAAG,EACnC,KAAK,OAAO,KAAK,IAAI,EAAIZ,GAAS,KAAK,IAAI,EAAIA,GAAS,KAAK,IAAI,EAAEL,CAAC,EAAIA,CAC1E,MAAQ,CACN,MAAO,EACT,CACA,MAAO,EACT,CACA,MAAO,EACT,CACF,ECvPO,IAAMoB,EAA6B,CACxC,KAAM,cACN,MAAO,EACP,OAAQ,CACV,EAEO,SAASC,GAAUC,EAAyB,CACjD,GAAIA,EAAE,OAAS,GACb,OAAOF,EAET,IAAMG,EAAM,IAAI,YAAYD,EAAE,OAAQA,EAAE,WAAY,CAAC,EAGrD,GAAIC,EAAI,CAAC,IAAM,YAAcA,EAAI,CAAC,IAAM,WAAcA,EAAI,CAAC,IAAM,WAC/D,MAAO,CACL,KAAM,YACN,MAAQD,EAAE,EAAE,GAAK,GAAKA,EAAE,EAAE,GAAK,GAAKA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,EACrD,OAAQA,EAAE,EAAE,GAAK,GAAKA,EAAE,EAAE,GAAK,GAAKA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,CACvD,EAGF,GAAIA,EAAE,CAAC,IAAM,KAAQA,EAAE,CAAC,IAAM,KAAQA,EAAE,CAAC,IAAM,IAAM,CACnD,GAAM,CAACE,EAAOC,CAAM,EAAIC,GAAQJ,CAAC,EACjC,MAAO,CAAE,KAAM,aAAc,MAAAE,EAAO,OAAAC,CAAO,CAC7C,CAEA,GAAIF,EAAI,CAAC,IAAM,YAAeD,EAAE,CAAC,IAAM,IAAQA,EAAE,CAAC,IAAM,KAASA,EAAE,CAAC,IAAM,GACxE,MAAO,CACL,KAAM,YACN,MAAQA,EAAE,CAAC,GAAK,EAAIA,EAAE,CAAC,EACvB,OAAQA,EAAE,CAAC,GAAK,EAAIA,EAAE,CAAC,CACzB,EAGF,GAAIC,EAAI,CAAC,IAAM,WACb,MAAO,CACL,KAAM,YACN,MAAQD,EAAE,CAAC,GAAK,GAAKA,EAAE,CAAC,GAAK,GAAKA,EAAE,CAAC,GAAK,EAAIA,EAAE,CAAC,EACjD,OAAQA,EAAE,CAAC,GAAK,GAAKA,EAAE,CAAC,GAAK,GAAKA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,CACrD,EAGF,GAAIC,EAAI,CAAC,IAAM,YAAcA,EAAI,CAAC,IAAM,aAAeA,EAAI,CAAC,EAAI,YAAc,QAAU,CACtF,OAAQD,EAAE,EAAE,EAAG,CACb,IAAK,IACH,MAAO,CACL,KAAM,aACN,OAASA,EAAE,EAAE,EAAIA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,GAAK,IAAM,EAC7C,QAASA,EAAE,EAAE,EAAIA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,GAAK,IAAM,CAC/C,EACF,IAAK,IACH,GAAIA,EAAE,EAAE,IAAM,GAAM,OAAOF,EAC3B,IAAMO,EAAML,EAAE,EAAE,EAAIA,EAAE,EAAE,GAAK,EAAIA,EAAE,EAAE,GAAK,GAAKA,EAAE,EAAE,GAAK,GACxD,MAAO,CACL,KAAM,aACN,OAASK,EAAa,OAAU,EAChC,QAASA,IAAQ,GAAK,OAAU,CAClC,EACF,IAAK,IACH,OAAIL,EAAE,EAAE,IAAM,KAAQA,EAAE,EAAE,IAAM,GAAQA,EAAE,EAAE,IAAM,GAAaF,EACxD,CACL,KAAM,aACN,OAASE,EAAE,EAAE,EAAIA,EAAE,EAAE,GAAK,GAAK,MAC/B,QAASA,EAAE,EAAE,EAAIA,EAAE,EAAE,GAAK,GAAK,KACjC,CACJ,CACA,OAAOF,CACT,CAEA,GAAIG,EAAI,CAAC,IAAM,aAAeA,EAAI,CAAC,IAAM,YAAcA,EAAI,CAAC,IAAM,YAAa,CAC7E,IAAIK,EAAM,GAEJC,EAAQ,KAAK,IAAIP,EAAE,OAAS,GAAI,IAAI,EAC1C,QAASQ,EAAI,EAAGA,EAAID,EAAOC,IAEzB,GAAIR,EAAEQ,CAAC,IAAM,KAAQR,EAAEQ,EAAI,CAAC,IAAM,KAAQR,EAAEQ,EAAI,CAAC,IAAM,KAAQR,EAAEQ,EAAI,CAAC,IAAM,IAAM,CAChFF,EAAME,EACN,KACF,CAEF,GAAIF,IAAQ,GAAI,CAEd,IAAMJ,EACJF,EAAEM,EAAO,CAAC,GAAK,GACfN,EAAEM,EAAO,CAAC,GAAK,GACfN,EAAEM,EAAM,EAAE,GAAM,EAChBN,EAAEM,EAAM,EAAE,EACNH,EACJH,EAAEM,EAAM,EAAE,GAAK,GACfN,EAAEM,EAAM,EAAE,GAAK,GACfN,EAAEM,EAAM,EAAE,GAAM,EAChBN,EAAEM,EAAM,EAAE,EACZ,GAAIJ,EAAQ,GAAKC,EAAS,EACxB,MAAO,CAAE,KAAM,aAAc,MAAAD,EAAO,OAAAC,CAAO,CAE/C,CACA,OAAOL,CACT,CACA,OAAOA,CACT,CAGA,SAASM,GAAQJ,EAAiC,CAChD,IAAMS,EAAMT,EAAE,OACVQ,EAAI,EACJE,EAAcV,EAAEQ,CAAC,GAAK,EAAIR,EAAEQ,EAAI,CAAC,EACrC,OAAa,CAEX,GADAA,GAAKE,EACDF,GAAKC,EAEP,MAAO,CAAC,EAAG,CAAC,EAEd,GAAIT,EAAEQ,CAAC,IAAM,IACX,MAAO,CAAC,EAAG,CAAC,EAEd,GAAIR,EAAEQ,EAAI,CAAC,IAAM,KAAQR,EAAEQ,EAAI,CAAC,IAAM,IACpC,OAAIA,EAAI,EAAIC,EACH,CACLT,EAAEQ,EAAI,CAAC,GAAK,EAAIR,EAAEQ,EAAI,CAAC,EACvBR,EAAEQ,EAAI,CAAC,GAAK,EAAIR,EAAEQ,EAAI,CAAC,CACzB,EAEK,CAAC,EAAG,CAAC,EAEdA,GAAK,EACLE,EAAcV,EAAEQ,CAAC,GAAK,EAAIR,EAAEQ,EAAI,CAAC,CACnC,CACF,CFrHA,IAAMG,GAAgC,CACpC,OACA,KAAM,eACN,KAAM,EACN,MAAO,OACP,OAAQ,OACR,oBAAqB,EACrB,OAAQ,CACV,EAGaC,GAAN,KAAuD,CAS5D,YACmBC,EACAC,EACAC,EACAC,EACjB,CAJiB,WAAAH,EACA,eAAAC,EACA,cAAAC,EACA,mBAAAC,EAZnB,KAAQ,SAAW,GACnB,KAAQ,IAAM,IAAIC,GAClB,KAAQ,QAAyBN,GAGjC,KAAQ,aAAe,GACvB,KAAQ,YAAc,GAQpB,IAAMO,EAAkB,KAAK,KAAK,KAAK,MAAM,aAAe,EAAI,CAAC,EAC3DC,EAAe,KAAK,IAAI,QAA2BD,CAAe,EACxE,KAAK,KAAO,IAAI,GAAAE,QAAc,QAAwBF,EAAiBC,CAAY,EACnF,KAAK,QAAU,IAAI,GAAAE,QAAW,OAAsB,CACtD,CAEO,OAAc,CACnB,KAAK,IAAI,MAAM,EACf,KAAK,KAAK,QAAQ,EAClB,KAAK,QAAQ,QAAQ,CACvB,CAEO,OAAc,CACnB,KAAK,SAAW,GAChB,KAAK,IAAI,MAAM,CACjB,CAEO,IAAIC,EAAmBC,EAAeC,EAAmB,CAC9D,GAAI,MAAK,SAET,GAAI,KAAK,IAAI,QAAU,EAChB,KAAK,KAAK,IAAIF,EAAK,SAASC,EAAOC,CAAG,CAAC,IAAiB,IAC3D,KAAK,KAAK,QAAQ,EAClB,KAAK,SAAW,QAEb,CACL,IAAMC,EAAU,KAAK,IAAI,MAAMH,EAAMC,EAAOC,CAAG,EAC/C,GAAIC,IAAY,GAAI,CAClB,KAAK,SAAW,GAChB,MACF,CACA,GAAIA,EAAU,EAAG,CAEf,GADgB,KAAK,IAAI,OAAO,OAChB,EAAmB,CAOjC,GANI,KAAK,eACP,KAAK,aAAe,GACpB,KAAK,YAAc,GACnB,KAAK,KAAK,QAAQ,GAEpB,KAAK,QAAU,OAAO,OAAO,CAAC,EAAGd,GAAgB,KAAK,IAAI,MAAM,EAC5D,CAAC,KAAK,QAAQ,OAAQ,CACxB,KAAK,SAAW,GAChB,MACF,CACA,KAAK,KAAK,KAAK,CACjB,SAAW,KAAK,YAAa,CAC3B,KAAK,SAAW,GAChB,MACF,CACK,KAAK,KAAK,IAAIW,EAAK,SAASG,EAASD,CAAG,CAAC,IAAiB,IAC7D,KAAK,KAAK,QAAQ,EAClB,KAAK,SAAW,GACZ,KAAK,eAAc,KAAK,YAAc,IAE9C,CACF,CACF,CAEO,IAAIE,EAA8C,CAGvD,GAFI,KAAK,UAEL,KAAK,IAAI,QAAU,GACjB,KAAK,IAAI,IAAI,EAAG,MAAO,GAE7B,IAAMC,EAAU,KAAK,IAAI,OAAO,KAEhC,GAAIA,IAAY,EAAuB,MAAO,GAE9C,GAAIA,IAAY,EAA6B,CAE3C,IAAIC,EAAIC,EAAkB,MACtBC,EAAID,EAAkB,OACtB,KAAK,UAAU,aACjBD,EAAI,KAAK,UAAU,WAAW,IAAI,OAAO,MAAQ,KAAK,cAAc,KACpEE,EAAI,KAAK,UAAU,WAAW,IAAI,OAAO,OAAS,KAAK,cAAc,MAEvE,IAAMC,EAAQ,KAAK,cAAc,MAAM,qBAAqB,KAAO,EAC7DC,EAAS,4BAA4BF,EAAE,QAAQ,CAAC,CAAC,IAAIF,EAAE,QAAQ,CAAC,CAAC,IAAIG,EAAM,QAAQ,CAAC,CAAC,SAC3F,YAAK,cAAc,MAAMC,EAAQ,EAAK,EAC/B,EACT,CAEA,GAAIL,IAAY,EACd,YAAK,QAAU,OAAO,OAAO,CAAC,EAAGhB,GAAgB,KAAK,IAAI,MAAM,EAChE,KAAK,aAAe,GACpB,KAAK,YAAc,GACnB,KAAK,KAAK,QAAQ,EAClB,KAAK,KAAK,KAAK,EACR,GAGT,GAAIgB,IAAY,IACV,CAAC,KAAK,eACV,KAAK,aAAe,GAChB,KAAK,aAAe,KAAK,QAAQ,OAAS,IAA4B,MAAO,GAKnF,IAAIC,EAAI,EACJE,EAAI,EAGJG,EACAC,EAAUC,EAoBd,IAnBIF,EAAOP,MACLO,EAAO,CAAC,KAAK,KAAK,IAAI,IACxBC,EAAUE,GAAU,KAAK,KAAK,KAAK,GAC/BH,EAAOC,EAAQ,OAAS,gBAC1BN,EAAIM,EAAQ,MACZJ,EAAII,EAAQ,QACRD,EAAOL,GAAKE,GAAKF,EAAIE,EAAI,KAAK,MAAM,aACtC,CAACF,EAAGE,CAAC,EAAI,KAAK,QAAQF,EAAGE,CAAC,EAAE,IAAI,KAAK,KAAK,EAC1CG,EAAOL,GAAKE,GAAKF,EAAIE,EAAI,KAAK,MAAM,YAEpC,QAAQ,KAAK,8BAA8BI,EAAQ,KAAK,IAAIA,EAAQ,MAAM,EAAE,GAG9E,QAAQ,KAAK,6BAA6B,GAG5C,QAAQ,KAAK,mCAAmC,GAGhD,CAACD,EACH,YAAK,KAAK,QAAQ,EACX,GAGT,IAAII,EACJ,GAAIH,EAAQ,OAAS,YAAa,CAChC,IAAMZ,EAAO,KAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,EAOhD,GANAe,EAAO,IAAI,UACT,IAAI,kBAAkBf,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,EACnE,KAAK,QAAQ,MACb,KAAK,QAAQ,MACf,EACA,KAAK,QAAQ,QAAQ,EACjBM,IAAM,KAAK,QAAQ,OAASE,IAAM,KAAK,QAAQ,OAAQ,CAEzD,KAAK,KAAK,QAAQ,EAClB,IAAMQ,EAASC,EAAc,aAAa,OAAW,KAAK,QAAQ,MAAO,KAAK,QAAQ,MAAM,EAC5F,OAAAD,EAAO,WAAW,IAAI,GAAG,aAAaD,EAAM,EAAG,CAAC,EAChD,KAAK,SAAS,SAASC,CAAM,EACtB,EACT,CACF,MACED,EAAO,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAG,CAAE,KAAMH,EAAQ,IAAK,CAAC,EAE3D,YAAK,KAAK,QAAQ,EACX,kBAAkBG,EAAM,CAAE,YAAaT,EAAG,aAAcE,CAAE,CAAC,EAC/D,KAAKU,IACJ,KAAK,SAAS,SAASA,CAAE,EAClB,GACR,EACA,MAAMC,IACL,QAAQ,KAAK,uBAAuBP,EAAQ,IAAI,IAAIA,EAAQ,KAAK,IAAIA,EAAQ,MAAM,GAAIO,CAAC,EACjF,GACR,CACL,CAEQ,QAAQb,EAAWE,EAA6B,CACtD,IAAMY,EAAK,KAAK,UAAU,YAAY,IAAI,KAAK,OAASb,EAAkB,MACpEc,EAAK,KAAK,UAAU,YAAY,IAAI,KAAK,QAAUd,EAAkB,OACrEe,EAAQ,KAAK,UAAU,YAAY,IAAI,OAAO,OAASF,EAAK,KAAK,cAAc,KAC/EG,EAAS,KAAK,UAAU,YAAY,IAAI,OAAO,QAAUF,EAAK,KAAK,cAAc,KAEjFG,EAAK,KAAK,KAAK,KAAK,QAAQ,MAAQF,EAAOF,CAAE,EAC7CK,EAAK,KAAK,KAAK,KAAK,QAAQ,OAASF,EAAQF,CAAE,EACrD,GAAI,CAACG,GAAM,CAACC,EAAI,CACd,IAAMC,EAAKJ,EAAQhB,EACbqB,GAAMJ,EAASF,GAAMb,EACrBoB,EAAI,KAAK,IAAIF,EAAIC,CAAE,EACzB,OAAOC,EAAI,EAAI,CAACtB,EAAIsB,EAAGpB,EAAIoB,CAAC,EAAI,CAACtB,EAAGE,CAAC,CACvC,CACA,OAAQgB,EAEJ,KAAK,QAAQ,qBAAuB,CAACA,GAAM,CAACC,EAC1C,CAACD,EAAIhB,EAAIgB,EAAKlB,CAAC,EAAI,CAACkB,EAAIC,CAAE,EAF5B,CAACnB,EAAImB,EAAKjB,EAAGiB,CAAE,CAGrB,CAEQ,KAAKI,EAAWC,EAAeC,EAAsB,CAC3D,OAAIF,IAAM,OAAe,EACrBA,EAAE,SAAS,GAAG,EAAU,SAASA,EAAE,MAAM,EAAG,EAAE,EAAG,EAAE,EAAIC,EAAQ,IAC/DD,EAAE,SAAS,IAAI,EAAU,SAASA,EAAE,MAAM,EAAG,EAAE,EAAG,EAAE,EACjD,SAASA,EAAG,EAAE,EAAIE,CAC3B,CACF,EGnOA,IAAAC,GAAiD,QCoI1C,SAASC,GAAkBC,EAA6B,CAC7D,IAAMC,EAAqB,CAAC,EACtBC,EAAQF,EAAK,MAAM,GAAG,EAE5B,QAAWG,KAAQD,EAAO,CACxB,IAAME,EAAQD,EAAK,QAAQ,GAAG,EAC9B,GAAIC,IAAU,GAAI,SAElB,IAAMC,EAAMF,EAAK,UAAU,EAAGC,CAAK,EAC7BE,EAAQH,EAAK,UAAUC,EAAQ,CAAC,EAGtC,GAAIC,IAAQ,IAAiB,CAC3BJ,EAAI,OAASK,EACb,QACF,CACA,GAAID,IAAQ,IAAsB,CAChCJ,EAAI,YAAcK,EAClB,QACF,CACA,GAAID,IAAQ,IAAuB,CACjCJ,EAAI,aAAeK,EACnB,QACF,CACA,GAAID,IAAQ,IAA0B,CACpCJ,EAAI,eAAiBK,EACrB,QACF,CACA,IAAMC,EAAW,SAASD,EAAO,EAAE,EACnC,OAAQD,EAAK,CACX,IAAK,IAAiBJ,EAAI,OAASM,EAAU,MAC7C,IAAK,IAAaN,EAAI,GAAKM,EAAU,MACrC,IAAK,IAAuBN,EAAI,YAAcM,EAAU,MACxD,IAAK,IAAgBN,EAAI,MAAQM,EAAU,MAC3C,IAAK,IAAiBN,EAAI,OAASM,EAAU,MAC7C,IAAK,IAAmBN,EAAI,EAAIM,EAAU,MAC1C,IAAK,IAAmBN,EAAI,EAAIM,EAAU,MAC1C,IAAK,IAAuBN,EAAI,YAAcM,EAAU,MACxD,IAAK,IAAwBN,EAAI,aAAeM,EAAU,MAC1D,IAAK,IAA6BN,EAAI,QAAUM,EAAU,MAC1D,IAAK,IAA6BN,EAAI,QAAUM,EAAU,MAC1D,IAAK,IAAkBN,EAAI,QAAUM,EAAU,MAC/C,IAAK,IAAeN,EAAI,KAAOM,EAAU,MACzC,IAAK,IAAeN,EAAI,KAAOM,EAAU,MACzC,IAAK,IAAgBN,EAAI,MAAQM,EAAU,MAC3C,IAAK,IAA0BN,EAAI,eAAiBM,EAAU,MAC9D,IAAK,IAAkBN,EAAI,OAASM,EAAU,MAC9C,IAAK,IAAuBN,EAAI,YAAcM,EAAU,KAC1D,CACF,CAEA,OAAON,CACT,CDhKA,IAAMO,GAAa,EAGNC,GAAN,KAA8E,CAgCnF,YACmBC,EACAC,EACAC,EACAC,EACjB,CAJiB,WAAAH,EACA,eAAAC,EACA,mBAAAC,EACA,mBAAAC,EAnCnB,KAAQ,SAAW,GACnB,KAAQ,aAAe,GAEvB,KAAQ,eAAuC,KAO/C,KAAQ,eAAiB,GAGzB,KAAQ,aAAe,IAAI,YAAY,GAA+B,EACtE,KAAQ,eAAiB,EAGzB,KAAQ,kBAAoB,EAC5B,KAAQ,kBAAoB,EAG5B,KAAQ,eAAuC,KAI/C,KAAQ,sBAA2D,IAAI,IAarE,KAAK,iBAAmB,KAAK,KAAK,KAAK,MAAM,eAAiB,EAAI,CAAC,EAEnE,KAAK,qBAAuB,KAAK,IAAI,QAAgC,KAAK,gBAAgB,CAC5F,CAEO,OAAc,CACnB,KAAK,mBAAmB,EACpB,KAAK,iBACP,KAAK,eAAe,QAAQ,EAC5B,KAAK,eAAiB,MAExB,KAAK,cAAc,MAAM,CAC3B,CAEO,SAAgB,CACrB,KAAK,MAAM,CACb,CAEQ,oBAAoBC,EAAmB,CAC7C,KAAK,sBAAsB,OAAOA,CAAG,EACjC,KAAK,kBAAoBA,IAC3B,KAAK,gBAAkB,OAE3B,CAEQ,oBAA2B,CACjC,QAAWC,KAAW,KAAK,sBAAsB,OAAO,EACtDA,EAAQ,QAAQ,QAAQ,EAE1B,KAAK,sBAAsB,MAAM,EACjC,KAAK,gBAAkB,MACzB,CAEO,OAAc,CACnB,KAAK,SAAW,GAChB,KAAK,aAAe,GACpB,KAAK,eAAiB,GACtB,KAAK,eAAiB,EACtB,KAAK,eAAiB,KAEtB,KAAK,kBAAoB,KAAK,iBAC9B,KAAK,kBAAoB,EACzB,KAAK,eAAiB,IACxB,CAEO,IAAIC,EAAmBC,EAAeC,EAAmB,CAC9D,GAAI,MAAK,SAET,GAAI,CAAC,KAAK,eACR,KAAK,eAAeF,EAAMC,EAAOC,CAAG,MAC/B,CAEL,IAAIC,EAAaD,EACjB,QAASE,EAAIH,EAAOG,EAAIF,EAAKE,IAC3B,GAAIJ,EAAKI,CAAC,IAAM,GAAqB,CACnC,KAAK,eAAiB,GACtBD,EAAaC,EACb,KACF,CAIF,IAAMC,EAAaF,EAAaF,EAChC,GAAI,KAAK,eAAiBI,EAAa,IAAiC,CACtE,KAAK,SAAW,GAChB,MACF,CAIA,GAHA,KAAK,aAAa,IAAIL,EAAK,SAASC,EAAOE,CAAU,EAAG,KAAK,cAAc,EAC3E,KAAK,gBAAkBE,EAEnB,CAAC,KAAK,eAAgB,CAKxB,GAHA,KAAK,eAAiBC,GAAkB,KAAK,wBAAwB,CAAC,EAGlE,KAAK,eAAe,KAAO,QAAa,KAAK,eAAe,cAAgB,OAAW,CACzF,KAAK,cAAc,KAAK,eAAe,GAAI,0CAA2C,KAAK,eAAe,OAAS,CAAC,EACpH,KAAK,SAAW,GAChB,MACF,CAGA,GAAI,KAAK,eAAe,SAAW,IACjC,OAIF,IAAMC,EAAeJ,EAAa,EAC9BI,EAAeL,GACjB,KAAK,eAAeF,EAAMO,EAAcL,CAAG,CAE/C,CACF,CACF,CAGQ,eAAeF,EAAmBC,EAAeC,EAAmB,CAC1E,GAAI,KAAK,SAAU,OAKnB,IAAMM,EAAa,KAAK,gBAAgB,IAAM,KAAK,iBAAmB,EAChET,EAAU,KAAK,sBAAsB,IAAIS,CAAU,EACnDC,EAAsBV,GAAS,kBAAoB,EAGzD,GAFA,KAAK,mBAAqBG,EAAMD,EACFQ,EAAsB,KAAK,kBAC7B,KAAK,kBAAmB,CAClD,IAAMC,EAAmB,KAAK,gBAAkBX,GAAS,QACrDW,GACFA,EAAiB,QAAQ,EAE3B,KAAK,eAAiB,KAClBX,GACF,KAAK,oBAAoBS,CAAU,EAErC,KAAK,SAAW,GAChB,MACF,CAEI,KAAK,eAELT,GAAS,SAAW,CAAC,KAAK,iBAC5B,KAAK,eAAiBA,EAAQ,SAE3B,KAAK,iBACR,KAAK,eAAiB,IAAI,GAAAY,QAAc,QAA6B,KAAK,iBAAkB,KAAK,oBAAoB,EACrH,KAAK,eAAe,KAAK,GAGvB,KAAK,eAAe,IAAIX,EAAK,SAASC,EAAOC,CAAG,CAAC,IAAMV,KACzD,KAAK,eAAe,QAAQ,EAC5B,KAAK,eAAiB,KACtB,KAAK,aAAe,GAChBO,GACF,KAAK,oBAAoBS,CAAU,GAGzC,CAEO,IAAII,EAA8C,CACvD,GAAI,KAAK,UAAY,CAACA,EACpB,OAAI,KAAK,iBACP,KAAK,eAAe,QAAQ,EAC5B,KAAK,eAAiB,MAEjB,GAIT,GAAI,KAAK,eACP,OAAO,KAAK,wBAAwB,EAItC,IAAMC,EAAM,KAAK,eAGjB,GAAIA,EAAI,SAAW,IACjB,OAAO,KAAK,cAAcA,CAAG,EAI/B,IAAML,EAAaK,EAAI,IAAM,KAAK,iBAAmB,EAC/CC,EAAeD,EAAI,OAAS,EAC5Bd,EAAU,KAAK,sBAAsB,IAAIS,CAAU,EAEzD,GAAIM,EACF,OAAI,KAAK,iBACHf,GACFA,EAAQ,kBAAoB,KAAK,kBACjCA,EAAQ,YAAcA,EAAQ,aAAe,KAAK,cAElD,KAAK,sBAAsB,IAAIS,EAAY,CACzC,IAAK,CAAE,GAAGK,CAAI,EACd,QAAS,KAAK,eACd,iBAAkB,KAAK,kBACvB,YAAa,KAAK,YACpB,CAAC,EAEH,KAAK,gBAAkBL,EACvB,KAAK,eAAiB,MAEjB,GAILT,IACF,KAAK,gBAAkB,QAGzB,IAAIgB,EAAc,KAAK,aACnBC,EAAWH,EACXI,EAAU,KAAK,eAEflB,IACFiB,EAAWjB,EAAQ,IACnBkB,EAAUlB,EAAQ,QAClBgB,EAAcA,GAAehB,EAAQ,YACrC,KAAK,sBAAsB,OAAOS,CAAU,GAG9C,IAAIU,EAAa,IAAI,WAAW,CAAC,EAC7BD,IACEA,EAAQ,IAAI,IAAMzB,KACpBuB,EAAc,IAEhBG,EAAaD,EAAQ,OAEvB,KAAK,eAAiB,KAKtB,IAAME,EAAS,KAAK,8BAA8BH,EAAUE,EAAYH,CAAW,EACnF,OAAIE,GACFA,EAAQ,QAAQ,EAEXE,CACT,CAIQ,yBAAkC,CACxC,IAAIC,EAAM,GACV,QAAShB,EAAI,EAAGA,EAAI,KAAK,eAAgBA,IACvCgB,GAAO,OAAO,cAAc,KAAK,aAAahB,CAAC,CAAC,EAElD,OAAOgB,CACT,CAEQ,yBAAsD,CAC5D,IAAMP,EAAMP,GAAkB,KAAK,wBAAwB,CAAC,EAG5D,GAAIO,EAAI,KAAO,QAAaA,EAAI,cAAgB,OAC9C,YAAK,cAAcA,EAAI,GAAI,0CAA2CA,EAAI,OAAS,CAAC,EAC7E,GAKT,OAFeA,EAAI,QAAU,IAEb,CACd,QACE,OAAO,KAAK,cAAcA,CAAG,EAC/B,QACE,YAAK,cAAcA,EAAI,IAAM,EAAG,KAAMA,EAAI,OAAS,CAAC,EAC7C,GACT,QACE,OAAO,KAAK,iBAAiBA,CAAG,EAClC,QAKE,OAAIA,EAAI,KAAO,QACb,KAAK,cAAcA,EAAI,GAAI,4BAA6BA,EAAI,OAAS,CAAC,EAEjE,EACX,CACF,CAEQ,8BAA8BA,EAAoBQ,EAAmBN,EAAkD,CAG7H,OAFeF,EAAI,QAAU,IAEb,CACd,QAA2B,CACzB,IAAMM,EAAS,KAAK,gBAAgBN,EAAKQ,EAAON,CAAW,EAG3D,OAAKF,EAAI,cAAgB,OAAS,KAAOA,EAAI,KAAO,SAC9CE,EACF,KAAK,cAAcF,EAAI,GAAI,6BAA8BA,EAAI,OAAS,CAAC,EAC9DQ,EAAM,OAAS,GACxB,KAAK,cAAcR,EAAI,GAAI,KAAMA,EAAI,OAAS,CAAC,GAG5CM,CACT,CACA,QACE,OAAO,KAAK,uBAAuBN,EAAKQ,EAAON,CAAW,EAC5D,QACE,OAAO,KAAK,aAAaF,EAAKQ,EAAON,CAAW,EAClD,QAEE,OAAO,KAAK,iBAAiBF,CAAG,EAClC,QAKE,OAAIA,EAAI,KAAO,QACb,KAAK,cAAcA,EAAI,GAAI,4BAA6BA,EAAI,OAAS,CAAC,EAEjE,EACX,CACF,CAEQ,iBAAiBA,EAAgD,CACvE,GAAIA,EAAI,KAAO,OACb,MAAO,GAET,IAAMS,EAAKT,EAAI,GACTU,EAAQ,KAAK,cAAc,SAASD,CAAE,EAC5C,OAAKC,EAIU,KAAK,cAAcA,EAAOV,CAAG,EAC9B,KAAKD,IACjB,KAAK,cAAcU,EAAIV,EAAU,KAAO,gCAAiCC,EAAI,OAAS,EAAGA,EAAI,WAAW,EACjG,GACR,GAPC,KAAK,cAAcS,EAAI,yBAA0BT,EAAI,OAAS,EAAGA,EAAI,WAAW,EACzE,GAOX,CAEQ,gBAAgBA,EAAoBQ,EAAmBN,EAA+B,CAY5F,OADqBF,EAAI,cAAgB,OACpB,KACfA,EAAI,KAAO,QACb,KAAK,cAAcA,EAAI,GAAI,yCAA0CA,EAAI,OAAS,CAAC,EAE9E,KAGLE,GAAeM,EAAM,SAAW,GAEpC,KAAK,cAAc,WAAWR,EAAI,GAAI,CACpC,KAAM,IAAI,KAAK,CAACQ,CAAiB,CAAC,EAClC,MAAOR,EAAI,OAAS,EACpB,OAAQA,EAAI,QAAU,EACtB,OAASA,EAAI,QAAU,GACvB,YAAaA,EAAI,aAAe,EAClC,CAAC,EACM,GACT,CAEQ,uBAAuBA,EAAoBQ,EAAmBN,EAAkD,CACtH,GAAIA,EACF,OAAIF,EAAI,KAAO,QACb,KAAK,cAAcA,EAAI,GAAI,6BAA8BA,EAAI,OAAS,CAAC,EAElE,GAGT,KAAK,gBAAgBA,EAAKQ,EAAON,CAAW,EAE5C,IAAMO,EAAKT,EAAI,IAAM,KAAK,cAAc,YAClCU,EAAQ,KAAK,cAAc,SAASD,CAAE,EAC5C,GAAIC,EAAO,CACT,IAAMJ,EAAS,KAAK,cAAcI,EAAOV,CAAG,EAC5C,OAAIA,EAAI,KAAO,OACNM,EAAO,KAAKP,IACjB,KAAK,cAAcU,EAAIV,EAAU,KAAO,gCAAiCC,EAAI,OAAS,CAAC,EAChF,GACR,EAEIM,EAAO,KAAK,IAAM,EAAI,CAC/B,CACA,MAAO,EACT,CAEQ,aAAaN,EAAoBQ,EAAmBN,EAA+B,CACzF,IAAMO,EAAKT,EAAI,IAAM,EACfW,EAAQX,EAAI,OAAS,EAM3B,IADqBA,EAAI,cAAgB,OACpB,IACnB,YAAK,cAAcS,EAAI,yCAA0CE,CAAK,EAC/D,GAIT,GAAIT,EACF,YAAK,cAAcO,EAAI,6BAA8BE,CAAK,EACnD,GAIT,GAAIH,EAAM,SAAW,EACnB,YAAK,cAAcC,EAAI,KAAME,CAAK,EAC3B,GAGT,IAAMC,EAASZ,EAAI,QAAU,GAE7B,GAAIY,IAAW,IACb,KAAK,cAAcH,EAAI,KAAME,CAAK,MAC7B,CACL,IAAME,EAAQb,EAAI,OAAS,EACrBc,EAASd,EAAI,QAAU,EAE7B,GAAI,CAACa,GAAS,CAACC,EACb,YAAK,cAAcL,EAAI,sDAAuDE,CAAK,EAC5E,GAGT,IAAMI,EAAgBH,IAAW,OAC3BI,EAAgBH,EAAQC,EAASC,EAEvC,GAAIP,EAAM,OAASQ,EACjB,YAAK,cAAcP,EAAI,iCAAkCE,CAAK,EACvD,GAGT,KAAK,cAAcF,EAAI,KAAME,CAAK,CACpC,CACA,MAAO,EACT,CAEQ,cAAcX,EAA6B,CAOjD,OALiBA,EAAI,gBAAkB,IAKrB,CAChB,IAAK,IACL,IAAK,IACH,KAAK,mBAAmB,EACxB,KAAK,cAAc,UAAU,EAC7B,MACF,IAAK,IACL,IAAK,IAKH,GAAIA,EAAI,KAAO,OAAW,CACxB,IAAMd,EAAU,KAAK,sBAAsB,IAAIc,EAAI,EAAE,EACjDd,GACFA,EAAQ,QAAQ,QAAQ,EAE1B,KAAK,oBAAoBc,EAAI,EAAE,EAC/B,KAAK,cAAc,WAAWA,EAAI,EAAE,CACtC,CACA,MACF,QAEE,KACJ,CACA,MAAO,EACT,CAEQ,cAAcS,EAAYQ,EAAiBN,EAAeO,EAA4B,CAC5F,IAAMC,EAAOF,IAAY,KAEzB,GADIE,GAAQR,GAAS,GACjB,CAACQ,GAAQR,GAAS,EAAG,OAEzB,IAAMS,EAAQF,EAAc,MAAMA,CAAW,GAAK,GAC5CG,EAAW,WAAWZ,CAAE,GAAGW,CAAK,IAAIH,CAAO,SACjD,KAAK,cAAc,MAAM,YAAY,iBAAiBI,CAAQ,CAChE,CAIQ,cAAcX,EAAwBV,EAAsC,CAClF,OAAO,KAAK,kBAAkBU,EAAOV,CAAG,EACrC,KAAK,IAAM,EAAI,EACf,MAAM,IAAM,EAAK,CACtB,CAEA,MAAc,kBAAkBU,EAAwBV,EAAmC,CACzF,IAAIsB,EAAkC,MAAM,KAAK,cAAcZ,CAAK,EAEpE,GAAI,CACF,IAAMa,EAAQ,KAAK,IAAI,EAAGvB,EAAI,GAAK,CAAC,EAC9BwB,EAAQ,KAAK,IAAI,EAAGxB,EAAI,GAAK,CAAC,EAC9ByB,EAAQzB,EAAI,aAAgBsB,EAAO,MAAQC,EAC3CG,EAAQ1B,EAAI,cAAiBsB,EAAO,OAASE,EAE7CG,EAAW,KAAK,IAAI,EAAGL,EAAO,MAAQC,CAAK,EAC3CK,EAAW,KAAK,IAAI,EAAGN,EAAO,OAASE,CAAK,EAC5CK,EAAa,KAAK,IAAI,EAAG,KAAK,IAAIJ,EAAOE,CAAQ,CAAC,EAClDG,EAAa,KAAK,IAAI,EAAG,KAAK,IAAIJ,EAAOE,CAAQ,CAAC,EAExD,GAAIC,IAAe,GAAKC,IAAe,EACrC,MAAM,IAAI,MAAM,0BAA0B,EAG5C,GAAIP,IAAU,GAAKC,IAAU,GAAKK,IAAeP,EAAO,OAASQ,IAAeR,EAAO,OAAQ,CAC7F,IAAMS,EAAU,MAAM,kBAAkBT,EAAQC,EAAOC,EAAOK,EAAYC,CAAU,EACpFR,EAAO,MAAM,EACbA,EAASS,CACX,CAEA,IAAMC,EAAK,KAAK,UAAU,YAAY,IAAI,KAAK,OAASC,EAAkB,MACpEC,EAAK,KAAK,UAAU,YAAY,IAAI,KAAK,QAAUD,EAAkB,OAIvEE,EACAC,EACApC,EAAI,UAAY,QAAaA,EAAI,OAAS,QAC5CmC,EAAUnC,EAAI,QACdoC,EAAUpC,EAAI,MACLA,EAAI,UAAY,QACzBmC,EAAUnC,EAAI,QACdoC,EAAU,KAAK,IAAI,EAAG,KAAK,KAAMd,EAAO,OAASA,EAAO,OAAUa,EAAUH,GAAME,CAAE,CAAC,GAC5ElC,EAAI,OAAS,QACtBoC,EAAUpC,EAAI,KACdmC,EAAU,KAAK,IAAI,EAAG,KAAK,KAAMb,EAAO,MAAQA,EAAO,QAAWc,EAAUF,GAAMF,CAAE,CAAC,IAErFG,EAAU,KAAK,KAAKb,EAAO,MAAQU,CAAE,EACrCI,EAAU,KAAK,KAAKd,EAAO,OAASY,CAAE,GAGxC,IAAIG,EAAIf,EAAO,MACXgB,EAAIhB,EAAO,OAQf,IALItB,EAAI,UAAY,QAAaA,EAAI,OAAS,UAC5CqC,EAAI,KAAK,MAAMF,EAAUH,CAAE,EAC3BM,EAAI,KAAK,MAAMF,EAAUF,CAAE,GAGzBG,EAAIC,EAAI,KAAK,MAAM,WACrB,MAAM,IAAI,MAAM,2BAA2B,EAI7C,IAAMC,EAAS,KAAK,cAAc,MAAM,OAClCC,EAASD,EAAO,EAChBE,EAASF,EAAO,EAChBG,EAAaH,EAAO,MAOpBI,GADc3C,EAAI,SAAW,QAAaA,EAAI,OAAS,EACrB,SAAW,MAEnD,GAAIqC,IAAMf,EAAO,OAASgB,IAAMhB,EAAO,OAAQ,CAC7C,IAAMsB,EAAS,MAAM,kBAAkBtB,EAAQ,CAAE,YAAae,EAAG,aAAcC,CAAE,CAAC,EAClFhB,EAAO,MAAM,EACbA,EAASsB,CACX,CAGA,IAAMC,GAAU,KAAK,IAAI,KAAK,IAAI,EAAG7C,EAAI,SAAW,CAAC,EAAGgC,EAAK,CAAC,EACxDc,GAAU,KAAK,IAAI,KAAK,IAAI,EAAG9C,EAAI,SAAW,CAAC,EAAGkC,EAAK,CAAC,EAC9D,GAAIW,KAAY,GAAKC,KAAY,EAAG,CAKlC,IAAMC,EAAW/C,EAAI,UAAY,OAAa,KAAK,MAAMmC,EAAUH,CAAE,EAAIV,EAAO,MAAQuB,GAClFG,GAAWhD,EAAI,OAAS,OAAa,KAAK,MAAMoC,EAAUF,CAAE,EAAIZ,EAAO,OAASwB,GAChFG,EAAeC,EAAc,aAAa,OAAO,SAAUH,EAASC,EAAO,EAC3EG,GAAYF,EAAa,WAAW,IAAI,EAC9C,GAAI,CAACE,GACH,MAAM,IAAI,MAAM,wCAAwC,EAE1DA,GAAU,UAAU7B,EAAQuB,GAASC,EAAO,EAE5C,IAAMM,GAAe,MAAM,kBAAkBH,CAAY,EAMzD,GALAA,EAAa,MAAQA,EAAa,OAAS,EAC3C3B,EAAO,MAAM,EACbA,EAAS8B,GACTf,EAAIf,EAAO,MACXgB,EAAIhB,EAAO,OACPe,EAAIC,EAAI,KAAK,MAAM,WACrB,MAAM,IAAI,MAAM,2BAA2B,EAEzCtC,EAAI,UAAY,SAClBmC,EAAU,KAAK,KAAKb,EAAO,MAAQU,CAAE,GAEnChC,EAAI,OAAS,SACfoC,EAAU,KAAK,KAAKd,EAAO,OAASY,CAAE,EAE1C,CAEA,IAAMmB,GAASrD,EAAI,QAAU,EAO7B,GANA,KAAK,cAAc,SAASU,EAAM,GAAIY,EAAQ,GAAMqB,GAAOU,EAAM,EACjE/B,EAAS,OAKLtB,EAAI,iBAAmB,EAAG,CAE5B,IAAMsD,EAAWf,EAAO,MAAQG,EAChCH,EAAO,EAAIC,EAEXD,EAAO,EAAI,KAAK,IAAIE,EAASa,EAAU,CAAC,CAC1C,MAGEf,EAAO,EAAI,KAAK,IAAIC,EAASL,EAAS,KAAK,cAAc,IAAI,CAEjE,OAASoB,EAAG,CACV,MAAAjC,GAAQ,MAAM,EACRiC,CACR,CACF,CAGA,MAAc,cAAc7C,EAA8C,CACxE,IAAIF,EAAoB,IAAI,WAAW,MAAME,EAAM,KAAK,YAAY,CAAC,EAMrE,GAJIA,EAAM,cAAgB,MACxBF,EAAQ,MAAM,KAAK,gBAAgBA,CAAK,GAGtCE,EAAM,SAAW,IAAiB,CACpC,IAAM8C,EAAO,IAAI,KAAK,CAAChD,CAAiB,EAAG,CAAE,KAAM,WAAY,CAAC,EAChE,GAAI,CAAC,OAAO,kBAAmB,CAC7B,IAAMiD,EAAM,IAAI,gBAAgBD,CAAI,EAC9BE,EAAM,IAAI,MAChB,OAAO,IAAI,QAAqB,CAACC,EAASC,IAAW,CACnDF,EAAI,iBAAiB,OAAQ,IAAM,CACjC,IAAI,gBAAgBD,CAAG,EACvB,IAAMI,EAASX,EAAc,aAAa,OAAO,SAAUQ,EAAI,MAAOA,EAAI,MAAM,EAChFG,EAAO,WAAW,IAAI,GAAG,UAAUH,EAAK,EAAG,CAAC,EAC5C,kBAAkBG,CAAM,EAAE,KAAKF,CAAO,EAAE,MAAMC,CAAM,CACtD,CAAC,EACDF,EAAI,iBAAiB,QAAS,IAAM,CAClC,IAAI,gBAAgBD,CAAG,EACvBG,EAAO,IAAI,MAAM,sBAAsB,CAAC,CAC1C,CAAC,EACDF,EAAI,IAAMD,CACZ,CAAC,CACH,CACA,OAAO,kBAAkBD,CAAI,CAC/B,CAGA,IAAM3C,EAAQH,EAAM,MACdI,EAASJ,EAAM,OAErB,GAAI,CAACG,GAAS,CAACC,EACb,MAAM,IAAI,MAAM,8CAA8C,EAGhE,IAAMC,EAAgBL,EAAM,SAAW,OACjCM,EAAgBH,EAAQC,EAASC,EAEvC,GAAIP,EAAM,OAASQ,EACjB,MAAM,IAAI,MAAM,yBAAyB,EAG3C,IAAM8C,EAAajD,EAAQC,EAE3B,GAAIJ,EAAM,SAAW,GAEnB,OAAO,kBAAkB,IAAI,UAAU,IAAI,kBAAkBF,EAAM,OAAuBA,EAAM,WAAYsD,EAAa,CAAwC,EAAGjD,EAAOC,CAAM,CAAC,EAMpL,IAAM3B,EAAO,IAAI,kBAAkB2E,EAAa,CAAwC,EAClFC,EAAQ,IAAI,YAAYvD,EAAM,OAAQA,EAAM,WAAY,KAAK,MAAMA,EAAM,WAAa,CAAC,CAAC,EACxFwD,EAAQ,IAAI,YAAY7E,EAAK,MAAM,EACnC8E,EAAgBH,EAAa,GAE/BI,EAAY,EACZC,EAAY,EAChB,QAAS5E,EAAI,EAAGA,EAAI0E,EAAe1E,GAAK,EAAG,CACzC,IAAM6E,EAAKL,EAAMG,GAAW,EACtBG,EAAKN,EAAMG,GAAW,EACtBI,EAAKP,EAAMG,GAAW,EAE5BF,EAAMG,GAAW,EAAI,WAAaC,EAClCJ,EAAMG,GAAW,EAAI,WAAcC,IAAO,GAAOC,GAAM,EACvDL,EAAMG,GAAW,EAAI,WAAcE,IAAO,GAAOC,GAAM,GACvDN,EAAMG,GAAW,EAAI,WAAcG,IAAO,CAC5C,CAGA,IAAIC,EAAUN,EAAgB,EAC1BO,EAAUP,EAAgB,EAC9B,QAAS1E,EAAI0E,EAAe1E,EAAIuE,EAAYvE,IAC1CJ,EAAKqF,CAAO,EAAQhE,EAAM+D,CAAO,EACjCpF,EAAKqF,EAAU,CAAC,EAAIhE,EAAM+D,EAAU,CAAC,EACrCpF,EAAKqF,EAAU,CAAC,EAAIhE,EAAM+D,EAAU,CAAC,EACrCpF,EAAKqF,EAAU,CAAC,EAAI,IACpBD,GAAW,EACXC,GAAW,EAGb,OAAO,kBAAkB,IAAI,UAAUrF,EAAM0B,EAAOC,CAAM,CAAC,CAC7D,CAEA,MAAc,gBAAgB2D,EAA6C,CACzE,GAAI,CACF,OAAO,MAAM,KAAK,YAAYA,EAAY,SAAS,CACrD,MAAQ,CACN,OAAO,MAAM,KAAK,YAAYA,EAAY,aAAa,CACzD,CACF,CAEA,MAAc,YAAYA,EAAwB7D,EAAwD,CACxG,IAAM8D,EAAK,IAAI,oBAAoB9D,CAAM,EACnC+D,EAASD,EAAG,SAAS,UAAU,EACrCC,EAAO,MAAMF,CAA0B,EACvCE,EAAO,MAAM,EAEb,IAAMC,EAAuB,CAAC,EACxBC,EAASH,EAAG,SAAS,UAAU,EAErC,OAAa,CACX,GAAM,CAAE,KAAAI,EAAM,MAAAC,CAAM,EAAI,MAAMF,EAAO,KAAK,EAC1C,GAAIC,EAAM,MACVF,EAAO,KAAKG,CAAK,CACnB,CAEA,IAAMC,EAAcJ,EAAO,OAAO,CAACK,EAAKC,IAAUD,EAAMC,EAAM,OAAQ,CAAC,EACjE5E,EAAS,IAAI,WAAW0E,CAAW,EACrCG,EAAS,EACb,QAAWD,KAASN,EAClBtE,EAAO,IAAI4E,EAAOC,CAAM,EACxBA,GAAUD,EAAM,OAElB,OAAO5E,CACT,CAEA,IAAW,QAA+C,CACxD,OAAO,KAAK,cAAc,MAC5B,CAEA,IAAW,qBAAmD,CAC5D,OAAO,KAAK,cAAc,kBAC5B,CAEA,IAAW,sBAAkE,CAC3E,OAAO,KAAK,qBACd,CACF,EEjyBO,IAAM8E,EAAN,MAAMA,CAAyC,CA6BpD,YACmBC,EACjB,CADiB,cAAAA,EA3BnB,KAAQ,aAAe,EACvB,KAAiB,QAAwC,IAAI,IAU7D,KAAiB,oBAA2C,IAAI,IAChE,KAAiB,oBAA2C,IAAI,IAIhE,KAAiB,2BAA8BC,GAA4B,CACzE,IAAMC,EAAU,KAAK,oBAAoB,IAAID,CAAS,EAClDC,IAAY,SACd,KAAK,oBAAoB,OAAOA,CAAO,EACvC,KAAK,oBAAoB,OAAOD,CAAS,EACzC,KAAK,QAAQ,OAAOC,CAAO,EAE/B,EACA,KAAQ,cAA+B,CAAE,UAAW,GAAM,MAAO,MAAO,OAAQ,EAAG,UAAW,KAAM,EAKlG,KAAK,wBAA0B,KAAK,SAAS,eAC7C,KAAK,uBAA0BD,GAAsB,CACnD,KAAK,0BAA0BA,CAAS,EACxC,KAAK,2BAA2BA,CAAS,CAC3C,EACA,KAAK,SAAS,eAAiB,KAAK,sBACtC,CAEO,OAAc,CACnB,KAAK,aAAe,EACpB,KAAK,QAAQ,MAAM,EACnB,KAAK,oBAAoB,MAAM,EAC/B,KAAK,oBAAoB,MAAM,CACjC,CAEO,SAAgB,CACrB,KAAK,MAAM,EACP,KAAK,SAAS,iBAAmB,KAAK,yBACxC,KAAK,SAAS,eAAiB,KAAK,wBAExC,CAEO,WAAWE,EAAwBC,EAAgD,CACxF,IAAMC,EAAUF,GAAM,KAAK,eAErBG,EAAe,KAAK,oBAAoB,IAAID,CAAO,EACzD,OAAIC,IAAiB,SACnB,KAAK,SAAS,YAAYA,CAAY,EACtC,KAAK,oBAAoB,OAAOD,CAAO,EACvC,KAAK,oBAAoB,OAAOC,CAAY,GAG1C,CAAC,KAAK,QAAQ,IAAID,CAAO,GAAK,KAAK,QAAQ,MAAQN,EAAkB,kBACvE,KAAK,wBAAwB,EAG/B,KAAK,QAAQ,IAAIM,EAAS,CACxB,GAAGD,EACH,GAAIC,CACN,CAAC,EACMA,CACT,CAEO,SAASH,EAAiBK,EAAwCC,EAAoBC,EAAmBC,EAAsB,CAKpI,IAAMJ,EAAe,KAAK,oBAAoB,IAAIJ,CAAO,EACrDI,IAAiB,QACnB,KAAK,oBAAoB,OAAOA,CAAY,EAE9C,KAAK,cAAc,UAAYE,EAC/B,KAAK,cAAc,MAAQC,EAC3B,KAAK,cAAc,OAASC,EAC5B,IAAMT,EAAY,KAAK,SAAS,SAASM,EAAO,KAAK,aAAa,EAClE,KAAK,oBAAoB,IAAIL,EAASD,CAAS,EAC/C,KAAK,oBAAoB,IAAIA,EAAWC,CAAO,CACjD,CAEO,SAASA,EAA8C,CAC5D,OAAO,KAAK,QAAQ,IAAIA,CAAO,CACjC,CAEO,WAAWA,EAAuB,CACvC,KAAK,QAAQ,OAAOA,CAAO,EAC3B,IAAMD,EAAY,KAAK,oBAAoB,IAAIC,CAAO,EAClDD,IAAc,SAChB,KAAK,SAAS,YAAYA,CAAS,EACnC,KAAK,oBAAoB,OAAOC,CAAO,EACvC,KAAK,oBAAoB,OAAOD,CAAS,EAE7C,CAEO,WAAkB,CACvB,KAAK,QAAQ,MAAM,EACnB,QAAWA,KAAa,KAAK,oBAAoB,OAAO,EACtD,KAAK,SAAS,YAAYA,CAAS,EAErC,KAAK,oBAAoB,MAAM,EAC/B,KAAK,oBAAoB,MAAM,CACjC,CAEA,IAAW,QAA+C,CACxD,OAAO,KAAK,OACd,CAEA,IAAW,oBAAkD,CAC3D,OAAO,KAAK,mBACd,CAEA,IAAW,aAAsB,CAC/B,OAAO,KAAK,aAAe,CAC7B,CAEQ,yBAAgC,CACtC,OAAW,CAACC,CAAO,IAAK,KAAK,QAAS,CACpC,GAAI,KAAK,QAAQ,MAAQH,EAAkB,iBAAmB,EAC5D,MAEG,KAAK,oBAAoB,IAAIG,CAAO,GACvC,KAAK,QAAQ,OAAOA,CAAO,CAE/B,CACF,CACF,EAzIaH,EACa,iBAAmB,IADtC,IAAMY,GAANZ,ECVP,IAAAa,EAA8E,OAI9E,IAAAC,GAAsC,QAGtC,IAAMC,GAAkB,QAGlBC,GAAkB,mBACxBA,GAAgB,IAAI,qBAAmB,EAGhC,IAAMC,GAAN,KAAyD,CAK9D,YACmBC,EACAC,EACAC,EACjB,CAHiB,WAAAF,EACA,cAAAC,EACA,mBAAAC,EAPnB,KAAQ,MAAQ,EAChB,KAAQ,SAAW,MAQjB,iBAAa,CACX,YAAa,KAAK,MAAM,WAAa,EACrC,QAASJ,GACT,aAAc,KAAK,MAAM,iBAC3B,CAAC,EAAE,KAAKK,GAAK,KAAK,KAAOA,CAAC,CAC5B,CAEO,OAAc,CAOf,KAAK,OACP,KAAK,KAAK,QAAQ,EAEjB,KAAK,KAAa,SAAS,KAAK,CAAC,EAClC,KAAK,KAAK,KAAK,EAAGL,GAAiB,KAAK,MAAM,iBAAiB,EAEnE,CAEO,KAAKM,EAAuB,CAGjC,GAFA,KAAK,MAAQ,EACb,KAAK,SAAW,GACZ,KAAK,KAAM,CACb,IAAMC,EAAYD,EAAO,OAAO,CAAC,IAAM,EAAI,EAAIE,GAC7C,KAAK,cAAc,MAAM,cAAc,aACvC,KAAK,cAAc,MAAM,eAAe,MAAM,EAChD,KAAK,KAAK,KAAKD,EAAW,KAAM,KAAK,MAAM,iBAAiB,CAC9D,CACF,CAEO,IAAIE,EAAmBC,EAAeC,EAAmB,CAC9D,GAAI,OAAK,UAAY,CAAC,KAAK,MAI3B,IADA,KAAK,OAASA,EAAMD,EAChB,KAAK,MAAQ,KAAK,MAAM,eAAgB,CAC1C,QAAQ,KAAK,gCAAgC,EAC7C,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,EAClB,MACF,CACA,GAAI,CACF,KAAK,KAAK,OAAOD,EAAMC,EAAOC,CAAG,CACnC,OAASC,EAAG,CACV,QAAQ,KAAK,uCAAuCA,CAAC,EAAE,EACvD,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,CACpB,EACF,CAEO,OAAOC,EAA8C,CAC1D,GAAI,KAAK,UAAY,CAACA,GAAW,CAAC,KAAK,KACrC,MAAO,GAGT,IAAMC,EAAQ,KAAK,KAAK,MAClBC,EAAS,KAAK,KAAK,OAGzB,GAAI,CAACD,GAAS,CAACC,EACb,OAAIA,GACF,KAAK,SAAS,cAAcA,CAAM,EAE7B,GAGT,IAAMC,EAASC,EAAc,aAAa,OAAWH,EAAOC,CAAM,EAClE,OAAAC,EAAO,WAAW,IAAI,GAAG,aAAa,IAAI,UAAU,KAAK,KAAK,MAAyCF,EAAOC,CAAM,EAAG,EAAG,CAAC,EACvH,KAAK,KAAK,YAAchB,IAC1B,KAAK,KAAK,QAAQ,EAEpB,KAAK,SAAS,SAASiB,CAAM,EACtB,EACT,CACF,EASA,SAASR,GAAgBU,EAAqBC,EAAgD,CAC5F,IAAIC,EAAK,EACT,GAAI,CAACD,EAGH,OAAOC,EAET,GAAIF,EAAK,UAAU,EACjB,GAAIA,EAAK,YAAY,EACnBE,EAAKC,GAAUF,EAAO,WAAW,IAAI,UAC5BD,EAAK,QAAQ,EAAG,CACzB,IAAMI,EAAKJ,EAAK,YAAqC,WAAWA,EAAK,WAAW,CAAC,EACjFE,KAAK,cAAW,GAAGE,CAAC,CACtB,MACEF,EAAKC,GAAUF,EAAO,KAAKD,EAAK,WAAW,CAAC,EAAE,IAAI,UAGhDA,EAAK,YAAY,EACnBE,EAAKC,GAAUF,EAAO,WAAW,IAAI,UAC5BD,EAAK,QAAQ,EAAG,CACzB,IAAMI,EAAKJ,EAAK,YAAqC,WAAWA,EAAK,WAAW,CAAC,EACjFE,KAAK,cAAW,GAAGE,CAAC,CACtB,MACEF,EAAKC,GAAUF,EAAO,KAAKD,EAAK,WAAW,CAAC,EAAE,IAAI,EAGtD,OAAOE,CACT,CAGA,SAASC,GAAUE,EAAyB,CAC1C,OAAI,aAAmBA,GACfA,EAAQ,MAAS,IAAMA,IAAU,EAAI,MAAS,IAAMA,IAAU,GAAK,MAAS,EAAIA,IAAU,GAAK,GACzG,CCtIO,IAAMC,GAAN,KAAwB,CAE7B,YACmBC,EACAC,EACAC,EACAC,EACjB,CAJiB,cAAAH,EACA,WAAAC,EACA,eAAAC,EACA,eAAAC,EALnB,KAAQ,cAA+B,CAAE,UAAW,GAAM,MAAO,MAAO,OAAQ,EAAG,UAAW,OAAQ,CAMnG,CAMI,SAASC,EAA4C,CAC1D,KAAK,cAAc,UAAY,KAAK,MAAM,eAC1C,KAAK,SAAS,SAASA,EAAK,KAAK,aAAa,CAChD,CAOO,cAAcC,EAAsB,CACzC,GAAI,KAAK,MAAM,eAAgB,CAC7B,IAAIC,EAAW,KAAK,UAAU,UAC1BA,EAAS,QAAU,IAAMA,EAAS,SAAW,MAC/CA,EAAWC,GAEb,IAAMC,EAAO,KAAK,KAAKH,EAASC,EAAS,MAAM,EAC/C,QAASG,EAAI,EAAGA,EAAID,EAAM,EAAEC,EAC1B,KAAK,UAAU,MAAM,cAAc,SAAS,CAEhD,CACF,CACF,ECrCO,IAAMC,GAAN,KAAsB,CAE3B,YACmBC,EACjB,CADiB,cAAAA,EAFnB,KAAQ,cAA+B,CAAE,UAAW,GAAM,MAAO,MAAO,OAAQ,EAAG,UAAW,KAAM,CAGjG,CAMI,SAASC,EAA4C,CAC1D,KAAK,SAAS,SAASA,EAAK,KAAK,aAAa,CAChD,CACF,ECiCA,IAAMC,GAAsC,CAC1C,kBAAmB,GACnB,WAAY,SACZ,aAAc,GACd,eAAgB,GAChB,kBAAmB,KACnB,eAAgB,SAChB,aAAc,IACd,gBAAiB,GACjB,WAAY,GACZ,aAAc,SACd,aAAc,GACd,eAAgB,QAClB,EAGMC,GAAyB,KAsBxB,IAAMC,GAAN,KAAsD,CAW3D,YAAYC,EAAoC,CANhD,KAAQ,aAA8B,CAAC,EAEvC,KAAQ,UAAwC,IAAI,IACpD,KAAiB,cAAgB,IAAIC,EACrC,KAAgB,aAA6B,KAAK,cAAc,MAG9D,KAAK,MAAQ,OAAO,OAAO,CAAC,EAAGC,GAAiBF,CAAI,EACpD,KAAK,aAAe,OAAO,OAAO,CAAC,EAAGE,GAAiBF,CAAI,CAC7D,CAEO,SAAgB,CACrB,QAAWG,KAAO,KAAK,aACrBA,EAAI,QAAQ,EAEd,KAAK,aAAa,OAAS,EAC3B,KAAK,UAAU,MAAM,EACrB,KAAK,cAAc,QAAQ,CAC7B,CAEQ,iBAAiBC,EAA2B,CAClD,QAAWD,KAAOC,EAChB,KAAK,aAAa,KAAKD,CAAG,CAE9B,CAEO,SAASE,EAA8B,CAS5C,GARA,KAAK,UAAYA,EAGjB,KAAK,UAAY,IAAIC,EAAcD,CAAQ,EAC3C,KAAK,SAAW,IAAIE,EAAaF,EAAU,KAAK,UAAW,KAAK,KAAK,EACrE,KAAK,SAAS,aAAe,IAAM,KAAK,cAAc,KAAK,EAGvD,KAAK,MAAM,kBAAmB,CAChC,IAAMG,EAAYH,EAAS,QAAQ,eAAiB,CAAC,EACrDG,EAAU,iBAAmB,GAC7BA,EAAU,kBAAoB,GAC9BA,EAAU,gBAAkB,GAC5BH,EAAS,QAAQ,cAAgBG,CACnC,CAiCA,GA/BA,KAAK,cACH,KAAK,UACL,KAAK,SAGLH,EAAS,OAAO,mBAAmB,CAAE,OAAQ,IAAK,MAAO,GAAI,EAAGI,GAAU,KAAK,QAAQA,CAAM,CAAC,EAC9FJ,EAAS,OAAO,mBAAmB,CAAE,OAAQ,IAAK,MAAO,GAAI,EAAGI,GAAU,KAAK,QAAQA,CAAM,CAAC,EAC9FJ,EAAS,OAAO,mBAAmB,CAAE,MAAO,GAAI,EAAGI,GAAU,KAAK,KAAKA,CAAM,CAAC,EAC9EJ,EAAS,OAAO,mBAAmB,CAAE,OAAQ,IAAK,MAAO,GAAI,EAAGI,GAAU,KAAK,yBAAyBA,CAAM,CAAC,EAG/GJ,EAAS,SAASK,GAAS,KAAK,UAAU,OAAOA,CAAK,CAAC,EAQvDL,EAAS,OAAO,mBAAmB,CAAE,cAAe,IAAK,MAAO,GAAI,EAAG,IAAM,KAAK,MAAM,CAAC,EACzFA,EAAS,OAAO,mBAAmB,CAAE,MAAO,GAAI,EAAG,IAAM,KAAK,MAAM,CAAC,EACrEA,EAAS,MAAM,cAAc,eAAe,IAAM,KAAK,MAAM,CAAC,EAG9DA,EAAS,OAAO,eAAe,IAAM,KAAK,UAAU,cAAc,CAAC,EAGnEA,EAAS,SAASM,GAAW,KAAK,UAAU,eAAeA,CAAO,CAAC,CACrE,EAGI,KAAK,MAAM,aAAc,CAC3B,IAAMC,EAAe,IAAIC,GAAkB,KAAK,SAAW,KAAK,MAAO,KAAK,UAAYR,CAAQ,EAC1FS,EAAe,IAAIC,GAAa,KAAK,MAAOH,EAAcP,CAAQ,EACxE,KAAK,UAAU,IAAI,QAASS,CAAY,EACxC,KAAK,cACHT,EAAS,MAAM,cAAc,QAAQ,mBAAmB,CAAE,MAAO,GAAI,EAAGS,CAAY,CACtF,CACF,CAGA,GAAI,KAAK,MAAM,WAAY,CACzB,IAAME,EAAa,IAAIC,GAAgB,KAAK,QAAS,EAC/CC,EAAa,IAAIC,GAAW,KAAK,MAAO,KAAK,UAAYH,EAAYX,CAAQ,EACnF,KAAK,UAAU,IAAI,MAAOa,CAAU,EACpC,KAAK,cACHb,EAAS,MAAM,cAAc,QAAQ,mBAAmB,KAAMa,CAAU,CAC1E,CACF,CAGA,GAAI,KAAK,MAAM,aAAc,CAC3B,IAAME,EAAe,IAAIC,GAAkB,KAAK,QAAS,EACnDC,EAAe,IAAIC,GAAqB,KAAK,MAAO,KAAK,UAAYH,EAAcf,CAAQ,EACjG,KAAK,UAAU,IAAI,QAASiB,CAAY,EACxC,KAAK,cACHF,EACAE,EACAjB,EAAS,MAAM,cAAc,QAAQ,mBAAmB,CAAE,MAAO,GAAI,EAAGiB,CAAY,CACtF,CACF,CACF,CAGO,OAAiB,CAEtB,KAAK,MAAM,eAAiB,KAAK,aAAa,eAC9C,KAAK,MAAM,kBAAoB,KAAK,aAAa,kBAEjD,KAAK,UAAU,MAAM,EAErB,QAAWE,KAAW,KAAK,UAAU,OAAO,EAC1CA,EAAQ,MAAM,EAEhB,MAAO,EACT,CAEA,IAAW,cAAuB,CAChC,OAAO,KAAK,UAAU,SAAS,GAAK,EACtC,CAEA,IAAW,aAAaC,EAAe,CACrC,KAAK,UAAU,SAASA,CAAK,EAC7B,KAAK,MAAM,aAAeA,CAC5B,CAEA,IAAW,cAAuB,CAChC,OAAI,KAAK,SACA,KAAK,SAAS,SAAS,EAEzB,EACT,CAEA,IAAW,iBAA2B,CACpC,OAAO,KAAK,MAAM,eACpB,CAEA,IAAW,gBAAgBC,EAAgB,CACzC,KAAK,MAAM,gBAAkBA,EAC7B,KAAK,WAAW,gBAAgBA,CAAK,CACvC,CAEO,qBAAqBC,EAAWC,EAA0C,CAC/E,OAAO,KAAK,UAAU,qBAAqBD,EAAGC,CAAC,CACjD,CAEO,wBAAwBD,EAAWC,EAA0C,CAClF,OAAO,KAAK,UAAU,wBAAwBD,EAAGC,CAAC,CACpD,CAEQ,QAAQC,EAAiB,CAC/B,KAAK,WAAW,MAAM,MAAMA,EAAG,EAAK,CACtC,CAEQ,QAAQpB,EAAwC,CACtD,QAASqB,EAAI,EAAGA,EAAIrB,EAAO,OAAQ,EAAEqB,EAC3BrB,EAAOqB,CAAC,IACT,KACH,KAAK,MAAM,eAAiB,IAIlC,MAAO,EACT,CAEQ,QAAQrB,EAAwC,CACtD,QAASqB,EAAI,EAAGA,EAAIrB,EAAO,OAAQ,EAAEqB,EAC3BrB,EAAOqB,CAAC,IACT,KACH,KAAK,MAAM,eAAiB,IAIlC,MAAO,EACT,CAGQ,KAAKrB,EAAwC,CACnD,OAAIA,EAAO,CAAC,EACH,GAOL,KAAK,MAAM,cACb,KAAK,QAAQ,kBAAkB,EACxB,IAEF,EACT,CAYQ,yBAAyBA,EAAwC,CACvE,GAAIA,EAAO,OAAS,EAClB,MAAO,GAET,GAAIA,EAAO,CAAC,IAAM,EAChB,OAAQA,EAAO,CAAC,EAAG,CACjB,IAAK,GACH,YAAK,QAAQ,SAASA,EAAO,CAAC,CAAC,MAAwB,KAAK,MAAM,iBAAiB,GAAG,EAC/E,GACT,IAAK,GACH,KAAK,MAAM,kBAAoB,KAAK,aAAa,kBACjD,KAAK,QAAQ,SAASA,EAAO,CAAC,CAAC,MAAwB,KAAK,MAAM,iBAAiB,GAAG,EAEtF,QAAWe,KAAW,KAAK,UAAU,OAAO,EAC1CA,EAAQ,MAAM,EAEhB,MAAO,GACT,IAAK,GACH,OAAIf,EAAO,OAAS,GAAK,EAAEA,EAAO,CAAC,YAAa,QAAUA,EAAO,CAAC,GAAKsB,IACrE,KAAK,MAAM,kBAAoBtB,EAAO,CAAC,EACvC,KAAK,QAAQ,SAASA,EAAO,CAAC,CAAC,MAAwB,KAAK,MAAM,iBAAiB,GAAG,GAEtF,KAAK,QAAQ,SAASA,EAAO,CAAC,CAAC,KAA4B,EAEtD,GACT,IAAK,GACH,YAAK,QAAQ,SAASA,EAAO,CAAC,CAAC,MAAwBsB,EAAsB,GAAG,EACzE,GACT,QACE,YAAK,QAAQ,SAAStB,EAAO,CAAC,CAAC,KAA4B,EACpD,EACX,CAEF,GAAIA,EAAO,CAAC,IAAM,EAChB,OAAQA,EAAO,CAAC,EAAG,CAEjB,IAAK,GACH,IAAIuB,EAAQ,KAAK,WAAW,YAAY,IAAI,OAAO,MAC/CC,EAAS,KAAK,WAAW,YAAY,IAAI,OAAO,OACpD,GAAI,CAACD,GAAS,CAACC,EAAQ,CAGrB,IAAMC,EAAWC,EACjBH,GAAS,KAAK,WAAW,MAAQ,IAAME,EAAS,MAChDD,GAAU,KAAK,WAAW,MAAQ,IAAMC,EAAS,MACnD,CACA,GAAIF,EAAQC,EAAS,KAAK,MAAM,WAC9B,KAAK,QAAQ,SAASxB,EAAO,CAAC,CAAC,MAAwBuB,EAAM,QAAQ,CAAC,CAAC,IAAIC,EAAO,QAAQ,CAAC,CAAC,GAAG,MAC1F,CAEL,IAAMN,EAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,UAAU,CAAC,EACrD,KAAK,QAAQ,SAASlB,EAAO,CAAC,CAAC,MAAwBkB,CAAC,IAAIA,CAAC,GAAG,CAClE,CACA,MAAO,GACT,IAAK,GAEH,IAAMA,EAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,UAAU,CAAC,EACrD,YAAK,QAAQ,SAASlB,EAAO,CAAC,CAAC,MAAwBkB,CAAC,IAAIA,CAAC,GAAG,EACzD,GACT,QACE,YAAK,QAAQ,SAASlB,EAAO,CAAC,CAAC,KAA4B,EACpD,EACX,CAGF,YAAK,QAAQ,SAASA,EAAO,CAAC,CAAC,KAA0B,EAClD,EACT,CACF", +- "names": ["exports", "red", "n", "green", "blue", "alpha", "toRGBA8888", "r", "g", "b", "a", "fromRGBA8888", "color", "nearestColorIndex", "palette", "min", "idx", "i", "dr", "dg", "db", "d", "clamp", "low", "high", "value", "h2c", "t1", "t2", "c", "HLStoRGB", "h", "l", "s", "v", "normalizeRGB", "normalizeHLS", "p", "require_lib", "__commonJSMin", "exports", "InWasm", "z", "b", "r", "def", "t", "s", "d", "m", "W", "e", "require_Base64Decoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmDecode", "MAP", "el", "D", "i", "EMPTY", "Base64Decoder", "keepSize", "maxBytes", "initialBytes", "m", "bytes", "requested", "needed", "newSize", "addPages", "data", "require_QoiDecoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmQoiDecode", "QoiDecoder", "keepSize", "d", "pixels", "ib", "dl", "bytes", "chunkP", "exports", "Colors_1", "wasm_1", "decodeBase64", "bytestring", "result", "WASM_BYTES", "WASM_MODULE", "NULL_CANVAS", "CallbackProxy", "width", "mode", "DEFAULT_OPTIONS", "DecoderAsync", "opts", "cbProxy", "importObj", "inst", "Decoder", "exports", "_instance", "_cbProxy", "module", "pixels", "offset", "additionalPixels", "newCanvas", "adv", "remaining", "c", "i", "fillColor", "palette", "paletteLimit", "truncate", "data", "start", "end", "p", "length", "j", "currentWidth", "escape", "final", "finalOffset", "bw", "currentHeight", "decode", "dec", "decodeAsync", "toDisposable", "fn", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "len", "EventUtils", "forward", "from", "to", "e", "map", "i", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "import_Colors", "ImageRenderer", "_ImageRenderer", "Disposable", "_terminal", "MutableDisposable", "parent", "option", "toDisposable", "localDocument", "width", "height", "canvas", "ctx", "buffer", "imgData", "img", "value", "start", "end", "layer", "y", "w", "h", "imgSpec", "tileId", "col", "row", "count", "cols", "sx", "sy", "dx", "dy", "finalWidth", "finalHeight", "spec", "currentWidth", "currentHeight", "originalWidth", "originalHeight", "renderer", "key", "screenElement", "bWidth", "blueprint", "d32", "black", "white", "shift", "offset", "x", "ctx2", "i", "bitmap", "stringFromCodePoint", "codePoint", "AttributeData", "_AttributeData", "ExtendedAttrs", "value", "newObj", "_ExtendedAttrs", "ext", "urlId", "val", "CellData", "_CellData", "AttributeData", "ExtendedAttrs", "value", "obj", "stringFromCodePoint", "combined", "code", "second", "other", "thisDefault", "otherDefault", "CELL_SIZE_DEFAULT", "ImageTileInfo", "imageId", "tileId", "ImageStorage", "_terminal", "_renderer", "_opts", "CellData", "e", "spec", "value", "storedPixels", "id", "zero", "img", "opts", "cellSize", "cols", "rows", "buffer", "termCols", "termRows", "originX", "originY", "offset", "tileCount", "row", "line", "col", "endMarker", "imgSpec", "range", "hasTopImages", "hasBottomImages", "start", "end", "drawCalls", "placeholderCalls", "startTile", "startCol", "count", "nextE", "a", "b", "call", "metrics", "oldCol", "tilesPerRow", "hasData", "rightCol", "lastTile", "expandCol", "x", "y", "orig", "canvas", "ImageRenderer", "room", "used", "current", "workCell", "old", "oldSpec", "extattr", "payload", "import_Base64Decoder", "import_QoiDecoder", "toStr", "data", "s", "i", "toInt", "v", "toSize", "toName", "bs", "b", "DECODERS", "FILE_MARKER", "MULTIPARTFILE_MARKER", "FILEPART_MARKER", "FILEEND_MARKER", "REPORTCELLSIZE_MARKER", "MAX_FIELDCHARS", "HeaderParser", "k", "start", "end", "state", "pos", "buffer", "c", "UNSUPPORTED_TYPE", "imageType", "d", "d32", "width", "height", "jpgSize", "dim", "pos", "limit", "i", "len", "blockLength", "DEFAULT_HEADER", "IIPHandler", "_opts", "_renderer", "_storage", "_coreTerminal", "HeaderParser", "maxEncodedBytes", "initialBytes", "Base64Decoder", "QoiDecoder", "data", "start", "end", "dataPos", "success", "seqType", "w", "CELL_SIZE_DEFAULT", "h", "scale", "report", "cond", "metrics", "UNSUPPORTED_TYPE", "imageType", "blob", "canvas", "ImageRenderer", "bm", "e", "cw", "ch", "width", "height", "rw", "rh", "wf", "hf", "f", "s", "total", "cdim", "import_Base64Decoder", "parseKittyCommand", "data", "cmd", "parts", "part", "eqIdx", "key", "value", "numValue", "DECODER_OK", "KittyGraphicsHandler", "_opts", "_renderer", "_kittyStorage", "_coreTerminal", "key", "pending", "data", "start", "end", "controlEnd", "i", "copyLength", "parseKittyCommand", "payloadStart", "pendingKey", "previousEncodedSize", "decoderToRelease", "Base64Decoder", "success", "cmd", "isMoreComing", "decodeError", "finalCmd", "decoder", "imageBytes", "result", "str", "bytes", "id", "image", "quiet", "format", "width", "height", "bytesPerPixel", "expectedBytes", "message", "placementId", "isOk", "pPart", "response", "bitmap", "cropX", "cropY", "cropW", "cropH", "maxCropW", "maxCropH", "finalCropW", "finalCropH", "cropped", "cw", "CELL_SIZE_DEFAULT", "ch", "imgCols", "imgRows", "w", "h", "buffer", "savedX", "savedY", "savedYbase", "layer", "scaled", "xOffset", "yOffset", "canvasW", "canvasH", "offsetCanvas", "ImageRenderer", "offsetCtx", "offsetBitmap", "zIndex", "scrolled", "e", "blob", "url", "img", "resolve", "reject", "canvas", "pixelCount", "src32", "dst32", "alignedPixels", "srcOffset", "dstOffset", "b0", "b1", "b2", "srcByte", "dstByte", "compressed", "ds", "writer", "chunks", "reader", "done", "value", "totalLength", "sum", "chunk", "offset", "_KittyImageStorage", "_storage", "storageId", "kittyId", "id", "imageData", "imageId", "oldStorageId", "image", "scrolling", "layer", "zIndex", "KittyImageStorage", "import_Colors", "import_Decoder", "MEM_PERMA_LIMIT", "DEFAULT_PALETTE", "SixelHandler", "_opts", "_storage", "_coreTerminal", "d", "params", "fillColor", "extractActiveBg", "data", "start", "end", "e", "success", "width", "height", "canvas", "ImageRenderer", "attr", "colors", "bg", "convertLe", "t", "color", "SixelImageStorage", "_storage", "_opts", "_renderer", "_terminal", "img", "height", "cellSize", "CELL_SIZE_DEFAULT", "rows", "i", "IIPImageStorage", "_storage", "img", "DEFAULT_OPTIONS", "MAX_SIXEL_PALETTE_SIZE", "ImageAddon", "opts", "Emitter", "DEFAULT_OPTIONS", "obj", "args", "terminal", "ImageRenderer", "ImageStorage", "windowOps", "params", "range", "metrics", "sixelStorage", "SixelImageStorage", "sixelHandler", "SixelHandler", "iipStorage", "IIPImageStorage", "iipHandler", "IIPHandler", "kittyStorage", "KittyImageStorage", "kittyHandler", "KittyGraphicsHandler", "handler", "limit", "value", "x", "y", "s", "i", "MAX_SIXEL_PALETTE_SIZE", "width", "height", "cellSize", "CELL_SIZE_DEFAULT"] ++ "sourcesContent": [null, "\"use strict\";\n/**\n * Copyright (c) 2022, 2026 Joerg Breitbart\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = InWasm;\nlet z = (s) => {\n if (Uint8Array.fromBase64)\n return Uint8Array.fromBase64(s);\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const b = atob(s);\n const r = new Uint8Array(b.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = b.charCodeAt(i);\n return r;\n};\nfunction InWasm(def) {\n if (def.d) {\n const { t, s, d } = def;\n let b;\n let m;\n const W = WebAssembly;\n if (t === 0 /* OutputType.INSTANCE */) {\n if (s)\n return (e) => new W.Instance(m || (m = new W.Module(b || (b = z(d)))), e);\n return (e) => m\n ? W.instantiate(m, e)\n : W.instantiate(b || (b = z(d)), e).then(r => (m = r.module) && r.instance);\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => m || (m = new W.Module(b || (b = z(d))));\n return () => m\n ? Promise.resolve(m)\n : W.compile(b || (b = z(d))).then(r => m = r);\n }\n if (s)\n return () => b || (b = z(d));\n return () => Promise.resolve(b || (b = z(d)));\n }\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023, 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#828e69684093b2c6:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqLBgKZBAEKf0GIKCgCAEGgKGohAUGEKCgCACIDQaAoaiEAQYAoKAIAQQFrQXxxIgRBoChqIQUgBEEQayADSgRAIARBkChqIQMDQCABIABBA2otAABBAnQoAoAgIABBAmotAABBAnQoAoAYIABBAWotAABBAnQoAoAQIAAtAABBAnQoAoAIcnJyIgY2AgAgAUEDaiAAQQdqLQAAQQJ0KAKAICAAQQZqLQAAQQJ0KAKAGCAAQQVqLQAAQQJ0KAKAECAAQQRqLQAAQQJ0KAKACHJyciIHNgIAIAFBBmogAEELai0AAEECdCgCgCAgAEEKai0AAEECdCgCgBggAEEJai0AAEECdCgCgBAgAEEIai0AAEECdCgCgAhycnIiCDYCACABQQlqIABBD2otAABBAnQoAoAgIABBDmotAABBAnQoAoAYIABBDWotAABBAnQoAoAQIABBDGotAABBAnQoAoAIcnJyIgk2AgAgAiAGciAHciAIciAJciECIAFBDGohASAAQRBqIgAgA0kNAAsLIAAgBUkEQANAIAEgAEEDai0AAEECdCgCgCAgAEECai0AAEECdCgCgBggAEEBai0AAEECdCgCgBAgAC0AAEECdCgCgAhycnIiAzYCACACIANyIQIgAUEDaiEBIABBBGoiACAFSQ0ACwtBfyEAIAJB////B00Ef0GEKCAENgIAQYgoIAFBoChrNgIAQQAFQX8LC+0BAQR/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQX8hAxAADQFBgCgoAgAhAUGEKCgCACEAC0F/IQMgASAAayIBQQJIDQAgAC0AoShBAnQoAoAQIAAtAKAoQQJ0KAKACHIhAgJ/IAFBBEYEQEEDQQQgAC0AoyhBPUYbIAAtAKIoQT1GayEBC0EBIAFBA0kNABogAC0AoihBAnQoAoAYIAJyIQJBAiABQQRHDQAaIAAtAKMoQQJ0KAKAICACciECQQMLIQEgAkH///8HSw0AQQAhA0GIKCgCACIAIAI2AKAoQYgoIAAgAWo2AgALIAML'}/*inwasm#828e69684093b2c6:rdef-end:\"decode\"*/);\n// SIMD version (speedup ~1.4x, not covered by tests yet)\n/*\nconst wasmDecode = InWasm({\n name: 'decode',\n type: OutputType.INSTANCE,\n mode: OutputMode.SYNC,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-msimd128', '-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n #include \n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int dummy[4];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${P32.D0 * 4};\n unsigned int *D1 = (unsigned int *) ${P32.D1 * 4};\n unsigned int *D2 = (unsigned int *) ${P32.D2 * 4};\n unsigned int *D3 = (unsigned int *) ${P32.D3 * 4};\n State *state = (State *) ${P32.STATE * 4};\n\n #define packed_byte(x) wasm_i8x16_splat((char) x)\n #define packed_dword(x) wasm_i32x4_splat(x)\n #define masked(x, mask) wasm_v128_and(x, wasm_i32x4_splat(mask))\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int error = 0;\n\n v128_t err = wasm_i8x16_splat(0);\n unsigned char *end16 = state->data + (nsp & ~15);\n while (src < end16) {\n v128_t data = wasm_v128_load((v128_t *) src);\n\n // wasm-simd rewrite of http://0x80.pl/notesen/2016-01-17-sse-base64-decoding.html#vector-lookup-pshufb\n const v128_t higher_nibble = wasm_u32x4_shr(data, 4) & packed_byte(0x0f);\n const char linv = 1;\n const char hinv = 0;\n\n const v128_t lower_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n linv, linv, 0x2b, 0x30,\n 0x41, 0x50, 0x61, 0x70,\n linv, linv, linv, linv,\n linv, linv, linv, linv\n );\n const v128_t upper_bound_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n hinv, hinv, 0x2b, 0x39,\n 0x4f, 0x5a, 0x6f, 0x7a,\n hinv, hinv, hinv, hinv,\n hinv, hinv, hinv, hinv\n );\n // the difference between the shift and lower bound\n const v128_t shift_LUT = wasm_i8x16_const(\n // order: 0 1 2 3 4 5 6 7 8 9 a b c d e f\n 0x00, 0x00, 0x3e - 0x2b, 0x34 - 0x30,\n 0x00 - 0x41, 0x0f - 0x50, 0x1a - 0x61, 0x29 - 0x70,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00\n );\n\n const v128_t upper_bound = wasm_i8x16_swizzle(upper_bound_LUT, higher_nibble);\n const v128_t lower_bound = wasm_i8x16_swizzle(lower_bound_LUT, higher_nibble);\n\n const v128_t below = wasm_i8x16_lt(data, lower_bound);\n const v128_t above = wasm_i8x16_gt(data, upper_bound);\n const v128_t eq_2f = wasm_i8x16_eq(data, packed_byte(0x2f));\n\n // in_range = not (below or above) or eq_2f\n // outside = not in_range = below or above and not eq_2f (from deMorgan law)\n const v128_t outside = wasm_v128_andnot(eq_2f, above | below);\n err = wasm_v128_or(err, outside);\n\n const v128_t shift = wasm_i8x16_swizzle(shift_LUT, higher_nibble);\n const v128_t t0 = wasm_i8x16_add(data, shift);\n v128_t v = wasm_i8x16_add(t0, wasm_v128_and(eq_2f, packed_byte(-3)));\n\n // pack bytes\n const v128_t ca = masked(v, 0x003f003f);\n const v128_t db = masked(v, 0x3f003f00);\n const v128_t t00 = wasm_v128_or(wasm_u32x4_shr(db, 8), wasm_i32x4_shl(ca, 6));\n v128_t res = wasm_v128_or(wasm_u32x4_shr(t00, 16), wasm_i32x4_shl(t00, 12));\n res = wasm_i8x16_swizzle(res, wasm_i8x16_const(2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 16, 16, 16, 16));\n\n wasm_v128_store((v128_t *) dst, res);\n dst += 12;\n src += 16;\n }\n //if (wasm_i8x16_bitmask(err) != 0) return -1;\n if (wasm_v128_any_true(err)) return -1;\n\n // operate on 4-byte blocks\n while (src < end) {\n error |= *((unsigned int *) dst) = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]];\n dst += 3;\n src += 4;\n }\n if (error >> 24) return -1;\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return -1;\n rem = state->wp - state->sp;\n if (rem < 2) return -1;\n\n unsigned char *src = state->data + state->sp;\n if (rem == 4) {\n if (src[3] == 61) rem--;\n if (src[2] == 61) rem--;\n }\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2) {\n accu |= D2[src[2]];\n dp++;\n if (rem == 4) {\n accu |= D3[src[3]];\n dp++;\n }\n }\n if (accu >> 24) return -1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return 0;\n }\n `\n});\n*/\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 stream decoder.\n *\n * Features / assumptions:\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n /**\n * @param keepSize Keep the wasm instance below this limit when calling `release()`.\n * @param maxBytes Max allowed bytes to allocate.\n * @param initialBytes Initial bytes to allocate.\n */\n constructor(keepSize, maxBytes, initialBytes) {\n this._inst = null;\n this._ended = true;\n this._bytes = 0;\n this.keepSize = keepSize !== null && keepSize !== void 0 ? keepSize : 1048576 /* Bytes.KEEP */;\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : 4294901760 /* Bytes.MAX */;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : 32768 /* Bytes.INITIAL */;\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw new Error('invalid byte settings');\n }\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._bytes > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n * @param maxBytes Max allowed bytes to allocate (overwrites ctor value).\n * @param initialBytes Initial bytes to allocate (overwrites ctor value).\n */\n init(maxBytes, initialBytes) {\n this.maxBytes = maxBytes !== null && maxBytes !== void 0 ? maxBytes : this.maxBytes;\n this._bytes = initialBytes !== null && initialBytes !== void 0 ? initialBytes : Math.min(this._bytes, this.maxBytes);\n if (this._bytes > this.maxBytes || this.maxBytes > 4294901760 /* Bytes.MAX */) {\n throw Error('invalid byte settings');\n }\n let m = this._m32;\n const bytes = this._bytes + 5152 /* Bytes._DATA_OFFSET */;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n this._ended = false;\n }\n /**\n * Realloc memory. Realloc only happens, if the requested\n * size doesn't fit in the current memory.\n * The new size will be capped by `maxBytes`.\n * @param requested Bytes to be stored.\n */\n _realloc(requested) {\n const needed = this._m32[1280 /* P32.STATE_WP */] + requested;\n if (this._bytes < needed) {\n if (needed > this.maxBytes) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n let newSize = this._bytes;\n while ((newSize *= 2) < needed) { }\n newSize = Math.min(newSize, this.maxBytes);\n if (newSize < needed) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n if (newSize + 5152 /* Bytes._DATA_OFFSET */ > this._mem.buffer.byteLength) {\n const addPages = Math.ceil((newSize + 5152 /* Bytes._DATA_OFFSET */ - this._mem.buffer.byteLength) / 65536);\n this._mem.grow(addPages);\n this._m32 = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 5152 /* Bytes._DATA_OFFSET */);\n }\n this._bytes = newSize;\n }\n return 0 /* DecodeStatus.OK */;\n }\n /**\n * Put bytes in `data` into the decoder.\n * Additionally decodes the payload, if it reached 2^17 bytes.\n * The return value indicates the type of issue.\n * @param data Bytes to be loaded.\n */\n put(data) {\n if (!this._inst || this._ended) {\n return -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n if (this._realloc(data.length)) {\n return -3 /* DecodeStatus.SIZE_EXCEEDED */;\n }\n const m = this._m32;\n this._d.set(data, m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += data.length;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072\n ? this._inst.exports.dec()\n : 0 /* DecodeStatus.OK */;\n }\n /**\n * End the current decoding.\n * Also decodes leftover payload from previous put calls.\n */\n end() {\n this._ended = true;\n return this._inst\n ? this._inst.exports.end()\n : -2 /* DecodeStatus.NOT_INITIALIZED */;\n }\n /**\n * Bytes loaded into the decoder.\n */\n get loadedBytes() {\n return this._inst\n ? this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n /**\n * Free bytes to feed to the decoder.\n */\n get freeBytes() {\n return this._inst\n ? this.maxBytes - this._m32[1280 /* P32.STATE_WP */]\n : 0;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_runtime_1 = require(\"inwasm-runtime\");\nconst wasmQoiDecode = (0, inwasm_runtime_1.InWasm)(/*inwasm#459f9e1bfb80b1a8:rdef-start:\"qoi_decode\"*/{s:1,t:0,d:'AGFzbQEAAAABCgJgAABgA39/fwACDwEDZW52Bm1lbW9yeQIAAQMDAgABBwcBA2RlYwABCAEACu4EAgwAQQBBAEGAAvwLAAveBAEJf0EAQQBBgAL8CwAgAUEXTgRAIAAgAWpBCGshCkGACCEBIAJBAnRBgAhqIQsgAEEOaiEDQf8BIQZBACECA0AgA0EBaiEHIAMtAAAiCEE/cSEAAkACQCAIQcABcSIJRQRAIABBAnQiAC0AAyEGIAAtAAIhBCAALQABIQUgAC0AACECIAchAwwBCwJAIAhB/QFLDQAgCUHAAUcNACAFQQVsIAJBA2xqIARBB2xqIAZBC2xqQT9xQQJ0IgMgBDoAAiADIAU6AAEgAyACOgAAIANBA2ogBjoAAANAIAEgAjoAACABQQNqIAY6AAAgAUECaiAEOgAAIAFBAWogBToAACABQQRqIQEgAEUEQCAHIQMMBAsgAEEBayEAIAEgC0kNAAsgByEDDAILAn8CQAJAAkAgCEH+AWsOAgABAgsgAy0AAyEEIAMtAAIhBSADLQABIQIgA0EEagwCCyADKAIBIgJBGHYhBiACQRB2IQQgAkEIdiEFIANBBWoMAQsgCUGAAUcEQCAHIAlBwABHDQEaIAQgCEEDcWpBAmshBCACIABBBHZqQQJrIQIgBSAIQQJ2QQNxakECayEFIAcMAQsgBCAAQShrIgkgAy0AASIHQQ9xamohBCACIAdBBHYgCWpqIQIgACAFakEgayEFIANBAmoLIQMgBUEFbCACQQNsaiAEQQdsaiAGQQtsakE/cUECdCIAIAQ6AAIgACAFOgABIAAgAjoAACAAQQNqIAY6AAALIAEgBjoAAyABIAQ6AAIgASAFOgABIAEgAjoAACABQQRqIQELIAMgCkkNAAsLCw=='}/*inwasm#459f9e1bfb80b1a8:rdef-end:\"qoi_decode\"*/);\nclass QoiDecoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n this.width = 0;\n this.height = 0;\n }\n decode(d) {\n this.width = d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7];\n this.height = d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11];\n const pixels = this.width * this.height;\n const ib = pixels * 4;\n const dl = d.length;\n /**\n * byte/offset calculation:\n * To save some memory we dont reserve full memory for decoded + encoded,\n * but place encoded at the end of decoded plus 50% security distance\n * to avoid reads before writes positions:\n *\n * encoded < decoded (good compression)\n * enc ####################\n * dec #######################################\n * ^ ^\n * DST_P CHUNK_P\n *\n * encoded > decoded (degenerated compression, should not happen)\n * enc ##############################\n * dec ####################\n * ^ ^\n * DST_P CHUNK_P\n *\n * There is still a chance for overlapping r/w positions in case the compressed\n * data has very different pixel progression, yet the 50% security distance\n * should deal with that, as QOI will bloat data by 25% at max (RGB -> OP byte + RGB).\n * Since we always assume RGBA at decoding stage, the possible bloat reduces to 20% at max.\n */\n const bytes = Math.max(ib, dl) + (Math.min(ib, dl) >> 1) + 4096;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmQoiDecode({ env: { memory: this._mem } });\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n this._d = null;\n }\n if (!this._d) {\n this._d = new Uint8Array(this._mem.buffer);\n }\n // put src data at the end of memory, also align to 256\n const chunkP = (this._mem.buffer.byteLength - dl) & ~0xFF;\n this._d.set(d, chunkP);\n this._inst.exports.dec(chunkP, dl, pixels);\n return this._d.subarray(1024 /* P8.DST_P */, 1024 /* P8.DST_P */ + ib);\n }\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._d = this._mem = null;\n }\n }\n}\nexports.default = QoiDecoder;\n//# sourceMappingURL=QoiDecoder.wasm.js.map", null, null, "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ImageLayer, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\nconst enum Constants {\n PLACEHOLDER_LENGTH = 4096,\n PLACEHOLDER_HEIGHT = 24\n}\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n /** @deprecated Kept for backward compat \u2014 points to top layer canvas. */\n public get canvas(): HTMLCanvasElement | undefined { return this._layers.get('top')?.canvas; }\n private _layers = new Map();\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument ?? document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n this.removeLayerFromDom('bottom');\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this._layers.clear();\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, Constants.PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._terminal.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number, layer?: ImageLayer): void {\n const y = start * (this.dimensions?.css.cell.height || 0);\n const w = this.dimensions?.css.canvas.width || 0;\n const h = (end + 1 - start) * (this.dimensions?.css.cell.height || 0);\n if (!layer || layer === 'top') {\n this._layers.get('top')?.clearRect(0, y, w, h);\n }\n if (!layer || layer === 'bottom') {\n this._layers.get('bottom')?.clearRect(0, y, w, h);\n }\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(layer?: ImageLayer): void {\n if (!layer || layer === 'top') {\n const ctx = this._layers.get('top');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n if (!layer || layer === 'bottom') {\n const ctx = this._layers.get('bottom');\n ctx?.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get(imgSpec.layer);\n if (!ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * sourceWidth + sx > img.width ? img.width - sx : count * sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize;\n const cols = Math.ceil(img.width / sourceWidth);\n const sx = (tileId % cols) * sourceWidth;\n const sy = Math.floor(tileId / cols) * sourceHeight;\n const finalWidth = sourceWidth + sx > img.width ? img.width - sx : sourceWidth;\n const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight;\n\n const canvas = ImageRenderer.createCanvas(this.document, Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight));\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, canvas.width, canvas.height\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n const ctx = this._layers.get('top');\n if (ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, Constants.PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n ctx.drawImage(\n this._placeholderBitmap ?? this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n const w = this.dimensions?.css.canvas.width || 0;\n const h = this.dimensions?.css.canvas.height || 0;\n for (const ctx of this._layers.values()) {\n if (ctx.canvas.width !== w || ctx.canvas.height !== h) {\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n }\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const scaledWidth = Math.ceil(spec.orig!.width * currentWidth / originalWidth);\n const scaledHeight = Math.ceil(spec.orig!.height * currentHeight / originalHeight);\n // Upscale visible tiles directly; a full zoomed copy can dwarf the image budget.\n if (scaledWidth * scaledHeight > spec.orig!.width * spec.orig!.height) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(this.document, scaledWidth, scaledHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n for (const key of [...this._layers.keys()]) {\n this.removeLayerFromDom(key);\n }\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(layer: ImageLayer = 'top'): void {\n // make sure that the terminal is attached to a document and to DOM\n if (!this.document || !this._terminal._core.screenElement) {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n return;\n }\n if (this._layers.has(layer)) {\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n canvas.classList.add(`xterm-image-layer-${layer}`);\n const screenElement = this._terminal._core.screenElement;\n // Use isolation to create a stacking context without overriding z-index,\n // which would conflict with integrators (e.g. VS Code) that set their\n // own z-index on the screen element.\n screenElement.style.isolation = 'isolate';\n if (layer === 'bottom') {\n // Use z-index:-1 so it paints behind non-positioned text elements.\n // The screen element needs to be a stacking context (via isolation)\n // to contain the negative z-index, otherwise it would go behind the\n // entire terminal.\n canvas.style.zIndex = '-1';\n screenElement.insertBefore(canvas, screenElement.firstChild);\n } else {\n // Explicit z-index ensures the image canvas reliably stacks above\n // the text layer (DOM renderer rows). z-index: 0 is below the\n // selection overlay (z-index: 1).\n canvas.style.zIndex = '0';\n screenElement.appendChild(canvas);\n }\n const ctx = canvas.getContext('2d', { alpha: true });\n if (!ctx) {\n canvas.remove();\n return;\n }\n this._layers.set(layer, ctx);\n this.clearAll(layer);\n }\n\n public removeLayerFromDom(layer: ImageLayer = 'top'): void {\n const ctx = this._layers.get(layer);\n if (ctx) {\n ctx.canvas.remove();\n this._layers.delete(layer);\n }\n }\n\n public hasLayer(layer: ImageLayer): boolean {\n return this._layers.has(layer);\n }\n\n private _createPlaceHolder(height: number = Constants.PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || Constants.PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n const placeholder = this._placeholder;\n ImageRenderer.createImageBitmap(placeholder).then(bitmap => {\n if (this._placeholder !== placeholder) bitmap?.close();\n else this._placeholderBitmap = bitmap;\n }).catch(() => {});\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport type {\n ITerminalExt, IImageAddonOptions, IImageSpec, ICellSize, IAddImageOpts\n} from './Types';\nimport type { IBufferLine } from 'common/buffer/Types';\nimport { CellData } from 'common/buffer/CellData';\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\nclass ImageTileInfo {\n constructor(\n public imageId = -1,\n public tileId = -1) {\n }\n}\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n private _workCell: CellData = new CellData();\n\n private _viewportMetrics: { cols: number, rows: number };\n public onImageAdded: (() => void) | undefined;\n public onImageDeleted: ((storageId: number) => void) | undefined;\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: unknown) {\n if (e instanceof Error) {\n console.error(e.message);\n }\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n if (!spec) return;\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n this.onImageDeleted?.(id);\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Delete an image by its internal storage ID.\n * Used by protocols that support explicit deletion (e.g. Kitty a=d).\n */\n public deleteImage(id: number): void {\n const spec = this._images.get(id);\n if (spec) {\n spec.marker?.dispose();\n this._delImg(id);\n }\n }\n\n /**\n * Method to add an image to the storage.\n * @param img - The image to add (canvas or bitmap).\n * @param opts - Options for addImage:\n * - scrolling: When true, cursor advances with the image.\n * When false, image is placed at ORIGIN and cursor does not move.\n * - layer: Which canvas layer to render on ('top' or 'bottom').\n * - zIndex: Z-index for image layering within the same layer.\n * - cursorPos: 'vt340' for bottom-left, 'iip' for bottom.right.\n * @returns The internal image ID assigned to the stored image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap, opts: IAddImageOpts): number {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!opts.scrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase)!;\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (opts.scrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (opts.scrolling) {\n if (opts.cursorPos === 'iip') {\n buffer.x = Math.min(offset + cols, termCols);\n } else {\n buffer.x = offset;\n }\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type,\n layer: opts.layer,\n zIndex: opts.zIndex\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n this.onImageAdded?.();\n return imageId;\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // Determine which layers have images\n let hasTopImages = false;\n let hasBottomImages = false;\n for (const spec of this._images.values()) {\n if (spec.layer === 'bottom') {\n hasBottomImages = true;\n } else {\n hasTopImages = true;\n }\n if (hasTopImages && hasBottomImages) break;\n }\n\n // Lazily insert layers that are needed\n if (hasTopImages && !this._renderer.hasLayer('top')) {\n this._renderer.insertLayerToDom('top');\n if (!this._renderer.hasLayer('top')) return;\n }\n if (hasBottomImages && !this._renderer.hasLayer('bottom')) {\n this._renderer.insertLayerToDom('bottom');\n }\n\n // rescale if needed\n this._renderer.rescaleCanvas();\n\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.hasLayer('top')) {\n this._renderer.removeLayerFromDom('top');\n }\n if (this._renderer.hasLayer('bottom')) {\n this._renderer.removeLayerFromDom('bottom');\n }\n return;\n }\n\n // Remove layers no longer needed\n if (!hasTopImages && this._renderer.hasLayer('top')) {\n this._renderer.clearAll('top');\n this._renderer.removeLayerFromDom('top');\n }\n if (!hasBottomImages && this._renderer.hasLayer('bottom')) {\n this._renderer.clearAll('bottom');\n this._renderer.removeLayerFromDom('bottom');\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // Collect draw calls so we can sort by z-index (lower z drawn first).\n const drawCalls: { imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number }[] = [];\n const placeholderCalls: { col: number, row: number, count: number }[] = [];\n\n // walk all cells in viewport and collect tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp);\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n const e = line.getExtended(col)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (++col < cols) {\n const nextE = line.getExtended(col)?.payload;\n if (!(nextE instanceof ImageTileInfo) || nextE.imageId !== imageId || nextE.tileId !== startTile + count) {\n break;\n }\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n drawCalls.push({ imgSpec, tileId: startTile, col: startCol, row, count });\n }\n } else if (this._opts.showPlaceholder) {\n placeholderCalls.push({ col: startCol, row, count });\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n\n // Sort by z-index so lower z draws first (higher z renders on top)\n drawCalls.sort((a, b) => a.imgSpec.zIndex - b.imgSpec.zIndex);\n\n // Draw placeholders first (lowest priority)\n for (const call of placeholderCalls) {\n this._renderer.drawPlaceholder(call.col, call.row, call.count);\n }\n\n // Draw images in z-index order\n for (const call of drawCalls) {\n this._renderer.draw(call.imgSpec, call.tileId, call.col, call.row, call.count);\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row)!;\n const e = line.getExtended(oldCol)?.payload;\n if (e instanceof ImageTileInfo) {\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line.hasContent(rightCol)) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y);\n if (line) {\n const e = line.getExtended(x)?.payload;\n if (e instanceof ImageTileInfo && e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLine, x: number, imageId: number, tileId: number): void {\n const workCell = this._workCell;\n line.loadCell(x, workCell);\n if (this._workCell.hasExtendedAttrs()) {\n const old = workCell.extended.payload;\n if (old instanceof ImageTileInfo) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n }\n // fall-through: always create new ExtendedAttrs entry\n const extattr = workCell.extended.clone();\n extattr.payload = new ImageTileInfo(imageId, tileId);\n workCell.extended = extattr;\n workCell.updateExtended();\n line.setCell(x, workCell);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y);\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n const payload = line.getExtended(x)?.payload;\n if (payload instanceof ImageTileInfo) {\n const spec = this._images.get(payload.imageId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport QoiDecoder from 'xterm-wasm-parts/lib/qoi/QoiDecoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState, SequenceType } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n// Local const enum mirror - esbuild can't inline const enums from external packages\nconst enum DecoderConst {\n // Held memory in base64/QOI decoders between images. Zero because each kept\n // decoder pins a wasm memory, and V8 caps those per process (~124 in a\n // sandboxed renderer), so idle terminals must not hold one.\n KEEP_DATA = 0,\n // Initial buffer allocation for the decoder.\n INITIAL_DATA = 1048576,\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n OK = 0\n}\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n type: SequenceType.INVALID,\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _generation = 0;\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec: Base64Decoder;\n private _qoiDec: QoiDecoder;\n private _isMultipart = false;\n private _abortMulti = false;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: IIPImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n const maxEncodedBytes = Math.ceil(this._opts.iipSizeLimit * 4 / 3);\n const initialBytes = Math.min(DecoderConst.INITIAL_DATA, maxEncodedBytes);\n this._dec = new Base64Decoder(DecoderConst.KEEP_DATA, maxEncodedBytes, initialBytes);\n this._qoiDec = new QoiDecoder(DecoderConst.KEEP_DATA);\n }\n\n public reset(): void {\n this._generation++;\n this._hp.reset();\n this._dec.release();\n this._qoiDec.release();\n }\n\n public start(): void {\n this._aborted = false;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if ((this._dec.put(data.subarray(start, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n const seqType = this._hp.fields.type;\n if (seqType === SequenceType.FILE) {\n if (this._isMultipart) {\n this._isMultipart = false;\n this._abortMulti = false;\n this._dec.release();\n }\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline) {\n this._aborted = true;\n return;\n }\n if (!this._initDecoder()) {\n this._aborted = true;\n return;\n }\n } else if (this._abortMulti) {\n this._aborted = true;\n return;\n }\n if ((this._dec.put(data.subarray(dataPos, end)) as number) !== DecoderConst.OK) {\n this._dec.release();\n this._aborted = true;\n if (this._isMultipart) this._abortMulti = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted) return true;\n\n if (this._hp.state !== HeaderState.END) {\n if (this._hp.end()) return true;\n }\n const seqType = this._hp.fields.type;\n\n if (seqType === SequenceType.FILEPART) return true;\n\n if (seqType === SequenceType.REPORTCELLSIZE) {\n // OSC 1337 ; ReportCellSize=[height];[width];[scale] ST\n let w = CELL_SIZE_DEFAULT.width;\n let h = CELL_SIZE_DEFAULT.height;\n if (this._renderer.dimensions) {\n w = this._renderer.dimensions.css.canvas.width / this._coreTerminal.cols;\n h = this._renderer.dimensions.css.canvas.height / this._coreTerminal.rows;\n }\n const scale = this._coreTerminal._core._coreBrowserService?.dpr ?? 1;\n const report = `\\x1b]1337;ReportCellSize=${h.toFixed(3)};${w.toFixed(3)};${scale.toFixed(3)}\\x1b\\\\`;\n this._coreTerminal.input(report, false);\n return true;\n }\n\n if (seqType === SequenceType.MULTIPARTFILE) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n this._isMultipart = true;\n this._abortMulti = false;\n this._dec.release();\n if (!this._initDecoder()) {\n this._abortMulti = true;\n }\n return true;\n }\n\n if (seqType === SequenceType.FILEEND) {\n if (!this._isMultipart) return true;\n this._isMultipart = false;\n if (this._abortMulti || this._header.type !== SequenceType.MULTIPARTFILE) return true;\n }\n\n // fallthrough for SequenceType.FILE & SequenceType.FILEEND\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean;\n let metrics = UNSUPPORTED_TYPE;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n metrics = imageType(this._dec.data8);\n if (cond = metrics.mime !== 'unsupported') {\n w = metrics.width;\n h = metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n } else {\n console.warn(`IIP: image dimension issue ${metrics.width}x${metrics.height}`);\n }\n } else {\n console.warn('IIP: unsupported image type');\n }\n } else {\n console.warn('IIP: error during BASE64 decoding');\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n let blob: Blob | ImageData;\n if (metrics.mime === 'image/qoi') {\n let data: Uint8Array;\n try {\n data = this._qoiDec.decode(this._dec.data8);\n } catch (e) {\n console.warn('IIP: could not decode QOI image', e);\n this._dec.release();\n this._qoiDec.release();\n return true;\n }\n blob = new ImageData(\n new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength),\n this._qoiDec.width,\n this._qoiDec.height\n );\n this._qoiDec.release();\n if (w === this._qoiDec.width && h === this._qoiDec.height) {\n // use fast-path if we don't need to rescale\n this._dec.release();\n const canvas = ImageRenderer.createCanvas(undefined, this._qoiDec.width, this._qoiDec.height);\n canvas.getContext('2d')?.putImageData(blob, 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n } else {\n blob = new Blob([this._dec.data8], { type: metrics.mime });\n }\n this._dec.release();\n const generation = this._generation;\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n if (generation !== this._generation) {\n bm.close();\n return true;\n }\n this._storage.addImage(bm);\n return true;\n })\n .catch(e => {\n console.warn(`IIP: decoding error ${metrics.mime} ${metrics.width}x${metrics.height}`, e);\n return true;\n });\n }\n\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n private _initDecoder(): boolean {\n try {\n this._dec.init();\n return true;\n } catch (e) {\n console.warn('IIP: could not allocate decoder', e);\n this._dec.release();\n return false;\n }\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);\n return parseInt(s, 10) * cdim;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\nexport const enum SequenceType {\n INVALID = 0,\n FILE = 1,\n MULTIPARTFILE = 2,\n FILEPART = 3,\n FILEEND = 4,\n REPORTCELLSIZE = 5\n}\n\nexport interface IHeaderFields {\n [key: string]: number | string | Uint32Array | null | undefined;\n // sequence type\n type: SequenceType;\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => number | string} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\n// sequence type markers\n// File\nconst FILE_MARKER = [70, 105, 108, 101];\n// MultipartFile\nconst MULTIPARTFILE_MARKER = [77, 117, 108, 116, 105, 112, 97, 114, 116, 70, 105, 108, 101];\n// FilePart\nconst FILEPART_MARKER = [70, 105, 108, 101, 80, 97, 114, 116];\n// FileEnd\nconst FILEEND_MARKER = [70, 105, 108, 101, 69, 110, 100];\n// ReportCellSize\nconst REPORTCELLSIZE_MARKER = [82, 101, 112, 111, 114, 116, 67, 101, 108, 108, 83, 105, 122, 101];\n\n// max allowed chars for sequence header\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: number | string | Uint32Array | null | undefined} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public end(): number {\n if (this.state === HeaderState.START) {\n if (this._position === FILEEND_MARKER.length) {\n for (let k = 0; k < FILEEND_MARKER.length; ++k) {\n if (this._buffer[k] !== FILEEND_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEEND;\n this.state = HeaderState.END;\n return 0;\n }\n if (this._position === REPORTCELLSIZE_MARKER.length) {\n for (let k = 0; k < REPORTCELLSIZE_MARKER.length; ++k) {\n if (this._buffer[k] !== REPORTCELLSIZE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.REPORTCELLSIZE;\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n if (this.state === HeaderState.END) return 0;\n if (this.state === HeaderState.VALUE\n && this.fields.type === SequenceType.MULTIPARTFILE\n ) {\n if (!this._storeValue(this._position)) return this._a();\n this.state = HeaderState.END;\n return 0;\n }\n return this._a();\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 14) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n if (buffer[0] === 70) {\n // 'File' or 'FilePart'\n let k = 0;\n for (; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILE;\n if (pos === FILEPART_MARKER.length) {\n for (; k < FILEPART_MARKER.length; ++k) {\n if (buffer[k] !== FILEPART_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.FILEPART;\n this.state = HeaderState.END;\n return i + 1;\n }\n } else if (buffer[0] === 77) {\n // 'MultipartFile'\n for (let k = 0; k < MULTIPARTFILE_MARKER.length; ++k) {\n if (buffer[k] !== MULTIPARTFILE_MARKER[k]) return this._a();\n }\n this.fields['type'] = SequenceType.MULTIPARTFILE;\n } else {\n return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.fields.type = SequenceType.INVALID;\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'image/qoi' | 'image/webp' | 'image/avif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 32) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 8);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n // QOI: qoif\n if (d32[0] === 0x66696F71) {\n return {\n mime: 'image/qoi',\n width: d[4] << 24 | d[5] << 16 | d[6] << 8 | d[7],\n height: d[8] << 24 | d[9] << 16 | d[10] << 8 | d[11]\n };\n }\n // WEBP: RIFF | xxxx | WEBP | VP8x\n if (d32[0] === 0x46464952 && d32[2] === 0x50424557 && (d32[3] & 0xFFFFFF) === 0x385056) {\n switch (d[15]) {\n case 0x58: // Extended WebP VP8X --> \"X\"\n return {\n mime: 'image/webp',\n width: (d[24] | d[25] << 8 | d[26] << 16) + 1,\n height: (d[27] | d[28] << 8 | d[29] << 16) + 1\n };\n case 0x4C: // Lossless WebP VP8L --> \"L\"\n if (d[20] !== 0x2f) return UNSUPPORTED_TYPE;\n const dim = d[21] | d[22] << 8 | d[23] << 16 | d[24] << 24;\n return {\n mime: 'image/webp',\n width: (dim & 0x3FFF) + 1,\n height: (dim >>> 14 & 0x3FFF) + 1\n };\n case 0x20: // Lossy WebP VP8 --> \" \"\n if (d[23] !== 0x9d || d[24] !== 0x01 || d[25] !== 0x2a) return UNSUPPORTED_TYPE;\n return {\n mime: 'image/webp',\n width: (d[26] | d[27] << 8) & 0x3FFF,\n height: (d[28] | d[29] << 8) & 0x3FFF\n };\n }\n return UNSUPPORTED_TYPE;\n }\n // AVIF: Box size | ftyp | avif/avis\n if (d32[1] === 0x70797466 && (d32[2] === 0x66697661 || d32[2] === 0x73697661)) {\n let pos = -1;\n // search for ispe box within first 1024 bytes\n const limit = Math.min(d.length - 16, 1024);\n for (let i = 8; i < limit; i++) {\n // scan for ispe\n if (d[i] === 0x69 && d[i + 1] === 0x73 && d[i + 2] === 0x70 && d[i + 3] === 0x65) {\n pos = i;\n break;\n }\n }\n if (pos !== -1) {\n // dimensions are in BE at +8 (width) at +12 (height)\n const width =\n d[pos + 8] << 24 |\n d[pos + 9] << 16 |\n d[pos + 10] << 8 |\n d[pos + 11];\n const height =\n d[pos + 12] << 24 |\n d[pos + 13] << 16 |\n d[pos + 14] << 8 |\n d[pos + 15];\n if (width > 0 && height > 0) {\n return { mime: 'image/avif', width, height };\n }\n }\n return UNSUPPORTED_TYPE;\n }\n return UNSUPPORTED_TYPE;\n}\n\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types';\nimport { ImageRenderer } from '../ImageRenderer';\nimport { CELL_SIZE_DEFAULT } from '../ImageStorage';\nimport { imageType } from '../IIPMetrics';\nimport { KittyImageStorage } from './KittyImageStorage';\nimport Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport {\n KittyAction,\n KittyFormat,\n KittyCompression,\n IKittyCommand,\n IPendingTransmission,\n IKittyImageData,\n KittyPixelConstants,\n parseKittyCommand\n} from './KittyGraphicsTypes';\n\nconst enum Constants {\n // Memory limit for base64 decoder (4MB, same as IIPHandler)\n DECODER_KEEP_DATA = 4194304,\n DECODER_INITIAL_DATA = 4194304, // 4MB\n // Local mirror of const enum (esbuild can't inline const enums from external packages)\n DECODER_OK = 0,\n // Maximum control data size\n MAX_CONTROL_DATA_SIZE = 512,\n // Semicolon codepoint\n SEMICOLON = 0x3B\n}\n\nconst DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK;\n\n// Kitty graphics protocol handler with streaming base64 decoding.\nexport class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable {\n private _aborted = false;\n private _generation = 0;\n private _decodeError = false;\n\n private _activeDecoder: Base64Decoder | null = null;\n private readonly _maxEncodedBytes: number;\n private readonly _initialEncodedBytes: number;\n\n // Streaming related states\n\n // True while receiving control data (before semicolon).\n private _inControlData = true;\n\n // Buffer for control data.\n private _controlData = new Uint32Array(Constants.MAX_CONTROL_DATA_SIZE);\n private _controlLength = 0;\n\n // Pre-calculated encoded size limit\n private _encodedSizeLimit = 0;\n private _totalEncodedSize = 0;\n\n // Parsed command. These are the control data before semicolon.\n private _parsedCommand: IKittyCommand | null = null;\n\n // Storage related states\n\n private _pendingTransmissions: Map = new Map();\n // Tracks the pending key of the most recently started chunked upload.\n // Per spec, subsequent chunks only need m= (and optionally q=), without i=.\n // When a chunk arrives with no i=, this key is used to find the pending upload.\n private _lastPendingKey: number | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _kittyStorage: KittyImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n // Convert decoded size limit -> max encoded bytes.\n this._maxEncodedBytes = Math.ceil(this._opts.kittySizeLimit * 4 / 3);\n // ensure we preallocate more than configured limit while using 4mb initial size.\n this._initialEncodedBytes = Math.min(Constants.DECODER_INITIAL_DATA, this._maxEncodedBytes);\n }\n\n public reset(): void {\n this._generation++;\n this._cleanupAllPending();\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n this._kittyStorage.reset();\n }\n\n public dispose(): void {\n this.reset();\n }\n\n private _removePendingEntry(key: number): void {\n this._pendingTransmissions.delete(key);\n if (this._lastPendingKey === key) {\n this._lastPendingKey = undefined;\n }\n }\n\n private _cleanupAllPending(): void {\n for (const pending of this._pendingTransmissions.values()) {\n pending.decoder.release();\n }\n this._pendingTransmissions.clear();\n this._lastPendingKey = undefined;\n }\n\n public start(): void {\n this._aborted = false;\n this._decodeError = false;\n this._inControlData = true;\n this._controlLength = 0;\n this._parsedCommand = null;\n // Pre-calculate encoded limit once: base64 is 4 bytes encoded \u2192 3 bytes decoded\n this._encodedSizeLimit = this._maxEncodedBytes;\n this._totalEncodedSize = 0;\n this._activeDecoder = null;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (!this._inControlData) {\n this._streamPayload(data, start, end);\n } else {\n // Scan for semicolon\n let controlEnd = end;\n for (let i = start; i < end; i++) {\n if (data[i] === Constants.SEMICOLON) {\n this._inControlData = false;\n controlEnd = i;\n break;\n }\n }\n\n // Copy control data\n const copyLength = controlEnd - start;\n if (this._controlLength + copyLength > Constants.MAX_CONTROL_DATA_SIZE) {\n this._aborted = true;\n return;\n }\n this._controlData.set(data.subarray(start, controlEnd), this._controlLength);\n this._controlLength += copyLength;\n\n if (!this._inControlData) {\n // Found semicolon - parse control data early for validation\n this._parsedCommand = parseKittyCommand(this._parseControlDataString());\n\n // Early validation: i+I conflict\n if (this._parsedCommand.id !== undefined && this._parsedCommand.imageNumber !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'EINVAL:cannot specify both i and I keys', this._parsedCommand.quiet ?? 0);\n this._aborted = true;\n return;\n }\n\n // Delete action doesn't need payload - skip streaming\n if (this._parsedCommand.action === KittyAction.DELETE) {\n return;\n }\n\n // Stream remaining as payload\n const payloadStart = controlEnd + 1;\n if (payloadStart < end) {\n this._streamPayload(data, payloadStart, end);\n }\n }\n }\n }\n\n // Stream payload bytes into the base64 decoder.\n private _streamPayload(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n // Check size limit (compare encoded bytes against pre-calculated limit)\n // Include cumulative size from pending transmission for multi-chunk images.\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = this._parsedCommand?.id ?? this._lastPendingKey ?? 0;\n const pending = this._pendingTransmissions.get(pendingKey);\n const previousEncodedSize = pending?.totalEncodedSize ?? 0;\n this._totalEncodedSize += end - start;\n const cumulativeEncodedSize = previousEncodedSize + this._totalEncodedSize;\n if (cumulativeEncodedSize > this._encodedSizeLimit) {\n const decoderToRelease = this._activeDecoder ?? pending?.decoder;\n if (decoderToRelease) {\n decoderToRelease.release();\n }\n this._activeDecoder = null;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n this._aborted = true;\n return;\n }\n\n if (this._decodeError) return;\n\n if (pending?.decoder && !this._activeDecoder) {\n this._activeDecoder = pending.decoder;\n }\n if (!this._activeDecoder) {\n // Budget WASM capacity, including one page of decoder state and rounding.\n const decoderCapacity = this._maxEncodedBytes + 131072;\n if (decoderCapacity > this._opts.storageLimit * 1000000) {\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:pending image budget exceeded', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n const maxPending = Math.max(1, Math.floor(this._opts.storageLimit * 1000000 / decoderCapacity));\n while (this._pendingTransmissions.size >= maxPending) {\n const oldest = this._pendingTransmissions.entries().next().value;\n if (!oldest) break;\n oldest[1].decoder.release();\n this._removePendingEntry(oldest[0]);\n if (oldest[1].cmd.id !== undefined) {\n this._sendResponse(oldest[1].cmd.id, 'ENOMEM:pending image budget exceeded', oldest[1].cmd.quiet ?? 0);\n }\n }\n const decoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes);\n try {\n decoder.init();\n } catch (e) {\n // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue.\n console.warn('KITTY: could not allocate decoder', e);\n this._aborted = true;\n if (this._parsedCommand?.id !== undefined) {\n this._sendResponse(this._parsedCommand.id, 'ENOMEM:could not allocate decoder', this._parsedCommand.quiet ?? 0);\n }\n return;\n }\n this._activeDecoder = decoder;\n }\n\n if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n this._decodeError = true;\n if (pending) {\n this._removePendingEntry(pendingKey);\n }\n }\n }\n\n public end(success: boolean): boolean | Promise {\n if (this._aborted || !success) {\n if (this._activeDecoder) {\n this._activeDecoder.release();\n this._activeDecoder = null;\n }\n return true;\n }\n\n // No semicolon = no payload (delete, capability query)\n if (this._inControlData) {\n return this._handleNoPayloadCommand();\n }\n\n // Use command parsed early in put() - i+I already validated there\n const cmd = this._parsedCommand!;\n\n // Delete action was handled by skipping payload - just execute\n if (cmd.action === KittyAction.DELETE) {\n return this._handleDelete(cmd);\n }\n\n // Per spec, subsequent chunks may omit i=, so fall back to _lastPendingKey.\n const pendingKey = cmd.id ?? this._lastPendingKey ?? 0;\n const isMoreComing = cmd.more === 1;\n const pending = this._pendingTransmissions.get(pendingKey);\n\n if (isMoreComing) {\n if (this._activeDecoder) {\n if (pending) {\n pending.totalEncodedSize += this._totalEncodedSize;\n pending.decodeError = pending.decodeError || this._decodeError;\n } else {\n this._pendingTransmissions.set(pendingKey, {\n cmd: { ...cmd },\n decoder: this._activeDecoder,\n totalEncodedSize: this._totalEncodedSize,\n decodeError: this._decodeError\n });\n }\n this._lastPendingKey = pendingKey;\n this._activeDecoder = null;\n }\n return true;\n }\n\n // Final chunk received \u2014 clear the last pending key\n if (pending) {\n this._lastPendingKey = undefined;\n }\n\n let decodeError = this._decodeError;\n let finalCmd = cmd;\n let decoder = this._activeDecoder;\n\n if (pending) {\n finalCmd = pending.cmd;\n decoder = pending.decoder;\n decodeError = decodeError || pending.decodeError;\n this._pendingTransmissions.delete(pendingKey);\n }\n\n let imageBytes = new Uint8Array(0);\n if (decoder) {\n if (decoder.end() !== DECODER_OK) {\n decodeError = true;\n }\n imageBytes = decoder.data8;\n }\n this._activeDecoder = null;\n\n // Handle command first \u2014 handlers create Blob/ImageData from imageBytes,\n // which copies the data. Only then is it safe to release the decoder's\n // wasm memory that imageBytes points into.\n const result = this._handleCommandWithBytesAndCmd(finalCmd, imageBytes, decodeError);\n if (decoder) {\n decoder.release();\n }\n return result;\n }\n\n // Command handling\n\n private _parseControlDataString(): string {\n let str = '';\n for (let i = 0; i < this._controlLength; i++) {\n str += String.fromCodePoint(this._controlData[i]);\n }\n return str;\n }\n\n private _handleNoPayloadCommand(): boolean | Promise {\n const cmd = parseKittyCommand(this._parseControlDataString());\n\n // Per spec: specifying both i and I is an error\n if (cmd.id !== undefined && cmd.imageNumber !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:cannot specify both i and I keys', cmd.quiet ?? 0);\n return true;\n }\n\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.DELETE:\n return this._handleDelete(cmd);\n case KittyAction.QUERY:\n this._sendResponse(cmd.id ?? 0, 'OK', cmd.quiet ?? 0);\n return true;\n case KittyAction.PLACEMENT:\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handleCommandWithBytesAndCmd(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n const action = cmd.action ?? 't';\n\n switch (action) {\n case KittyAction.TRANSMIT: {\n const result = this._handleTransmit(cmd, bytes, decodeError);\n // Only send response when _handleTransmit didn't already respond\n // (it handles unsupported transmission medium responses internally)\n if ((cmd.transmission ?? 'd') === 'd' && cmd.id !== undefined) {\n if (decodeError) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n } else if (bytes.length > 0) {\n this._sendResponse(cmd.id, 'OK', cmd.quiet ?? 0);\n }\n }\n return result;\n }\n case KittyAction.TRANSMIT_DISPLAY:\n return this._handleTransmitDisplay(cmd, bytes, decodeError);\n case KittyAction.QUERY:\n return this._handleQuery(cmd, bytes, decodeError);\n case KittyAction.PLACEMENT:\n // a=p ignores any payload \u2014 image data was already transmitted\n return this._handlePlacement(cmd);\n default:\n // TODO: Implement remaining actions when needed:\n // - a=f (frame): animation frame operations\n // - a=a (animation): animation control\n // - a=c (compose): compose images\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported action', cmd.quiet ?? 0);\n }\n return true;\n }\n }\n\n private _handlePlacement(cmd: IKittyCommand): boolean | Promise {\n if (cmd.id === undefined) {\n return true;\n }\n const id = cmd.id;\n const image = this._kittyStorage.getImage(id);\n if (!image) {\n this._sendResponse(id, 'ENOENT:image not found', cmd.quiet ?? 0, cmd.placementId);\n return true;\n }\n const result = this._displayImage(image, cmd);\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0, cmd.placementId);\n return true;\n });\n }\n\n private _handleTransmit(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n // TODO: Support file-based transmission modes (t=f, t=t, t=s)\n // Currently only supports direct transmission (t=d, the default).\n // - t=f (file): Payload is base64-encoded file path. Terminal reads image from that path.\n // - t=t (temp file): Payload is base64-encoded path in temp directory. Terminal reads, deletes.\n // - t=s: Payload is base64-encoded POSIX shm name. Terminal reads from shared memory.\n // These modes require filesystem/IPC access not available in browsers. For Node.js/Electron:\n // 1. Check cmd.transmission (t key) before treating bytes as image data\n // 2. For t=f/t/s: decode bytes as UTF-8 string (the path/name), then read file contents\n // 3. For t=d: treat bytes as image data (current behavior)\n // When implementing, also update _handleQuery to accept these transmission mediums.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:unsupported transmission medium', cmd.quiet ?? 0);\n }\n return true;\n }\n\n if (decodeError || bytes.length === 0) return true;\n\n this._kittyStorage.storeImage(cmd.id, {\n data: new Blob([bytes as BlobPart]),\n width: cmd.width ?? 0,\n height: cmd.height ?? 0,\n format: (cmd.format ?? KittyFormat.RGBA) as 24 | 32 | 100,\n compression: cmd.compression ?? ''\n });\n return true;\n }\n\n private _handleTransmitDisplay(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean | Promise {\n if (decodeError) {\n if (cmd.id !== undefined) {\n this._sendResponse(cmd.id, 'EINVAL:invalid base64 data', cmd.quiet ?? 0);\n }\n return true;\n }\n\n this._handleTransmit(cmd, bytes, decodeError);\n\n const id = cmd.id ?? this._kittyStorage.lastImageId;\n const image = this._kittyStorage.getImage(id);\n if (image) {\n const result = this._displayImage(image, cmd);\n if (cmd.id !== undefined) {\n return result.then(success => {\n this._sendResponse(id, success ? 'OK' : 'EINVAL:image rendering failed', cmd.quiet ?? 0);\n return true;\n });\n }\n return result.then(() => true);\n }\n return true;\n }\n\n private _handleQuery(cmd: IKittyCommand, bytes: Uint8Array, decodeError: boolean): boolean {\n const id = cmd.id ?? 0;\n const quiet = cmd.quiet ?? 0;\n\n // Per spec: reject unsupported transmission mediums (only t=d is supported atm)\n // TODO: When filesystem support is added (Node.js/Electron), update this to accept\n // t=f (file), t=t (temp file), and t=s (shared memory) and respond OK for queries.\n const transmission = cmd.transmission ?? 'd';\n if (transmission !== 'd') {\n this._sendResponse(id, 'EINVAL:unsupported transmission medium', quiet);\n return true;\n }\n\n // Check decode error first (invalid base64)\n if (decodeError) {\n this._sendResponse(id, 'EINVAL:invalid base64 data', quiet);\n return true;\n }\n\n // Capability query (no payload) - just respond OK\n if (bytes.length === 0) {\n this._sendResponse(id, 'OK', quiet);\n return true;\n }\n\n const format = cmd.format ?? KittyFormat.RGBA;\n\n if (format === KittyFormat.PNG) {\n this._sendResponse(id, 'OK', quiet);\n } else {\n const width = cmd.width ?? 0;\n const height = cmd.height ?? 0;\n\n if (!width || !height) {\n this._sendResponse(id, 'EINVAL:width and height required for raw pixel data', quiet);\n return true;\n }\n\n const bytesPerPixel = format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n this._sendResponse(id, `EINVAL:insufficient pixel data`, quiet);\n return true;\n }\n\n this._sendResponse(id, 'OK', quiet);\n }\n return true;\n }\n\n private _handleDelete(cmd: IKittyCommand): boolean {\n // Per spec: default delete selector is 'a' (delete all visible placements)\n const selector = cmd.deleteSelector ?? 'a';\n\n // TODO: Distinguish lowercase (delete placements only) from uppercase\n // (delete placements + free stored image data). Currently both variants\n // free everything since we don't separate stored data from placements.\n switch (selector) {\n case 'a':\n case 'A':\n this._cleanupAllPending();\n this._kittyStorage.deleteAll();\n break;\n case 'i':\n case 'I':\n // TODO: When placement id tracking is implemented (see TODO in\n // KittyImageStorage), d=i with p= should delete only that\n // specific placement, while d=i without p should delete all\n // placements for the image.\n if (cmd.id !== undefined) {\n const pending = this._pendingTransmissions.get(cmd.id);\n if (pending) {\n pending.decoder.release();\n }\n this._removePendingEntry(cmd.id);\n this._kittyStorage.deleteById(cmd.id);\n }\n break;\n default:\n // Unsupported selectors (c, n, p, q, r, x, y, z, f) \u2014 ignore for now\n break;\n }\n return true;\n }\n\n private _sendResponse(id: number, message: string, quiet: number, placementId?: number): void {\n const isOk = message === 'OK';\n if (isOk && quiet >= 1) return;\n if (!isOk && quiet >= 2) return;\n\n const pPart = placementId ? `,p=${placementId}` : '';\n const response = `\\x1b_Gi=${id}${pPart};${message}\\x1b\\\\`;\n this._coreTerminal._core.coreService.triggerDataEvent(response);\n }\n\n // Image display\n\n private _displayImage(image: IKittyImageData, cmd: IKittyCommand): Promise {\n return this._decodeAndDisplay(image, cmd)\n .then(() => true)\n .catch(() => false);\n }\n\n private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise {\n const generation = this._generation;\n let bitmap: ImageBitmap | undefined = await this._createBitmap(image);\n\n try {\n if (generation !== this._generation) throw new Error('image decode canceled');\n const cropX = Math.max(0, cmd.x ?? 0);\n const cropY = Math.max(0, cmd.y ?? 0);\n const cropW = cmd.sourceWidth || (bitmap.width - cropX);\n const cropH = cmd.sourceHeight || (bitmap.height - cropY);\n\n const maxCropW = Math.max(0, bitmap.width - cropX);\n const maxCropH = Math.max(0, bitmap.height - cropY);\n const finalCropW = Math.max(0, Math.min(cropW, maxCropW));\n const finalCropH = Math.max(0, Math.min(cropH, maxCropH));\n\n if (finalCropW === 0 || finalCropH === 0) {\n throw new Error('invalid source rectangle');\n }\n\n if (cropX !== 0 || cropY !== 0 || finalCropW !== bitmap.width || finalCropH !== bitmap.height) {\n const cropped = await createImageBitmap(bitmap, cropX, cropY, finalCropW, finalCropH);\n bitmap.close();\n bitmap = cropped;\n }\n\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n\n // Per spec: c/r default to image's natural cell dimensions.\n // If only one of c/r is specified, compute the other from image aspect ratio.\n let imgCols: number;\n let imgRows: number;\n if (cmd.columns !== undefined && cmd.rows !== undefined) {\n imgCols = cmd.columns;\n imgRows = cmd.rows;\n } else if (cmd.columns !== undefined) {\n imgCols = cmd.columns;\n imgRows = Math.max(1, Math.ceil((bitmap.height / bitmap.width) * (imgCols * cw) / ch));\n } else if (cmd.rows !== undefined) {\n imgRows = cmd.rows;\n imgCols = Math.max(1, Math.ceil((bitmap.width / bitmap.height) * (imgRows * ch) / cw));\n } else {\n imgCols = Math.ceil(bitmap.width / cw);\n imgRows = Math.ceil(bitmap.height / ch);\n }\n\n let w = bitmap.width;\n let h = bitmap.height;\n\n // Scale bitmap to fit placement rectangle when c/r are specified\n if (cmd.columns !== undefined || cmd.rows !== undefined) {\n w = Math.round(imgCols * cw);\n h = Math.round(imgRows * ch);\n }\n\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n\n // Save cursor position before addImage modifies it\n const buffer = this._coreTerminal._core.buffer;\n const savedX = buffer.x;\n const savedY = buffer.y;\n const savedYbase = buffer.ybase;\n\n // Determine layer based on z-index: negative = behind text, 0+ = on top.\n // When z<0 we always use the bottom layer even without allowTransparency \u2014\n // the image will simply be hidden behind the opaque text background, which\n // is the correct behavior (client asked for \"behind text\").\n const wantsBottom = cmd.zIndex !== undefined && cmd.zIndex < 0;\n const layer: ImageLayer = wantsBottom ? 'bottom' : 'top';\n\n if (w !== bitmap.width || h !== bitmap.height) {\n const scaled = await createImageBitmap(bitmap, { resizeWidth: w, resizeHeight: h });\n bitmap.close();\n bitmap = scaled;\n }\n\n // Per spec: X/Y are pixel offsets within the first cell, so clamp to cell dimensions\n const xOffset = Math.min(Math.max(0, cmd.xOffset ?? 0), cw - 1);\n const yOffset = Math.min(Math.max(0, cmd.yOffset ?? 0), ch - 1);\n if (xOffset !== 0 || yOffset !== 0) {\n // Per spec: X/Y is not added to c/r area. When c/r are explicit, the\n // total placement area remains c*cw \u00D7 r*ch pixels and the offset image\n // is clipped to fit. When c/r are unset, the padded canvas determines\n // the natural cell dimensions.\n const canvasW = (cmd.columns !== undefined) ? Math.round(imgCols * cw) : bitmap.width + xOffset;\n const canvasH = (cmd.rows !== undefined) ? Math.round(imgRows * ch) : bitmap.height + yOffset;\n const offsetCanvas = ImageRenderer.createCanvas(window.document, canvasW, canvasH);\n const offsetCtx = offsetCanvas.getContext('2d');\n if (!offsetCtx) {\n throw new Error('Failed to create offset canvas context');\n }\n offsetCtx.drawImage(bitmap, xOffset, yOffset);\n\n const offsetBitmap = await createImageBitmap(offsetCanvas);\n offsetCanvas.width = offsetCanvas.height = 0;\n bitmap.close();\n bitmap = offsetBitmap;\n w = bitmap.width;\n h = bitmap.height;\n if (w * h > this._opts.pixelLimit) {\n throw new Error('image exceeds pixel limit');\n }\n if (cmd.columns === undefined) {\n imgCols = Math.ceil(bitmap.width / cw);\n }\n if (cmd.rows === undefined) {\n imgRows = Math.ceil(bitmap.height / ch);\n }\n }\n\n if (generation !== this._generation) throw new Error('image decode canceled');\n const zIndex = cmd.zIndex ?? 0;\n this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex);\n bitmap = undefined; // ownership transferred to storage\n\n // Kitty cursor movement\n // Per spec: cursor placed at first column after last image column,\n // on the last row of the image. C=1 means don't move cursor.\n if (cmd.cursorMovement === 1) {\n // C=1: restore cursor to position before image was placed\n const scrolled = buffer.ybase - savedYbase;\n buffer.x = savedX;\n // Can't restore cursor to scrollback?\n buffer.y = Math.max(savedY - scrolled, 0);\n } else {\n // Default (C=0): advance cursor horizontally past the image\n // addImage already positioned cursor on the last row via lineFeeds\n buffer.x = Math.min(savedX + imgCols, this._coreTerminal.cols);\n }\n } catch (e) {\n bitmap?.close();\n throw e;\n }\n }\n\n // Create ImageBitmap from already-decoded image data.\n private async _createBitmap(image: IKittyImageData): Promise {\n let bytes: Uint8Array = new Uint8Array(await image.data.arrayBuffer());\n\n if (image.compression === KittyCompression.ZLIB) {\n bytes = await this._decompressZlib(bytes);\n }\n\n if (image.format === KittyFormat.PNG) {\n const metrics = imageType(bytes);\n // IHDR dimensions are parsed with signed shifts, so a value >= 0x80000000 comes\n // back negative and a bare `>` pixel-limit test passes it; require positive.\n if (metrics.mime !== 'image/png' || !(metrics.width > 0) || !(metrics.height > 0) || metrics.width * metrics.height > this._opts.pixelLimit) {\n throw new RangeError('PNG exceeds pixel limit or has invalid dimensions');\n }\n const blob = new Blob([bytes as BlobPart], { type: 'image/png' });\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, img.width, img.height);\n canvas.getContext('2d')?.drawImage(img, 0, 0);\n createImageBitmap(canvas).then(resolve).catch(reject);\n });\n img.addEventListener('error', () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n });\n img.src = url;\n });\n }\n return createImageBitmap(blob);\n }\n\n // Raw pixel data\n const width = image.width;\n const height = image.height;\n\n if (!width || !height) {\n throw new Error('Width and height required for raw pixel data');\n }\n\n const bytesPerPixel = image.format === KittyFormat.RGBA ? KittyPixelConstants.BYTES_PER_PIXEL_RGBA : KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n const expectedBytes = width * height * bytesPerPixel;\n\n if (bytes.length < expectedBytes) {\n throw new Error('Insufficient pixel data');\n }\n\n const pixelCount = width * height;\n\n if (image.format === KittyFormat.RGBA) {\n // RGBA: use bytes directly \u2014 no copy needed\n return createImageBitmap(new ImageData(new Uint8ClampedArray(bytes.buffer as ArrayBuffer, bytes.byteOffset, pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA), width, height));\n }\n\n // RGB\u2192RGBA: interleave alpha using uint32 block processing (4 pixels per iteration).\n // 3 uint32 reads + 4 uint32 writes per 4 pixels vs 28 byte reads/writes \u2014 ~6x faster.\n // Assumes little-endian (all modern browsers/Node.js).\n const data = new Uint8ClampedArray(pixelCount * KittyPixelConstants.BYTES_PER_PIXEL_RGBA);\n const src32 = new Uint32Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 4));\n const dst32 = new Uint32Array(data.buffer);\n const alignedPixels = pixelCount & ~3; // round down to multiple of 4\n\n let srcOffset = 0;\n let dstOffset = 0;\n for (let i = 0; i < alignedPixels; i += 4) {\n const b0 = src32[srcOffset++];\n const b1 = src32[srcOffset++];\n const b2 = src32[srcOffset++];\n // Little-endian: pixel bytes are [R,G,B] \u2192 uint32 ABGR layout\n dst32[dstOffset++] = 0xFF000000 | b0;\n dst32[dstOffset++] = 0xFF000000 | (b0 >>> 24) | (b1 << 8);\n dst32[dstOffset++] = 0xFF000000 | (b1 >>> 16) | (b2 << 16);\n dst32[dstOffset++] = 0xFF000000 | (b2 >>> 8);\n }\n\n // Handle remaining 1\u20133 pixels\n let srcByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n let dstByte = alignedPixels * KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n for (let i = alignedPixels; i < pixelCount; i++) {\n data[dstByte] = bytes[srcByte];\n data[dstByte + 1] = bytes[srcByte + 1];\n data[dstByte + 2] = bytes[srcByte + 2];\n data[dstByte + 3] = KittyPixelConstants.ALPHA_OPAQUE;\n srcByte += KittyPixelConstants.BYTES_PER_PIXEL_RGB;\n dstByte += KittyPixelConstants.BYTES_PER_PIXEL_RGBA;\n }\n\n return createImageBitmap(new ImageData(data, width, height));\n }\n\n private async _decompressZlib(compressed: Uint8Array): Promise {\n try {\n return await this._decompress(compressed, 'deflate');\n } catch (error) {\n if (error instanceof RangeError) throw error;\n return await this._decompress(compressed, 'deflate-raw');\n }\n }\n\n private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise {\n const limit = Math.min(this._opts.kittySizeLimit, this._opts.pixelLimit * 4, this._opts.storageLimit * 1000000);\n let offsetIn = 0;\n // Bound inflation within one native transform before its output is budgeted.\n const source = new ReadableStream({\n pull(controller) {\n if (offsetIn >= compressed.length) {\n controller.close();\n return;\n }\n const end = Math.min(offsetIn + 4096, compressed.length);\n controller.enqueue(new Uint8Array(compressed.subarray(offsetIn, end)));\n offsetIn = end;\n }\n });\n const reader = source.pipeThrough(new DecompressionStream(format)).getReader();\n const chunks: Uint8Array[] = [];\n let totalLength = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n totalLength += value.byteLength;\n if (totalLength > limit) {\n await reader.cancel().catch(() => {});\n throw new RangeError('decompressed image exceeds byte limit');\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n }\n\n public get images(): ReadonlyMap {\n return this._kittyStorage.images;\n }\n\n public get _kittyIdToStorageId(): ReadonlyMap {\n return this._kittyStorage.kittyIdToStorageId;\n }\n\n public get pendingTransmissions(): ReadonlyMap {\n return this._pendingTransmissions;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty graphics protocol types, constants, and parsing utilities.\n */\n\nimport type Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\n\n// Kitty graphics protocol action types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'a'.\nexport const enum KittyAction {\n TRANSMIT = 't',\n TRANSMIT_DISPLAY = 'T',\n QUERY = 'q',\n PLACEMENT = 'p',\n DELETE = 'd'\n}\n\n// Kitty graphics protocol format types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyFormat {\n RGB = 24,\n RGBA = 32,\n PNG = 100\n}\n\n// Kitty graphics protocol compression types.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference under key 'o'.\nexport const enum KittyCompression {\n NONE = '',\n ZLIB = 'z'\n}\n\n// Kitty graphics protocol control data keys.\n// See: https://sw.kovidgoyal.net/kitty/graphics-protocol/#control-data-reference\nexport const enum KittyKey {\n // Action to perform (t=transmit, T=transmit+display, q=query, p=placement, d=delete)\n ACTION = 'a',\n // Image format (24=RGB, 32=RGBA, 100=PNG)\n FORMAT = 'f',\n // Image ID for referencing stored images\n ID = 'i',\n // Image number (alternative to ID, terminal assigns ID)\n IMAGE_NUMBER = 'I',\n // Source image width in pixels\n WIDTH = 's',\n // Source image height in pixels\n HEIGHT = 'v',\n // The left edge (in pixels) of the image area to display\n X_OFFSET = 'x',\n // The top edge (in pixels) of the image area to display\n Y_OFFSET = 'y',\n // Width (in pixels) of the source rectangle to display\n SOURCE_WIDTH = 'w',\n // Height (in pixels) of the source rectangle to display\n SOURCE_HEIGHT = 'h',\n // Horizontal offset (in pixels) within the first cell\n X_PLACEMENT_OFFSET = 'X',\n // Vertical offset (in pixels) within the first cell\n Y_PLACEMENT_OFFSET = 'Y',\n // Number of terminal columns to display the image over\n COLUMNS = 'c',\n // Number of terminal rows to display the image over\n ROWS = 'r',\n // More data flag (1=more chunks coming, 0=final chunk)\n MORE = 'm',\n // Compression type (z=zlib). This is essential for chunking larger images.\n COMPRESSION = 'o',\n // Quiet mode (1=suppress OK responses, 2=suppress error responses)\n QUIET = 'q',\n // Cursor movement policy (0=move cursor after image, 1=don't move cursor)\n CURSOR_MOVEMENT = 'C',\n // Z-index for image layering (negative = behind text, 0+ = on top)\n Z_INDEX = 'z',\n // Transmission medium (d=direct, f=file, t=temp file, s=shared memory)\n TRANSMISSION = 't',\n // Delete selector (a/A=all, i/I=by id, c/C=at cursor, etc.) \u2014 only used when a=d\n DELETE_SELECTOR = 'd',\n // Placement ID for targeting specific placements\n PLACEMENT_ID = 'p'\n}\n\n// Pixel format constants\nexport const enum KittyPixelConstants {\n BYTES_PER_PIXEL_RGB = 3,\n BYTES_PER_PIXEL_RGBA = 4,\n ALPHA_OPAQUE = 255\n}\n\n// Parsed Kitty graphics command.\nexport interface IKittyCommand {\n action?: string;\n format?: number;\n id?: number;\n imageNumber?: number;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n sourceWidth?: number;\n sourceHeight?: number;\n xOffset?: number;\n yOffset?: number;\n columns?: number;\n rows?: number;\n more?: number;\n quiet?: number;\n cursorMovement?: number;\n zIndex?: number;\n transmission?: string;\n deleteSelector?: string;\n placementId?: number;\n compression?: string;\n payload?: string;\n}\n\n// Pending chunked transmission state.\n// Stores metadata from the first chunk while accumulating decoded payload data.\nexport interface IPendingTransmission {\n // The parsed command from the first chunk (contains action, format, dimensions, etc.)\n cmd: IKittyCommand;\n // Decoder used across chunked payloads\n decoder: Base64Decoder;\n // Total encoded (base64) bytes received across all chunks - for size limit enforcement\n totalEncodedSize: number;\n // Whether any chunk has failed to decode\n decodeError: boolean;\n}\n\n// Stored Kitty image data.\nexport interface IKittyImageData {\n id: number;\n // Decoded image data stored as Blob (off JS heap) to avoid 2GB heap limit\n data: Blob;\n width: number;\n height: number;\n format: 24 | 32 | 100;\n compression?: string;\n}\n\n// Parses Kitty graphics control data into a command object.\nexport function parseKittyCommand(data: string): IKittyCommand {\n const cmd: IKittyCommand = {};\n const parts = data.split(',');\n\n for (const part of parts) {\n const eqIdx = part.indexOf('=');\n if (eqIdx === -1) continue;\n\n const key = part.substring(0, eqIdx);\n const value = part.substring(eqIdx + 1);\n\n // Handle string keys first\n if (key === KittyKey.ACTION) {\n cmd.action = value;\n continue;\n }\n if (key === KittyKey.COMPRESSION) {\n cmd.compression = value;\n continue;\n }\n if (key === KittyKey.TRANSMISSION) {\n cmd.transmission = value;\n continue;\n }\n if (key === KittyKey.DELETE_SELECTOR) {\n cmd.deleteSelector = value;\n continue;\n }\n const numValue = parseInt(value, 10);\n switch (key) {\n case KittyKey.FORMAT: cmd.format = numValue; break;\n case KittyKey.ID: cmd.id = numValue; break;\n case KittyKey.IMAGE_NUMBER: cmd.imageNumber = numValue; break;\n case KittyKey.WIDTH: cmd.width = numValue; break;\n case KittyKey.HEIGHT: cmd.height = numValue; break;\n case KittyKey.X_OFFSET: cmd.x = numValue; break;\n case KittyKey.Y_OFFSET: cmd.y = numValue; break;\n case KittyKey.SOURCE_WIDTH: cmd.sourceWidth = numValue; break;\n case KittyKey.SOURCE_HEIGHT: cmd.sourceHeight = numValue; break;\n case KittyKey.X_PLACEMENT_OFFSET: cmd.xOffset = numValue; break;\n case KittyKey.Y_PLACEMENT_OFFSET: cmd.yOffset = numValue; break;\n case KittyKey.COLUMNS: cmd.columns = numValue; break;\n case KittyKey.ROWS: cmd.rows = numValue; break;\n case KittyKey.MORE: cmd.more = numValue; break;\n case KittyKey.QUIET: cmd.quiet = numValue; break;\n case KittyKey.CURSOR_MOVEMENT: cmd.cursorMovement = numValue; break;\n case KittyKey.Z_INDEX: cmd.zIndex = numValue; break;\n case KittyKey.PLACEMENT_ID: cmd.placementId = numValue; break;\n }\n }\n\n return cmd;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageStorage } from '../ImageStorage';\nimport { ImageLayer, IAddImageOpts } from '../Types';\nimport { IKittyImageData } from './KittyGraphicsTypes';\n\n// Kitty-specific image storage controller.\n//\n// Wraps shared ImageStorage with kitty protocol semantics:\n// - tracks transmitted image payloads by kitty image id\n// - tracks kitty image id -> shared ImageStorage id mapping for displayed images\n// - mirrors shared-storage evictions into kitty maps\n// - applies protocol-level undisplayed-image eviction policy\nexport class KittyImageStorage implements IDisposable {\n private static readonly _maxStoredImages = 256;\n\n private _nextImageId = 1;\n private readonly _images: Map = new Map();\n // TODO: Support multiple placements per image. The kitty spec identifies\n // placements by an (image id, placement id) pair \u2014 same i + different p\n // values should coexist, and same i + same p should replace the prior\n // placement. Currently we track only one storage entry per kitty image id,\n // so multiple placements of the same image overwrite each other. Fixing\n // this requires changing these maps to Map>\n // (kittyId \u2192 placementId \u2192 storageId) and updating addImage/deleteById\n // accordingly. The underlying shared ImageStorage would also need to\n // support multiple entries per logical image.\n private readonly _kittyIdToStorageId: Map = new Map();\n private readonly _storageIdToKittyId: Map = new Map();\n\n private readonly _previousOnImageDeleted: ((storageId: number) => void) | undefined;\n private readonly _wrappedOnImageDeleted: (storageId: number) => void;\n private readonly _handleStorageImageDeleted = (storageId: number): void => {\n const kittyId = this._storageIdToKittyId.get(storageId);\n if (kittyId !== undefined) {\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n this._images.delete(kittyId);\n }\n };\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n\n constructor(\n private readonly _storage: ImageStorage\n ) {\n this._previousOnImageDeleted = this._storage.onImageDeleted;\n this._wrappedOnImageDeleted = (storageId: number) => {\n this._previousOnImageDeleted?.(storageId);\n this._handleStorageImageDeleted(storageId);\n };\n this._storage.onImageDeleted = this._wrappedOnImageDeleted;\n }\n\n public reset(): void {\n this._nextImageId = 1;\n this._images.clear();\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public dispose(): void {\n this.reset();\n if (this._storage.onImageDeleted === this._wrappedOnImageDeleted) {\n this._storage.onImageDeleted = this._previousOnImageDeleted;\n }\n }\n\n public storeImage(id: number | undefined, imageData: Omit): number {\n const imageId = id ?? this._nextImageId++;\n\n const oldStorageId = this._kittyIdToStorageId.get(imageId);\n if (oldStorageId !== undefined) {\n this._storage.deleteImage(oldStorageId);\n this._kittyIdToStorageId.delete(imageId);\n this._storageIdToKittyId.delete(oldStorageId);\n }\n\n if (!this._images.has(imageId) && this._images.size >= KittyImageStorage._maxStoredImages) {\n this._evictUndisplayedImages();\n }\n\n // Encoded images awaiting placement are outside ImageStorage's pixel budget.\n // Unplaced payloads are evicted first so a new upload cannot erase a visible\n // image while abandoned blobs still hold budget; placed ones go only when\n // that is not enough, because the byte cap is a hard bound. The new image is\n // always stored, so an oversized one overshoots by at most one payload\n // (itself bounded by kittySizeLimit) rather than being dropped after an OK ack.\n const byteLimit = this._storage.getLimit() * 1000000;\n this._images.delete(imageId);\n let retainedBytes = 0;\n for (const image of this._images.values()) retainedBytes += image.data.size;\n for (const evictPlaced of [false, true]) {\n for (const [oldestId, image] of this._images) {\n if (retainedBytes + imageData.data.size <= byteLimit) break;\n if (this._kittyIdToStorageId.has(oldestId) !== evictPlaced) continue;\n retainedBytes -= image.data.size;\n this.deleteById(oldestId);\n }\n }\n\n this._images.set(imageId, {\n ...imageData,\n id: imageId\n });\n return imageId;\n }\n\n public addImage(kittyId: number, image: HTMLCanvasElement | ImageBitmap, scrolling: boolean, layer: ImageLayer, zIndex: number): void {\n // Clean up stale reverse-mapping from a previous placement of the same\n // kitty image. The old shared-storage entry is kept (it may still be\n // visible on screen) but its reverse mapping is removed so that eviction\n // of the old entry won't incorrectly delete the kitty image data.\n const oldStorageId = this._kittyIdToStorageId.get(kittyId);\n if (oldStorageId !== undefined) {\n this._storageIdToKittyId.delete(oldStorageId);\n }\n this._addImageOpts.scrolling = scrolling;\n this._addImageOpts.layer = layer;\n this._addImageOpts.zIndex = zIndex;\n const storageId = this._storage.addImage(image, this._addImageOpts);\n this._kittyIdToStorageId.set(kittyId, storageId);\n this._storageIdToKittyId.set(storageId, kittyId);\n }\n\n public getImage(kittyId: number): IKittyImageData | undefined {\n return this._images.get(kittyId);\n }\n\n public deleteById(kittyId: number): void {\n this._images.delete(kittyId);\n const storageId = this._kittyIdToStorageId.get(kittyId);\n if (storageId !== undefined) {\n this._storage.deleteImage(storageId);\n this._kittyIdToStorageId.delete(kittyId);\n this._storageIdToKittyId.delete(storageId);\n }\n }\n\n public deleteAll(): void {\n this._images.clear();\n for (const storageId of this._kittyIdToStorageId.values()) {\n this._storage.deleteImage(storageId);\n }\n this._kittyIdToStorageId.clear();\n this._storageIdToKittyId.clear();\n }\n\n public get images(): ReadonlyMap {\n return this._images;\n }\n\n public get kittyIdToStorageId(): ReadonlyMap {\n return this._kittyIdToStorageId;\n }\n\n public get lastImageId(): number {\n return this._nextImageId - 1;\n }\n\n private _evictUndisplayedImages(): void {\n for (const [kittyId] of this._images) {\n if (this._images.size <= KittyImageStorage._maxStoredImages / 2) {\n break;\n }\n if (!this._kittyIdToStorageId.has(kittyId)) {\n this._images.delete(kittyId);\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\nimport { LIMITS } from 'sixel/lib/wasm';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n// Why pooled: every decoder owns a wasm memory, and V8 caps live wasm memories\n// per process (~124 in a sandboxed renderer). Terminals borrow a decoder only\n// while a SIXEL sequence is open, so idle terminals hold none.\nconst MAX_IDLE_DECODERS = 2;\nconst idleDecoders = new Map();\nlet poolPrimed = false;\n\nfunction primeDecoderPool(memoryLimit: number): void {\n if (poolPrimed) return;\n poolPrimed = true;\n // Async compile once, off the parser's hot path; later decoders reuse the cached module.\n DecoderAsync({ memoryLimit, palette: DEFAULT_PALETTE }).then(\n d => releaseDecoder(d, memoryLimit),\n () => { poolPrimed = false; }\n );\n}\n\nfunction acquireDecoder(memoryLimit: number): Decoder {\n return idleDecoders.get(memoryLimit)?.pop() ?? new Decoder({ memoryLimit, palette: DEFAULT_PALETTE });\n}\n\nfunction releaseDecoder(dec: Decoder, memoryLimit: number): void {\n if (dec.memoryUsage > MEM_PERMA_LIMIT) {\n dec.release();\n }\n const idle = idleDecoders.get(memoryLimit) ?? [];\n if (idle.length < MAX_IDLE_DECODERS) {\n idle.push(dec);\n idleDecoders.set(memoryLimit, idle);\n }\n}\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n private _decMemoryLimit = 0;\n // Color registers outlive a single image, so they live here rather than in a pooled decoder.\n private readonly _palette = new Uint32Array(LIMITS.PALETTE_SIZE);\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: SixelImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n this._palette.set(DEFAULT_PALETTE);\n primeDecoderPool(this._opts.pixelLimit * 4);\n }\n\n public reset(): void {\n this._returnDecoder();\n this._palette.fill(0);\n this._palette.set(DEFAULT_PALETTE);\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n this._returnDecoder();\n const memoryLimit = this._opts.pixelLimit * 4;\n try {\n this._dec = acquireDecoder(memoryLimit);\n } catch (e) {\n // Why: exhausting wasm memory must drop this image, not throw out of the parser and wedge the write queue.\n console.warn(`SIXEL: could not allocate decoder - ${e}`);\n this._aborted = true;\n return;\n }\n this._decMemoryLimit = memoryLimit;\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, this._palette, this._opts.sixelPaletteLimit);\n }\n\n private _returnDecoder(): void {\n const dec = this._dec;\n if (!dec) return;\n this._dec = undefined;\n this._palette.set(dec.palette);\n releaseDecoder(dec, this._decMemoryLimit);\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n try {\n return this._unhook(success);\n } finally {\n this._returnDecoder();\n }\n }\n\n private _unhook(success: boolean): boolean {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || !height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0);\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { IImageAddonOptions, ITerminalExt, IAddImageOpts } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\n\n/**\n * Sixel-specific image storage controller.\n *\n * Wraps the shared ImageStorage with sixel protocol semantics:\n * - Cursor behavior governed by DECSET 80 (sixelScrolling option)\n * - advanceCursor for empty sixels carrying only height\n */\nexport class SixelImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'vt340' };\n constructor(\n private readonly _storage: ImageStorage,\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _terminal: ITerminalExt\n ) {}\n\n /**\n * Add a sixel image to storage.\n * Cursor behavior depends on the sixelScrolling option (DECSET 80).\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._addImageOpts.scrolling = this._opts.sixelScrolling;\n this._storage.addImage(img, this._addImageOpts);\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IAddImageOpts } from './Types';\nimport { ImageStorage } from './ImageStorage';\n\n/**\n * IIP (iTerm Image Protocol) specific image storage controller.\n *\n * Wraps the shared ImageStorage with IIP protocol semantics:\n * - Always uses scrolling mode (cursor advances with image)\n */\nexport class IIPImageStorage {\n private _addImageOpts: IAddImageOpts = { scrolling: true, layer: 'top', zIndex: 0, cursorPos: 'iip' };\n constructor(\n private readonly _storage: ImageStorage\n ) {}\n\n /**\n * Add an IIP image to storage.\n * Always uses scrolling mode \u2014 cursor advances past the image.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n this._storage.addImage(img, this._addImageOpts);\n }\n}\n", "/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { Emitter, type IEvent } from 'common/Event';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { KittyGraphicsHandler } from './kitty/KittyGraphicsHandler';\nimport { KittyImageStorage } from './kitty/KittyImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { SixelImageStorage } from './SixelImageStorage';\nimport { IIPImageStorage } from './IIPImageStorage';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n\n/**\n * Document VT features provided by this addon.\n *\n * @vt: #E[Supported via @xterm/addon-image.] DCS SIXEL \"SIXEL Graphics\" \"DCS Ps ; Ps ; Ps ; q Pt ST\" \"Draw SIXEL image.\"\n *\n * Sixel support is provided by the addon @xterm/addon-image with these limitations:\n * - immediate coloring (no shared palette, allows high color settings of `img2sixel`)\n * - max. palette size of 4096 colors\n * - max. pixel width of 16K\n * - max. 25 MB per sixel sequence\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] OSC 1337 \"iTerm2 Commands\" \"OSC 1337 ; Pt BEL\" \"Custom iTerm2 commands.\"\n *\n * Only the inline image protocol (IIP) is supported by the addon @xterm/addon-image with\n * the following limitations:\n * - sequence:\n * - format: `OSC 1337 ; File=inline=1 ; size= ; ... : BEL`\n * - size param must be set and payload may not exceed CEIL(size * 4 / 3)\n * - strict base64 handling as of RFC4648 \u00A74 (standard alphabet, optional padding,\n * no separator bytes allowed)\n * - supported params: size, name, width, height, preserveAspectRatio\n * - image formats: PNG, JPEG and GIF\n * - no animation support (renders first image of a GIF)\n * - no multipart support\n * - VT340 cursor positioning (begin of last sixel data row)\n *\n * See [addon readme](https://github.com/xtermjs/xterm.js/tree/master/addons/addon-image)\n * and [iTerm2 IIP docs](https://iterm2.com/documentation-images.html) for more details.\n *\n *\n * @vt: #E[Supported via @xterm/addon-image.] APC KITTY_GRAPHICS \"Kitty Graphics\" \"APC G Pt ST\" \"Kitty Graphics Protocol.\"\n *\n * Kitty graphics support is provided by the addon @xterm/addon-image.\n * Note that while basic image output already works, this is still work in progress.\n */\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 4096,\n sixelSizeLimit: 33554432,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 33554432,\n kittySupport: true,\n kittySizeLimit: 33554432\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon, IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map = new Map();\n private readonly _onImageAdded = new Emitter();\n public readonly onImageAdded: IEvent = this._onImageAdded.event;\n\n constructor(opts?: Partial) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const handler of this._handlers.values()) handler.reset();\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n this._onImageAdded.dispose();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n this._storage.onImageAdded = () => this._onImageAdded.fire();\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n const windowOps = terminal.options.windowOptions ?? {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelStorage = new SixelImageStorage(this._storage!, this._opts, this._renderer!, terminal);\n const sixelHandler = new SixelHandler(this._opts, sixelStorage, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipStorage = new IIPImageStorage(this._storage!);\n const iipHandler = new IIPHandler(this._opts, this._renderer!, iipStorage, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n\n // Kitty graphics handler\n if (this._opts.kittySupport) {\n const kittyStorage = new KittyImageStorage(this._storage!);\n const kittyHandler = new KittyGraphicsHandler(this._opts, this._renderer!, kittyStorage, terminal);\n this._handlers.set('kitty', kittyHandler);\n this._disposeLater(\n kittyStorage,\n kittyHandler,\n terminal._core._inputHandler._parser.registerApcHandler({ final: 'G' }, kittyHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.input(s, false);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"], ++ "mappings": "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", ++ "names": ["exports", "red", "n", "green", "blue", "alpha", "toRGBA8888", "g", "b", "a", "fromRGBA8888", "color", "nearestColorIndex", "palette", "r", "min", "idx", "i", "dr", "dg", "db", "clamp", "low", "high", "value", "h2c", "t1", "t2", "c", "HLStoRGB", "h", "l", "s", "v", "normalizeRGB", "normalizeHLS", "p", "d", "require_lib", "__commonJSMin", "exports", "InWasm", "z", "s", "b", "r", "def", "t", "d", "m", "W", "e", "require_Base64Decoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmDecode", "MAP", "el", "D", "i", "EMPTY", "Base64Decoder", "keepSize", "maxBytes", "initialBytes", "m", "bytes", "requested", "needed", "newSize", "addPages", "data", "require_QoiDecoder_wasm", "__commonJSMin", "exports", "inwasm_runtime_1", "wasmQoiDecode", "QoiDecoder", "keepSize", "d", "pixels", "ib", "dl", "bytes", "chunkP", "exports", "Colors_1", "wasm_1", "decodeBase64", "s", "bytestring", "result", "WASM_BYTES", "WASM_MODULE", "NULL_CANVAS", "CallbackProxy", "width", "mode", "DEFAULT_OPTIONS", "DecoderAsync", "opts", "cbProxy", "importObj", "inst", "Decoder", "exports", "_instance", "_cbProxy", "module", "pixels", "offset", "additionalPixels", "newCanvas", "adv", "remaining", "c", "i", "fillColor", "palette", "paletteLimit", "truncate", "data", "start", "end", "p", "length", "j", "currentWidth", "escape", "final", "finalOffset", "bw", "currentHeight", "decode", "dec", "decodeAsync", "toDisposable", "fn", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "len", "EventUtils", "forward", "from", "to", "e", "map", "i", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "import_Colors", "ImageRenderer", "_ImageRenderer", "Disposable", "_terminal", "MutableDisposable", "parent", "option", "toDisposable", "localDocument", "width", "height", "canvas", "ctx", "buffer", "imgData", "img", "value", "start", "end", "layer", "y", "w", "h", "imgSpec", "tileId", "col", "row", "count", "sourceWidth", "sourceHeight", "cols", "sx", "sy", "dx", "dy", "finalWidth", "finalHeight", "spec", "currentWidth", "currentHeight", "originalWidth", "originalHeight", "scaledWidth", "scaledHeight", "renderer", "key", "screenElement", "bWidth", "blueprint", "d32", "black", "white", "shift", "offset", "x", "ctx2", "i", "placeholder", "bitmap", "stringFromCodePoint", "codePoint", "AttributeData", "_AttributeData", "ExtendedAttrs", "value", "newObj", "_ExtendedAttrs", "ext", "urlId", "val", "CellData", "_CellData", "AttributeData", "ExtendedAttrs", "value", "obj", "stringFromCodePoint", "combined", "code", "second", "other", "thisDefault", "otherDefault", "CELL_SIZE_DEFAULT", "ImageTileInfo", "imageId", "tileId", "ImageStorage", "_terminal", "_renderer", "_opts", "CellData", "e", "spec", "value", "storedPixels", "id", "zero", "img", "opts", "cellSize", "cols", "rows", "buffer", "termCols", "termRows", "originX", "originY", "offset", "tileCount", "row", "line", "col", "endMarker", "imgSpec", "range", "hasTopImages", "hasBottomImages", "start", "end", "drawCalls", "placeholderCalls", "startTile", "startCol", "count", "nextE", "a", "b", "call", "metrics", "oldCol", "tilesPerRow", "hasData", "rightCol", "lastTile", "expandCol", "x", "y", "orig", "canvas", "ImageRenderer", "room", "used", "current", "workCell", "old", "oldSpec", "extattr", "payload", "import_Base64Decoder", "import_QoiDecoder", "toStr", "data", "s", "i", "toInt", "v", "toSize", "toName", "bs", "b", "DECODERS", "FILE_MARKER", "MULTIPARTFILE_MARKER", "FILEPART_MARKER", "FILEEND_MARKER", "REPORTCELLSIZE_MARKER", "MAX_FIELDCHARS", "HeaderParser", "k", "start", "end", "state", "pos", "buffer", "c", "UNSUPPORTED_TYPE", "imageType", "d", "d32", "width", "height", "jpgSize", "dim", "pos", "limit", "i", "len", "blockLength", "DEFAULT_HEADER", "IIPHandler", "_opts", "_renderer", "_storage", "_coreTerminal", "HeaderParser", "maxEncodedBytes", "initialBytes", "Base64Decoder", "QoiDecoder", "data", "start", "end", "dataPos", "success", "seqType", "w", "CELL_SIZE_DEFAULT", "h", "scale", "report", "cond", "metrics", "UNSUPPORTED_TYPE", "imageType", "blob", "e", "canvas", "ImageRenderer", "generation", "bm", "cw", "ch", "width", "height", "rw", "rh", "wf", "hf", "f", "s", "total", "cdim", "import_Base64Decoder", "parseKittyCommand", "data", "cmd", "parts", "part", "eqIdx", "key", "value", "numValue", "DECODER_OK", "KittyGraphicsHandler", "_opts", "_renderer", "_kittyStorage", "_coreTerminal", "key", "pending", "data", "start", "end", "controlEnd", "i", "copyLength", "parseKittyCommand", "payloadStart", "pendingKey", "previousEncodedSize", "decoderToRelease", "decoderCapacity", "maxPending", "oldest", "decoder", "Base64Decoder", "e", "success", "cmd", "isMoreComing", "decodeError", "finalCmd", "imageBytes", "result", "str", "bytes", "id", "image", "quiet", "format", "width", "height", "bytesPerPixel", "expectedBytes", "message", "placementId", "isOk", "pPart", "response", "generation", "bitmap", "cropX", "cropY", "cropW", "cropH", "maxCropW", "maxCropH", "finalCropW", "finalCropH", "cropped", "cw", "CELL_SIZE_DEFAULT", "ch", "imgCols", "imgRows", "w", "h", "buffer", "savedX", "savedY", "savedYbase", "layer", "scaled", "xOffset", "yOffset", "canvasW", "canvasH", "offsetCanvas", "ImageRenderer", "offsetCtx", "offsetBitmap", "zIndex", "scrolled", "metrics", "imageType", "blob", "url", "img", "resolve", "reject", "canvas", "pixelCount", "src32", "dst32", "alignedPixels", "srcOffset", "dstOffset", "b0", "b1", "b2", "srcByte", "dstByte", "compressed", "error", "limit", "offsetIn", "reader", "controller", "chunks", "totalLength", "done", "value", "offset", "chunk", "_KittyImageStorage", "_storage", "storageId", "kittyId", "id", "imageData", "imageId", "oldStorageId", "byteLimit", "retainedBytes", "image", "evictPlaced", "oldestId", "scrolling", "layer", "zIndex", "KittyImageStorage", "import_Colors", "import_Decoder", "import_wasm", "MEM_PERMA_LIMIT", "DEFAULT_PALETTE", "MAX_IDLE_DECODERS", "idleDecoders", "poolPrimed", "primeDecoderPool", "memoryLimit", "d", "releaseDecoder", "acquireDecoder", "dec", "idle", "SixelHandler", "_opts", "_storage", "_coreTerminal", "params", "e", "fillColor", "extractActiveBg", "data", "start", "end", "success", "width", "height", "canvas", "ImageRenderer", "attr", "colors", "bg", "convertLe", "t", "color", "SixelImageStorage", "_storage", "_opts", "_renderer", "_terminal", "img", "height", "cellSize", "CELL_SIZE_DEFAULT", "rows", "i", "IIPImageStorage", "_storage", "img", "DEFAULT_OPTIONS", "MAX_SIXEL_PALETTE_SIZE", "ImageAddon", "opts", "Emitter", "DEFAULT_OPTIONS", "handler", "obj", "args", "terminal", "ImageRenderer", "ImageStorage", "windowOps", "params", "range", "metrics", "sixelStorage", "SixelImageStorage", "sixelHandler", "SixelHandler", "iipStorage", "IIPImageStorage", "iipHandler", "IIPHandler", "kittyStorage", "KittyImageStorage", "kittyHandler", "KittyGraphicsHandler", "limit", "value", "x", "y", "s", "i", "MAX_SIXEL_PALETTE_SIZE", "width", "height", "cellSize", "CELL_SIZE_DEFAULT"] + } +diff --git a/src/IIPHandler.ts b/src/IIPHandler.ts +index 559b907416eb38318f439d060d7f89311ed34c7e..73cedbe99f831bffd202697cc8ba80a46a39cb99 100644 +--- a/src/IIPHandler.ts ++++ b/src/IIPHandler.ts +@@ -13,8 +13,10 @@ import { imageType, UNSUPPORTED_TYPE } from './IIPMetrics'; + + // Local const enum mirror - esbuild can't inline const enums from external packages + const enum DecoderConst { +- // Limit held memory in base64 decoder (encoded bytes). +- KEEP_DATA = 4194304, ++ // Held memory in base64/QOI decoders between images. Zero because each kept ++ // decoder pins a wasm memory, and V8 caps those per process (~124 in a ++ // sandboxed renderer), so idle terminals must not hold one. ++ KEEP_DATA = 0, + // Initial buffer allocation for the decoder. + INITIAL_DATA = 1048576, + // Local mirror of const enum (esbuild can't inline const enums from external packages) +@@ -34,6 +36,7 @@ const DEFAULT_HEADER: IHeaderFields = { + + + export class IIPHandler implements IOscHandler, IResetHandler { ++ private _generation = 0; + private _aborted = false; + private _hp = new HeaderParser(); + private _header: IHeaderFields = DEFAULT_HEADER; +@@ -55,6 +58,7 @@ export class IIPHandler implements IOscHandler, IResetHandler { + } + + public reset(): void { ++ this._generation++; + this._hp.reset(); + this._dec.release(); + this._qoiDec.release(); +@@ -92,7 +96,10 @@ export class IIPHandler implements IOscHandler, IResetHandler { + this._aborted = true; + return; + } +- this._dec.init(); ++ if (!this._initDecoder()) { ++ this._aborted = true; ++ return; ++ } + } else if (this._abortMulti) { + this._aborted = true; + return; +@@ -135,7 +142,9 @@ export class IIPHandler implements IOscHandler, IResetHandler { + this._isMultipart = true; + this._abortMulti = false; + this._dec.release(); +- this._dec.init(); ++ if (!this._initDecoder()) { ++ this._abortMulti = true; ++ } + return true; + } + +@@ -179,7 +188,15 @@ export class IIPHandler implements IOscHandler, IResetHandler { + + let blob: Blob | ImageData; + if (metrics.mime === 'image/qoi') { +- const data = this._qoiDec.decode(this._dec.data8); ++ let data: Uint8Array; ++ try { ++ data = this._qoiDec.decode(this._dec.data8); ++ } catch (e) { ++ console.warn('IIP: could not decode QOI image', e); ++ this._dec.release(); ++ this._qoiDec.release(); ++ return true; ++ } + blob = new ImageData( + new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength), + this._qoiDec.width, +@@ -198,8 +215,13 @@ export class IIPHandler implements IOscHandler, IResetHandler { + blob = new Blob([this._dec.data8], { type: metrics.mime }); + } + this._dec.release(); ++ const generation = this._generation; + return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h }) + .then(bm => { ++ if (generation !== this._generation) { ++ bm.close(); ++ return true; ++ } + this._storage.addImage(bm); + return true; + }) +@@ -209,6 +231,18 @@ export class IIPHandler implements IOscHandler, IResetHandler { + }); + } + ++ // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue. ++ private _initDecoder(): boolean { ++ try { ++ this._dec.init(); ++ return true; ++ } catch (e) { ++ console.warn('IIP: could not allocate decoder', e); ++ this._dec.release(); ++ return false; ++ } ++ } ++ + private _resize(w: number, h: number): [number, number] { + const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width; + const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height; +diff --git a/src/ImageAddon.ts b/src/ImageAddon.ts +index 8fd39543118cd420e36c1614c1af370b6c7bbfbb..0c44d2a81642113417bf8dc10a4faa76d7cc5864 100644 +--- a/src/ImageAddon.ts ++++ b/src/ImageAddon.ts +@@ -113,6 +113,7 @@ export class ImageAddon implements ITerminalAddon, IImageApi { + } + + public dispose(): void { ++ for (const handler of this._handlers.values()) handler.reset(); + for (const obj of this._disposables) { + obj.dispose(); + } +diff --git a/src/ImageRenderer.ts b/src/ImageRenderer.ts +index 5854efaec1fdf9dfcb886023542998a563b6d2f2..3afaf9bd63ffd7a4cdf32bf0ac24cf33a8aa814f 100644 +--- a/src/ImageRenderer.ts ++++ b/src/ImageRenderer.ts +@@ -186,16 +186,17 @@ export class ImageRenderer extends Disposable implements IDisposable { + + this._rescaleImage(imgSpec, width, height); + const img = imgSpec.actual!; +- const cols = Math.ceil(img.width / width); ++ const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize; ++ const cols = Math.ceil(img.width / sourceWidth); + +- const sx = (tileId % cols) * width; +- const sy = Math.floor(tileId / cols) * height; ++ const sx = (tileId % cols) * sourceWidth; ++ const sy = Math.floor(tileId / cols) * sourceHeight; + const dx = col * width; + const dy = row * height; + + // safari bug: never access image source out of bounds +- const finalWidth = count * width + sx > img.width ? img.width - sx : count * width; +- const finalHeight = sy + height > img.height ? img.height - sy : height; ++ const finalWidth = count * sourceWidth + sx > img.width ? img.width - sx : count * sourceWidth; ++ const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight; + + // Floor all pixel offsets to get stable tile mapping without any overflows. + // Note: For not pixel perfect aligned cells like in the DOM renderer +@@ -204,7 +205,7 @@ export class ImageRenderer extends Disposable implements IDisposable { + ctx.drawImage( + img, + Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight), +- Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight) ++ Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight) + ); + } + +@@ -219,19 +220,20 @@ export class ImageRenderer extends Disposable implements IDisposable { + } + this._rescaleImage(imgSpec, width, height); + const img = imgSpec.actual!; +- const cols = Math.ceil(img.width / width); +- const sx = (tileId % cols) * width; +- const sy = Math.floor(tileId / cols) * height; +- const finalWidth = width + sx > img.width ? img.width - sx : width; +- const finalHeight = sy + height > img.height ? img.height - sy : height; +- +- const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight); ++ const { width: sourceWidth, height: sourceHeight } = imgSpec.actualCellSize; ++ const cols = Math.ceil(img.width / sourceWidth); ++ const sx = (tileId % cols) * sourceWidth; ++ const sy = Math.floor(tileId / cols) * sourceHeight; ++ const finalWidth = sourceWidth + sx > img.width ? img.width - sx : sourceWidth; ++ const finalHeight = sy + sourceHeight > img.height ? img.height - sy : sourceHeight; ++ ++ const canvas = ImageRenderer.createCanvas(this.document, Math.ceil(finalWidth * width / sourceWidth), Math.ceil(finalHeight * height / sourceHeight)); + const ctx = canvas.getContext('2d'); + if (ctx) { + ctx.drawImage( + img, + Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight), +- 0, 0, Math.floor(finalWidth), Math.floor(finalHeight) ++ 0, 0, canvas.width, canvas.height + ); + return canvas; + } +@@ -299,11 +301,16 @@ export class ImageRenderer extends Disposable implements IDisposable { + spec.actualCellSize.height = originalHeight; + return; + } +- const canvas = ImageRenderer.createCanvas( +- this.document, +- Math.ceil(spec.orig!.width * currentWidth / originalWidth), +- Math.ceil(spec.orig!.height * currentHeight / originalHeight) +- ); ++ const scaledWidth = Math.ceil(spec.orig!.width * currentWidth / originalWidth); ++ const scaledHeight = Math.ceil(spec.orig!.height * currentHeight / originalHeight); ++ // Upscale visible tiles directly; a full zoomed copy can dwarf the image budget. ++ if (scaledWidth * scaledHeight > spec.orig!.width * spec.orig!.height) { ++ spec.actual = spec.orig; ++ spec.actualCellSize.width = originalWidth; ++ spec.actualCellSize.height = originalHeight; ++ return; ++ } ++ const canvas = ImageRenderer.createCanvas(this.document, scaledWidth, scaledHeight); + const ctx = canvas.getContext('2d'); + if (ctx) { + ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height); +@@ -415,7 +422,11 @@ export class ImageRenderer extends Disposable implements IDisposable { + for (let i = 0; i < width; i += bWidth) { + ctx2.drawImage(blueprint, i, 0); + } +- ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap); ++ const placeholder = this._placeholder; ++ ImageRenderer.createImageBitmap(placeholder).then(bitmap => { ++ if (this._placeholder !== placeholder) bitmap?.close(); ++ else this._placeholderBitmap = bitmap; ++ }).catch(() => {}); + } + + public get document(): Document | undefined { +diff --git a/src/SixelHandler.ts b/src/SixelHandler.ts +index 1af2d85bcdd541ed60b1e707f6186a91f1bbf1b2..0711a122ea43d5212a2851add9e744b65550ec85 100644 +--- a/src/SixelHandler.ts ++++ b/src/SixelHandler.ts +@@ -10,6 +10,7 @@ import { RGBA8888 } from 'sixel/lib/Types'; + import { ImageRenderer } from './ImageRenderer'; + + import { DecoderAsync, Decoder } from 'sixel/lib/Decoder'; ++import { LIMITS } from 'sixel/lib/wasm'; + + // always free decoder ressources after decoding if it exceeds this limit + const MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB +@@ -18,48 +19,88 @@ const MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB + const DEFAULT_PALETTE = PALETTE_ANSI_256; + DEFAULT_PALETTE.set(PALETTE_VT340_COLOR); + ++// Why pooled: every decoder owns a wasm memory, and V8 caps live wasm memories ++// per process (~124 in a sandboxed renderer). Terminals borrow a decoder only ++// while a SIXEL sequence is open, so idle terminals hold none. ++const MAX_IDLE_DECODERS = 2; ++const idleDecoders = new Map(); ++let poolPrimed = false; ++ ++function primeDecoderPool(memoryLimit: number): void { ++ if (poolPrimed) return; ++ poolPrimed = true; ++ // Async compile once, off the parser's hot path; later decoders reuse the cached module. ++ DecoderAsync({ memoryLimit, palette: DEFAULT_PALETTE }).then( ++ d => releaseDecoder(d, memoryLimit), ++ () => { poolPrimed = false; } ++ ); ++} ++ ++function acquireDecoder(memoryLimit: number): Decoder { ++ return idleDecoders.get(memoryLimit)?.pop() ?? new Decoder({ memoryLimit, palette: DEFAULT_PALETTE }); ++} ++ ++function releaseDecoder(dec: Decoder, memoryLimit: number): void { ++ if (dec.memoryUsage > MEM_PERMA_LIMIT) { ++ dec.release(); ++ } ++ const idle = idleDecoders.get(memoryLimit) ?? []; ++ if (idle.length < MAX_IDLE_DECODERS) { ++ idle.push(dec); ++ idleDecoders.set(memoryLimit, idle); ++ } ++} ++ + + export class SixelHandler implements IDcsHandler, IResetHandler { + private _size = 0; + private _aborted = false; + private _dec: Decoder | undefined; ++ private _decMemoryLimit = 0; ++ // Color registers outlive a single image, so they live here rather than in a pooled decoder. ++ private readonly _palette = new Uint32Array(LIMITS.PALETTE_SIZE); + + constructor( + private readonly _opts: IImageAddonOptions, + private readonly _storage: SixelImageStorage, + private readonly _coreTerminal: ITerminalExt + ) { +- DecoderAsync({ +- memoryLimit: this._opts.pixelLimit * 4, +- palette: DEFAULT_PALETTE, +- paletteLimit: this._opts.sixelPaletteLimit +- }).then(d => this._dec = d); ++ this._palette.set(DEFAULT_PALETTE); ++ primeDecoderPool(this._opts.pixelLimit * 4); + } + + public reset(): void { +- /** +- * reset sixel decoder to defaults: +- * - release all memory +- * - nullify palette (4096) +- * - apply default palette (256) +- */ +- if (this._dec) { +- this._dec.release(); +- // FIXME: missing interface on decoder to nullify full palette +- (this._dec as any)._palette.fill(0); +- this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit); +- } ++ this._returnDecoder(); ++ this._palette.fill(0); ++ this._palette.set(DEFAULT_PALETTE); + } + + public hook(params: IParams): void { + this._size = 0; + this._aborted = false; +- if (this._dec) { +- const fillColor = params.params[1] === 1 ? 0 : extractActiveBg( +- this._coreTerminal._core._inputHandler._curAttrData, +- this._coreTerminal._core._themeService?.colors); +- this._dec.init(fillColor, null, this._opts.sixelPaletteLimit); ++ this._returnDecoder(); ++ const memoryLimit = this._opts.pixelLimit * 4; ++ try { ++ this._dec = acquireDecoder(memoryLimit); ++ } catch (e) { ++ // Why: exhausting wasm memory must drop this image, not throw out of the parser and wedge the write queue. ++ console.warn(`SIXEL: could not allocate decoder - ${e}`); ++ this._aborted = true; ++ return; + } ++ this._decMemoryLimit = memoryLimit; ++ const fillColor = params.params[1] === 1 ? 0 : extractActiveBg( ++ this._coreTerminal._core._inputHandler._curAttrData, ++ this._coreTerminal._core._themeService?.colors); ++ this._dec.init(fillColor, this._palette, this._opts.sixelPaletteLimit); ++ } ++ ++ private _returnDecoder(): void { ++ const dec = this._dec; ++ if (!dec) return; ++ this._dec = undefined; ++ this._palette.set(dec.palette); ++ releaseDecoder(dec, this._decMemoryLimit); + } + + public put(data: Uint32Array, start: number, end: number): void { +@@ -83,6 +124,14 @@ export class SixelHandler implements IDcsHandler, IResetHandler { + } + + public unhook(success: boolean): boolean | Promise { ++ try { ++ return this._unhook(success); ++ } finally { ++ this._returnDecoder(); ++ } ++ } ++ ++ private _unhook(success: boolean): boolean { + if (this._aborted || !success || !this._dec) { + return true; + } +@@ -100,9 +149,6 @@ export class SixelHandler implements IDcsHandler, IResetHandler { + + const canvas = ImageRenderer.createCanvas(undefined, width, height); + canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8 as Uint8ClampedArray, width, height), 0, 0); +- if (this._dec.memoryUsage > MEM_PERMA_LIMIT) { +- this._dec.release(); +- } + this._storage.addImage(canvas); + return true; + } +diff --git a/src/kitty/KittyGraphicsHandler.ts b/src/kitty/KittyGraphicsHandler.ts +index de889dfff75d9ecc8ab47a025e6989ffe75bb202..cf66e5b75c78645b1641e53d1425d88201134f78 100644 +--- a/src/kitty/KittyGraphicsHandler.ts ++++ b/src/kitty/KittyGraphicsHandler.ts +@@ -7,6 +7,7 @@ import { IDisposable } from '@xterm/xterm'; + import { IApcHandler, IImageAddonOptions, IResetHandler, ITerminalExt, ImageLayer } from '../Types'; + import { ImageRenderer } from '../ImageRenderer'; + import { CELL_SIZE_DEFAULT } from '../ImageStorage'; ++import { imageType } from '../IIPMetrics'; + import { KittyImageStorage } from './KittyImageStorage'; + import Base64Decoder, { type DecodeStatus } from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm'; + import { +@@ -37,6 +38,7 @@ const DECODER_OK = Constants.DECODER_OK as unknown as DecodeStatus.OK; + // Kitty graphics protocol handler with streaming base64 decoding. + export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDisposable { + private _aborted = false; ++ private _generation = 0; + private _decodeError = false; + + private _activeDecoder: Base64Decoder | null = null; +@@ -80,6 +82,7 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos + } + + public reset(): void { ++ this._generation++; + this._cleanupAllPending(); + if (this._activeDecoder) { + this._activeDecoder.release(); +@@ -200,8 +203,38 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos + this._activeDecoder = pending.decoder; + } + if (!this._activeDecoder) { +- this._activeDecoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes); +- this._activeDecoder.init(); ++ // Budget WASM capacity, including one page of decoder state and rounding. ++ const decoderCapacity = this._maxEncodedBytes + 131072; ++ if (decoderCapacity > this._opts.storageLimit * 1000000) { ++ this._aborted = true; ++ if (this._parsedCommand?.id !== undefined) { ++ this._sendResponse(this._parsedCommand.id, 'ENOMEM:pending image budget exceeded', this._parsedCommand.quiet ?? 0); ++ } ++ return; ++ } ++ const maxPending = Math.max(1, Math.floor(this._opts.storageLimit * 1000000 / decoderCapacity)); ++ while (this._pendingTransmissions.size >= maxPending) { ++ const oldest = this._pendingTransmissions.entries().next().value; ++ if (!oldest) break; ++ oldest[1].decoder.release(); ++ this._removePendingEntry(oldest[0]); ++ if (oldest[1].cmd.id !== undefined) { ++ this._sendResponse(oldest[1].cmd.id, 'ENOMEM:pending image budget exceeded', oldest[1].cmd.quiet ?? 0); ++ } ++ } ++ const decoder = new Base64Decoder(Constants.DECODER_KEEP_DATA, this._maxEncodedBytes, this._initialEncodedBytes); ++ try { ++ decoder.init(); ++ } catch (e) { ++ // Why: wasm memory exhaustion must drop this image, not throw out of the parser and wedge the write queue. ++ console.warn('KITTY: could not allocate decoder', e); ++ this._aborted = true; ++ if (this._parsedCommand?.id !== undefined) { ++ this._sendResponse(this._parsedCommand.id, 'ENOMEM:could not allocate decoder', this._parsedCommand.quiet ?? 0); ++ } ++ return; ++ } ++ this._activeDecoder = decoder; + } + + if (this._activeDecoder.put(data.subarray(start, end)) !== DECODER_OK) { +@@ -550,9 +583,11 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos + } + + private async _decodeAndDisplay(image: IKittyImageData, cmd: IKittyCommand): Promise { ++ const generation = this._generation; + let bitmap: ImageBitmap | undefined = await this._createBitmap(image); + + try { ++ if (generation !== this._generation) throw new Error('image decode canceled'); + const cropX = Math.max(0, cmd.x ?? 0); + const cropY = Math.max(0, cmd.y ?? 0); + const cropW = cmd.sourceWidth || (bitmap.width - cropX); +@@ -660,6 +695,7 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos + } + } + ++ if (generation !== this._generation) throw new Error('image decode canceled'); + const zIndex = cmd.zIndex ?? 0; + this._kittyStorage.addImage(image.id, bitmap, true, layer, zIndex); + bitmap = undefined; // ownership transferred to storage +@@ -693,6 +729,12 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos + } + + if (image.format === KittyFormat.PNG) { ++ const metrics = imageType(bytes); ++ // IHDR dimensions are parsed with signed shifts, so a value >= 0x80000000 comes ++ // back negative and a bare `>` pixel-limit test passes it; require positive. ++ if (metrics.mime !== 'image/png' || !(metrics.width > 0) || !(metrics.height > 0) || metrics.width * metrics.height > this._opts.pixelLimit) { ++ throw new RangeError('PNG exceeds pixel limit or has invalid dimensions'); ++ } + const blob = new Blob([bytes as BlobPart], { type: 'image/png' }); + if (!window.createImageBitmap) { + const url = URL.createObjectURL(blob); +@@ -775,27 +817,45 @@ export class KittyGraphicsHandler implements IApcHandler, IResetHandler, IDispos + private async _decompressZlib(compressed: Uint8Array): Promise { + try { + return await this._decompress(compressed, 'deflate'); +- } catch { ++ } catch (error) { ++ if (error instanceof RangeError) throw error; + return await this._decompress(compressed, 'deflate-raw'); + } + } + + private async _decompress(compressed: Uint8Array, format: 'deflate' | 'deflate-raw'): Promise { +- const ds = new DecompressionStream(format); +- const writer = ds.writable.getWriter(); +- writer.write(compressed as BufferSource); +- writer.close(); +- ++ const limit = Math.min(this._opts.kittySizeLimit, this._opts.pixelLimit * 4, this._opts.storageLimit * 1000000); ++ let offsetIn = 0; ++ // Bound inflation within one native transform before its output is budgeted. ++ const source = new ReadableStream({ ++ pull(controller) { ++ if (offsetIn >= compressed.length) { ++ controller.close(); ++ return; ++ } ++ const end = Math.min(offsetIn + 4096, compressed.length); ++ controller.enqueue(new Uint8Array(compressed.subarray(offsetIn, end))); ++ offsetIn = end; ++ } ++ }); ++ const reader = source.pipeThrough(new DecompressionStream(format)).getReader(); + const chunks: Uint8Array[] = []; +- const reader = ds.readable.getReader(); +- +- while (true) { +- const { done, value } = await reader.read(); +- if (done) break; +- chunks.push(value); ++ let totalLength = 0; ++ try { ++ while (true) { ++ const { done, value } = await reader.read(); ++ if (done) break; ++ totalLength += value.byteLength; ++ if (totalLength > limit) { ++ await reader.cancel().catch(() => {}); ++ throw new RangeError('decompressed image exceeds byte limit'); ++ } ++ chunks.push(value); ++ } ++ } finally { ++ reader.releaseLock(); + } + +- const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks) { +diff --git a/src/kitty/KittyImageStorage.ts b/src/kitty/KittyImageStorage.ts +index 1f5c09ec9e2700f8f6dbd8436a1802217dfc99ef..016943a77c7e8e27da5899d54cd48d82761a87c8 100644 +--- a/src/kitty/KittyImageStorage.ts ++++ b/src/kitty/KittyImageStorage.ts +@@ -83,6 +83,25 @@ export class KittyImageStorage implements IDisposable { + this._evictUndisplayedImages(); + } + ++ // Encoded images awaiting placement are outside ImageStorage's pixel budget. ++ // Unplaced payloads are evicted first so a new upload cannot erase a visible ++ // image while abandoned blobs still hold budget; placed ones go only when ++ // that is not enough, because the byte cap is a hard bound. The new image is ++ // always stored, so an oversized one overshoots by at most one payload ++ // (itself bounded by kittySizeLimit) rather than being dropped after an OK ack. ++ const byteLimit = this._storage.getLimit() * 1000000; ++ this._images.delete(imageId); ++ let retainedBytes = 0; ++ for (const image of this._images.values()) retainedBytes += image.data.size; ++ for (const evictPlaced of [false, true]) { ++ for (const [oldestId, image] of this._images) { ++ if (retainedBytes + imageData.data.size <= byteLimit) break; ++ if (this._kittyIdToStorageId.has(oldestId) !== evictPlaced) continue; ++ retainedBytes -= image.data.size; ++ this.deleteById(oldestId); ++ } ++ } ++ + this._images.set(imageId, { + ...imageData, + id: imageId diff --git a/config/patches/@xterm__addon-ligatures@0.11.0-beta.300.patch b/config/patches/@xterm__addon-ligatures@0.11.0-beta.301.patch similarity index 100% rename from config/patches/@xterm__addon-ligatures@0.11.0-beta.300.patch rename to config/patches/@xterm__addon-ligatures@0.11.0-beta.301.patch diff --git a/config/patches/@xterm__addon-search@0.17.0-beta.300.patch b/config/patches/@xterm__addon-search@0.17.0-beta.301.patch similarity index 100% rename from config/patches/@xterm__addon-search@0.17.0-beta.300.patch rename to config/patches/@xterm__addon-search@0.17.0-beta.301.patch diff --git a/config/patches/@xterm__addon-serialize@0.15.0-beta.300.patch b/config/patches/@xterm__addon-serialize@0.15.0-beta.301.patch similarity index 100% rename from config/patches/@xterm__addon-serialize@0.15.0-beta.300.patch rename to config/patches/@xterm__addon-serialize@0.15.0-beta.301.patch diff --git a/config/patches/@xterm__addon-webgl@0.20.0-beta.299.patch b/config/patches/@xterm__addon-webgl@0.20.0-beta.300.patch similarity index 51% rename from config/patches/@xterm__addon-webgl@0.20.0-beta.299.patch rename to config/patches/@xterm__addon-webgl@0.20.0-beta.300.patch index b35ad071aa0..752cdbe53fc 100644 --- a/config/patches/@xterm__addon-webgl@0.20.0-beta.299.patch +++ b/config/patches/@xterm__addon-webgl@0.20.0-beta.300.patch @@ -1,31 +1,31 @@ diff --git a/lib/addon-webgl.js b/lib/addon-webgl.js -index c40e1afba4eeb6aef215dc687b75b1bfd6aa596e..dd620f4c46cfeb1aa45653aca358262f4d8e727c 100644 +index 476d16a490307819080adf48abacf03b6ac091f9..ee21b1ed72f218451155081610b8b40711276bd2 100644 --- a/lib/addon-webgl.js +++ b/lib/addon-webgl.js @@ -1,2 +1,2 @@ --!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.WebglAddon=e():t.WebglAddon=e()}(globalThis,()=>(()=>{"use strict";var t={105(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.WindowIntervalTimer=e.eventType=void 0,e.getWindow=r,e.addDisposableListener=o,e.addStandardDisposableListener=function(t,e,i,s){return o(t,e,i,s)},e.getDomNodePagePosition=function(t){const e=t.getBoundingClientRect(),i=r(t);return{left:e.left+i.scrollX,top:e.top+i.scrollY,width:e.width,height:e.height}},e.scheduleAtNextAnimationFrame=function(t,e,i=0){const s=L(t),r=new n(e,i);return s.next.push(r),s.animFrameRequested||(s.animFrameRequested=!0,t.requestAnimationFrame(()=>function(t){const e=L(t);for(e.animFrameRequested=!1,e.current=e.next,e.next=[],e.inAnimationFrameRunner=!0;e.current.length>0;)e.current.sort(n.sort),e.current.shift().execute();e.inAnimationFrameRunner=!1}(t))),r};const s=i(578);function r(t){const e=t;if(e?.ownerDocument?.defaultView)return e.ownerDocument.defaultView;const i=t;return i?.view?i.view:window}class a{constructor(t,e,i,s){this._node=t,this._type=e,this._handler=i,this._options=s,t.addEventListener(e,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function o(t,e,i,s){return new a(t,e,i,s)}e.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class n{constructor(t,e){this._runner=t,this.priority=e,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(t){console.error(t)}}static sort(t,e){return e.priority-t.priority}}const h=new Map;function L(t){let e=h.get(t);return e||(e={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(t,e)),e}class T extends s.IntervalTimer{constructor(t){super(),this._defaultTarget=t?r(t):void 0}cancelAndSet(t,e,i){super.cancelAndSet(t,e,i??this._defaultTarget??window)}}e.WindowIntervalTimer=T},814(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.INVERTED_DEFAULT_COLOR=void 0,e.INVERTED_DEFAULT_COLOR=257},959(t,e){function i(t){return 57508<=t&&t<=57558}function s(t){return t>=128512&&t<=128591||t>=127744&&t<=128511||t>=128640&&t<=128767||t>=9728&&t<=9983||t>=9984&&t<=10175||t>=65024&&t<=65039||t>=129280&&t<=129535||t>=127462&&t<=127487}Object.defineProperty(e,"__esModule",{value:!0}),e.throwIfFalsy=function(t){if(!t)throw new Error("value must not be falsy");return t},e.isPowerlineGlyph=i,e.isRestrictedPowerlineGlyph=function(t){return 57520<=t&&t<=57527},e.isEmoji=s,e.allowRescaling=function(t,e,r,a){return 1===e&&r>Math.ceil(1.5*a)&&void 0!==t&&t>255&&!s(t)&&!i(t)&&!function(t){return 57344<=t&&t<=63743}(t)},e.treatGlyphAsBackgroundColor=function(t){return i(t)||function(t){return 9472<=t&&t<=9631}(t)},e.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},e.computeNextVariantOffset=function(t,e,i=0){return(t-(2*Math.round(e)-i))%(2*Math.round(e))}},948(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(t,e,i,s=!1){if(this.selectionStart=e,this.selectionEnd=i,!e||!i||e[0]===i[0]&&e[1]===i[1])return void this.clear();const r=t.buffers.active.ydisp,a=e[1]-r,o=i[1]-r,n=Math.max(a,0),h=Math.min(o,t.rows-1);n>=t.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=n,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=i[0])}isCellSelected(t,e,i){return!!this.hasSelection&&(i-=t.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&i>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&e=this.startCol)}}},536(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextBlinkStateManager=void 0;const s=i(426);class r extends s.Disposable{constructor(t,e,i){super(),this._renderCallback=t,this._coreBrowserService=e,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",t=>{this.setIntervalDuration(t)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const t=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(t||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}e.TextBlinkStateManager=r},578(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.IntervalTimer=e.MicrotaskTimer=e.TimeoutTimer=void 0,e.timeout=function(t){return new Promise(e=>setTimeout(e,t))},e.disposableTimeout=function(t,e=0,i){const r=setTimeout(()=>{t(),i&&a.dispose()},e),a=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(a),a};const s=i(426);e.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(t,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,t()},e)}setIfNotSet(t,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,t()},e))}},e.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(t){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,t())}))}},e.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(t,e,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{t()},e);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},993(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.rgba=e.rgb=e.css=e.color=e.channels=e.NULL_COLOR=void 0,e.toPaddedHex=l,e.contrastRatio=d;let i=0,s=0,r=0,a=0;var o,n,h,L,T;function l(t){const e=t.toString(16);return e.length<2?"0"+e:e}function d(t,e){return t>>0},t.toColor=function(e,i,s,r){return{css:t.toCss(e,i,s,r),rgba:t.toRgba(e,i,s,r)}}}(o||(e.channels=o={})),function(t){function e(t,e){return a=Math.round(255*e),[i,s,r]=T.toChannels(t.rgba),{css:o.toCss(i,s,r,a),rgba:o.toRgba(i,s,r,a)}}t.blend=function(t,e){if(a=(255&e.rgba)/255,1===a)return{css:e.css,rgba:e.rgba};const n=e.rgba>>24&255,h=e.rgba>>16&255,L=e.rgba>>8&255,T=t.rgba>>24&255,l=t.rgba>>16&255,d=t.rgba>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),{css:o.toCss(i,s,r),rgba:o.toRgba(i,s,r)}},t.isOpaque=function(t){return!(255&~t.rgba)},t.ensureContrastRatio=function(t,e,i){const s=T.ensureContrastRatio(t.rgba,e.rgba,i);if(s)return o.toColor(s>>24&255,s>>16&255,s>>8&255)},t.opaque=function(t){const e=(255|t.rgba)>>>0;return[i,s,r]=T.toChannels(e),{css:o.toCss(i,s,r),rgba:e}},t.opacity=e,t.multiplyOpacity=function(t,i){return a=255&t.rgba,e(t,a*i/255)},t.toColorRGB=function(t){return[t.rgba>>24&255,t.rgba>>16&255,t.rgba>>8&255]}}(n||(e.color=n={})),function(t){let e,n;try{const t=document.createElement("canvas");t.width=1,t.height=1;const i=t.getContext("2d",{willReadFrequently:!0});i&&(e=i,e.globalCompositeOperation="copy",n=e.createLinearGradient(0,0,1,1))}catch{}t.toColor=function(t){if(t.match(/#[\da-f]{3,8}/i))switch(t.length){case 4:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),o.toColor(i,s,r);case 5:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),a=parseInt(t.slice(4,5).repeat(2),16),o.toColor(i,s,r,a);case 7:return{css:t,rgba:(parseInt(t.slice(1),16)<<8|255)>>>0};case 9:return{css:t,rgba:parseInt(t.slice(1),16)>>>0}}const h=t.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),a=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),o.toColor(i,s,r,a);if("transparent"===t)return{css:"transparent",rgba:0};if(!e||!n)throw new Error("css.toColor: Unsupported css format");if(e.fillStyle=n,e.fillStyle=t,"string"!=typeof e.fillStyle)throw new Error("css.toColor: Unsupported css format");if(e.fillRect(0,0,1,1),[i,s,r,a]=e.getImageData(0,0,1,1).data,255!==a)throw new Error("css.toColor: Unsupported css format");return{rgba:o.toRgba(i,s,r,a),css:t}}}(h||(e.css=h={})),function(t){function e(t,e,i){const s=t/255,r=e/255,a=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))}t.relativeLuminance=function(t){return e(t>>16&255,t>>8&255,255&t)},t.relativeLuminance2=e}(L||(e.rgb=L={})),function(t){function e(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T0||n>0||h>0);)o-=Math.max(0,Math.ceil(.1*o)),n-=Math.max(0,Math.ceil(.1*n)),h-=Math.max(0,Math.ceil(.1*h)),T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));return(o<<24|n<<16|h<<8|255)>>>0}function n(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T>>0}t.blend=function(t,e){if(a=(255&e)/255,1===a)return e;const n=e>>24&255,h=e>>16&255,L=e>>8&255,T=t>>24&255,l=t>>16&255,d=t>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),o.toRgba(i,s,r)},t.ensureContrastRatio=function(t,i,s){const r=L.relativeLuminance(t>>8),a=L.relativeLuminance(i>>8);if(d(r,a)>8));if(od(r,L.relativeLuminance(e>>8))?a:e}return a}const o=n(t,i,s),h=d(r,L.relativeLuminance(o>>8));if(hd(r,L.relativeLuminance(a>>8))?o:a}return o}},t.reduceLuminance=e,t.increaseLuminance=n,t.toChannels=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]}}(T||(e.rgba=T={}))},414(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.EventUtils=e.Emitter=void 0;const s=i(426);var r;e.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(t,e,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:t,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);const a=(0,s.toDisposable)(()=>{const t=this._listeners.indexOf(r);-1!==t&&(this._listeners=this._listeners.slice(),this._listeners.splice(t,1))});return i&&(Array.isArray(i)?i.push(a):i.add(a)),a}),this._event}fire(t){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,t);const e=this._listeners;for(let i=0,s=e.length;ie.fire(t))},t.map=function(t,e){return(i,s,r)=>t(t=>i.call(s,e(t)),void 0,r)},t.any=function(...t){return(e,i,r)=>{const a=new s.DisposableStore;for(const s of t)a.add(s(t=>e.call(i,t)));return r&&(Array.isArray(r)?r.push(a):r.add(a)),a}},t.runAndSubscribe=function(t,e,i){return e(i),t(t=>e(t))}}(r||(e.EventUtils=r={}))},426(t,e){function i(t){return{dispose:t}}function s(t){if(!t)return t;if(Array.isArray(t)){for(const e of t)e.dispose();return[]}return t.dispose(),t}Object.defineProperty(e,"__esModule",{value:!0}),e.MutableDisposable=e.Disposable=e.DisposableStore=void 0,e.toDisposable=i,e.dispose=s,e.combinedDisposable=function(...t){return i(()=>s(t))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(t){return this._isDisposed?t.dispose():this._disposables.add(t),t}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const t of this._disposables)t.dispose();this._disposables.clear()}}clear(){for(const t of this._disposables)t.dispose();this._disposables.clear()}}e.DisposableStore=r;class a{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(t){return this._store.add(t)}}e.Disposable=a,a.None=Object.freeze({dispose(){}}),e.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(t){this._isDisposed||t===this._value||(this._value?.dispose(),this._value=t)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},836(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.FourKeyMap=e.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(t,e,i){this._data[t]||(this._data[t]={}),this._data[t][e]=i}get(t,e){return this._data[t]?this._data[t][e]:void 0}clear(){this._data={}}}e.TwoKeyMap=i,e.FourKeyMap=class{constructor(){this._data=new i}set(t,e,s,r,a){this._data.get(t,e)||this._data.set(t,e,new i),this._data.get(t,e).set(s,r,a)}get(t,e,i,s){return this._data.get(t,e)?.get(i,s)}clear(){this._data.clear()}}},95(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.isChromeOS=e.isLinux=e.isWindows=e.isMac=e.isSafari=e.isLegacyEdge=e.isChrome=e.isFirefox=e.isNode=void 0,e.getZoomFactor=function(t){return 1},e.getSafariVersion=function(){if(!e.isSafari)return 0;const t=i.match(/Version\/(\d+)/);return null===t||t.length<2?0:parseInt(t[1],10)},e.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=e.isNode?"node":navigator.userAgent,s=e.isNode?"node":navigator.platform;e.isFirefox=i.includes("Firefox"),e.isChrome=i.includes("Chrome"),e.isLegacyEdge=i.includes("Edge"),e.isSafari=/^((?!chrome|android).)*safari/i.test(i),e.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),e.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),e.isLinux=s.indexOf("Linux")>=0,e.isChromeOS=/\bCrOS\b/.test(i)},930(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.DebouncedIdleTask=e.IdleTaskQueue=e.PriorityTaskQueue=void 0;class i{constructor(t){this._tasks=[],this._i=0,this._logService=t}enqueue(t){this._tasks.push(t),this._start()}flush(){for(;this._ii)return r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(t){return setTimeout(()=>t(this._createDeadline(16)))}_cancelCallback(t){clearTimeout(t)}_createDeadline(t){const e=performance.now()+t;return{timeRemaining:()=>Math.max(0,e-performance.now())}}}e.PriorityTaskQueue=s,e.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(t){return requestIdleCallback(t)}_cancelCallback(t){cancelIdleCallback(t)}}:s,e.DebouncedIdleTask=class{constructor(t){this._queue=new e.IdleTaskQueue(t)}set(t){this._queue.clear(),this._queue.enqueue(t)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},917(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedAttrs=e.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(t){return[t>>>16&255,t>>>8&255,255&t]}static fromColorRGB(t){return(255&t[0])<<16|(255&t[1])<<8|255&t[2]}clone(){const t=new i;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}e.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(t){this._ext=t}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(t){this._ext&=-469762049,this._ext|=t<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(t){this._ext&=-67108864,this._ext|=67108863&t}get urlId(){return this._urlId}set urlId(t){this._urlId=t}get underlineVariantOffset(){const t=(3758096384&this._ext)>>29;return t<0?4294967288^t:t}set underlineVariantOffset(t){this._ext&=536870911,this._ext|=t<<29&3758096384}constructor(t=0,e=0){this._ext=0,this._urlId=0,this._ext=t,this._urlId=e}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}e.ExtendedAttrs=s},721(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellData=void 0;const s=i(348),r=i(564),a=i(917);class o extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(t){const e=new o;return e.setFromCharData(t),e}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(t){this.fg=t[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let e=!1;if(t[r.CHAR_DATA_CHAR_INDEX].length>2)e=!0;else if(2===t[r.CHAR_DATA_CHAR_INDEX].length){const i=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|t[r.CHAR_DATA_WIDTH_INDEX]<<22:e=!0}else e=!0}else this.content=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[r.CHAR_DATA_WIDTH_INDEX]<<22;e&&(this.combinedData=t[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|t[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor())return!1;if(this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor())return!1;if(this.isInverse()!==t.isInverse())return!1;if(this.isBold()!==t.isBold())return!1;if(this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;const e=this.isUnderlineColorDefault(),i=t.isUnderlineColorDefault();if(!e||!i){if(e!==i)return!1;if(this.getUnderlineColor()!==t.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==t.getUnderlineColorMode())return!1}}return this.isOverline()===t.isOverline()&&this.isBlink()===t.isBlink()&&this.isInvisible()===t.isInvisible()&&this.isItalic()===t.isItalic()&&this.isDim()===t.isDim()&&this.isStrikethrough()===t.isStrikethrough()}}e.CellData=o},564(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.WHITESPACE_CELL_CODE=e.WHITESPACE_CELL_WIDTH=e.WHITESPACE_CELL_CHAR=e.NULL_CELL_CODE=e.NULL_CELL_WIDTH=e.NULL_CELL_CHAR=e.CHAR_DATA_CODE_INDEX=e.CHAR_DATA_WIDTH_INDEX=e.CHAR_DATA_CHAR_INDEX=e.CHAR_DATA_ATTR_INDEX=e.DEFAULT_EXT=e.DEFAULT_ATTR=e.DEFAULT_COLOR=void 0,e.DEFAULT_COLOR=0,e.DEFAULT_ATTR=e.DEFAULT_COLOR<<9|256,e.DEFAULT_EXT=0,e.CHAR_DATA_ATTR_INDEX=0,e.CHAR_DATA_CHAR_INDEX=1,e.CHAR_DATA_WIDTH_INDEX=2,e.CHAR_DATA_CODE_INDEX=3,e.NULL_CELL_CHAR="",e.NULL_CELL_WIDTH=1,e.NULL_CELL_CODE=0,e.WHITESPACE_CELL_CHAR=" ",e.WHITESPACE_CELL_WIDTH=1,e.WHITESPACE_CELL_CODE=32},348(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Utf8ToUtf32=e.StringToUtf32=void 0,e.stringFromCodePoint=function(t){return t>65535?(t-=65536,String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):String.fromCharCode(t)},e.utf32ToString=function(t,e=0,i=t.length){let s="";for(let r=e;r65535?(e-=65536,s+=String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):s+=String.fromCharCode(e)}return s},e.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(t,e){const i=t.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=t.charCodeAt(r++);56320<=i&&i<=57343?e[s++]=1024*(this._interim-55296)+i-56320+65536:(e[s++]=this._interim,e[s++]=i),this._interim=0}for(let a=r;a=i)return this._interim=r,s;const o=t.charCodeAt(a);56320<=o&&o<=57343?e[s++]=1024*(r-55296)+o-56320+65536:(e[s++]=r,e[s++]=o);continue}65279!==r&&(e[s++]=r)}return s}},e.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(t,e){const i=t.length;if(!i)return 0;let s,r,a,o,n,h=0,L=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let a,o=0;for(;(a=this.interim[++o])&&o<4;)r<<=6,r|=63&a;const n=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,T=n-o;for(;L=i)return 0;if(a=t[L++],128!=(192&a)){L--,s=!0;break}this.interim[o++]=a,r<<=6,r|=63&a}s||(2===n?r<128?L--:e[h++]=r:3===n?r<2048||r>=55296&&r<=57343||65279===r||(e[h++]=r):r<65536||r>1114111||(e[h++]=r)),this.interim.fill(0)}const T=i-4;let l=L;for(;l=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(n=(31&s)<<6|63&r,n<128){l--;continue}e[h++]=n}else if(224==(240&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(n=(15&s)<<12|(63&r)<<6|63&a,n<2048||n>=55296&&n<=57343||65279===n)continue;e[h++]=n}else if(240==(248&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=a,h;if(o=t[l++],128!=(192&o)){l--;continue}if(n=(7&s)<<18|(63&r)<<12|(63&a)<<6|63&o,n<65536||n>1114111)continue;e[h++]=n}}return h}}},864(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellColorResolver=void 0;const s=i(564),r=i(993),a=i(959),o=i(915);let n,h=0,L=0,T=!1,l=!1,d=!1,c=0;e.CellColorResolver=class{constructor(t,e,i,s,r,a){this._terminal=t,this._optionService=e,this._selectionRenderModel=i,this._decorationService=s,this._coreBrowserService=r,this._themeService=a,this.result={fg:0,bg:0,ext:0}}resolve(t,e,i,_,Q){this.result.bg=t.bg,this.result.fg=t.fg,this.result.ext=268435456&t.bg?t.extended.ext:0,L=0,h=0,l=!1,T=!1,d=!1,n=this._themeService.colors,c=0;const u=t.getCode();if(u!==s.NULL_CELL_CODE&&4===t.extended.underlineStyle){const t=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));c=e*_%(2*Math.round(t))}if(0===c&&o.blockPatternCodepoints.has(u)&&(c=e*_%2*2+i*Q%2),this._decorationService.forEachDecorationAtCell(e,i,"bottom",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),d=this._selectionRenderModel.isCellSelected(this._terminal,e,i),d){if(67108864&this.result.fg||50331648&this.result.bg){if(67108864&this.result.fg)switch(50331648&this.result.fg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:L=(16777215&this.result.fg)<<8|255;break;default:L=this._themeService.colors.foreground.rgba}else switch(50331648&this.result.bg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:L=(16777215&this.result.bg)<<8|255}L=r.rgba.blend(L,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}else L=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(l=!0,n.selectionForeground&&(h=n.selectionForeground.rgba>>8&16777215,T=!0),(0,a.treatGlyphAsBackgroundColor)(t.getCode())){if(67108864&this.result.fg&&!(50331648&this.result.bg))h=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(67108864&this.result.fg)switch(50331648&this.result.bg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:h=(16777215&this.result.bg)<<8|255}else switch(50331648&this.result.fg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:h=(16777215&this.result.fg)<<8|255;break;default:h=this._themeService.colors.foreground.rgba}h=r.rgba.blend(h,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}T=!0}}this._decorationService.forEachDecorationAtCell(e,i,"top",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),l&&(L=d?-16777216&t.bg&-134217729|L|50331648:-16777216&t.bg|L|50331648),T&&(h=-16777216&t.fg&-67108865|h|50331648),67108864&this.result.fg&&(l&&!T&&(h=50331648&this.result.bg?-134217728&this.result.fg|67108863&this.result.bg:-134217728&this.result.fg|16777215&n.background.rgba>>8|50331648,T=!0),!l&&T&&(L=50331648&this.result.fg?-67108864&this.result.bg|67108863&this.result.fg:-67108864&this.result.bg|16777215&n.foreground.rgba>>8|50331648,l=!0)),n=void 0,this.result.bg=l?L:this.result.bg,this.result.fg=T?h:this.result.fg,this.result.ext&=536870911,this.result.ext|=c<<29&3758096384}}},670(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.acquireTextureAtlas=function(t,e,i,o,n,h,L,T,l,d=!0){const c=(0,r.generateConfig)(o,n,h,L,e,i,T,l,d);for(let e=0;e=0){if((0,r.configEquals)(i.config,c))return i.atlas;1===i.ownedBy.length?(i.atlas.dispose(),a.splice(e,1)):i.ownedBy.splice(s,1);break}}for(let e=0;e{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(t=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0)return void this._restartInterval(t)}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);return this._animationTimeRestarted=void 0,void this._restartInterval(t)}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},t)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}}},697(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.observeDevicePixelDimensions=function(t,e,i){let r=new e.ResizeObserver(e=>{const s=e.find(e=>e.target===t);if(!s)return;if(!("devicePixelContentBoxSize"in s))return r?.disconnect(),void(r=void 0);const a=s.devicePixelContentBoxSize[0].inlineSize,o=s.devicePixelContentBoxSize[0].blockSize;a>0&&o>0&&i(a,o)});try{r.observe(t,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return(0,s.toDisposable)(()=>r?.disconnect())};const s=i(426)},28(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GlyphRenderer=void 0;const s=i(115),r=i(564),a=i(426),o=i(719),n=i(959);let h,L=0,T=0,l=0;class d extends a.Disposable{constructor(t,e,i,r,h){super(),this._terminal=t,this._gl=e,this._dimensions=i,this._optionsService=r,this._logService=h,this._lastSeenPageLayoutVersion=-1,this._pageOverflowWarned=!1,this._activeBuffer=0,this._vertices={count:0,attributes:new Float32Array(0),attributesBuffers:[new Float32Array(0),new Float32Array(0)]};const L=this._gl;void 0===s.TextureAtlas.maxAtlasPages&&(s.TextureAtlas.maxAtlasPages=Math.min(32,(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_IMAGE_UNITS))),s.TextureAtlas.maxTextureSize=(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_SIZE))),this._program=(0,n.throwIfFalsy)((0,o.createProgram)(L,"#version 300 es\nlayout (location = 0) in vec2 a_unitquad;\nlayout (location = 1) in vec2 a_cellpos;\nlayout (location = 2) in vec2 a_offset;\nlayout (location = 3) in vec2 a_size;\nlayout (location = 4) in float a_texpage;\nlayout (location = 5) in vec2 a_texcoord;\nlayout (location = 6) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}",function(t){let e="";for(let i=1;iL.deleteProgram(this._program))),this._projectionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_projection")),this._resolutionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_resolution")),this._textureLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_texture"));const T=this._vertexArrayObject=L.createVertexArray();this._register((0,a.toDisposable)(()=>L.deleteVertexArray(T))),L.bindVertexArray(T);const l=new Float32Array([0,0,1,0,0,1,1,1]),d=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(d))),L.bindBuffer(L.ARRAY_BUFFER,d),L.bufferData(L.ARRAY_BUFFER,l,L.STATIC_DRAW),L.enableVertexAttribArray(0),L.vertexAttribPointer(0,2,this._gl.FLOAT,!1,0,0);const c=new Uint8Array([0,1,2,3]),_=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(_))),L.bindBuffer(L.ELEMENT_ARRAY_BUFFER,_),L.bufferData(L.ELEMENT_ARRAY_BUFFER,c,L.STATIC_DRAW),this._attributesBuffer=(0,n.throwIfFalsy)(L.createBuffer()),this._register((0,a.toDisposable)(()=>L.deleteBuffer(this._attributesBuffer))),L.bindBuffer(L.ARRAY_BUFFER,this._attributesBuffer),L.enableVertexAttribArray(2),L.vertexAttribPointer(2,2,L.FLOAT,!1,44,0),L.vertexAttribDivisor(2,1),L.enableVertexAttribArray(3),L.vertexAttribPointer(3,2,L.FLOAT,!1,44,2*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(3,1),L.enableVertexAttribArray(4),L.vertexAttribPointer(4,1,L.FLOAT,!1,44,4*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(4,1),L.enableVertexAttribArray(5),L.vertexAttribPointer(5,2,L.FLOAT,!1,44,5*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(5,1),L.enableVertexAttribArray(6),L.vertexAttribPointer(6,2,L.FLOAT,!1,44,7*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(6,1),L.enableVertexAttribArray(1),L.vertexAttribPointer(1,2,L.FLOAT,!1,44,9*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(1,1),L.useProgram(this._program);const Q=new Int32Array(s.TextureAtlas.maxAtlasPages);for(let t=0;tL.deleteTexture(e.texture))),L.activeTexture(L.TEXTURE0+t),L.bindTexture(L.TEXTURE_2D,e.texture),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_S,L.CLAMP_TO_EDGE),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_T,L.CLAMP_TO_EDGE),L.texImage2D(L.TEXTURE_2D,0,L.RGBA,1,1,0,L.RGBA,L.UNSIGNED_BYTE,new Uint8Array([255,0,0,255])),this._atlasTextures[t]=e}L.enable(L.BLEND),L.blendFunc(L.SRC_ALPHA,L.ONE_MINUS_SRC_ALPHA),this.handleResize()}beginFrame(){return!this._atlas||this._atlas.pageLayoutVersion!==this._lastSeenPageLayoutVersion&&(this._lastSeenPageLayoutVersion=this._atlas.pageLayoutVersion,!0)}updateCell(t,e,i,s,r,a,o,n,h){this._updateCell(this._vertices.attributes,t,e,i,s,r,a,o,n,h)}_updateCell(t,e,i,s,a,o,d,c,_,Q){L=11*(i*this._terminal.cols+e),s!==r.NULL_CELL_CODE&&void 0!==s?this._atlas&&(h=c&&c.length>1?this._atlas.getRasterizedGlyphCombinedChar(c,a,o,d,!1,this._terminal.element):this._atlas.getRasterizedGlyph(s,a,o,d,!1,this._terminal.element),T=Math.floor((this._dimensions.device.cell.width-this._dimensions.device.char.width)/2),a!==Q&&h.offset.x>T?(l=h.offset.x-T,t[L]=-(h.offset.x-l)+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=(h.size.x-l)/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x+l/this._atlas.pages[h.texturePage].canvas.width,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x-l/this._atlas.pages[h.texturePage].canvas.width,t[L+8]=h.sizeClipSpace.y):(t[L]=-h.offset.x+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=h.size.x/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x,t[L+8]=h.sizeClipSpace.y),this._optionsService.rawOptions.rescaleOverlappingGlyphs&&(0,n.allowRescaling)(s,_,h.size.x,this._dimensions.device.cell.width)&&(t[L+2]=(this._dimensions.device.cell.width-1)/this._dimensions.device.canvas.width)):t.fill(0,L,L+11-1-2)}clear(){const t=this._terminal,e=t.cols*t.rows*11;this._vertices.count!==e?this._vertices.attributes=new Float32Array(e):this._vertices.attributes.fill(0);let i=0;for(;ithis._atlasTextures.length&&!this._pageOverflowWarned&&(this._pageOverflowWarned=!0,this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`));for(let t=0;tT.deleteProgram(this._program))),this._projectionLocation=(0,a.throwIfFalsy)(T.getUniformLocation(this._program,"u_projection"));const l=this._vertexArrayObject=T.createVertexArray();this._register((0,s.toDisposable)(()=>T.deleteVertexArray(l))),T.bindVertexArray(l);const d=new Float32Array([0,0,1,0,0,1,1,1]),c=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(c))),T.bindBuffer(T.ARRAY_BUFFER,c),T.bufferData(T.ARRAY_BUFFER,d,T.STATIC_DRAW),T.enableVertexAttribArray(3),T.vertexAttribPointer(3,2,this._gl.FLOAT,!1,0,0);const _=new Uint8Array([0,1,2,3]),Q=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(Q))),T.bindBuffer(T.ELEMENT_ARRAY_BUFFER,Q),T.bufferData(T.ELEMENT_ARRAY_BUFFER,_,T.STATIC_DRAW),this._attributesBuffer=(0,a.throwIfFalsy)(T.createBuffer()),this._register((0,s.toDisposable)(()=>T.deleteBuffer(this._attributesBuffer))),T.bindBuffer(T.ARRAY_BUFFER,this._attributesBuffer),T.enableVertexAttribArray(0),T.vertexAttribPointer(0,2,T.FLOAT,!1,o,0),T.vertexAttribDivisor(0,1),T.enableVertexAttribArray(1),T.vertexAttribPointer(1,2,T.FLOAT,!1,o,2*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(1,1),T.enableVertexAttribArray(2),T.vertexAttribPointer(2,4,T.FLOAT,!1,o,4*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(2,1),this._updateCachedColors(h.colors),this._register(this._themeService.onChangeColors(t=>{this._updateCachedColors(t),this._updateViewportRectangle()}))}renderBackgrounds(){this._renderVertices(this._vertices)}renderCursor(){this._renderVertices(this._verticesCursor)}_renderVertices(t){const e=this._gl;e.useProgram(this._program),e.bindVertexArray(this._vertexArrayObject),e.uniformMatrix4fv(this._projectionLocation,!1,r.PROJECTION_MATRIX),e.bindBuffer(e.ARRAY_BUFFER,this._attributesBuffer),e.bufferData(e.ARRAY_BUFFER,t.attributes,e.DYNAMIC_DRAW),e.drawElementsInstanced(this._gl.TRIANGLE_STRIP,4,e.UNSIGNED_BYTE,0,t.count)}handleResize(){this._updateViewportRectangle()}setDimensions(t){this._dimensions=t}_updateCachedColors(t){this._bgFloat=this._colorToFloat32Array(t.background),this._cursorFloat=this._colorToFloat32Array(t.cursor)}_updateViewportRectangle(){this._addRectangleFloat(this._vertices.attributes,0,0,0,this._terminal.cols*this._dimensions.device.cell.width,this._terminal.rows*this._dimensions.device.cell.height,this._bgFloat)}updateBackgrounds(t){const e=this._terminal,i=this._vertices;let s,r,a,o,n,h,L,T,l,d,c,_=1;for(s=0;s>24&255)/255,d=(h>>16&255)/255,c=(h>>8&255)/255,_=1,this._addRectangle(t.attributes,e,L,T,(o-a)*this._dimensions.device.cell.width,this._dimensions.device.cell.height,l,d,c,_)}_addRectangle(t,e,i,s,r,a,o,n,h,L){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o,t[e+5]=n,t[e+6]=h,t[e+7]=L}_addRectangleFloat(t,e,i,s,r,a,o){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o[0],t[e+5]=o[1],t[e+6]=o[2],t[e+7]=o[3]}_colorToFloat32Array(t){return new Float32Array([(t.rgba>>24&255)/255,(t.rgba>>16&255)/255,(t.rgba>>8&255)/255,(255&t.rgba)/255])}}e.RectangleRenderer=Q},208(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.RenderModel=e.COMBINED_CHAR_BIT_MASK=void 0;const s=i(948);e.COMBINED_CHAR_BIT_MASK=2147483648,e.RenderModel=class{constructor(){this.cells=new Uint32Array(0),this.lineLengths=new Uint32Array(0),this.selection=(0,s.createSelectionRenderModel)()}resize(t,e){const i=t*e*4;i!==this.cells.length&&(this.cells=new Uint32Array(i),this.lineLengths=new Uint32Array(e))}clear(){this.cells.fill(0,0),this.lineLengths.fill(0,0)}}},115(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextureAtlas=void 0;const s=i(0),r=i(183),a=i(959),o=i(993),n=i(836),h=i(930),L=i(917),T=i(564),l=i(414),d={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}};let c;class _{get pages(){return this._pages}constructor(t,e,i,s){this._document=t,this._config=e,this._unicodeService=i,this._logService=s,this._didWarmUp=!1,this._cacheMap=new n.FourKeyMap,this._cacheMapCombined=new n.FourKeyMap,this._pages=[],this._activePages=[],this._workBoundingBox={top:0,left:0,bottom:0,right:0},this._workAttributeData=new L.AttributeData,this._textureSize=512,this._onAddTextureAtlasCanvas=new l.Emitter,this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=new l.Emitter,this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._pageLayoutVersion=0,this._createNewPage(),this._tmpCanvas=p(t,4*this._config.deviceCellWidth+4,this._config.deviceCellHeight+4),this._tmpCtx=(0,a.throwIfFalsy)(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}dispose(){this._tmpCanvas.remove();for(const t of this.pages)t.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){const t=new h.IdleTaskQueue(this._logService);for(let e=33;e<126;e++)t.enqueue(()=>{if(!this._cacheMap.get(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT)){const t=this._drawToCache(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,!1,void 0);this._cacheMap.set(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,t)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){if(0!==this._pages[0].currentRow.x||0!==this._pages[0].currentRow.y){for(const t of this._pages)t.clear();this._cacheMap.clear(),this._cacheMapCombined.clear(),this._didWarmUp=!1,this._pageLayoutVersion++}}_createNewPage(){if(_.maxAtlasPages&&this._pages.length>=Math.max(4,_.maxAtlasPages)){const t=this._pages.filter(t=>2*t.canvas.width<=(_.maxTextureSize||4096)).sort((t,e)=>e.canvas.width!==t.canvas.width?e.canvas.width-t.canvas.width:e.percentageUsed-t.percentageUsed);let e=-1,i=0;for(let s=0;st.canvas.width!==s[0].canvas.width)){this._evictAllPages();const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}const r=s.map(t=>t.glyphs[0].texturePage).sort((t,e)=>t-e),a=this.pages.length-s.length,o=this._mergePages(s,a);o.version=++Q.nextVersion;for(let t=r.length-1;t>=0;t--)this._deletePage(r[t]);this.pages.push(o),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(o.canvas)}const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}_mergePages(t,e){const i=2*t[0].canvas.width,s=new Q(this._document,i,t);for(const[r,a]of t.entries()){const t=r*a.canvas.width%i,o=Math.floor(r/2)*a.canvas.height;s.ctx.drawImage(a.canvas,t,o);for(const s of a.glyphs)s.texturePage=e,s.sizeClipSpace.x=s.size.x/i,s.sizeClipSpace.y=s.size.y/i,s.texturePosition.x+=t,s.texturePosition.y+=o,s.texturePositionClipSpace.x=s.texturePosition.x/i,s.texturePositionClipSpace.y=s.texturePosition.y/i;this._onRemoveTextureAtlasCanvas.fire(a.canvas);const n=this._activePages.indexOf(a);-1!==n&&this._activePages.splice(n,1)}return s}_deletePage(t){this._pages.splice(t,1);for(let e=t;e=this._config.colors.ansi.length)throw new Error("No color found for idx "+t);return this._config.colors.ansi[t]}_getBackgroundColor(t,e,i,s){if(this._config.allowTransparency)return o.NULL_COLOR;let r;switch(t){case 16777216:case 33554432:r=this._getColorFromAnsiIndex(e);break;case 50331648:const t=L.AttributeData.toColorRGB(e);r=o.channels.toColor(t[0],t[1],t[2]);break;default:r=i?o.color.opaque(this._config.colors.foreground):this._config.colors.background}return this._config.allowTransparency||(r=o.color.opaque(r)),r}_getForegroundColor(t,e,i,r,a,n,h,T,l,d){const c=this._getMinimumContrastColor(t,e,i,r,a,n,h,l,T,d);if(c)return c;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&l&&n<8&&(n+=8),_=this._getColorFromAnsiIndex(n);break;case 50331648:const t=L.AttributeData.toColorRGB(n);_=o.channels.toColor(t[0],t[1],t[2]);break;default:_=h?this._config.colors.background:this._config.colors.foreground}return this._config.allowTransparency&&(_=o.color.opaque(_)),T&&(_=o.color.multiplyOpacity(_,s.DIM_OPACITY)),_}_resolveBackgroundRgba(t,e,i){switch(t){case 16777216:case 33554432:return this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(t,e,i,s){switch(t){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&e<8&&(e+=8),this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(t,e,i,s,r,a,n,h,L,T){if(1===this._config.minimumContrastRatio||T)return;const l=this._getContrastCache(L),d=l.getColor(t,s);if(void 0!==d)return d??void 0;const c=this._resolveBackgroundRgba(e,i,n),_=this._resolveForegroundRgba(r,a,n,h),Q=o.rgba.ensureContrastRatio(c,_,this._config.minimumContrastRatio/(L?2:1));if(!Q)return void l.setColor(t,s,null);const u=o.channels.toColor(Q>>24&255,Q>>16&255,Q>>8&255);return l.setColor(t,s,u),u}_getContrastCache(t){return t?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_drawToCache(t,e,i,o,n,h){const T="number"==typeof t?String.fromCharCode(t):t;h&&this._tmpCanvas.parentElement!==h&&(this._tmpCanvas.style.display="none",h.append(this._tmpCanvas));const l=Math.min(this._config.deviceCellWidth*Math.max(T.length,2)+4,this._config.deviceMaxTextureSize);this._tmpCanvas.width=t?2*t-o:t-o;!1==!(o>=t)||0===_?(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L+_,s),this._tmpCtx.lineTo(T,s)):(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(L+_,s),this._tmpCtx.moveTo(L+_+t,s),this._tmpCtx.lineTo(T,s)),o=(0,a.computeNextVariantOffset)(T-L,t,o);break;case 5:const Q=.6,u=.3,p=T-L,g=Math.floor(Q*p),M=Math.floor(u*p),y=p-g-M;this._tmpCtx.setLineDash([g,M,y]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s);break;default:this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s)}n||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!O&&this._config.fontSize>=12&&!this._config.allowTransparency&&" "!==T){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";const e=this._tmpCtx.measureText(T);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in e&&e.actualBoundingBoxDescent>0){this._tmpCtx.save();const e=new Path2D;e.rect(i,h-Math.ceil(t/2),this._config.deviceCellWidth*I,l-h+Math.ceil(t/2)),this._tmpCtx.clip(e),this._tmpCtx.lineWidth=3*this._config.devicePixelRatio,this._tmpCtx.strokeStyle=E.css,this._tmpCtx.strokeText(T,S,S+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(C){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),e=t%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+e),this._tmpCtx.stroke()}if(O||this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight),"_"===T&&!this._config.allowTransparency){let t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W);if(t)for(let e=1;e<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=E.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight-e),t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W),t);e++);}if(f){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),e=this._tmpCtx.lineWidth%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.stroke()}this._tmpCtx.restore();const P=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height);let N;if(N=this._config.allowTransparency?function(t){for(let e=0;e0)return!1;return!0}(P):u(P,E,D,W),N)return d;const B=this._findGlyphBoundingBox(P,this._workBoundingBox,l,Z,O,S);let $,F;for(;;){if(0===this._activePages.length){const t=this._createNewPage();$=t,F=t.currentRow,F.height=B.size.y;break}$=this._activePages[this._activePages.length-1],F=$.currentRow;for(const t of this._activePages)B.size.y<=t.currentRow.height&&($=t,F=t.currentRow);for(let t=this._activePages.length-1;t>=0;t--)for(const e of this._activePages[t].fixedRows)e.height<=F.height&&B.size.y<=e.height&&($=this._activePages[t],F=e);if(B.size.x>this._textureSize){this._overflowSizePage||(_.maxAtlasPages&&this._pages.length>=_.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new Q(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),$=this._overflowSizePage,F=this._overflowSizePage.currentRow,F.x+B.size.x>=$.canvas.width&&(F.x=0,F.y+=F.height,F.height=0);break}if(F.y+B.size.y>=$.canvas.height||F.height>B.size.y+2){let t=!1;if($.currentRow.y+$.currentRow.height+B.size.y>=$.canvas.height){let e;for(const t of this._activePages)if(t.currentRow.y+t.currentRow.height+B.size.y=_.maxAtlasPages&&F.y+B.size.y<=$.canvas.height&&F.height>=B.size.y&&F.x+B.size.x<=$.canvas.width)t=!0;else{const e=this._createNewPage();$=e,F=e.currentRow,F.height=B.size.y,t=!0}}t||($.currentRow.height>0&&$.fixedRows.push($.currentRow),F={x:0,y:$.currentRow.y+$.currentRow.height,height:B.size.y},$.fixedRows.push(F),$.currentRow={x:0,y:F.y+F.height,height:0})}if(F.x+B.size.x<=$.canvas.width)break;F===$.currentRow?(F.x=0,F.y+=F.height,F.height=0):$.fixedRows.splice($.fixedRows.indexOf(F),1)}return B.texturePage=this._pages.indexOf($),B.texturePosition.x=F.x,B.texturePosition.y=F.y,B.texturePositionClipSpace.x=F.x/$.canvas.width,B.texturePositionClipSpace.y=F.y/$.canvas.height,B.sizeClipSpace.x/=$.canvas.width,B.sizeClipSpace.y/=$.canvas.height,F.height=Math.max(F.height,B.size.y),F.x+=B.size.x,$.ctx.putImageData(P,B.texturePosition.x-this._workBoundingBox.left,B.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,B.size.x,B.size.y),$.addGlyph(B),$.version=++Q.nextVersion,B}_findGlyphBoundingBox(t,e,i,s,r,a){e.top=0;const o=s?this._config.deviceCellHeight:this._tmpCanvas.height,n=s?this._config.deviceCellWidth:i;let h=!1;for(let i=0;i=a;i--){for(let s=0;s=0;i--){for(let s=0;s>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=i.rgba>>>24,h=i.rgba>>>16&255,L=i.rgba>>>8&255,T=Math.floor((Math.abs(r-n)+Math.abs(a-h)+Math.abs(o-L))/12);let l=!0;for(let e=0;ethis._handleColorChange())),this._cellColorResolver=new s.CellColorResolver(this._terminal,this._optionsService,this._model.selection,this._decorationService,this._coreBrowserService,this._themeService),this._core=this._terminal._core,this._renderLayers=[new _.LinkRenderLayer(this._core.screenElement,2,this._terminal,this._core.linkifier,this._coreBrowserService,d,this._themeService)],this.dimensions=(0,g.createRenderDimensions)(),this._devicePixelRatio=this._coreBrowserService.dpr,this._updateDimensions(),this._updateCursorBlink(),this._register(d.onOptionChange(()=>this._handleOptionsChanged())),this._textBlinkStateManager=this._register(new T.TextBlinkStateManager(()=>this._requestRedrawViewport(),this._coreBrowserService,this._optionsService)),this._resetBlinkingRowState(),this._deviceMaxTextureSize=this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextlost",t=>{this._logService.debug("webglcontextlost event received"),t.preventDefault(),this._contextRestorationTimeout=setTimeout(()=>{this._contextRestorationTimeout=void 0,this._logService.warn("webgl context not restored; firing onContextLoss"),this._onContextLoss.fire(t)},3e3)})),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextrestored",t=>{this._logService.warn("webglcontextrestored event received"),clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0,(0,r.removeTerminalFromCache)(this._terminal),this._initializeWebGLState(),this._requestRedrawViewport()})),this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,this._coreBrowserService.window,(t,e)=>this._setCanvasDevicePixelDimensions(t,e)),this._register(this._coreBrowserService.onWindowChange(t=>{this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,t,(t,e)=>this._setCanvasDevicePixelDimensions(t,e))})),this._register((0,u.addDisposableListener)(this._coreBrowserService.mainDocument,"mousedown",()=>this._cursorBlinkStateManager.value?.restartBlinkAnimation())),this._core.screenElement.appendChild(this._canvas),[this._rectangleRenderer.value,this._glyphRenderer.value]=this._initializeWebGLState(),this._isAttached=this._core.screenElement.isConnected,this._register((0,p.toDisposable)(()=>{clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0;for(const t of this._renderLayers)t.dispose();this._canvas.parentElement?.removeChild(this._canvas),(0,r.removeTerminalFromCache)(this._terminal)}))}get textureAtlas(){return this._charAtlas?.pages[0].canvas}_handleColorChange(){this._refreshCharAtlas(),this._clearModel(!0)}handleDevicePixelRatioChange(){this._devicePixelRatio!==this._coreBrowserService.dpr&&(this._devicePixelRatio=this._coreBrowserService.dpr,this.handleResize(this._terminal.cols,this._terminal.rows))}handleResize(t,e){this._updateDimensions(),this._model.resize(this._terminal.cols,this._terminal.rows),this._resetBlinkingRowState();for(const t of this._renderLayers)t.resize(this._terminal,this.dimensions);this._canvas.width=this.dimensions.device.canvas.width,this._canvas.height=this.dimensions.device.canvas.height,this._canvas.style.width=`${this.dimensions.css.canvas.width}px`,this._canvas.style.height=`${this.dimensions.css.canvas.height}px`,this._core.screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._core.screenElement.style.height=`${this.dimensions.css.canvas.height}px`,this._rectangleRenderer.value?.setDimensions(this.dimensions),this._rectangleRenderer.value?.handleResize(),this._glyphRenderer.value?.setDimensions(this.dimensions),this._glyphRenderer.value?.handleResize(),this._refreshCharAtlas(),this._clearModel(!1),this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0})}handleCharSizeChanged(){this.handleResize(this._terminal.cols,this._terminal.rows)}handleBlur(){for(const t of this._renderLayers)t.handleBlur(this._terminal);this._cursorBlinkStateManager.value?.pause(),this._requestRedrawViewport()}handleFocus(){for(const t of this._renderLayers)t.handleFocus(this._terminal);this._cursorBlinkStateManager.value?.resume(),this._requestRedrawViewport()}handleViewportVisibilityChange(t){this._textBlinkStateManager.setViewportVisible(t)}handleSelectionChanged(t,e,i){for(const s of this._renderLayers)s.handleSelectionChanged(this._terminal,t,e,i);this._model.selection.update(this._core,t,e,i),this._requestRedrawViewport()}handleCursorMove(){for(const t of this._renderLayers)t.handleCursorMove(this._terminal);this._cursorBlinkStateManager.value?.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._refreshCharAtlas(),this._updateCursorBlink()}_initializeWebGLState(){return this._rectangleRenderer.value=new d.RectangleRenderer(this._terminal,this._gl,this.dimensions,this._themeService,this._logService),this._glyphRenderer.value=new l.GlyphRenderer(this._terminal,this._gl,this.dimensions,this._optionsService,this._logService),this.handleCharSizeChanged(),[this._rectangleRenderer.value,this._glyphRenderer.value]}_refreshCharAtlas(){if(this.dimensions.device.char.width<=0&&this.dimensions.device.char.height<=0)return void(this._isAttached=!1);const t=(0,r.acquireTextureAtlas)(this._terminal,this._optionsService.rawOptions,this._themeService.colors,this.dimensions.device.cell.width,this.dimensions.device.cell.height,this.dimensions.device.char.width,this.dimensions.device.char.height,this._coreBrowserService.dpr,this._deviceMaxTextureSize,this._customGlyphs);this._charAtlas!==t&&(this._onChangeTextureAtlas.fire(t.pages[0].canvas),this._charAtlasDisposable.value=(0,p.combinedDisposable)(Q.EventUtils.forward(t.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas),Q.EventUtils.forward(t.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas))),this._charAtlas=t,this._charAtlas.warmUp(),this._glyphRenderer.value?.setAtlas(this._charAtlas)}_clearModel(t){this._model.clear(),t&&this._glyphRenderer.value?.clear()}clearTextureAtlas(){this._charAtlas?.clearTexture(),this._clearModel(!0),this._requestRedrawViewport()}clear(){this._clearModel(!0);for(const t of this._renderLayers)t.reset(this._terminal);this._resetBlinkingRowState(),this._textBlinkStateManager.setNeedsBlinkInViewport(!1),this._cursorBlinkStateManager.value?.restartBlinkAnimation(),this._updateCursorBlink()}renderRows(t,e){if(!this._isAttached){if(!(this._core.screenElement?.isConnected&&this._charSizeService.width&&this._charSizeService.height))return;this._updateDimensions(),this._refreshCharAtlas(),this._isAttached=!0}for(const i of this._renderLayers)i.handleGridChanged(this._terminal,t,e);if(!this._glyphRenderer.value||!this._rectangleRenderer.value)return;this._glyphRenderer.value.beginFrame()?(this._clearModel(!0),this._updateModel(0,this._terminal.rows-1)):this._updateModel(t,e);let i=!1,s=0;for(;this._charAtlas&&this._glyphRenderer.value.beginFrame()&&s++<32;)i=!0,this._clearModel(!0),this._updateModel(0,this._terminal.rows-1);i&&this._glyphRenderer.value.invalidateAtlasTextures(),this._rectangleRenderer.value.renderBackgrounds(),this._glyphRenderer.value.render(this._model),this._cursorBlinkStateManager.value&&!this._cursorBlinkStateManager.value.isCursorVisible||this._rectangleRenderer.value.renderCursor()}_updateCursorBlink(){this._coreService.decPrivateModes.cursorBlink??this._terminal.options.cursorBlink?this._cursorBlinkStateManager.value=new a.CursorBlinkStateManager(()=>{this._requestRedrawCursor()},this._coreBrowserService):this._cursorBlinkStateManager.clear(),this._requestRedrawCursor()}_updateModel(t,e){const i=this._core;let s,r,a,o,n,h,T,l,d,_,Q,u,p,g,M,f,C,m=this._workCell;t=v(t,i.rows-1,0),e=v(e,i.rows-1,0);const w=this._coreService.decPrivateModes.cursorStyle??i.options.cursorStyle??"block",x=this._terminal.buffer.active.baseY+this._terminal.buffer.active.cursorY,b=x-i.buffer.ydisp,E=Math.min(this._terminal.buffer.active.cursorX,i.cols-1);let R=-1;const k=this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden&&(!this._cursorBlinkStateManager.value||this._cursorBlinkStateManager.value.isCursorVisible);this._model.cursor=void 0;let A=!1;for(r=t;r<=e;r++){a=r+i.buffer.ydisp;const t=i.buffer.lines.get(a);if(!t){for(this._model.lineLengths[r]=0,f=0;f=T,d=f,n.length>0&&f===n[0][0]&&l){_=n.shift();const t=this._model.selection.isCellSelected(this._terminal,_[0],a);for(M=_[0]+1;M<_[1];M++)l&&=t===this._model.selection.isCellSelected(this._terminal,M,a);l&&=!Q||E<_[0]||E>=_[1],l?(h=!0,m=new y(m,o.translateToString(!0,_[0],_[1]),_[1]-_[0]),d=_[1]-1):T=_[1]}if(u=m.getChars(),p=m.getCode(),M=4*(r*i.cols+f),!e&&m.isBlink()&&(e=!0),this._cellColorResolver.resolve(m,f,a,this.dimensions.device.cell.width,this.dimensions.device.cell.height),k&&a===x&&(f===E&&(this._model.cursor={x:E,y:b,width:m.getWidth(),style:this._coreBrowserService.isFocused?w:i.options.cursorInactiveStyle,cursorWidth:i.options.cursorWidth,dpr:this._devicePixelRatio},R=E+m.getWidth()-1),f>=E&&f<=R&&(this._coreBrowserService.isFocused&&"block"===w||!1===this._coreBrowserService.isFocused&&"block"===i.options.cursorInactiveStyle)&&(this._cellColorResolver.result.fg=50331648|this._themeService.colors.cursorAccent.rgba>>8&16777215,this._cellColorResolver.result.bg=50331648|this._themeService.colors.cursor.rgba>>8&16777215)),this._textBlinkStateManager.isEnabled&&!this._textBlinkStateManager.isBlinkOn&&m.isBlink()&&(this._cellColorResolver.result.fg|=1073741824),p!==L.NULL_CELL_CODE&&(this._model.lineLengths[r]=f+1),(this._model.cells[M]!==p||this._model.cells[M+1]!==this._cellColorResolver.result.bg||this._model.cells[M+2]!==this._cellColorResolver.result.fg||this._model.cells[M+3]!==this._cellColorResolver.result.ext)&&(A=!0,u.length>1&&(p|=c.COMBINED_CHAR_BIT_MASK),this._model.cells[M]=p,this._model.cells[M+1]=this._cellColorResolver.result.bg,this._model.cells[M+2]=this._cellColorResolver.result.fg,this._model.cells[M+3]=this._cellColorResolver.result.ext,g=m.getWidth(),this._glyphRenderer.value.updateCell(f,r,p,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext,u,g,s),h)){for(m=this._workCell,f++;f<=d;f++)C=4*(r*i.cols+f),this._nullModelCell(f,r,C,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext);f--}}this._setRowBlinkState(r,e)}A&&this._rectangleRenderer.value.updateBackgrounds(this._model),this._rectangleRenderer.value.updateCursor(this._model),this._updateTextBlinkState()}_nullModelCell(t,e,i,s,r,a){this._glyphRenderer.value.updateCell(t,e,L.NULL_CELL_CODE,s,r,a,L.NULL_CELL_CHAR,0,0),this._model.cells[i]=L.NULL_CELL_CODE,this._model.cells[i+1]=s,this._model.cells[i+2]=r,this._model.cells[i+3]=a}_resetBlinkingRowState(){this._rowHasBlinkingCells=new Array(this._terminal.rows).fill(!1),this._rowHasBlinkingCellsCount=0}_setRowBlinkState(t,e){this._rowHasBlinkingCells[t]!==e&&(this._rowHasBlinkingCells[t]=e,this._rowHasBlinkingCellsCount+=e?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}_updateDimensions(){this._charSizeService.width&&this._charSizeService.height&&(this.dimensions.device.char.width=Math.floor(this._charSizeService.width*this._devicePixelRatio),this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*this._devicePixelRatio),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.top=1===this._optionsService.rawOptions.lineHeight?0:Math.round((this.dimensions.device.cell.height-this.dimensions.device.char.height)/2),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.char.left=Math.floor(this._optionsService.rawOptions.letterSpacing/2),this.dimensions.device.canvas.height=this._terminal.rows*this.dimensions.device.cell.height,this.dimensions.device.canvas.width=this._terminal.cols*this.dimensions.device.cell.width,this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/this._devicePixelRatio),this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/this._devicePixelRatio),this.dimensions.css.cell.height=this.dimensions.device.cell.height/this._devicePixelRatio,this.dimensions.css.cell.width=this.dimensions.device.cell.width/this._devicePixelRatio)}_setCanvasDevicePixelDimensions(t,e){this._canvas.width===t&&this._canvas.height===e||(this._canvas.width=t,this._canvas.height=e,this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0}))}_requestRedrawViewport(){this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1})}_requestRedrawCursor(){const t=this._terminal.buffer.active.cursorY;this._onRequestRedraw.fire({start:t,end:t})}}e.WebglRenderer=M;class y extends n.AttributeData{constructor(t,e,i){super(),this.content=0,this.combinedData="",this.fg=t.fg,this.bg=t.bg,this.combinedData=e,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(t){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}function v(t,e,i=0){return Math.max(Math.min(t,e),i)}e.JoinedCellData=y},719(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GLTexture=e.PROJECTION_MATRIX=void 0,e.createProgram=function(t,e,i,a){const o=(0,s.throwIfFalsy)(t.createProgram());if(t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.VERTEX_SHADER,e,a))),t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.FRAGMENT_SHADER,i,a))),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS))return o;a.error(t.getProgramInfoLog(o)),t.deleteProgram(o)},e.createShader=r,e.expandFloat32Array=function(t,e){const i=Math.min(2*t.length,e),s=new Float32Array(i);for(let e=0;e{const e=[],i=[3/8,2/8,3/8],s=[0,3/8,5/8];for(let r=0;r<3;r++){const a=t>>2*r&1,o=t>>2*r+1&1;a&&o?e.push(`M0,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):a?e.push(`M0,${s[r]} L0.5,${s[r]} L0.5,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):o&&e.push(`M0.5,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0.5,${s[r]+i[r]} Z`)}return e.join(" ")}}}function r(t){const e=[],i=.15,s=.015,r=.075,a=.0375,o=.95;if(64&t){const t=.175,a=.2125,n=.25,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(32&t){const t=o-i,s=.875,r=o,n=.265,h=.485;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(16&t){const t=o-i,s=.875,r=o,n=.515,h=.735;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(8&t){const t=.75,a=.7875,n=.825,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(4&t){const t=.05,i=.125,s=.2,r=.515,o=.735;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(2&t){const t=.05,i=.125,s=.2,r=.265,o=.485;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(1&t){const t=.4625,a=.5,n=.5375,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}return e.join(" ")}Object.defineProperty(e,"__esModule",{value:!0}),e.blockPatternCodepoints=e.customGlyphDefinitions=void 0,function(t){t.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),t.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),t.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),t.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),t.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),t.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),t.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.CURVE_UP_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_UP_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),t.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),t.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),t.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),t.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),t.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})}(i||(i={})),e.customGlyphDefinitions={"─":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"━":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"│":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"┃":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"┄":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"┅":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"┆":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"┇":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"┈":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"┉":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"┊":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"┋":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"┌":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"┍":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┎":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┏":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"┐":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"┑":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┒":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┓":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"└":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"┕":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┖":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┗":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"┘":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"┙":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┚":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┛":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"├":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"┝":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┞":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┟":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┠":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┡":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┢":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┣":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"┤":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"┥":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┦":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┧":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┨":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┩":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┪":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┫":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"┬":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"┭":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┮":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┯":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┰":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┱":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┲":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┳":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"┴":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"┵":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┶":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┷":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┸":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┹":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┺":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┻":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"┼":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"┽":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┾":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┿":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"╀":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"╁":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╂":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"╃":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"╄":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"╅":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"╆":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"╇":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"╈":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"╉":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"╊":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"╋":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"╌":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"╍":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"╎":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"╏":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"═":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"║":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╒":{type:2,data:(t,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╓":{type:2,data:(t,e)=>`M${.5-t},1 L${.5-t},.5 L1,.5 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╔":{type:2,data:(t,e)=>`M1,${.5-e} L${.5-t},${.5-e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╕":{type:2,data:(t,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╖":{type:2,data:(t,e)=>`M${.5+t},1 L${.5+t},.5 L0,.5 M${.5-t},.5 L${.5-t},1`,strokeWidth:1},"╗":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5+t},${.5-e} L${.5+t},1`,strokeWidth:1},"╘":{type:2,data:(t,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"╙":{type:2,data:(t,e)=>`M1,.5 L${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╚":{type:2,data:(t,e)=>`M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0 M1,${.5+e} L${.5-t},${.5+e} L${.5-t},0`,strokeWidth:1},"╛":{type:2,data:(t,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"╜":{type:2,data:(t,e)=>`M0,.5 L${.5+t},.5 L${.5+t},0 M${.5-t},.5 L${.5-t},0`,strokeWidth:1},"╝":{type:2,data:(t,e)=>`M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M0,${.5+e} L${.5+t},${.5+e} L${.5+t},0`,strokeWidth:1},"╞":{type:2,data:(t,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╟":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1 M${.5+t},.5 L1,.5`,strokeWidth:1},"╠":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╡":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╢":{type:2,data:(t,e)=>`M0,.5 L${.5-t},.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╣":{type:2,data:(t,e)=>`M${.5+t},0 L${.5+t},1 M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0`,strokeWidth:1},"╤":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"╥":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},1 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╦":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╧":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╨":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╩":{type:2,data:(t,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╪":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╫":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╬":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╭":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╮":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╯":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╰":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╱":{type:2,data:"M1,0 L0,1",strokeWidth:1},"╲":{type:2,data:"M0,0 L1,1",strokeWidth:1},"╳":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"╴":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"╵":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"╶":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"╷":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"╸":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"╹":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"╺":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"╻":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"╼":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"╽":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╾":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"╿":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"▀":{type:0,data:[{x:0,y:0,w:8,h:4}]},"▁":{type:0,data:[{x:0,y:7,w:8,h:1}]},"▂":{type:0,data:[{x:0,y:6,w:8,h:2}]},"▃":{type:0,data:[{x:0,y:5,w:8,h:3}]},"▄":{type:0,data:[{x:0,y:4,w:8,h:4}]},"▅":{type:0,data:[{x:0,y:3,w:8,h:5}]},"▆":{type:0,data:[{x:0,y:2,w:8,h:6}]},"▇":{type:0,data:[{x:0,y:1,w:8,h:7}]},"█":{type:0,data:[{x:0,y:0,w:8,h:8}]},"▉":{type:0,data:[{x:0,y:0,w:7,h:8}]},"▊":{type:0,data:[{x:0,y:0,w:6,h:8}]},"▋":{type:0,data:[{x:0,y:0,w:5,h:8}]},"▌":{type:0,data:[{x:0,y:0,w:4,h:8}]},"▍":{type:0,data:[{x:0,y:0,w:3,h:8}]},"▎":{type:0,data:[{x:0,y:0,w:2,h:8}]},"▏":{type:0,data:[{x:0,y:0,w:1,h:8}]},"▐":{type:0,data:[{x:4,y:0,w:4,h:8}]},"░":{type:1,data:[[1,0],[0,0]]},"▒":{type:1,data:[[1,0],[0,1]]},"▓":{type:1,data:[[1,1],[1,0]]},"▔":{type:0,data:[{x:0,y:0,w:8,h:1}]},"▕":{type:0,data:[{x:7,y:0,w:1,h:8}]},"▖":{type:0,data:[{x:0,y:4,w:4,h:4}]},"▗":{type:0,data:[{x:4,y:4,w:4,h:4}]},"▘":{type:0,data:[{x:0,y:0,w:4,h:4}]},"▙":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"▚":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"▛":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"▜":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"▝":{type:0,data:[{x:4,y:0,w:4,h:4}]},"▞":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"▟":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"":i.LINE_H,"":i.LINE_V,"":i.FADE_RIGHT,"":i.FADE_LEFT,"":i.FADE_DOWN,"":i.FADE_UP,"":i.CURVE_DOWN_RIGHT,"":i.CURVE_DOWN_LEFT,"":i.CURVE_UP_RIGHT,"":i.CURVE_UP_LEFT,"":[i.LINE_V,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT],"":[i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_UP_RIGHT],"":[i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE],"":i.NODE_STROKE,"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"🬀":s(1),"🬁":s(2),"🬂":s(3),"🬃":s(4),"🬄":s(5),"🬅":s(6),"🬆":s(7),"🬇":s(8),"🬈":s(9),"🬉":s(10),"🬊":s(11),"🬋":s(12),"🬌":s(13),"🬍":s(14),"🬎":s(15),"🬏":s(16),"🬐":s(17),"🬑":s(18),"🬒":s(19),"🬓":s(20),"🬔":s(22),"🬕":s(23),"🬖":s(24),"🬗":s(25),"🬘":s(26),"🬙":s(27),"🬚":s(28),"🬛":s(29),"🬜":s(30),"🬝":s(31),"🬞":s(32),"🬟":s(33),"🬠":s(34),"🬡":s(35),"🬢":s(36),"🬣":s(37),"🬤":s(38),"🬥":s(39),"🬦":s(40),"🬧":s(41),"🬨":s(43),"🬩":s(44),"🬪":s(45),"🬫":s(46),"🬬":s(47),"🬭":s(48),"🬮":s(49),"🬯":s(50),"🬰":s(51),"🬱":s(52),"🬲":s(53),"🬳":s(54),"🬴":s(55),"🬵":s(56),"🬶":s(57),"🬷":s(58),"🬸":s(59),"🬹":s(60),"🬺":s(61),"🬻":s(62),"🬼":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"🬽":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"🬾":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"🬿":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"🭀":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"🭁":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭂":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"🭃":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭄":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"🭅":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"🭆":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"🭇":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"🭈":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"🭉":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"🭊":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"🭋":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"🭌":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"🭍":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"🭎":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"🭏":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"🭐":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"🭑":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"🭒":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭓":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"🭔":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭕":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"🭖":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"🭗":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"🭘":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"🭙":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"🭚":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"🭛":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"🭜":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"🭝":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"🭞":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"🭟":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"🭠":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"🭡":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"🭢":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"🭣":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"🭤":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"🭥":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"🭦":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"🭧":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"🭨":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"🭩":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"🭪":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"🭫":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"🭬":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"🭭":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"🭮":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"🭯":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"🭰":{type:0,data:[{x:1,y:0,w:1,h:8}]},"🭱":{type:0,data:[{x:2,y:0,w:1,h:8}]},"🭲":{type:0,data:[{x:3,y:0,w:1,h:8}]},"🭳":{type:0,data:[{x:4,y:0,w:1,h:8}]},"🭴":{type:0,data:[{x:5,y:0,w:1,h:8}]},"🭵":{type:0,data:[{x:6,y:0,w:1,h:8}]},"🭶":{type:0,data:[{x:0,y:1,w:8,h:1}]},"🭷":{type:0,data:[{x:0,y:2,w:8,h:1}]},"🭸":{type:0,data:[{x:0,y:3,w:8,h:1}]},"🭹":{type:0,data:[{x:0,y:4,w:8,h:1}]},"🭺":{type:0,data:[{x:0,y:5,w:8,h:1}]},"🭻":{type:0,data:[{x:0,y:6,w:8,h:1}]},"🭼":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🭽":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭾":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭿":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🮀":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮁":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮂":{type:0,data:[{x:0,y:0,w:8,h:2}]},"🮃":{type:0,data:[{x:0,y:0,w:8,h:3}]},"🮄":{type:0,data:[{x:0,y:0,w:8,h:5}]},"🮅":{type:0,data:[{x:0,y:0,w:8,h:6}]},"🮆":{type:0,data:[{x:0,y:0,w:8,h:7}]},"🮇":{type:0,data:[{x:6,y:0,w:2,h:8}]},"🮈":{type:0,data:[{x:5,y:0,w:3,h:8}]},"🮉":{type:0,data:[{x:3,y:0,w:5,h:8}]},"🮊":{type:0,data:[{x:2,y:0,w:6,h:8}]},"🮋":{type:0,data:[{x:1,y:0,w:7,h:8}]},"🮌":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"🮍":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"🮎":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"🮏":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"🮐":{type:1,data:[[0,1],[1,0]]},"🮑":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"🮒":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"🮔":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"🮕":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"🮖":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"🮗":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"🮘":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"🮙":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"🮚":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"🮛":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"🮜":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"🮝":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"🮞":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"🮟":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"🮠":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"🮡":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"🮢":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"🮣":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"🮤":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"🮥":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"🮦":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"🮧":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"🮨":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"🮩":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"🮪":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"🮫":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"🮬":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"🮭":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"🮮":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"🮯":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"🮰":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"🮱":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"🮲":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"🮳":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"🮴":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"🮵":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮶":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮷":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮸":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮹":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"🮺":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"🮻":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"🮼":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"🮽":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"🮾":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"🮿":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"🯀":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"🯁":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"🯂":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"🯃":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"🯄":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"🯅":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯆":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯇":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯈":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯉":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯊":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"🯋":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"🯌":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"🯍":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"🯎":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"🯏":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"🯐":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"🯑":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"🯒":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"🯓":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"🯔":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"🯕":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"🯖":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"🯗":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"🯘":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"🯙":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"🯚":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"🯛":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"🯜":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"🯝":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"🯞":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"🯟":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"🯠":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"🯡":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"🯢":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"🯣":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"🯤":{type:0,data:[{x:2,y:0,w:4,h:4}]},"🯥":{type:0,data:[{x:2,y:4,w:4,h:4}]},"🯦":{type:0,data:[{x:0,y:2,w:4,h:4}]},"🯧":{type:0,data:[{x:4,y:2,w:4,h:4}]},"🯨":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"🯩":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"🯪":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"🯫":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"🯬":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"🯭":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"🯮":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"🯯":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"🯰":{type:5,data:{d:r(126),type:0},scaleType:1},"🯱":{type:5,data:{d:r(48),type:0},scaleType:1},"🯲":{type:5,data:{d:r(109),type:0},scaleType:1},"🯳":{type:5,data:{d:r(121),type:0},scaleType:1},"🯴":{type:5,data:{d:r(51),type:0},scaleType:1},"🯵":{type:5,data:{d:r(91),type:0},scaleType:1},"🯶":{type:5,data:{d:r(95),type:0},scaleType:1},"🯷":{type:5,data:{d:r(114),type:0},scaleType:1},"🯸":{type:5,data:{d:r(127),type:0},scaleType:1},"🯹":{type:5,data:{d:r(123),type:0},scaleType:1},"🯺":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(t,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},e.blockPatternCodepoints=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951])},183(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.createPatternCanvas=n,e.tryDrawCustomGlyph=function(t,e,i,s,a,o,n,L,T,l,d,c,_=0){const Q=r.customGlyphDefinitions[e];if(Q){const e=Array.isArray(Q)?Q:[Q];for(const r of e)h(t,r,i,s,a,o,n,L,T,l,d,c,_);return!0}return!1};const s=i(959),r=i(915),a="undefined"==typeof OffscreenCanvas?void 0:(t,e)=>new OffscreenCanvas(t,e),o=(t,e)=>{const i=document.createElement("canvas");return i.width=t,i.height=e,i};function n(t,e,i=a,s=o){return i?.(t,e)??s(t,e)}function h(t,e,i,r,a,o,h,d,Q,u,p,g,M=0){let y=a,v=o,f=i,C=r;switch(1===e.scaleType&&(y=h,v=d,f=i+(a-h)/2,C=r+(o-d)/2),e.clipPath&&(t.save(),function(t,e,i,s,r,a){t.beginPath();for(const o of e.split(" ")){const e=o[0];if("Z"===e){t.closePath();continue}const n=o.substring(1).split(",");if(!n[0]||!n[1])continue;const h=i+parseFloat(n[0])*r,L=s+parseFloat(n[1])*a;"M"===e?t.moveTo(h,L):"L"===e&&t.lineTo(h,L)}t.clip()}(t,e.clipPath,f,C,y,v)),e.type){case 0:!function(t,e,i,s,r,a){for(let o=0;o7&&parseInt(T.slice(7,9),16)||1;else{if(!T.startsWith("rgba"))throw new Error(`Unexpected fillStyle color format "${T}" when drawing pattern glyph`);[l,c,_,Q]=T.substring(5,T.length-1).split(",").map(t=>parseFloat(t))}for(let t=0;t>1&1,_=1&h;0!==c||0!==_?d.setTransform((new DOMMatrix).translateSelf(-c,-_)):d.setTransform(new DOMMatrix),t.fillStyle=d,t.fillRect(i,r,a,o)}(t,e.data,f,C,y,v,M);break;case 2:!function(t,e,i,s,r,a,o,n,h){let L;t.save(),t.beginPath(),t.rect(i,s,r,a),t.clip(),t.beginPath(),L="function"==typeof e?e(.15,.15/a*r):e;const T={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const e of L.split(" ")){const h=e[0];if("Z"===h){t.closePath(),T.lastCommand=h;continue}const L=c[h];if(!L){n.error(`Could not find drawing instructions for "${h}"`);continue}const l=e.substring(1).split(",");l[0]&&l[1]&&(L(t,_(l,r,a,i,s,!0,o,0,0,!1),T),T.lastCommand=h)}void 0!==h?(t.strokeStyle=t.fillStyle,t.lineWidth=o*h,t.stroke()):t.fill(),t.closePath(),t.restore()}(t,e.data,f,C,y,v,u,p,e.strokeWidth);break;case 3:!function(t,e,i,s,r,a,o,n){const h="string"==typeof e?e:e(0,0);t.beginPath();let L=0,l=0,d=0,c=0,_="";for(const e of h.split(" ")){const o=e[0],n=e.substring(1).split(",");if("Z"===o){t.closePath(),_=o;continue}if("V"===o){const e=s+parseFloat(n[0])*a;t.lineTo(L,e),l=e,d=L,c=l,_=o;continue}if("H"===o){const e=i+parseFloat(n[0])*r;t.lineTo(e,l),L=e,d=L,c=l,_=o;continue}if(!n[0]||!n[1])continue;if("A"===o){const e=parseFloat(n[0])*r,o=parseFloat(n[1])*a,h=parseFloat(n[2])*Math.PI/180,d=parseInt(n[3],10),c=parseInt(n[4],10),_=i+parseFloat(n[5])*r,Q=s+parseFloat(n[6])*a;T(t,L,l,e,o,h,d,c,_,Q),L=_,l=Q;continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});if("M"===o)t.moveTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("L"===o)t.lineTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("Q"===o)t.quadraticCurveTo(h[0],h[1],h[2],h[3]),d=h[0],c=h[1],L=h[2],l=h[3];else if("T"===o){let e,i;"Q"===_||"T"===_?(e=2*L-d,i=2*l-c):(e=L,i=l),t.quadraticCurveTo(e,i,h[0],h[1]),d=e,c=i,L=h[0],l=h[1]}else"C"===o&&(t.bezierCurveTo(h[0],h[1],h[2],h[3],h[4],h[5]),d=h[2],c=h[3],L=h[4],l=h[5]);_=o}void 0!==n?(t.strokeStyle=t.fillStyle,t.lineWidth=o*n,t.stroke()):t.fill()}(t,e.data,f,C,y,v,u,e.strokeWidth);break;case 4:!function(t,e,i,s,r,a,o,n){t.save(),t.fillRect(i,s,r,a),n&&(t.fillStyle=n,t.strokeStyle=n),t.lineWidth=o,t.lineCap="square",t.beginPath();for(const o of e.d.split(" ")){const e=o[0],n=o.substring(1).split(",");if(!n[0]||!n[1]){"Z"===e&&t.closePath();continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});"M"===e?t.moveTo(h[0],h[1]):"L"===e&&t.lineTo(h[0],h[1])}1===e.type?t.stroke():t.fill(),t.restore()}(t,e.data,f,C,y,v,u,g);break;case 5:!function(t,e,i,s,r,a,o,n,h){const L=new Path2D;L.rect(i,s,r,a),t.clip(L),t.beginPath();const T=o/12;t.lineWidth=n*T;const l={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const o of e.d.split(" ")){const L=o[0];if("Z"===L){t.closePath(),l.lastCommand=L;continue}const d=c[L];if(!d){h.error(`Could not find drawing instructions for "${L}"`);continue}const Q=o.substring(1).split(",");Q[0]&&Q[1]&&(d(t,_(Q,r,a,i,s,!1,n,(e.leftPadding??0)*(T/2),(e.rightPadding??0)*(T/2)),l),l.lastCommand=L)}1===e.type?(t.strokeStyle=t.fillStyle,t.stroke()):t.fill(),t.closePath()}(t,e.data,f,C,y,v,Q,u,p);break;case 6:!function(t,e,i,s,r,a){const o=r/8,n=.1*a,h=.8*a/8,T=Math.min(o,h);for(let r=0;r<8;r++)if(e&1<1){const t=Math.sqrt(y);u=(s*=t)*s,p=(r*=t)*r}let v=(u*p-u*M-p*g)/(u*M+p*g);v<0&&(v=0);const f=(o===n?-1:1)*Math.sqrt(v),C=f*(s*Q/r),m=f*(-r*_/s),w=T*C-l*m+(e+h)/2,x=l*C+T*m+(i+L)/2,b=(_-C)/s,E=(Q-m)/r,R=(-_-C)/s,k=(-Q-m)/r,A=Math.atan2(E,b);let Z=Math.atan2(k,R)-A;0===n&&Z>0?Z-=2*Math.PI:1===n&&Z<0&&(Z+=2*Math.PI);const D=A+Z;t.ellipse(w,x,s,r,a,A,D,0===n)}const l=new Map;function d(t,e,i=0){return Math.max(Math.min(t,e),i)}const c={C:(t,e,i)=>{t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),i.lastControlX=e[2],i.lastControlY=e[3],i.currentX=e[4],i.currentY=e[5]},L:(t,e,i)=>{t.lineTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},M:(t,e,i)=>{t.moveTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},Q:(t,e,i)=>{t.quadraticCurveTo(e[0],e[1],e[2],e[3]),i.lastControlX=e[0],i.lastControlY=e[1],i.currentX=e[2],i.currentY=e[3]},T:(t,e,i)=>{let s,r;"Q"===i.lastCommand||"T"===i.lastCommand?(s=2*i.currentX-i.lastControlX,r=2*i.currentY-i.lastControlY):(s=i.currentX,r=i.currentY),t.quadraticCurveTo(s,r,e[0],e[1]),i.lastControlX=s,i.lastControlY=r,i.currentX=e[0],i.currentY=e[1]}};function _(t,e,i,s,r,a,o,n=0,h=0,L=!0){const T=t.map(t=>parseFloat(t)||parseInt(t));if(T.length<2)throw new Error("Too few arguments for instruction");for(let t=0;t{this._refreshCharAtlas(t,e),this.reset(t)})),this._register((0,r.toDisposable)(()=>{this._canvas.remove()}))}_initCanvas(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()}handleBlur(t){}handleFocus(t){}handleCursorMove(t){}handleGridChanged(t,e,i){}handleSelectionChanged(t,e,i,s=!1){}_setTransparency(t,e){if(e===this._alpha)return;const i=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,i),this._refreshCharAtlas(t,this._themeService.colors),this.handleGridChanged(t,0,t.rows-1)}_refreshCharAtlas(t,e){this._deviceCharWidth<=0&&this._deviceCharHeight<=0||(this._charAtlas=(0,s.acquireTextureAtlas)(t,this._optionsService.rawOptions,e,this._deviceCellWidth,this._deviceCellHeight,this._deviceCharWidth,this._deviceCharHeight,this._coreBrowserService.dpr,2048),this._charAtlas.warmUp())}resize(t,e){this._deviceCellWidth=e.device.cell.width,this._deviceCellHeight=e.device.cell.height,this._deviceCharWidth=e.device.char.width,this._deviceCharHeight=e.device.char.height,this._deviceCharLeft=e.device.char.left,this._deviceCharTop=e.device.char.top,this._canvas.width=e.device.canvas.width,this._canvas.height=e.device.canvas.height,this._canvas.style.width=`${e.css.canvas.width}px`,this._canvas.style.height=`${e.css.canvas.height}px`,this._alpha||this._clearAll(),this._refreshCharAtlas(t,this._themeService.colors)}_fillBottomLineAtCells(t,e,i=1){this._ctx.fillRect(t*this._deviceCellWidth,(e+1)*this._deviceCellHeight-this._coreBrowserService.dpr-1,i*this._deviceCellWidth,this._coreBrowserService.dpr)}_clearAll(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))}_clearCells(t,e,i,s){this._alpha?this._ctx.clearRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight))}_fillCharTrueColor(t,e,i,s){this._ctx.font=this._getFont(t,!1,!1),this._ctx.textBaseline=o.TEXT_BASELINE,this._clipCell(i,s,e.getWidth()),this._ctx.fillText(e.getChars(),i*this._deviceCellWidth+this._deviceCharLeft,s*this._deviceCellHeight+this._deviceCharTop+this._deviceCharHeight)}_clipCell(t,e,i){this._ctx.beginPath(),this._ctx.rect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,this._deviceCellHeight),this._ctx.clip()}_getFont(t,e,i){return`${i?"italic":""} ${e?t.options.fontWeightBold:t.options.fontWeight} ${t.options.fontSize*this._coreBrowserService.dpr}px ${t.options.fontFamily}`}}e.BaseRenderLayer=n},306(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.LinkRenderLayer=void 0;const s=i(657),r=i(814),a=i(133);class o extends a.BaseRenderLayer{constructor(t,e,i,s,r,a,o){super(i,t,"link",e,!0,r,a,o),this._register(s.onShowLinkUnderline(t=>this._handleShowLinkUnderline(t))),this._register(s.onHideLinkUnderline(t=>this._handleHideLinkUnderline(t)))}resize(t,e){super.resize(t,e),this._state=void 0}reset(t){this._clearCurrentLink()}_clearCurrentLink(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);const t=this._state.y2-this._state.y1-1;t>0&&this._clearCells(0,this._state.y1+1,this._state.cols,t),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}}_handleShowLinkUnderline(t){if(t.fg===r.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._themeService.colors.background.css:void 0!==t.fg&&(0,s.is256Color)(t.fg)?this._ctx.fillStyle=this._themeService.colors.ansi[t.fg].css:this._ctx.fillStyle=this._themeService.colors.foreground.css,t.y1===t.y2)this._fillBottomLineAtCells(t.x1,t.y1,t.x2-t.x1);else{this._fillBottomLineAtCells(t.x1,t.y1,t.cols-t.x1);for(let e=t.y1+1;e{var t=s;Object.defineProperty(t,"__esModule",{value:!0}),t.WebglAddon=void 0;const e=i(426),r=i(95),a=i(399),o=i(414);class n extends e.Disposable{constructor(t){if(r.isSafari&&(0,r.getSafariVersion)()<16){const t={antialias:!1,depth:!1,preserveDrawingBuffer:!0};if(!document.createElement("canvas").getContext("webgl2",t))throw new Error("WebGL2 is only supported on Safari 16 and above")}super(),this._onChangeTextureAtlas=this._register(new o.Emitter),this.onChangeTextureAtlas=this._onChangeTextureAtlas.event,this._onAddTextureAtlasCanvas=this._register(new o.Emitter),this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=this._register(new o.Emitter),this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._onContextLoss=this._register(new o.Emitter),this.onContextLoss=this._onContextLoss.event,this._customGlyphs=t?.customGlyphs??!0,this._preserveDrawingBuffer=t?.preserveDrawingBuffer}activate(t){const i=t._core;if(!t.element)return void this._register(i.onWillOpen(()=>this.activate(t)));this._terminal=t;const s=i.coreService,r=i.optionsService,n=i,h=n._renderService,L=n._characterJoinerService,T=n._charSizeService,l=n._coreBrowserService,d=n._decorationService,c=n._logService,_=n._themeService;this._renderer=this._register(new a.WebglRenderer(t,L,T,l,s,d,c,r,_,this._customGlyphs,this._preserveDrawingBuffer)),this._register(o.EventUtils.forward(this._renderer.onContextLoss,this._onContextLoss)),this._register(o.EventUtils.forward(this._renderer.onChangeTextureAtlas,this._onChangeTextureAtlas)),this._register(o.EventUtils.forward(this._renderer.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas)),this._register(o.EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas)),h.setRenderer(this._renderer),this._register((0,e.toDisposable)(()=>{if(this._terminal._core._store._isDisposed)return;const e=this._terminal._core._renderService;e.setRenderer(this._terminal._core._createRenderer()),e.handleResize(t.cols,t.rows)}))}get textureAtlas(){return this._renderer?.textureAtlas}clearTextureAtlas(){this._renderer?.clearTextureAtlas()}}t.WebglAddon=n})(),s})()); -+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.WebglAddon=e():t.WebglAddon=e()}(globalThis,()=>(()=>{"use strict";var t={105(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.WindowIntervalTimer=e.eventType=void 0,e.getWindow=r,e.addDisposableListener=o,e.addStandardDisposableListener=function(t,e,i,s){return o(t,e,i,s)},e.getDomNodePagePosition=function(t){const e=t.getBoundingClientRect(),i=r(t);return{left:e.left+i.scrollX,top:e.top+i.scrollY,width:e.width,height:e.height}},e.scheduleAtNextAnimationFrame=function(t,e,i=0){const s=L(t),r=new n(e,i);return s.next.push(r),s.animFrameRequested||(s.animFrameRequested=!0,t.requestAnimationFrame(()=>function(t){const e=L(t);for(e.animFrameRequested=!1,e.current=e.next,e.next=[],e.inAnimationFrameRunner=!0;e.current.length>0;)e.current.sort(n.sort),e.current.shift().execute();e.inAnimationFrameRunner=!1}(t))),r};const s=i(578);function r(t){const e=t;if(e?.ownerDocument?.defaultView)return e.ownerDocument.defaultView;const i=t;return i?.view?i.view:window}class a{constructor(t,e,i,s){this._node=t,this._type=e,this._handler=i,this._options=s,t.addEventListener(e,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function o(t,e,i,s){return new a(t,e,i,s)}e.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class n{constructor(t,e){this._runner=t,this.priority=e,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(t){console.error(t)}}static sort(t,e){return e.priority-t.priority}}const h=new Map;function L(t){let e=h.get(t);return e||(e={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(t,e)),e}class T extends s.IntervalTimer{constructor(t){super(),this._defaultTarget=t?r(t):void 0}cancelAndSet(t,e,i){super.cancelAndSet(t,e,i??this._defaultTarget??window)}}e.WindowIntervalTimer=T},814(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.INVERTED_DEFAULT_COLOR=void 0,e.INVERTED_DEFAULT_COLOR=257},959(t,e){function i(t){return 57508<=t&&t<=57558}function s(t){return t>=128512&&t<=128591||t>=127744&&t<=128511||t>=128640&&t<=128767||t>=9728&&t<=9983||t>=9984&&t<=10175||t>=65024&&t<=65039||t>=129280&&t<=129535||t>=127462&&t<=127487}Object.defineProperty(e,"__esModule",{value:!0}),e.throwIfFalsy=function(t){if(!t)throw new Error("value must not be falsy");return t},e.isPowerlineGlyph=i,e.isRestrictedPowerlineGlyph=function(t){return 57520<=t&&t<=57527},e.isEmoji=s,e.allowRescaling=function(t,e,r,a){return 1===e&&r>Math.ceil(1.5*a)&&void 0!==t&&t>255&&!s(t)&&!i(t)&&!function(t){return 57344<=t&&t<=63743}(t)},e.treatGlyphAsBackgroundColor=function(t){return i(t)||function(t){return 9472<=t&&t<=9631}(t)},e.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},e.computeNextVariantOffset=function(t,e,i=0){return(t-(2*Math.round(e)-i))%(2*Math.round(e))}},948(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(t,e,i,s=!1){if(this.selectionStart=e,this.selectionEnd=i,!e||!i||e[0]===i[0]&&e[1]===i[1])return void this.clear();const r=t.buffers.active.ydisp,a=e[1]-r,o=i[1]-r,n=Math.max(a,0),h=Math.min(o,t.rows-1);n>=t.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=n,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=i[0])}isCellSelected(t,e,i){return!!this.hasSelection&&(i-=t.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&i>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&e=this.startCol)}}},536(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextBlinkStateManager=void 0;const s=i(426);class r extends s.Disposable{constructor(t,e,i){super(),this._renderCallback=t,this._coreBrowserService=e,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",t=>{this.setIntervalDuration(t)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const t=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(t||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}e.TextBlinkStateManager=r},578(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.IntervalTimer=e.MicrotaskTimer=e.TimeoutTimer=void 0,e.timeout=function(t){return new Promise(e=>setTimeout(e,t))},e.disposableTimeout=function(t,e=0,i){const r=setTimeout(()=>{t(),i&&a.dispose()},e),a=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(a),a};const s=i(426);e.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(t,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,t()},e)}setIfNotSet(t,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,t()},e))}},e.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(t){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,t())}))}},e.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(t,e,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{t()},e);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},993(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.rgba=e.rgb=e.css=e.color=e.channels=e.NULL_COLOR=void 0,e.toPaddedHex=l,e.contrastRatio=d;let i=0,s=0,r=0,a=0;var o,n,h,L,T;function l(t){const e=t.toString(16);return e.length<2?"0"+e:e}function d(t,e){return t>>0},t.toColor=function(e,i,s,r){return{css:t.toCss(e,i,s,r),rgba:t.toRgba(e,i,s,r)}}}(o||(e.channels=o={})),function(t){function e(t,e){return a=Math.round(255*e),[i,s,r]=T.toChannels(t.rgba),{css:o.toCss(i,s,r,a),rgba:o.toRgba(i,s,r,a)}}t.blend=function(t,e){if(a=(255&e.rgba)/255,1===a)return{css:e.css,rgba:e.rgba};const n=e.rgba>>24&255,h=e.rgba>>16&255,L=e.rgba>>8&255,T=t.rgba>>24&255,l=t.rgba>>16&255,d=t.rgba>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),{css:o.toCss(i,s,r),rgba:o.toRgba(i,s,r)}},t.isOpaque=function(t){return!(255&~t.rgba)},t.ensureContrastRatio=function(t,e,i){const s=T.ensureContrastRatio(t.rgba,e.rgba,i);if(s)return o.toColor(s>>24&255,s>>16&255,s>>8&255)},t.opaque=function(t){const e=(255|t.rgba)>>>0;return[i,s,r]=T.toChannels(e),{css:o.toCss(i,s,r),rgba:e}},t.opacity=e,t.multiplyOpacity=function(t,i){return a=255&t.rgba,e(t,a*i/255)},t.toColorRGB=function(t){return[t.rgba>>24&255,t.rgba>>16&255,t.rgba>>8&255]}}(n||(e.color=n={})),function(t){let e,n;try{const t=document.createElement("canvas");t.width=1,t.height=1;const i=t.getContext("2d",{willReadFrequently:!0});i&&(e=i,e.globalCompositeOperation="copy",n=e.createLinearGradient(0,0,1,1))}catch{}t.toColor=function(t){if(t.match(/#[\da-f]{3,8}/i))switch(t.length){case 4:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),o.toColor(i,s,r);case 5:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),a=parseInt(t.slice(4,5).repeat(2),16),o.toColor(i,s,r,a);case 7:return{css:t,rgba:(parseInt(t.slice(1),16)<<8|255)>>>0};case 9:return{css:t,rgba:parseInt(t.slice(1),16)>>>0}}const h=t.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),a=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),o.toColor(i,s,r,a);if("transparent"===t)return{css:"transparent",rgba:0};if(!e||!n)throw new Error("css.toColor: Unsupported css format");if(e.fillStyle=n,e.fillStyle=t,"string"!=typeof e.fillStyle)throw new Error("css.toColor: Unsupported css format");if(e.fillRect(0,0,1,1),[i,s,r,a]=e.getImageData(0,0,1,1).data,255!==a)throw new Error("css.toColor: Unsupported css format");return{rgba:o.toRgba(i,s,r,a),css:t}}}(h||(e.css=h={})),function(t){function e(t,e,i){const s=t/255,r=e/255,a=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))}t.relativeLuminance=function(t){return e(t>>16&255,t>>8&255,255&t)},t.relativeLuminance2=e}(L||(e.rgb=L={})),function(t){function e(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T0||n>0||h>0);)o-=Math.max(0,Math.ceil(.1*o)),n-=Math.max(0,Math.ceil(.1*n)),h-=Math.max(0,Math.ceil(.1*h)),T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));return(o<<24|n<<16|h<<8|255)>>>0}function n(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T>>0}t.blend=function(t,e){if(a=(255&e)/255,1===a)return e;const n=e>>24&255,h=e>>16&255,L=e>>8&255,T=t>>24&255,l=t>>16&255,d=t>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),o.toRgba(i,s,r)},t.ensureContrastRatio=function(t,i,s){const r=L.relativeLuminance(t>>8),a=L.relativeLuminance(i>>8);if(d(r,a)>8));if(od(r,L.relativeLuminance(e>>8))?a:e}return a}const o=n(t,i,s),h=d(r,L.relativeLuminance(o>>8));if(hd(r,L.relativeLuminance(a>>8))?o:a}return o}},t.reduceLuminance=e,t.increaseLuminance=n,t.toChannels=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]}}(T||(e.rgba=T={}))},414(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.EventUtils=e.Emitter=void 0;const s=i(426);var r;e.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(t,e,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:t,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);const a=(0,s.toDisposable)(()=>{const t=this._listeners.indexOf(r);-1!==t&&(this._listeners=this._listeners.slice(),this._listeners.splice(t,1))});return i&&(Array.isArray(i)?i.push(a):i.add(a)),a}),this._event}fire(t){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,t);const e=this._listeners;for(let i=0,s=e.length;ie.fire(t))},t.map=function(t,e){return(i,s,r)=>t(t=>i.call(s,e(t)),void 0,r)},t.any=function(...t){return(e,i,r)=>{const a=new s.DisposableStore;for(const s of t)a.add(s(t=>e.call(i,t)));return r&&(Array.isArray(r)?r.push(a):r.add(a)),a}},t.runAndSubscribe=function(t,e,i){return e(i),t(t=>e(t))}}(r||(e.EventUtils=r={}))},426(t,e){function i(t){return{dispose:t}}function s(t){if(!t)return t;if(Array.isArray(t)){for(const e of t)e.dispose();return[]}return t.dispose(),t}Object.defineProperty(e,"__esModule",{value:!0}),e.MutableDisposable=e.Disposable=e.DisposableStore=void 0,e.toDisposable=i,e.dispose=s,e.combinedDisposable=function(...t){return i(()=>s(t))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(t){return this._isDisposed?t.dispose():this._disposables.add(t),t}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const t of this._disposables)t.dispose();this._disposables.clear()}}clear(){for(const t of this._disposables)t.dispose();this._disposables.clear()}}e.DisposableStore=r;class a{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(t){return this._store.add(t)}}e.Disposable=a,a.None=Object.freeze({dispose(){}}),e.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(t){this._isDisposed||t===this._value||(this._value?.dispose(),this._value=t)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},836(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.FourKeyMap=e.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(t,e,i){this._data[t]||(this._data[t]={}),this._data[t][e]=i}get(t,e){return this._data[t]?this._data[t][e]:void 0}clear(){this._data={}}}e.TwoKeyMap=i,e.FourKeyMap=class{constructor(){this._data=new i}set(t,e,s,r,a){this._data.get(t,e)||this._data.set(t,e,new i),this._data.get(t,e).set(s,r,a)}get(t,e,i,s){return this._data.get(t,e)?.get(i,s)}clear(){this._data.clear()}}},95(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.isChromeOS=e.isLinux=e.isWindows=e.isMac=e.isSafari=e.isLegacyEdge=e.isChrome=e.isFirefox=e.isNode=void 0,e.getZoomFactor=function(t){return 1},e.getSafariVersion=function(){if(!e.isSafari)return 0;const t=i.match(/Version\/(\d+)/);return null===t||t.length<2?0:parseInt(t[1],10)},e.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=e.isNode?"node":navigator.userAgent,s=e.isNode?"node":navigator.platform;e.isFirefox=i.includes("Firefox"),e.isChrome=i.includes("Chrome"),e.isLegacyEdge=i.includes("Edge"),e.isSafari=/^((?!chrome|android).)*safari/i.test(i),e.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),e.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),e.isLinux=s.indexOf("Linux")>=0,e.isChromeOS=/\bCrOS\b/.test(i)},930(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.DebouncedIdleTask=e.IdleTaskQueue=e.PriorityTaskQueue=void 0;class i{constructor(t){this._tasks=[],this._i=0,this._logService=t}enqueue(t){this._tasks.push(t),this._start()}flush(){for(;this._ii)return r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(t){return setTimeout(()=>t(this._createDeadline(16)))}_cancelCallback(t){clearTimeout(t)}_createDeadline(t){const e=performance.now()+t;return{timeRemaining:()=>Math.max(0,e-performance.now())}}}e.PriorityTaskQueue=s,e.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(t){return requestIdleCallback(t)}_cancelCallback(t){cancelIdleCallback(t)}}:s,e.DebouncedIdleTask=class{constructor(t){this._queue=new e.IdleTaskQueue(t)}set(t){this._queue.clear(),this._queue.enqueue(t)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},917(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedAttrs=e.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(t){return[t>>>16&255,t>>>8&255,255&t]}static fromColorRGB(t){return(255&t[0])<<16|(255&t[1])<<8|255&t[2]}clone(){const t=new i;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}e.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(t){this._ext=t}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(t){this._ext&=-469762049,this._ext|=t<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(t){this._ext&=-67108864,this._ext|=67108863&t}get urlId(){return this._urlId}set urlId(t){this._urlId=t}get underlineVariantOffset(){const t=(3758096384&this._ext)>>29;return t<0?4294967288^t:t}set underlineVariantOffset(t){this._ext&=536870911,this._ext|=t<<29&3758096384}constructor(t=0,e=0){this._ext=0,this._urlId=0,this._ext=t,this._urlId=e}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}e.ExtendedAttrs=s},721(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellData=void 0;const s=i(348),r=i(564),a=i(917);class o extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(t){const e=new o;return e.setFromCharData(t),e}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(t){this.fg=t[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let e=!1;if(t[r.CHAR_DATA_CHAR_INDEX].length>2)e=!0;else if(2===t[r.CHAR_DATA_CHAR_INDEX].length){const i=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|t[r.CHAR_DATA_WIDTH_INDEX]<<22:e=!0}else e=!0}else this.content=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[r.CHAR_DATA_WIDTH_INDEX]<<22;e&&(this.combinedData=t[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|t[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor())return!1;if(this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor())return!1;if(this.isInverse()!==t.isInverse())return!1;if(this.isBold()!==t.isBold())return!1;if(this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;const e=this.isUnderlineColorDefault(),i=t.isUnderlineColorDefault();if(!e||!i){if(e!==i)return!1;if(this.getUnderlineColor()!==t.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==t.getUnderlineColorMode())return!1}}return this.isOverline()===t.isOverline()&&this.isBlink()===t.isBlink()&&this.isInvisible()===t.isInvisible()&&this.isItalic()===t.isItalic()&&this.isDim()===t.isDim()&&this.isStrikethrough()===t.isStrikethrough()}}e.CellData=o},564(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.WHITESPACE_CELL_CODE=e.WHITESPACE_CELL_WIDTH=e.WHITESPACE_CELL_CHAR=e.NULL_CELL_CODE=e.NULL_CELL_WIDTH=e.NULL_CELL_CHAR=e.CHAR_DATA_CODE_INDEX=e.CHAR_DATA_WIDTH_INDEX=e.CHAR_DATA_CHAR_INDEX=e.CHAR_DATA_ATTR_INDEX=e.DEFAULT_EXT=e.DEFAULT_ATTR=e.DEFAULT_COLOR=void 0,e.DEFAULT_COLOR=0,e.DEFAULT_ATTR=e.DEFAULT_COLOR<<9|256,e.DEFAULT_EXT=0,e.CHAR_DATA_ATTR_INDEX=0,e.CHAR_DATA_CHAR_INDEX=1,e.CHAR_DATA_WIDTH_INDEX=2,e.CHAR_DATA_CODE_INDEX=3,e.NULL_CELL_CHAR="",e.NULL_CELL_WIDTH=1,e.NULL_CELL_CODE=0,e.WHITESPACE_CELL_CHAR=" ",e.WHITESPACE_CELL_WIDTH=1,e.WHITESPACE_CELL_CODE=32},348(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Utf8ToUtf32=e.StringToUtf32=void 0,e.stringFromCodePoint=function(t){return t>65535?(t-=65536,String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):String.fromCharCode(t)},e.utf32ToString=function(t,e=0,i=t.length){let s="";for(let r=e;r65535?(e-=65536,s+=String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):s+=String.fromCharCode(e)}return s},e.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(t,e){const i=t.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=t.charCodeAt(r++);56320<=i&&i<=57343?e[s++]=1024*(this._interim-55296)+i-56320+65536:(e[s++]=this._interim,e[s++]=i),this._interim=0}for(let a=r;a=i)return this._interim=r,s;const o=t.charCodeAt(a);56320<=o&&o<=57343?e[s++]=1024*(r-55296)+o-56320+65536:(e[s++]=r,e[s++]=o);continue}65279!==r&&(e[s++]=r)}return s}},e.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(t,e){const i=t.length;if(!i)return 0;let s,r,a,o,n,h=0,L=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let a,o=0;for(;(a=this.interim[++o])&&o<4;)r<<=6,r|=63&a;const n=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,T=n-o;for(;L=i)return 0;if(a=t[L++],128!=(192&a)){L--,s=!0;break}this.interim[o++]=a,r<<=6,r|=63&a}s||(2===n?r<128?L--:e[h++]=r:3===n?r<2048||r>=55296&&r<=57343||65279===r||(e[h++]=r):r<65536||r>1114111||(e[h++]=r)),this.interim.fill(0)}const T=i-4;let l=L;for(;l=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(n=(31&s)<<6|63&r,n<128){l--;continue}e[h++]=n}else if(224==(240&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(n=(15&s)<<12|(63&r)<<6|63&a,n<2048||n>=55296&&n<=57343||65279===n)continue;e[h++]=n}else if(240==(248&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=a,h;if(o=t[l++],128!=(192&o)){l--;continue}if(n=(7&s)<<18|(63&r)<<12|(63&a)<<6|63&o,n<65536||n>1114111)continue;e[h++]=n}}return h}}},864(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellColorResolver=void 0;const s=i(564),r=i(993),a=i(959),o=i(915);let n,h=0,L=0,T=!1,l=!1,d=!1,c=0;e.CellColorResolver=class{constructor(t,e,i,s,r,a){this._terminal=t,this._optionService=e,this._selectionRenderModel=i,this._decorationService=s,this._coreBrowserService=r,this._themeService=a,this.result={fg:0,bg:0,ext:0}}resolve(t,e,i,_,Q){this.result.bg=t.bg,this.result.fg=t.fg,this.result.ext=268435456&t.bg?t.extended.ext:0,L=0,h=0,l=!1,T=!1,d=!1,n=this._themeService.colors,c=0;const u=t.getCode();if(u!==s.NULL_CELL_CODE&&4===t.extended.underlineStyle){const t=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));c=e*_%(2*Math.round(t))}if(0===c&&o.blockPatternCodepoints.has(u)&&(c=e*_%2*2+i*Q%2),this._decorationService.forEachDecorationAtCell(e,i,"bottom",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),d=this._selectionRenderModel.isCellSelected(this._terminal,e,i),d){if(67108864&this.result.fg||50331648&this.result.bg){if(67108864&this.result.fg)switch(50331648&this.result.fg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:L=(16777215&this.result.fg)<<8|255;break;default:L=this._themeService.colors.foreground.rgba}else switch(50331648&this.result.bg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:L=(16777215&this.result.bg)<<8|255}L=r.rgba.blend(L,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}else L=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(l=!0,n.selectionForeground&&(h=n.selectionForeground.rgba>>8&16777215,T=!0),(0,a.treatGlyphAsBackgroundColor)(t.getCode())){if(67108864&this.result.fg&&!(50331648&this.result.bg))h=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(67108864&this.result.fg)switch(50331648&this.result.bg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:h=(16777215&this.result.bg)<<8|255}else switch(50331648&this.result.fg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:h=(16777215&this.result.fg)<<8|255;break;default:h=this._themeService.colors.foreground.rgba}h=r.rgba.blend(h,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}T=!0}}this._decorationService.forEachDecorationAtCell(e,i,"top",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),l&&(L=d?-16777216&t.bg&-134217729|L|50331648:-16777216&t.bg|L|50331648),T&&(h=-16777216&t.fg&-67108865|h|50331648),67108864&this.result.fg&&(l&&!T&&(h=50331648&this.result.bg?-134217728&this.result.fg|67108863&this.result.bg:-134217728&this.result.fg|16777215&n.background.rgba>>8|50331648,T=!0),!l&&T&&(L=50331648&this.result.fg?-67108864&this.result.bg|67108863&this.result.fg:-67108864&this.result.bg|16777215&n.foreground.rgba>>8|50331648,l=!0)),n=void 0,this.result.bg=l?L:this.result.bg,this.result.fg=T?h:this.result.fg,this.result.ext&=536870911,this.result.ext|=c<<29&3758096384}}},670(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.acquireTextureAtlas=function(t,e,i,o,n,h,L,T,l,d=!0){const c=(0,r.generateConfig)(o,n,h,L,e,i,T,l,d);for(let e=0;e=0){if((0,r.configEquals)(i.config,c))return i.atlas;1===i.ownedBy.length?(i.atlas.dispose(),a.splice(e,1)):i.ownedBy.splice(s,1);break}}for(let e=0;e{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(t=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0)return void this._restartInterval(t)}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);return this._animationTimeRestarted=void 0,void this._restartInterval(t)}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},t)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}}},697(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.observeDevicePixelDimensions=function(t,e,i){let r=new e.ResizeObserver(e=>{const s=e.find(e=>e.target===t);if(!s)return;if(!("devicePixelContentBoxSize"in s))return r?.disconnect(),void(r=void 0);const a=s.devicePixelContentBoxSize[0].inlineSize,o=s.devicePixelContentBoxSize[0].blockSize;a>0&&o>0&&i(a,o)});try{r.observe(t,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return(0,s.toDisposable)(()=>r?.disconnect())};const s=i(426)},28(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GlyphRenderer=void 0;const s=i(115),r=i(564),a=i(426),o=i(719),n=i(959);let h,L=0,T=0,l=0;class d extends a.Disposable{constructor(t,e,i,r,h){super(),this._terminal=t,this._gl=e,this._dimensions=i,this._optionsService=r,this._logService=h,this._lastSeenPageLayoutVersion=-1,this._pageOverflowWarned=!1,this._activeBuffer=0,this._vertices={count:0,attributes:new Float32Array(0),attributesBuffers:[new Float32Array(0),new Float32Array(0)]};const L=this._gl;void 0===s.TextureAtlas.maxAtlasPages&&(s.TextureAtlas.maxAtlasPages=Math.min(32,(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_IMAGE_UNITS))),s.TextureAtlas.maxTextureSize=(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_SIZE))),this._program=(0,n.throwIfFalsy)((0,o.createProgram)(L,"#version 300 es\nlayout (location = 0) in vec2 a_unitquad;\nlayout (location = 1) in vec2 a_cellpos;\nlayout (location = 2) in vec2 a_offset;\nlayout (location = 3) in vec2 a_size;\nlayout (location = 4) in float a_texpage;\nlayout (location = 5) in vec2 a_texcoord;\nlayout (location = 6) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}",function(t){let e="";for(let i=1;iL.deleteProgram(this._program))),this._projectionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_projection")),this._resolutionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_resolution")),this._textureLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_texture"));const T=this._vertexArrayObject=L.createVertexArray();this._register((0,a.toDisposable)(()=>L.deleteVertexArray(T))),L.bindVertexArray(T);const l=new Float32Array([0,0,1,0,0,1,1,1]),d=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(d))),L.bindBuffer(L.ARRAY_BUFFER,d),L.bufferData(L.ARRAY_BUFFER,l,L.STATIC_DRAW),L.enableVertexAttribArray(0),L.vertexAttribPointer(0,2,this._gl.FLOAT,!1,0,0);const c=new Uint8Array([0,1,2,3]),_=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(_))),L.bindBuffer(L.ELEMENT_ARRAY_BUFFER,_),L.bufferData(L.ELEMENT_ARRAY_BUFFER,c,L.STATIC_DRAW),this._attributesBuffer=(0,n.throwIfFalsy)(L.createBuffer()),this._register((0,a.toDisposable)(()=>L.deleteBuffer(this._attributesBuffer))),L.bindBuffer(L.ARRAY_BUFFER,this._attributesBuffer),L.enableVertexAttribArray(2),L.vertexAttribPointer(2,2,L.FLOAT,!1,44,0),L.vertexAttribDivisor(2,1),L.enableVertexAttribArray(3),L.vertexAttribPointer(3,2,L.FLOAT,!1,44,2*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(3,1),L.enableVertexAttribArray(4),L.vertexAttribPointer(4,1,L.FLOAT,!1,44,4*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(4,1),L.enableVertexAttribArray(5),L.vertexAttribPointer(5,2,L.FLOAT,!1,44,5*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(5,1),L.enableVertexAttribArray(6),L.vertexAttribPointer(6,2,L.FLOAT,!1,44,7*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(6,1),L.enableVertexAttribArray(1),L.vertexAttribPointer(1,2,L.FLOAT,!1,44,9*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(1,1),L.useProgram(this._program);const Q=new Int32Array(s.TextureAtlas.maxAtlasPages);for(let t=0;tL.deleteTexture(e.texture))),L.activeTexture(L.TEXTURE0+t),L.bindTexture(L.TEXTURE_2D,e.texture),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_S,L.CLAMP_TO_EDGE),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_T,L.CLAMP_TO_EDGE),L.texImage2D(L.TEXTURE_2D,0,L.RGBA,1,1,0,L.RGBA,L.UNSIGNED_BYTE,new Uint8Array([255,0,0,255])),this._atlasTextures[t]=e}L.enable(L.BLEND),L.blendFunc(L.SRC_ALPHA,L.ONE_MINUS_SRC_ALPHA),this.handleResize()}beginFrame(){return!this._atlas||this._atlas.pageLayoutVersion!==this._lastSeenPageLayoutVersion&&(this._lastSeenPageLayoutVersion=this._atlas.pageLayoutVersion,!0)}updateCell(t,e,i,s,r,a,o,n,h){this._updateCell(this._vertices.attributes,t,e,i,s,r,a,o,n,h)}_updateCell(t,e,i,s,a,o,d,c,_,Q){L=11*(i*this._terminal.cols+e),s!==r.NULL_CELL_CODE&&void 0!==s?this._atlas&&(h=c&&c.length>1?this._atlas.getRasterizedGlyphCombinedChar(c,a,o,d,!1,this._terminal.element):this._atlas.getRasterizedGlyph(s,a,o,d,!1,this._terminal.element),T=Math.floor((this._dimensions.device.cell.width-this._dimensions.device.char.width)/2),a!==Q&&h.offset.x>T?(l=h.offset.x-T,t[L]=-(h.offset.x-l)+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=(h.size.x-l)/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x+l/this._atlas.pages[h.texturePage].canvas.width,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x-l/this._atlas.pages[h.texturePage].canvas.width,t[L+8]=h.sizeClipSpace.y):(t[L]=-h.offset.x+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=h.size.x/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x,t[L+8]=h.sizeClipSpace.y),this._optionsService.rawOptions.rescaleOverlappingGlyphs&&(0,n.allowRescaling)(s,_,h.size.x,this._dimensions.device.cell.width)&&(t[L+2]=(this._dimensions.device.cell.width-1)/this._dimensions.device.canvas.width)):t.fill(0,L,L+11-1-2)}clear(){const t=this._terminal,e=t.cols*t.rows*11;this._vertices.count!==e?this._vertices.attributes=new Float32Array(e):this._vertices.attributes.fill(0);let i=0;for(;ithis._atlasTextures.length&&!this._pageOverflowWarned&&(this._pageOverflowWarned=!0,this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`));for(let t=0;tT.deleteProgram(this._program))),this._projectionLocation=(0,a.throwIfFalsy)(T.getUniformLocation(this._program,"u_projection"));const l=this._vertexArrayObject=T.createVertexArray();this._register((0,s.toDisposable)(()=>T.deleteVertexArray(l))),T.bindVertexArray(l);const d=new Float32Array([0,0,1,0,0,1,1,1]),c=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(c))),T.bindBuffer(T.ARRAY_BUFFER,c),T.bufferData(T.ARRAY_BUFFER,d,T.STATIC_DRAW),T.enableVertexAttribArray(3),T.vertexAttribPointer(3,2,this._gl.FLOAT,!1,0,0);const _=new Uint8Array([0,1,2,3]),Q=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(Q))),T.bindBuffer(T.ELEMENT_ARRAY_BUFFER,Q),T.bufferData(T.ELEMENT_ARRAY_BUFFER,_,T.STATIC_DRAW),this._attributesBuffer=(0,a.throwIfFalsy)(T.createBuffer()),this._register((0,s.toDisposable)(()=>T.deleteBuffer(this._attributesBuffer))),T.bindBuffer(T.ARRAY_BUFFER,this._attributesBuffer),T.enableVertexAttribArray(0),T.vertexAttribPointer(0,2,T.FLOAT,!1,o,0),T.vertexAttribDivisor(0,1),T.enableVertexAttribArray(1),T.vertexAttribPointer(1,2,T.FLOAT,!1,o,2*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(1,1),T.enableVertexAttribArray(2),T.vertexAttribPointer(2,4,T.FLOAT,!1,o,4*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(2,1),this._updateCachedColors(h.colors),this._register(this._themeService.onChangeColors(t=>{this._updateCachedColors(t),this._updateViewportRectangle()}))}renderBackgrounds(){this._renderVertices(this._vertices)}renderCursor(){this._renderVertices(this._verticesCursor)}_renderVertices(t){const e=this._gl;e.useProgram(this._program),e.bindVertexArray(this._vertexArrayObject),e.uniformMatrix4fv(this._projectionLocation,!1,r.PROJECTION_MATRIX),e.bindBuffer(e.ARRAY_BUFFER,this._attributesBuffer),e.bufferData(e.ARRAY_BUFFER,t.attributes,e.DYNAMIC_DRAW),e.drawElementsInstanced(this._gl.TRIANGLE_STRIP,4,e.UNSIGNED_BYTE,0,t.count)}handleResize(){this._updateViewportRectangle()}setDimensions(t){this._dimensions=t}_updateCachedColors(t){this._bgFloat=this._colorToFloat32Array(t.background),this._cursorFloat=this._colorToFloat32Array(t.cursor)}_updateViewportRectangle(){this._addRectangleFloat(this._vertices.attributes,0,0,0,this._terminal.cols*this._dimensions.device.cell.width,this._terminal.rows*this._dimensions.device.cell.height,this._bgFloat)}updateBackgrounds(t){const e=this._terminal,i=this._vertices;let s,r,a,o,n,h,L,T,l,d,c,_=1;for(s=0;s>24&255)/255,d=(h>>16&255)/255,c=(h>>8&255)/255,_=1,this._addRectangle(t.attributes,e,L,T,(o-a)*this._dimensions.device.cell.width,this._dimensions.device.cell.height,l,d,c,_)}_addRectangle(t,e,i,s,r,a,o,n,h,L){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o,t[e+5]=n,t[e+6]=h,t[e+7]=L}_addRectangleFloat(t,e,i,s,r,a,o){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o[0],t[e+5]=o[1],t[e+6]=o[2],t[e+7]=o[3]}_colorToFloat32Array(t){return new Float32Array([(t.rgba>>24&255)/255,(t.rgba>>16&255)/255,(t.rgba>>8&255)/255,(255&t.rgba)/255])}}e.RectangleRenderer=Q},208(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.RenderModel=e.COMBINED_CHAR_BIT_MASK=void 0;const s=i(948);e.COMBINED_CHAR_BIT_MASK=2147483648,e.RenderModel=class{constructor(){this.cells=new Uint32Array(0),this.lineLengths=new Uint32Array(0),this.selection=(0,s.createSelectionRenderModel)()}resize(t,e){const i=t*e*4;i!==this.cells.length&&(this.cells=new Uint32Array(i),this.lineLengths=new Uint32Array(e))}clear(){this.cells.fill(0,0),this.lineLengths.fill(0,0)}}},115(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextureAtlas=void 0;const s=i(0),r=i(183),a=i(959),o=i(993),n=i(836),h=i(930),L=i(917),T=i(564),l=i(414),d={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}};let c;class _{get pages(){return this._pages}constructor(t,e,i,s){this._document=t,this._config=e,this._unicodeService=i,this._logService=s,this._didWarmUp=!1,this._cacheMap=new n.FourKeyMap,this._cacheMapCombined=new n.FourKeyMap,this._pages=[],this._activePages=[],this._workBoundingBox={top:0,left:0,bottom:0,right:0},this._workAttributeData=new L.AttributeData,this._textureSize=512,this._onAddTextureAtlasCanvas=new l.Emitter,this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=new l.Emitter,this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._pageLayoutVersion=0,this.fontProbeMismatchCount=0,this._createNewPage(),this._tmpCanvas=p(t,4*this._config.deviceCellWidth+4,this._config.deviceCellHeight+4),this._tmpCtx=(0,a.throwIfFalsy)(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}dispose(){this._tmpCanvas.remove();for(const t of this.pages)t.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){const t=new h.IdleTaskQueue(this._logService);for(let e=33;e<126;e++)t.enqueue(()=>{if(!this._cacheMap.get(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT)){const t=this._drawToCache(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,!1,void 0);this._cacheMap.set(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,t)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){this._pages.every(t=>0===t.glyphs.length&&0===t.currentRow.x&&0===t.currentRow.y)||(this._evictAllPages(),this._createNewPage())}_createNewPage(){if(_.maxAtlasPages&&this._pages.length>=Math.max(4,_.maxAtlasPages)){const t=this._pages.filter(t=>2*t.canvas.width<=(_.maxTextureSize||4096)).sort((t,e)=>e.canvas.width!==t.canvas.width?e.canvas.width-t.canvas.width:e.percentageUsed-t.percentageUsed);let e=-1,i=0;for(let s=0;st.canvas.width!==s[0].canvas.width)){this._evictAllPages();const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}const r=s.map(t=>t.glyphs[0].texturePage).sort((t,e)=>t-e),a=this.pages.length-s.length,o=this._mergePages(s,a);o.version=++Q.nextVersion;for(let t=r.length-1;t>=0;t--)this._deletePage(r[t]);this.pages.push(o),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(o.canvas)}const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}_mergePages(t,e){const i=2*t[0].canvas.width,s=new Q(this._document,i,t);for(const[r,a]of t.entries()){const t=r*a.canvas.width%i,o=Math.floor(r/2)*a.canvas.height;s.ctx.drawImage(a.canvas,t,o);for(const s of a.glyphs)s.texturePage=e,s.sizeClipSpace.x=s.size.x/i,s.sizeClipSpace.y=s.size.y/i,s.texturePosition.x+=t,s.texturePosition.y+=o,s.texturePositionClipSpace.x=s.texturePosition.x/i,s.texturePositionClipSpace.y=s.texturePosition.y/i;this._onRemoveTextureAtlasCanvas.fire(a.canvas);const n=this._activePages.indexOf(a);-1!==n&&this._activePages.splice(n,1)}return s}_deletePage(t){this._pages.splice(t,1);for(let e=t;e=this._config.colors.ansi.length)throw new Error("No color found for idx "+t);return this._config.colors.ansi[t]}_getBackgroundColor(t,e,i,s){if(this._config.allowTransparency)return o.NULL_COLOR;let r;switch(t){case 16777216:case 33554432:r=this._getColorFromAnsiIndex(e);break;case 50331648:const t=L.AttributeData.toColorRGB(e);r=o.channels.toColor(t[0],t[1],t[2]);break;default:r=i?o.color.opaque(this._config.colors.foreground):this._config.colors.background}return this._config.allowTransparency||(r=o.color.opaque(r)),r}_getForegroundColor(t,e,i,r,a,n,h,T,l,d){const c=this._getMinimumContrastColor(t,e,i,r,a,n,h,l,T,d);if(c)return c;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&l&&n<8&&(n+=8),_=this._getColorFromAnsiIndex(n);break;case 50331648:const t=L.AttributeData.toColorRGB(n);_=o.channels.toColor(t[0],t[1],t[2]);break;default:_=h?this._config.colors.background:this._config.colors.foreground}return this._config.allowTransparency&&(_=o.color.opaque(_)),T&&(_=o.color.multiplyOpacity(_,s.DIM_OPACITY)),_}_resolveBackgroundRgba(t,e,i){switch(t){case 16777216:case 33554432:return this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(t,e,i,s){switch(t){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&e<8&&(e+=8),this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(t,e,i,s,r,a,n,h,L,T){if(1===this._config.minimumContrastRatio||T)return;const l=this._getContrastCache(L),d=l.getColor(t,s);if(void 0!==d)return d??void 0;const c=this._resolveBackgroundRgba(e,i,n),_=this._resolveForegroundRgba(r,a,n,h),Q=o.rgba.ensureContrastRatio(c,_,this._config.minimumContrastRatio/(L?2:1));if(!Q)return void l.setColor(t,s,null);const u=o.channels.toColor(Q>>24&255,Q>>16&255,Q>>8&255);return l.setColor(t,s,u),u}_getContrastCache(t){return t?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_probeRasterizationFontWeight(t){const e=String(t);if(!/^(?:[1-8]\d{2}|900)$/.test(e))return;const i=this._tmpCtx.font.match(/(?:^|\s)(normal|bold|[1-9]\d{0,3})(?=\s+\d+(?:\.\d+)?px(?:\s|$))/)?.[1]??"400";if(("normal"===i?"400":"bold"===i?"700":i)!==e){this.fontProbeMismatchCount++,this.fontProbeLastMismatch={desired:e,actual:this._tmpCtx.font};try{globalThis.__orcaAtlasFontProbe?.(this.fontProbeLastMismatch)}catch{}}}_drawToCache(t,e,i,o,n,h){const T="number"==typeof t?String.fromCharCode(t):t;h&&this._tmpCanvas.parentElement!==h&&(this._tmpCanvas.style.display="none",h.append(this._tmpCanvas));const l=Math.min(this._config.deviceCellWidth*Math.max(T.length,2)+4,this._config.deviceMaxTextureSize);this._tmpCanvas.width=t?2*t-o:t-o;!1==!(o>=t)||0===_?(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L+_,s),this._tmpCtx.lineTo(T,s)):(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(L+_,s),this._tmpCtx.moveTo(L+_+t,s),this._tmpCtx.lineTo(T,s)),o=(0,a.computeNextVariantOffset)(T-L,t,o);break;case 5:const Q=.6,u=.3,p=T-L,g=Math.floor(Q*p),M=Math.floor(u*p),y=p-g-M;this._tmpCtx.setLineDash([g,M,y]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s);break;default:this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s)}n||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!O&&this._config.fontSize>=12&&!this._config.allowTransparency&&" "!==T){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";const e=this._tmpCtx.measureText(T);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in e&&e.actualBoundingBoxDescent>0){this._tmpCtx.save();const e=new Path2D;e.rect(i,h-Math.ceil(t/2),this._config.deviceCellWidth*I,l-h+Math.ceil(t/2)),this._tmpCtx.clip(e),this._tmpCtx.lineWidth=3*this._config.devicePixelRatio,this._tmpCtx.strokeStyle=E.css,this._tmpCtx.strokeText(T,S,S+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(C){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),e=t%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+e),this._tmpCtx.stroke()}if(O||this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight),"_"===T&&!this._config.allowTransparency){let t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W);if(t)for(let e=1;e<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=E.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight-e),t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W),t);e++);}if(f){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),e=this._tmpCtx.lineWidth%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.stroke()}this._tmpCtx.restore();const P=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height);let N;if(N=this._config.allowTransparency?function(t){for(let e=0;e0)return!1;return!0}(P):u(P,E,D,W),N)return d;const B=this._findGlyphBoundingBox(P,this._workBoundingBox,l,Z,O,S);let $,F;for(;;){if(0===this._activePages.length){const t=this._createNewPage();$=t,F=t.currentRow,F.height=B.size.y;break}$=this._activePages[this._activePages.length-1],F=$.currentRow;for(const t of this._activePages)B.size.y<=t.currentRow.height&&($=t,F=t.currentRow);for(let t=this._activePages.length-1;t>=0;t--)for(const e of this._activePages[t].fixedRows)e.height<=F.height&&B.size.y<=e.height&&($=this._activePages[t],F=e);if(B.size.x>this._textureSize){this._overflowSizePage||(_.maxAtlasPages&&this._pages.length>=_.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new Q(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),$=this._overflowSizePage,F=this._overflowSizePage.currentRow,F.x+B.size.x>=$.canvas.width&&(F.x=0,F.y+=F.height,F.height=0);break}if(F.y+B.size.y>=$.canvas.height||F.height>B.size.y+2){let t=!1;if($.currentRow.y+$.currentRow.height+B.size.y>=$.canvas.height){let e;for(const t of this._activePages)if(t.currentRow.y+t.currentRow.height+B.size.y=_.maxAtlasPages&&F.y+B.size.y<=$.canvas.height&&F.height>=B.size.y&&F.x+B.size.x<=$.canvas.width)t=!0;else{const e=this._createNewPage();$=e,F=e.currentRow,F.height=B.size.y,t=!0}}t||($.currentRow.height>0&&$.fixedRows.push($.currentRow),F={x:0,y:$.currentRow.y+$.currentRow.height,height:B.size.y},$.fixedRows.push(F),$.currentRow={x:0,y:F.y+F.height,height:0})}if(F.x+B.size.x<=$.canvas.width)break;F===$.currentRow?(F.x=0,F.y+=F.height,F.height=0):$.fixedRows.splice($.fixedRows.indexOf(F),1)}return B.texturePage=this._pages.indexOf($),B.texturePosition.x=F.x,B.texturePosition.y=F.y,B.texturePositionClipSpace.x=F.x/$.canvas.width,B.texturePositionClipSpace.y=F.y/$.canvas.height,B.sizeClipSpace.x/=$.canvas.width,B.sizeClipSpace.y/=$.canvas.height,F.height=Math.max(F.height,B.size.y),F.x+=B.size.x,$.ctx.putImageData(P,B.texturePosition.x-this._workBoundingBox.left,B.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,B.size.x,B.size.y),$.addGlyph(B),$.version=++Q.nextVersion,B}_findGlyphBoundingBox(t,e,i,s,r,a){e.top=0;const o=s?this._config.deviceCellHeight:this._tmpCanvas.height,n=s?this._config.deviceCellWidth:i;let h=!1;for(let i=0;i=a;i--){for(let s=0;s=0;i--){for(let s=0;s>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=i.rgba>>>24,h=i.rgba>>>16&255,L=i.rgba>>>8&255,T=Math.floor((Math.abs(r-n)+Math.abs(a-h)+Math.abs(o-L))/12);let l=!0;for(let e=0;ethis._handleColorChange())),this._cellColorResolver=new s.CellColorResolver(this._terminal,this._optionsService,this._model.selection,this._decorationService,this._coreBrowserService,this._themeService),this._core=this._terminal._core,this._renderLayers=[new _.LinkRenderLayer(this._core.screenElement,2,this._terminal,this._core.linkifier,this._coreBrowserService,d,this._themeService)],this.dimensions=(0,g.createRenderDimensions)(),this._devicePixelRatio=this._coreBrowserService.dpr,this._updateDimensions(),this._updateCursorBlink(),this._register(d.onOptionChange(()=>this._handleOptionsChanged())),this._textBlinkStateManager=this._register(new T.TextBlinkStateManager(()=>this._requestRedrawViewport(),this._coreBrowserService,this._optionsService)),this._resetBlinkingRowState(),this._deviceMaxTextureSize=this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextlost",t=>{this._logService.debug("webglcontextlost event received"),t.preventDefault(),this._contextRestorationTimeout=setTimeout(()=>{this._contextRestorationTimeout=void 0,this._logService.warn("webgl context not restored; firing onContextLoss"),this._onContextLoss.fire(t)},3e3)})),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextrestored",t=>{this._logService.warn("webglcontextrestored event received"),clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0,(0,r.removeTerminalFromCache)(this._terminal),this._initializeWebGLState(),this._requestRedrawViewport()})),this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,this._coreBrowserService.window,(t,e)=>this._setCanvasDevicePixelDimensions(t,e)),this._register(this._coreBrowserService.onWindowChange(t=>{this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,t,(t,e)=>this._setCanvasDevicePixelDimensions(t,e))})),this._register((0,u.addDisposableListener)(this._coreBrowserService.mainDocument,"mousedown",()=>this._cursorBlinkStateManager.value?.restartBlinkAnimation())),this._core.screenElement.appendChild(this._canvas),[this._rectangleRenderer.value,this._glyphRenderer.value]=this._initializeWebGLState(),this._isAttached=this._core.screenElement.isConnected,this._register((0,p.toDisposable)(()=>{clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0;for(const t of this._renderLayers)t.dispose();this._canvas.parentElement?.removeChild(this._canvas),(0,r.removeTerminalFromCache)(this._terminal)}))}get textureAtlas(){return this._charAtlas?.pages[0].canvas}_handleColorChange(){this._refreshCharAtlas(),this._clearModel(!0)}handleDevicePixelRatioChange(){this._devicePixelRatio!==this._coreBrowserService.dpr&&(this._devicePixelRatio=this._coreBrowserService.dpr,this.handleResize(this._terminal.cols,this._terminal.rows))}handleResize(t,e){this._updateDimensions(),this._model.resize(this._terminal.cols,this._terminal.rows),this._resetBlinkingRowState();for(const t of this._renderLayers)t.resize(this._terminal,this.dimensions);this._canvas.width=this.dimensions.device.canvas.width,this._canvas.height=this.dimensions.device.canvas.height,this._canvas.style.width=`${this.dimensions.css.canvas.width}px`,this._canvas.style.height=`${this.dimensions.css.canvas.height}px`,this._core.screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._core.screenElement.style.height=`${this.dimensions.css.canvas.height}px`,this._rectangleRenderer.value?.setDimensions(this.dimensions),this._rectangleRenderer.value?.handleResize(),this._glyphRenderer.value?.setDimensions(this.dimensions),this._glyphRenderer.value?.handleResize(),this._refreshCharAtlas(),this._clearModel(!1),this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0})}handleCharSizeChanged(){this.handleResize(this._terminal.cols,this._terminal.rows)}handleBlur(){for(const t of this._renderLayers)t.handleBlur(this._terminal);this._cursorBlinkStateManager.value?.pause(),this._requestRedrawViewport()}handleFocus(){for(const t of this._renderLayers)t.handleFocus(this._terminal);this._cursorBlinkStateManager.value?.resume(),this._requestRedrawViewport()}handleViewportVisibilityChange(t){this._textBlinkStateManager.setViewportVisible(t)}handleSelectionChanged(t,e,i){for(const s of this._renderLayers)s.handleSelectionChanged(this._terminal,t,e,i);this._model.selection.update(this._core,t,e,i),this._requestRedrawViewport()}handleCursorMove(){for(const t of this._renderLayers)t.handleCursorMove(this._terminal);this._cursorBlinkStateManager.value?.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._refreshCharAtlas(),this._updateCursorBlink()}_initializeWebGLState(){return this._rectangleRenderer.value=new d.RectangleRenderer(this._terminal,this._gl,this.dimensions,this._themeService,this._logService),this._glyphRenderer.value=new l.GlyphRenderer(this._terminal,this._gl,this.dimensions,this._optionsService,this._logService),this.handleCharSizeChanged(),[this._rectangleRenderer.value,this._glyphRenderer.value]}_refreshCharAtlas(){if(this.dimensions.device.char.width<=0&&this.dimensions.device.char.height<=0)return void(this._isAttached=!1);const t=(0,r.acquireTextureAtlas)(this._terminal,this._optionsService.rawOptions,this._themeService.colors,this.dimensions.device.cell.width,this.dimensions.device.cell.height,this.dimensions.device.char.width,this.dimensions.device.char.height,this._coreBrowserService.dpr,this._deviceMaxTextureSize,this._customGlyphs);this._charAtlas!==t&&(this._onChangeTextureAtlas.fire(t.pages[0].canvas),this._charAtlasDisposable.value=(0,p.combinedDisposable)(Q.EventUtils.forward(t.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas),Q.EventUtils.forward(t.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas))),this._charAtlas=t,this._charAtlas.warmUp(),this._glyphRenderer.value?.setAtlas(this._charAtlas)}_clearModel(t){this._model.clear(),t&&this._glyphRenderer.value?.clear()}clearTextureAtlas(){this._charAtlas?.clearTexture(),this._clearModel(!0),this._requestRedrawViewport()}clear(){this._clearModel(!0);for(const t of this._renderLayers)t.reset(this._terminal);this._resetBlinkingRowState(),this._textBlinkStateManager.setNeedsBlinkInViewport(!1),this._cursorBlinkStateManager.value?.restartBlinkAnimation(),this._updateCursorBlink()}renderRows(t,e){if(!this._isAttached){if(!(this._core.screenElement?.isConnected&&this._charSizeService.width&&this._charSizeService.height))return;this._updateDimensions(),this._refreshCharAtlas(),this._isAttached=!0}for(const i of this._renderLayers)i.handleGridChanged(this._terminal,t,e);if(!this._glyphRenderer.value||!this._rectangleRenderer.value)return;this._glyphRenderer.value.beginFrame()?(this._clearModel(!0),this._updateModel(0,this._terminal.rows-1)):this._updateModel(t,e);let i=!1,s=0;for(;this._charAtlas&&s++<32&&this._glyphRenderer.value.beginFrame();)i=!0,this._clearModel(!0),this._updateModel(0,this._terminal.rows-1);i&&this._glyphRenderer.value.invalidateAtlasTextures(),this._rectangleRenderer.value.renderBackgrounds(),this._glyphRenderer.value.render(this._model),this._cursorBlinkStateManager.value&&!this._cursorBlinkStateManager.value.isCursorVisible||this._rectangleRenderer.value.renderCursor()}_updateCursorBlink(){this._coreService.decPrivateModes.cursorBlink??this._terminal.options.cursorBlink?this._cursorBlinkStateManager.value=new a.CursorBlinkStateManager(()=>{this._requestRedrawCursor()},this._coreBrowserService):this._cursorBlinkStateManager.clear(),this._requestRedrawCursor()}_updateModel(t,e){const i=this._core;let s,r,a,o,n,h,T,l,d,_,Q,u,p,g,M,f,C,m=this._workCell;t=v(t,i.rows-1,0),e=v(e,i.rows-1,0);const w=this._coreService.decPrivateModes.cursorStyle??i.options.cursorStyle??"block",x=this._terminal.buffer.active.baseY+this._terminal.buffer.active.cursorY,b=x-i.buffer.ydisp,E=Math.min(this._terminal.buffer.active.cursorX,i.cols-1);let R=-1;const k=this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden&&(!this._cursorBlinkStateManager.value||this._cursorBlinkStateManager.value.isCursorVisible);this._model.cursor=void 0;let A=!1;for(r=t;r<=e;r++){a=r+i.buffer.ydisp;const t=i.buffer.lines.get(a);if(!t){for(this._model.lineLengths[r]=0,f=0;f=T,d=f,n.length>0&&f===n[0][0]&&l){_=n.shift();const t=this._model.selection.isCellSelected(this._terminal,_[0],a);for(M=_[0]+1;M<_[1];M++)l&&=t===this._model.selection.isCellSelected(this._terminal,M,a);l&&=!Q||E<_[0]||E>=_[1],l?(h=!0,m=new y(m,o.translateToString(!0,_[0],_[1]),_[1]-_[0]),d=_[1]-1):T=_[1]}if(u=m.getChars(),p=m.getCode(),M=4*(r*i.cols+f),!e&&m.isBlink()&&(e=!0),this._cellColorResolver.resolve(m,f,a,this.dimensions.device.cell.width,this.dimensions.device.cell.height),k&&a===x&&(f===E&&(this._model.cursor={x:E,y:b,width:m.getWidth(),style:this._coreBrowserService.isFocused?w:i.options.cursorInactiveStyle,cursorWidth:i.options.cursorWidth,dpr:this._devicePixelRatio},R=E+m.getWidth()-1),f>=E&&f<=R&&(this._coreBrowserService.isFocused&&"block"===w||!1===this._coreBrowserService.isFocused&&"block"===i.options.cursorInactiveStyle)&&(this._cellColorResolver.result.fg=50331648|this._themeService.colors.cursorAccent.rgba>>8&16777215,this._cellColorResolver.result.bg=50331648|this._themeService.colors.cursor.rgba>>8&16777215)),this._textBlinkStateManager.isEnabled&&!this._textBlinkStateManager.isBlinkOn&&m.isBlink()&&(this._cellColorResolver.result.fg|=1073741824),p!==L.NULL_CELL_CODE&&(this._model.lineLengths[r]=f+1),(this._model.cells[M]!==p||this._model.cells[M+1]!==this._cellColorResolver.result.bg||this._model.cells[M+2]!==this._cellColorResolver.result.fg||this._model.cells[M+3]!==this._cellColorResolver.result.ext)&&(A=!0,u.length>1&&(p|=c.COMBINED_CHAR_BIT_MASK),this._model.cells[M]=p,this._model.cells[M+1]=this._cellColorResolver.result.bg,this._model.cells[M+2]=this._cellColorResolver.result.fg,this._model.cells[M+3]=this._cellColorResolver.result.ext,g=m.getWidth(),this._glyphRenderer.value.updateCell(f,r,p,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext,u,g,s),h)){for(m=this._workCell,f++;f<=d;f++)C=4*(r*i.cols+f),this._nullModelCell(f,r,C,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext);f--}}this._setRowBlinkState(r,e)}A&&this._rectangleRenderer.value.updateBackgrounds(this._model),this._rectangleRenderer.value.updateCursor(this._model),this._updateTextBlinkState()}_nullModelCell(t,e,i,s,r,a){this._glyphRenderer.value.updateCell(t,e,L.NULL_CELL_CODE,s,r,a,L.NULL_CELL_CHAR,0,0),this._model.cells[i]=L.NULL_CELL_CODE,this._model.cells[i+1]=s,this._model.cells[i+2]=r,this._model.cells[i+3]=a}_resetBlinkingRowState(){this._rowHasBlinkingCells=new Array(this._terminal.rows).fill(!1),this._rowHasBlinkingCellsCount=0}_setRowBlinkState(t,e){this._rowHasBlinkingCells[t]!==e&&(this._rowHasBlinkingCells[t]=e,this._rowHasBlinkingCellsCount+=e?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}_updateDimensions(){this._charSizeService.width&&this._charSizeService.height&&(this.dimensions.device.char.width=Math.floor(this._charSizeService.width*this._devicePixelRatio),this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*this._devicePixelRatio),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.top=1===this._optionsService.rawOptions.lineHeight?0:Math.round((this.dimensions.device.cell.height-this.dimensions.device.char.height)/2),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.char.left=Math.floor(this._optionsService.rawOptions.letterSpacing/2),this.dimensions.device.canvas.height=this._terminal.rows*this.dimensions.device.cell.height,this.dimensions.device.canvas.width=this._terminal.cols*this.dimensions.device.cell.width,this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/this._devicePixelRatio),this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/this._devicePixelRatio),this.dimensions.css.cell.height=this.dimensions.device.cell.height/this._devicePixelRatio,this.dimensions.css.cell.width=this.dimensions.device.cell.width/this._devicePixelRatio)}_setCanvasDevicePixelDimensions(t,e){this._canvas.width===t&&this._canvas.height===e||(this._canvas.width=t,this._canvas.height=e,this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0}))}_requestRedrawViewport(){this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1})}_requestRedrawCursor(){const t=this._terminal.buffer.active.cursorY;this._onRequestRedraw.fire({start:t,end:t})}}e.WebglRenderer=M;class y extends n.AttributeData{constructor(t,e,i){super(),this.content=0,this.combinedData="",this.fg=t.fg,this.bg=t.bg,this.combinedData=e,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(t){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}function v(t,e,i=0){return Math.max(Math.min(t,e),i)}e.JoinedCellData=y},719(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GLTexture=e.PROJECTION_MATRIX=void 0,e.createProgram=function(t,e,i,a){const o=(0,s.throwIfFalsy)(t.createProgram());if(t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.VERTEX_SHADER,e,a))),t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.FRAGMENT_SHADER,i,a))),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS))return o;a.error(t.getProgramInfoLog(o)),t.deleteProgram(o)},e.createShader=r,e.expandFloat32Array=function(t,e){const i=Math.min(2*t.length,e),s=new Float32Array(i);for(let e=0;e{const e=[],i=[3/8,2/8,3/8],s=[0,3/8,5/8];for(let r=0;r<3;r++){const a=t>>2*r&1,o=t>>2*r+1&1;a&&o?e.push(`M0,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):a?e.push(`M0,${s[r]} L0.5,${s[r]} L0.5,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):o&&e.push(`M0.5,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0.5,${s[r]+i[r]} Z`)}return e.join(" ")}}}function r(t){const e=[],i=.15,s=.015,r=.075,a=.0375,o=.95;if(64&t){const t=.175,a=.2125,n=.25,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(32&t){const t=o-i,s=.875,r=o,n=.265,h=.485;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(16&t){const t=o-i,s=.875,r=o,n=.515,h=.735;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(8&t){const t=.75,a=.7875,n=.825,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(4&t){const t=.05,i=.125,s=.2,r=.515,o=.735;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(2&t){const t=.05,i=.125,s=.2,r=.265,o=.485;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(1&t){const t=.4625,a=.5,n=.5375,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}return e.join(" ")}Object.defineProperty(e,"__esModule",{value:!0}),e.blockPatternCodepoints=e.customGlyphDefinitions=void 0,function(t){t.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),t.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),t.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),t.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),t.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),t.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),t.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.CURVE_UP_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_UP_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),t.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),t.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),t.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),t.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),t.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})}(i||(i={})),e.customGlyphDefinitions={"─":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"━":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"│":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"┃":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"┄":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"┅":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"┆":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"┇":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"┈":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"┉":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"┊":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"┋":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"┌":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"┍":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┎":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┏":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"┐":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"┑":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┒":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┓":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"└":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"┕":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┖":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┗":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"┘":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"┙":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┚":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┛":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"├":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"┝":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┞":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┟":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┠":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┡":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┢":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┣":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"┤":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"┥":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┦":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┧":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┨":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┩":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┪":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┫":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"┬":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"┭":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┮":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┯":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┰":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┱":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┲":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┳":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"┴":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"┵":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┶":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┷":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┸":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┹":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┺":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┻":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"┼":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"┽":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┾":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┿":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"╀":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"╁":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╂":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"╃":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"╄":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"╅":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"╆":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"╇":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"╈":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"╉":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"╊":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"╋":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"╌":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"╍":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"╎":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"╏":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"═":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"║":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╒":{type:2,data:(t,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╓":{type:2,data:(t,e)=>`M${.5-t},1 L${.5-t},.5 L1,.5 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╔":{type:2,data:(t,e)=>`M1,${.5-e} L${.5-t},${.5-e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╕":{type:2,data:(t,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╖":{type:2,data:(t,e)=>`M${.5+t},1 L${.5+t},.5 L0,.5 M${.5-t},.5 L${.5-t},1`,strokeWidth:1},"╗":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5+t},${.5-e} L${.5+t},1`,strokeWidth:1},"╘":{type:2,data:(t,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"╙":{type:2,data:(t,e)=>`M1,.5 L${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╚":{type:2,data:(t,e)=>`M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0 M1,${.5+e} L${.5-t},${.5+e} L${.5-t},0`,strokeWidth:1},"╛":{type:2,data:(t,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"╜":{type:2,data:(t,e)=>`M0,.5 L${.5+t},.5 L${.5+t},0 M${.5-t},.5 L${.5-t},0`,strokeWidth:1},"╝":{type:2,data:(t,e)=>`M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M0,${.5+e} L${.5+t},${.5+e} L${.5+t},0`,strokeWidth:1},"╞":{type:2,data:(t,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╟":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1 M${.5+t},.5 L1,.5`,strokeWidth:1},"╠":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╡":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╢":{type:2,data:(t,e)=>`M0,.5 L${.5-t},.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╣":{type:2,data:(t,e)=>`M${.5+t},0 L${.5+t},1 M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0`,strokeWidth:1},"╤":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"╥":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},1 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╦":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╧":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╨":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╩":{type:2,data:(t,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╪":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╫":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╬":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╭":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╮":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╯":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╰":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╱":{type:2,data:"M1,0 L0,1",strokeWidth:1},"╲":{type:2,data:"M0,0 L1,1",strokeWidth:1},"╳":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"╴":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"╵":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"╶":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"╷":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"╸":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"╹":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"╺":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"╻":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"╼":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"╽":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╾":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"╿":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"▀":{type:0,data:[{x:0,y:0,w:8,h:4}]},"▁":{type:0,data:[{x:0,y:7,w:8,h:1}]},"▂":{type:0,data:[{x:0,y:6,w:8,h:2}]},"▃":{type:0,data:[{x:0,y:5,w:8,h:3}]},"▄":{type:0,data:[{x:0,y:4,w:8,h:4}]},"▅":{type:0,data:[{x:0,y:3,w:8,h:5}]},"▆":{type:0,data:[{x:0,y:2,w:8,h:6}]},"▇":{type:0,data:[{x:0,y:1,w:8,h:7}]},"█":{type:0,data:[{x:0,y:0,w:8,h:8}]},"▉":{type:0,data:[{x:0,y:0,w:7,h:8}]},"▊":{type:0,data:[{x:0,y:0,w:6,h:8}]},"▋":{type:0,data:[{x:0,y:0,w:5,h:8}]},"▌":{type:0,data:[{x:0,y:0,w:4,h:8}]},"▍":{type:0,data:[{x:0,y:0,w:3,h:8}]},"▎":{type:0,data:[{x:0,y:0,w:2,h:8}]},"▏":{type:0,data:[{x:0,y:0,w:1,h:8}]},"▐":{type:0,data:[{x:4,y:0,w:4,h:8}]},"░":{type:1,data:[[1,0],[0,0]]},"▒":{type:1,data:[[1,0],[0,1]]},"▓":{type:1,data:[[1,1],[1,0]]},"▔":{type:0,data:[{x:0,y:0,w:8,h:1}]},"▕":{type:0,data:[{x:7,y:0,w:1,h:8}]},"▖":{type:0,data:[{x:0,y:4,w:4,h:4}]},"▗":{type:0,data:[{x:4,y:4,w:4,h:4}]},"▘":{type:0,data:[{x:0,y:0,w:4,h:4}]},"▙":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"▚":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"▛":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"▜":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"▝":{type:0,data:[{x:4,y:0,w:4,h:4}]},"▞":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"▟":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"":i.LINE_H,"":i.LINE_V,"":i.FADE_RIGHT,"":i.FADE_LEFT,"":i.FADE_DOWN,"":i.FADE_UP,"":i.CURVE_DOWN_RIGHT,"":i.CURVE_DOWN_LEFT,"":i.CURVE_UP_RIGHT,"":i.CURVE_UP_LEFT,"":[i.LINE_V,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT],"":[i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_UP_RIGHT],"":[i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE],"":i.NODE_STROKE,"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"🬀":s(1),"🬁":s(2),"🬂":s(3),"🬃":s(4),"🬄":s(5),"🬅":s(6),"🬆":s(7),"🬇":s(8),"🬈":s(9),"🬉":s(10),"🬊":s(11),"🬋":s(12),"🬌":s(13),"🬍":s(14),"🬎":s(15),"🬏":s(16),"🬐":s(17),"🬑":s(18),"🬒":s(19),"🬓":s(20),"🬔":s(22),"🬕":s(23),"🬖":s(24),"🬗":s(25),"🬘":s(26),"🬙":s(27),"🬚":s(28),"🬛":s(29),"🬜":s(30),"🬝":s(31),"🬞":s(32),"🬟":s(33),"🬠":s(34),"🬡":s(35),"🬢":s(36),"🬣":s(37),"🬤":s(38),"🬥":s(39),"🬦":s(40),"🬧":s(41),"🬨":s(43),"🬩":s(44),"🬪":s(45),"🬫":s(46),"🬬":s(47),"🬭":s(48),"🬮":s(49),"🬯":s(50),"🬰":s(51),"🬱":s(52),"🬲":s(53),"🬳":s(54),"🬴":s(55),"🬵":s(56),"🬶":s(57),"🬷":s(58),"🬸":s(59),"🬹":s(60),"🬺":s(61),"🬻":s(62),"🬼":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"🬽":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"🬾":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"🬿":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"🭀":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"🭁":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭂":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"🭃":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭄":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"🭅":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"🭆":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"🭇":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"🭈":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"🭉":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"🭊":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"🭋":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"🭌":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"🭍":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"🭎":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"🭏":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"🭐":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"🭑":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"🭒":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭓":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"🭔":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭕":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"🭖":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"🭗":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"🭘":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"🭙":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"🭚":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"🭛":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"🭜":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"🭝":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"🭞":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"🭟":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"🭠":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"🭡":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"🭢":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"🭣":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"🭤":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"🭥":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"🭦":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"🭧":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"🭨":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"🭩":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"🭪":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"🭫":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"🭬":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"🭭":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"🭮":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"🭯":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"🭰":{type:0,data:[{x:1,y:0,w:1,h:8}]},"🭱":{type:0,data:[{x:2,y:0,w:1,h:8}]},"🭲":{type:0,data:[{x:3,y:0,w:1,h:8}]},"🭳":{type:0,data:[{x:4,y:0,w:1,h:8}]},"🭴":{type:0,data:[{x:5,y:0,w:1,h:8}]},"🭵":{type:0,data:[{x:6,y:0,w:1,h:8}]},"🭶":{type:0,data:[{x:0,y:1,w:8,h:1}]},"🭷":{type:0,data:[{x:0,y:2,w:8,h:1}]},"🭸":{type:0,data:[{x:0,y:3,w:8,h:1}]},"🭹":{type:0,data:[{x:0,y:4,w:8,h:1}]},"🭺":{type:0,data:[{x:0,y:5,w:8,h:1}]},"🭻":{type:0,data:[{x:0,y:6,w:8,h:1}]},"🭼":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🭽":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭾":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭿":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🮀":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮁":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮂":{type:0,data:[{x:0,y:0,w:8,h:2}]},"🮃":{type:0,data:[{x:0,y:0,w:8,h:3}]},"🮄":{type:0,data:[{x:0,y:0,w:8,h:5}]},"🮅":{type:0,data:[{x:0,y:0,w:8,h:6}]},"🮆":{type:0,data:[{x:0,y:0,w:8,h:7}]},"🮇":{type:0,data:[{x:6,y:0,w:2,h:8}]},"🮈":{type:0,data:[{x:5,y:0,w:3,h:8}]},"🮉":{type:0,data:[{x:3,y:0,w:5,h:8}]},"🮊":{type:0,data:[{x:2,y:0,w:6,h:8}]},"🮋":{type:0,data:[{x:1,y:0,w:7,h:8}]},"🮌":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"🮍":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"🮎":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"🮏":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"🮐":{type:1,data:[[0,1],[1,0]]},"🮑":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"🮒":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"🮔":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"🮕":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"🮖":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"🮗":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"🮘":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"🮙":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"🮚":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"🮛":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"🮜":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"🮝":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"🮞":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"🮟":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"🮠":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"🮡":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"🮢":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"🮣":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"🮤":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"🮥":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"🮦":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"🮧":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"🮨":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"🮩":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"🮪":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"🮫":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"🮬":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"🮭":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"🮮":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"🮯":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"🮰":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"🮱":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"🮲":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"🮳":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"🮴":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"🮵":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮶":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮷":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮸":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮹":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"🮺":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"🮻":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"🮼":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"🮽":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"🮾":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"🮿":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"🯀":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"🯁":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"🯂":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"🯃":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"🯄":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"🯅":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯆":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯇":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯈":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯉":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯊":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"🯋":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"🯌":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"🯍":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"🯎":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"🯏":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"🯐":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"🯑":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"🯒":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"🯓":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"🯔":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"🯕":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"🯖":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"🯗":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"🯘":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"🯙":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"🯚":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"🯛":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"🯜":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"🯝":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"🯞":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"🯟":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"🯠":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"🯡":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"🯢":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"🯣":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"🯤":{type:0,data:[{x:2,y:0,w:4,h:4}]},"🯥":{type:0,data:[{x:2,y:4,w:4,h:4}]},"🯦":{type:0,data:[{x:0,y:2,w:4,h:4}]},"🯧":{type:0,data:[{x:4,y:2,w:4,h:4}]},"🯨":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"🯩":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"🯪":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"🯫":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"🯬":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"🯭":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"🯮":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"🯯":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"🯰":{type:5,data:{d:r(126),type:0},scaleType:1},"🯱":{type:5,data:{d:r(48),type:0},scaleType:1},"🯲":{type:5,data:{d:r(109),type:0},scaleType:1},"🯳":{type:5,data:{d:r(121),type:0},scaleType:1},"🯴":{type:5,data:{d:r(51),type:0},scaleType:1},"🯵":{type:5,data:{d:r(91),type:0},scaleType:1},"🯶":{type:5,data:{d:r(95),type:0},scaleType:1},"🯷":{type:5,data:{d:r(114),type:0},scaleType:1},"🯸":{type:5,data:{d:r(127),type:0},scaleType:1},"🯹":{type:5,data:{d:r(123),type:0},scaleType:1},"🯺":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(t,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},e.blockPatternCodepoints=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951])},183(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.createPatternCanvas=n,e.tryDrawCustomGlyph=function(t,e,i,s,a,o,n,L,T,l,d,c,_=0){const Q=r.customGlyphDefinitions[e];if(Q){const e=Array.isArray(Q)?Q:[Q];for(const r of e)h(t,r,i,s,a,o,n,L,T,l,d,c,_);return!0}return!1};const s=i(959),r=i(915),a="undefined"==typeof OffscreenCanvas?void 0:(t,e)=>new OffscreenCanvas(t,e),o=(t,e)=>{const i=document.createElement("canvas");return i.width=t,i.height=e,i};function n(t,e,i=a,s=o){return i?.(t,e)??s(t,e)}function h(t,e,i,r,a,o,h,d,Q,u,p,g,M=0){let y=a,v=o,f=i,C=r;switch(1===e.scaleType&&(y=h,v=d,f=i+(a-h)/2,C=r+(o-d)/2),e.clipPath&&(t.save(),function(t,e,i,s,r,a){t.beginPath();for(const o of e.split(" ")){const e=o[0];if("Z"===e){t.closePath();continue}const n=o.substring(1).split(",");if(!n[0]||!n[1])continue;const h=i+parseFloat(n[0])*r,L=s+parseFloat(n[1])*a;"M"===e?t.moveTo(h,L):"L"===e&&t.lineTo(h,L)}t.clip()}(t,e.clipPath,f,C,y,v)),e.type){case 0:!function(t,e,i,s,r,a){for(let o=0;o7&&parseInt(T.slice(7,9),16)||1;else{if(!T.startsWith("rgba"))throw new Error(`Unexpected fillStyle color format "${T}" when drawing pattern glyph`);[l,c,_,Q]=T.substring(5,T.length-1).split(",").map(t=>parseFloat(t))}for(let t=0;t>1&1,_=1&h;0!==c||0!==_?d.setTransform((new DOMMatrix).translateSelf(-c,-_)):d.setTransform(new DOMMatrix),t.fillStyle=d,t.fillRect(i,r,a,o)}(t,e.data,f,C,y,v,M);break;case 2:!function(t,e,i,s,r,a,o,n,h){let L;t.save(),t.beginPath(),t.rect(i,s,r,a),t.clip(),t.beginPath(),L="function"==typeof e?e(.15,.15/a*r):e;const T={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const e of L.split(" ")){const h=e[0];if("Z"===h){t.closePath(),T.lastCommand=h;continue}const L=c[h];if(!L){n.error(`Could not find drawing instructions for "${h}"`);continue}const l=e.substring(1).split(",");l[0]&&l[1]&&(L(t,_(l,r,a,i,s,!0,o,0,0,!1),T),T.lastCommand=h)}void 0!==h?(t.strokeStyle=t.fillStyle,t.lineWidth=o*h,t.stroke()):t.fill(),t.closePath(),t.restore()}(t,e.data,f,C,y,v,u,p,e.strokeWidth);break;case 3:!function(t,e,i,s,r,a,o,n){const h="string"==typeof e?e:e(0,0);t.beginPath();let L=0,l=0,d=0,c=0,_="";for(const e of h.split(" ")){const o=e[0],n=e.substring(1).split(",");if("Z"===o){t.closePath(),_=o;continue}if("V"===o){const e=s+parseFloat(n[0])*a;t.lineTo(L,e),l=e,d=L,c=l,_=o;continue}if("H"===o){const e=i+parseFloat(n[0])*r;t.lineTo(e,l),L=e,d=L,c=l,_=o;continue}if(!n[0]||!n[1])continue;if("A"===o){const e=parseFloat(n[0])*r,o=parseFloat(n[1])*a,h=parseFloat(n[2])*Math.PI/180,d=parseInt(n[3],10),c=parseInt(n[4],10),_=i+parseFloat(n[5])*r,Q=s+parseFloat(n[6])*a;T(t,L,l,e,o,h,d,c,_,Q),L=_,l=Q;continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});if("M"===o)t.moveTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("L"===o)t.lineTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("Q"===o)t.quadraticCurveTo(h[0],h[1],h[2],h[3]),d=h[0],c=h[1],L=h[2],l=h[3];else if("T"===o){let e,i;"Q"===_||"T"===_?(e=2*L-d,i=2*l-c):(e=L,i=l),t.quadraticCurveTo(e,i,h[0],h[1]),d=e,c=i,L=h[0],l=h[1]}else"C"===o&&(t.bezierCurveTo(h[0],h[1],h[2],h[3],h[4],h[5]),d=h[2],c=h[3],L=h[4],l=h[5]);_=o}void 0!==n?(t.strokeStyle=t.fillStyle,t.lineWidth=o*n,t.stroke()):t.fill()}(t,e.data,f,C,y,v,u,e.strokeWidth);break;case 4:!function(t,e,i,s,r,a,o,n){t.save(),t.fillRect(i,s,r,a),n&&(t.fillStyle=n,t.strokeStyle=n),t.lineWidth=o,t.lineCap="square",t.beginPath();for(const o of e.d.split(" ")){const e=o[0],n=o.substring(1).split(",");if(!n[0]||!n[1]){"Z"===e&&t.closePath();continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});"M"===e?t.moveTo(h[0],h[1]):"L"===e&&t.lineTo(h[0],h[1])}1===e.type?t.stroke():t.fill(),t.restore()}(t,e.data,f,C,y,v,u,g);break;case 5:!function(t,e,i,s,r,a,o,n,h){const L=new Path2D;L.rect(i,s,r,a),t.clip(L),t.beginPath();const T=o/12;t.lineWidth=n*T;const l={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const o of e.d.split(" ")){const L=o[0];if("Z"===L){t.closePath(),l.lastCommand=L;continue}const d=c[L];if(!d){h.error(`Could not find drawing instructions for "${L}"`);continue}const Q=o.substring(1).split(",");Q[0]&&Q[1]&&(d(t,_(Q,r,a,i,s,!1,n,(e.leftPadding??0)*(T/2),(e.rightPadding??0)*(T/2)),l),l.lastCommand=L)}1===e.type?(t.strokeStyle=t.fillStyle,t.stroke()):t.fill(),t.closePath()}(t,e.data,f,C,y,v,Q,u,p);break;case 6:!function(t,e,i,s,r,a){const o=r/8,n=.1*a,h=.8*a/8,T=Math.min(o,h);for(let r=0;r<8;r++)if(e&1<1){const t=Math.sqrt(y);u=(s*=t)*s,p=(r*=t)*r}let v=(u*p-u*M-p*g)/(u*M+p*g);v<0&&(v=0);const f=(o===n?-1:1)*Math.sqrt(v),C=f*(s*Q/r),m=f*(-r*_/s),w=T*C-l*m+(e+h)/2,x=l*C+T*m+(i+L)/2,b=(_-C)/s,E=(Q-m)/r,R=(-_-C)/s,k=(-Q-m)/r,A=Math.atan2(E,b);let Z=Math.atan2(k,R)-A;0===n&&Z>0?Z-=2*Math.PI:1===n&&Z<0&&(Z+=2*Math.PI);const D=A+Z;t.ellipse(w,x,s,r,a,A,D,0===n)}const l=new Map;function d(t,e,i=0){return Math.max(Math.min(t,e),i)}const c={C:(t,e,i)=>{t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),i.lastControlX=e[2],i.lastControlY=e[3],i.currentX=e[4],i.currentY=e[5]},L:(t,e,i)=>{t.lineTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},M:(t,e,i)=>{t.moveTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},Q:(t,e,i)=>{t.quadraticCurveTo(e[0],e[1],e[2],e[3]),i.lastControlX=e[0],i.lastControlY=e[1],i.currentX=e[2],i.currentY=e[3]},T:(t,e,i)=>{let s,r;"Q"===i.lastCommand||"T"===i.lastCommand?(s=2*i.currentX-i.lastControlX,r=2*i.currentY-i.lastControlY):(s=i.currentX,r=i.currentY),t.quadraticCurveTo(s,r,e[0],e[1]),i.lastControlX=s,i.lastControlY=r,i.currentX=e[0],i.currentY=e[1]}};function _(t,e,i,s,r,a,o,n=0,h=0,L=!0){const T=t.map(t=>parseFloat(t)||parseInt(t));if(T.length<2)throw new Error("Too few arguments for instruction");for(let t=0;t{this._refreshCharAtlas(t,e),this.reset(t)})),this._register((0,r.toDisposable)(()=>{this._canvas.remove()}))}_initCanvas(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()}handleBlur(t){}handleFocus(t){}handleCursorMove(t){}handleGridChanged(t,e,i){}handleSelectionChanged(t,e,i,s=!1){}_setTransparency(t,e){if(e===this._alpha)return;const i=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,i),this._refreshCharAtlas(t,this._themeService.colors),this.handleGridChanged(t,0,t.rows-1)}_refreshCharAtlas(t,e){this._deviceCharWidth<=0&&this._deviceCharHeight<=0||(this._charAtlas=(0,s.acquireTextureAtlas)(t,this._optionsService.rawOptions,e,this._deviceCellWidth,this._deviceCellHeight,this._deviceCharWidth,this._deviceCharHeight,this._coreBrowserService.dpr,2048),this._charAtlas.warmUp())}resize(t,e){this._deviceCellWidth=e.device.cell.width,this._deviceCellHeight=e.device.cell.height,this._deviceCharWidth=e.device.char.width,this._deviceCharHeight=e.device.char.height,this._deviceCharLeft=e.device.char.left,this._deviceCharTop=e.device.char.top,this._canvas.width=e.device.canvas.width,this._canvas.height=e.device.canvas.height,this._canvas.style.width=`${e.css.canvas.width}px`,this._canvas.style.height=`${e.css.canvas.height}px`,this._alpha||this._clearAll(),this._refreshCharAtlas(t,this._themeService.colors)}_fillBottomLineAtCells(t,e,i=1){this._ctx.fillRect(t*this._deviceCellWidth,(e+1)*this._deviceCellHeight-this._coreBrowserService.dpr-1,i*this._deviceCellWidth,this._coreBrowserService.dpr)}_clearAll(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))}_clearCells(t,e,i,s){this._alpha?this._ctx.clearRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight))}_fillCharTrueColor(t,e,i,s){this._ctx.font=this._getFont(t,!1,!1),this._ctx.textBaseline=o.TEXT_BASELINE,this._clipCell(i,s,e.getWidth()),this._ctx.fillText(e.getChars(),i*this._deviceCellWidth+this._deviceCharLeft,s*this._deviceCellHeight+this._deviceCharTop+this._deviceCharHeight)}_clipCell(t,e,i){this._ctx.beginPath(),this._ctx.rect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,this._deviceCellHeight),this._ctx.clip()}_getFont(t,e,i){return`${i?"italic":""} ${e?t.options.fontWeightBold:t.options.fontWeight} ${t.options.fontSize*this._coreBrowserService.dpr}px ${t.options.fontFamily}`}}e.BaseRenderLayer=n},306(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.LinkRenderLayer=void 0;const s=i(657),r=i(814),a=i(133);class o extends a.BaseRenderLayer{constructor(t,e,i,s,r,a,o){super(i,t,"link",e,!0,r,a,o),this._register(s.onShowLinkUnderline(t=>this._handleShowLinkUnderline(t))),this._register(s.onHideLinkUnderline(t=>this._handleHideLinkUnderline(t)))}resize(t,e){super.resize(t,e),this._state=void 0}reset(t){this._clearCurrentLink()}_clearCurrentLink(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);const t=this._state.y2-this._state.y1-1;t>0&&this._clearCells(0,this._state.y1+1,this._state.cols,t),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}}_handleShowLinkUnderline(t){if(t.fg===r.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._themeService.colors.background.css:void 0!==t.fg&&(0,s.is256Color)(t.fg)?this._ctx.fillStyle=this._themeService.colors.ansi[t.fg].css:this._ctx.fillStyle=this._themeService.colors.foreground.css,t.y1===t.y2)this._fillBottomLineAtCells(t.x1,t.y1,t.x2-t.x1);else{this._fillBottomLineAtCells(t.x1,t.y1,t.cols-t.x1);for(let e=t.y1+1;e{var t=s;Object.defineProperty(t,"__esModule",{value:!0}),t.WebglAddon=void 0;const e=i(426),r=i(95),a=i(399),o=i(414);class n extends e.Disposable{constructor(t){if(r.isSafari&&(0,r.getSafariVersion)()<16){const t={antialias:!1,depth:!1,preserveDrawingBuffer:!0};if(!document.createElement("canvas").getContext("webgl2",t))throw new Error("WebGL2 is only supported on Safari 16 and above")}super(),this._onChangeTextureAtlas=this._register(new o.Emitter),this.onChangeTextureAtlas=this._onChangeTextureAtlas.event,this._onAddTextureAtlasCanvas=this._register(new o.Emitter),this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=this._register(new o.Emitter),this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._onContextLoss=this._register(new o.Emitter),this.onContextLoss=this._onContextLoss.event,this._customGlyphs=t?.customGlyphs??!0,this._preserveDrawingBuffer=t?.preserveDrawingBuffer}activate(t){const i=t._core;if(!t.element)return void this._register(i.onWillOpen(()=>this.activate(t)));this._terminal=t;const s=i.coreService,r=i.optionsService,n=i,h=n._renderService,L=n._characterJoinerService,T=n._charSizeService,l=n._coreBrowserService,d=n._decorationService,c=n._logService,_=n._themeService;this._renderer=this._register(new a.WebglRenderer(t,L,T,l,s,d,c,r,_,this._customGlyphs,this._preserveDrawingBuffer)),this._register(o.EventUtils.forward(this._renderer.onContextLoss,this._onContextLoss)),this._register(o.EventUtils.forward(this._renderer.onChangeTextureAtlas,this._onChangeTextureAtlas)),this._register(o.EventUtils.forward(this._renderer.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas)),this._register(o.EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas)),h.setRenderer(this._renderer),this._register((0,e.toDisposable)(()=>{if(this._terminal._core._store._isDisposed)return;const e=this._terminal._core._renderService;e.setRenderer(this._terminal._core._createRenderer()),e.handleResize(t.cols,t.rows)}))}get textureAtlas(){return this._renderer?.textureAtlas}clearTextureAtlas(){this._renderer?.clearTextureAtlas()}}t.WebglAddon=n})(),s})()); +-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.WebglAddon=e():t.WebglAddon=e()}(globalThis,()=>(()=>{"use strict";var t={105(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.WindowIntervalTimer=e.eventType=void 0,e.getWindow=r,e.addDisposableListener=o,e.addStandardDisposableListener=function(t,e,i,s){return o(t,e,i,s)},e.getDomNodePagePosition=function(t){const e=t.getBoundingClientRect(),i=r(t);return{left:e.left+i.scrollX,top:e.top+i.scrollY,width:e.width,height:e.height}},e.scheduleAtNextAnimationFrame=function(t,e,i=0){const s=L(t),r=new n(e,i);return s.next.push(r),s.animFrameRequested||(s.animFrameRequested=!0,t.requestAnimationFrame(()=>function(t){const e=L(t);for(e.animFrameRequested=!1,e.current=e.next,e.next=[],e.inAnimationFrameRunner=!0;e.current.length>0;)e.current.sort(n.sort),e.current.shift().execute();e.inAnimationFrameRunner=!1}(t))),r};const s=i(578);function r(t){const e=t;if(e?.ownerDocument?.defaultView)return e.ownerDocument.defaultView;const i=t;return i?.view?i.view:window}class a{constructor(t,e,i,s){this._node=t,this._type=e,this._handler=i,this._options=s,t.addEventListener(e,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function o(t,e,i,s){return new a(t,e,i,s)}e.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class n{constructor(t,e){this._runner=t,this.priority=e,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(t){console.error(t)}}static sort(t,e){return e.priority-t.priority}}const h=new Map;function L(t){let e=h.get(t);return e||(e={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(t,e)),e}class T extends s.IntervalTimer{constructor(t){super(),this._defaultTarget=t?r(t):void 0}cancelAndSet(t,e,i){super.cancelAndSet(t,e,i??this._defaultTarget??window)}}e.WindowIntervalTimer=T},814(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.INVERTED_DEFAULT_COLOR=void 0,e.INVERTED_DEFAULT_COLOR=257},959(t,e){function i(t){return 57508<=t&&t<=57558}function s(t){return t>=128512&&t<=128591||t>=127744&&t<=128511||t>=128640&&t<=128767||t>=9728&&t<=9983||t>=9984&&t<=10175||t>=65024&&t<=65039||t>=129280&&t<=129535||t>=127462&&t<=127487}Object.defineProperty(e,"__esModule",{value:!0}),e.throwIfFalsy=function(t){if(!t)throw new Error("value must not be falsy");return t},e.isPowerlineGlyph=i,e.isRestrictedPowerlineGlyph=function(t){return 57520<=t&&t<=57527},e.isEmoji=s,e.allowRescaling=function(t,e,r,a){return 1===e&&r>Math.ceil(1.5*a)&&void 0!==t&&t>255&&!s(t)&&!i(t)&&!function(t){return 57344<=t&&t<=63743}(t)},e.treatGlyphAsBackgroundColor=function(t){return i(t)||function(t){return 9472<=t&&t<=9631}(t)},e.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},e.computeNextVariantOffset=function(t,e,i=0){return(t-(2*Math.round(e)-i))%(2*Math.round(e))}},948(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(t,e,i,s=!1){if(this.selectionStart=e,this.selectionEnd=i,!e||!i||e[0]===i[0]&&e[1]===i[1])return void this.clear();const r=t.buffers.active.ydisp,a=e[1]-r,o=i[1]-r,n=Math.max(a,0),h=Math.min(o,t.rows-1);n>=t.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=n,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=i[0])}isCellSelected(t,e,i){return!!this.hasSelection&&(i-=t.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&i>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&e=this.startCol)}}},536(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextBlinkStateManager=void 0;const s=i(426);class r extends s.Disposable{constructor(t,e,i){super(),this._renderCallback=t,this._coreBrowserService=e,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",t=>{this.setIntervalDuration(t)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const t=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(t||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}e.TextBlinkStateManager=r},578(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.IntervalTimer=e.MicrotaskTimer=e.TimeoutTimer=void 0,e.timeout=function(t){return new Promise(e=>setTimeout(e,t))},e.disposableTimeout=function(t,e=0,i){const r=setTimeout(()=>{t(),i&&a.dispose()},e),a=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(a),a};const s=i(426);e.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(t,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,t()},e)}setIfNotSet(t,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,t()},e))}},e.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(t){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,t())}))}},e.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(t,e,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{t()},e);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},993(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.rgba=e.rgb=e.css=e.color=e.channels=e.NULL_COLOR=void 0,e.toPaddedHex=l,e.contrastRatio=d;let i=0,s=0,r=0,a=0;var o,n,h,L,T;function l(t){const e=t.toString(16);return e.length<2?"0"+e:e}function d(t,e){return t>>0},t.toColor=function(e,i,s,r){return{css:t.toCss(e,i,s,r),rgba:t.toRgba(e,i,s,r)}}}(o||(e.channels=o={})),function(t){function e(t,e){return a=Math.round(255*e),[i,s,r]=T.toChannels(t.rgba),{css:o.toCss(i,s,r,a),rgba:o.toRgba(i,s,r,a)}}t.blend=function(t,e){if(a=(255&e.rgba)/255,1===a)return{css:e.css,rgba:e.rgba};const n=e.rgba>>24&255,h=e.rgba>>16&255,L=e.rgba>>8&255,T=t.rgba>>24&255,l=t.rgba>>16&255,d=t.rgba>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),{css:o.toCss(i,s,r),rgba:o.toRgba(i,s,r)}},t.isOpaque=function(t){return!(255&~t.rgba)},t.ensureContrastRatio=function(t,e,i){const s=T.ensureContrastRatio(t.rgba,e.rgba,i);if(s)return o.toColor(s>>24&255,s>>16&255,s>>8&255)},t.opaque=function(t){const e=(255|t.rgba)>>>0;return[i,s,r]=T.toChannels(e),{css:o.toCss(i,s,r),rgba:e}},t.opacity=e,t.multiplyOpacity=function(t,i){return a=255&t.rgba,e(t,a*i/255)},t.toColorRGB=function(t){return[t.rgba>>24&255,t.rgba>>16&255,t.rgba>>8&255]}}(n||(e.color=n={})),function(t){let e,n;try{const t=document.createElement("canvas");t.width=1,t.height=1;const i=t.getContext("2d",{willReadFrequently:!0});i&&(e=i,e.globalCompositeOperation="copy",n=e.createLinearGradient(0,0,1,1))}catch{}t.toColor=function(t){if(t.match(/#[\da-f]{3,8}/i))switch(t.length){case 4:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),o.toColor(i,s,r);case 5:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),a=parseInt(t.slice(4,5).repeat(2),16),o.toColor(i,s,r,a);case 7:return{css:t,rgba:(parseInt(t.slice(1),16)<<8|255)>>>0};case 9:return{css:t,rgba:parseInt(t.slice(1),16)>>>0}}const h=t.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),a=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),o.toColor(i,s,r,a);if("transparent"===t)return{css:"transparent",rgba:0};if(!e||!n)throw new Error("css.toColor: Unsupported css format");if(e.fillStyle=n,e.fillStyle=t,"string"!=typeof e.fillStyle)throw new Error("css.toColor: Unsupported css format");if(e.fillRect(0,0,1,1),[i,s,r,a]=e.getImageData(0,0,1,1).data,255!==a)throw new Error("css.toColor: Unsupported css format");return{rgba:o.toRgba(i,s,r,a),css:t}}}(h||(e.css=h={})),function(t){function e(t,e,i){const s=t/255,r=e/255,a=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))}t.relativeLuminance=function(t){return e(t>>16&255,t>>8&255,255&t)},t.relativeLuminance2=e}(L||(e.rgb=L={})),function(t){function e(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T0||n>0||h>0);)o-=Math.max(0,Math.ceil(.1*o)),n-=Math.max(0,Math.ceil(.1*n)),h-=Math.max(0,Math.ceil(.1*h)),T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));return(o<<24|n<<16|h<<8|255)>>>0}function n(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T>>0}t.blend=function(t,e){if(a=(255&e)/255,1===a)return e;const n=e>>24&255,h=e>>16&255,L=e>>8&255,T=t>>24&255,l=t>>16&255,d=t>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),o.toRgba(i,s,r)},t.ensureContrastRatio=function(t,i,s){const r=L.relativeLuminance(t>>8),a=L.relativeLuminance(i>>8);if(d(r,a)>8));if(od(r,L.relativeLuminance(e>>8))?a:e}return a}const o=n(t,i,s),h=d(r,L.relativeLuminance(o>>8));if(hd(r,L.relativeLuminance(a>>8))?o:a}return o}},t.reduceLuminance=e,t.increaseLuminance=n,t.toChannels=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]}}(T||(e.rgba=T={}))},414(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.EventUtils=e.Emitter=void 0;const s=i(426);var r;e.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(t,e,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:t,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);const a=(0,s.toDisposable)(()=>{const t=this._listeners.indexOf(r);-1!==t&&(this._listeners=this._listeners.slice(),this._listeners.splice(t,1))});return i&&(Array.isArray(i)?i.push(a):i.add(a)),a}),this._event}fire(t){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,t);const e=this._listeners;for(let i=0,s=e.length;ie.fire(t))},t.map=function(t,e){return(i,s,r)=>t(t=>i.call(s,e(t)),void 0,r)},t.any=function(...t){return(e,i,r)=>{const a=new s.DisposableStore;for(const s of t)a.add(s(t=>e.call(i,t)));return r&&(Array.isArray(r)?r.push(a):r.add(a)),a}},t.runAndSubscribe=function(t,e,i){return e(i),t(t=>e(t))}}(r||(e.EventUtils=r={}))},426(t,e){function i(t){return{dispose:t}}function s(t){if(!t)return t;if(Array.isArray(t)){for(const e of t)e.dispose();return[]}return t.dispose(),t}Object.defineProperty(e,"__esModule",{value:!0}),e.MutableDisposable=e.Disposable=e.DisposableStore=void 0,e.toDisposable=i,e.dispose=s,e.combinedDisposable=function(...t){return i(()=>s(t))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(t){return this._isDisposed?t.dispose():this._disposables.add(t),t}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const t of this._disposables)t.dispose();this._disposables.clear()}}clear(){for(const t of this._disposables)t.dispose();this._disposables.clear()}}e.DisposableStore=r;class a{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(t){return this._store.add(t)}}e.Disposable=a,a.None=Object.freeze({dispose(){}}),e.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(t){this._isDisposed||t===this._value||(this._value?.dispose(),this._value=t)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},836(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.FourKeyMap=e.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(t,e,i){this._data[t]||(this._data[t]={}),this._data[t][e]=i}get(t,e){return this._data[t]?this._data[t][e]:void 0}clear(){this._data={}}}e.TwoKeyMap=i,e.FourKeyMap=class{constructor(){this._data=new i}set(t,e,s,r,a){this._data.get(t,e)||this._data.set(t,e,new i),this._data.get(t,e).set(s,r,a)}get(t,e,i,s){return this._data.get(t,e)?.get(i,s)}clear(){this._data.clear()}}},95(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.isChromeOS=e.isLinux=e.isWindows=e.isMac=e.isSafari=e.isLegacyEdge=e.isChrome=e.isFirefox=e.isNode=void 0,e.getZoomFactor=function(t){return 1},e.getSafariVersion=function(){if(!e.isSafari)return 0;const t=i.match(/Version\/(\d+)/);return null===t||t.length<2?0:parseInt(t[1],10)},e.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=e.isNode?"node":navigator.userAgent,s=e.isNode?"node":navigator.platform;e.isFirefox=i.includes("Firefox"),e.isChrome=i.includes("Chrome"),e.isLegacyEdge=i.includes("Edge"),e.isSafari=/^((?!chrome|android).)*safari/i.test(i),e.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),e.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),e.isLinux=s.indexOf("Linux")>=0,e.isChromeOS=/\bCrOS\b/.test(i)},930(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.DebouncedIdleTask=e.IdleTaskQueue=e.PriorityTaskQueue=void 0;class i{constructor(t){this._tasks=[],this._i=0,this._logService=t}enqueue(t){this._tasks.push(t),this._start()}flush(){for(;this._ii)return r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(t){return setTimeout(()=>t(this._createDeadline(16)))}_cancelCallback(t){clearTimeout(t)}_createDeadline(t){const e=performance.now()+t;return{timeRemaining:()=>Math.max(0,e-performance.now())}}}e.PriorityTaskQueue=s,e.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(t){return requestIdleCallback(t)}_cancelCallback(t){cancelIdleCallback(t)}}:s,e.DebouncedIdleTask=class{constructor(t){this._queue=new e.IdleTaskQueue(t)}set(t){this._queue.clear(),this._queue.enqueue(t)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},917(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedAttrs=e.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(t){return[t>>>16&255,t>>>8&255,255&t]}static fromColorRGB(t){return(255&t[0])<<16|(255&t[1])<<8|255&t[2]}clone(){const t=new i;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}e.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(t){this._ext=t}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(t){this._ext&=-469762049,this._ext|=t<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(t){this._ext&=-67108864,this._ext|=67108863&t}get urlId(){return this._urlId}set urlId(t){this._urlId=t}get underlineVariantOffset(){const t=(3758096384&this._ext)>>29;return t<0?4294967288^t:t}set underlineVariantOffset(t){this._ext&=536870911,this._ext|=t<<29&3758096384}constructor(t=0,e=0){this._ext=0,this._urlId=0,this._ext=t,this._urlId=e}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&void 0===this.payload}}e.ExtendedAttrs=s},721(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellData=void 0;const s=i(348),r=i(564),a=i(917);class o extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(t){const e=new o;return e.setFromCharData(t),e}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(t){this.fg=t[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let e=!1;if(t[r.CHAR_DATA_CHAR_INDEX].length>2)e=!0;else if(2===t[r.CHAR_DATA_CHAR_INDEX].length){const i=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|t[r.CHAR_DATA_WIDTH_INDEX]<<22:e=!0}else e=!0}else this.content=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[r.CHAR_DATA_WIDTH_INDEX]<<22;e&&(this.combinedData=t[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|t[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor())return!1;if(this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor())return!1;if(this.isInverse()!==t.isInverse())return!1;if(this.isBold()!==t.isBold())return!1;if(this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;const e=this.isUnderlineColorDefault(),i=t.isUnderlineColorDefault();if(!e||!i){if(e!==i)return!1;if(this.getUnderlineColor()!==t.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==t.getUnderlineColorMode())return!1}}return this.isOverline()===t.isOverline()&&this.isBlink()===t.isBlink()&&this.isInvisible()===t.isInvisible()&&this.isItalic()===t.isItalic()&&this.isDim()===t.isDim()&&this.isStrikethrough()===t.isStrikethrough()}}e.CellData=o},564(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.WHITESPACE_CELL_CODE=e.WHITESPACE_CELL_WIDTH=e.WHITESPACE_CELL_CHAR=e.NULL_CELL_CODE=e.NULL_CELL_WIDTH=e.NULL_CELL_CHAR=e.CHAR_DATA_CODE_INDEX=e.CHAR_DATA_WIDTH_INDEX=e.CHAR_DATA_CHAR_INDEX=e.CHAR_DATA_ATTR_INDEX=e.DEFAULT_EXT=e.DEFAULT_ATTR=e.DEFAULT_COLOR=void 0,e.DEFAULT_COLOR=0,e.DEFAULT_ATTR=e.DEFAULT_COLOR<<9|256,e.DEFAULT_EXT=0,e.CHAR_DATA_ATTR_INDEX=0,e.CHAR_DATA_CHAR_INDEX=1,e.CHAR_DATA_WIDTH_INDEX=2,e.CHAR_DATA_CODE_INDEX=3,e.NULL_CELL_CHAR="",e.NULL_CELL_WIDTH=1,e.NULL_CELL_CODE=0,e.WHITESPACE_CELL_CHAR=" ",e.WHITESPACE_CELL_WIDTH=1,e.WHITESPACE_CELL_CODE=32},348(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Utf8ToUtf32=e.StringToUtf32=void 0,e.stringFromCodePoint=function(t){return t>65535?(t-=65536,String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):String.fromCharCode(t)},e.utf32ToString=function(t,e=0,i=t.length){let s="";for(let r=e;r65535?(e-=65536,s+=String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):s+=String.fromCharCode(e)}return s},e.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(t,e){const i=t.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=t.charCodeAt(r++);56320<=i&&i<=57343?e[s++]=1024*(this._interim-55296)+i-56320+65536:(e[s++]=this._interim,e[s++]=i),this._interim=0}for(let a=r;a=i)return this._interim=r,s;const o=t.charCodeAt(a);56320<=o&&o<=57343?e[s++]=1024*(r-55296)+o-56320+65536:(e[s++]=r,e[s++]=o);continue}65279!==r&&(e[s++]=r)}return s}},e.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(t,e){const i=t.length;if(!i)return 0;let s,r,a,o,n,h=0,L=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let a,o=0;for(;(a=this.interim[++o])&&o<4;)r<<=6,r|=63&a;const n=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,T=n-o;for(;L=i)return 0;if(a=t[L++],128!=(192&a)){L--,s=!0;break}this.interim[o++]=a,r<<=6,r|=63&a}s||(2===n?r<128?L--:e[h++]=r:3===n?r<2048||r>=55296&&r<=57343||65279===r||(e[h++]=r):r<65536||r>1114111||(e[h++]=r)),this.interim.fill(0)}const T=i-4;let l=L;for(;l=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(n=(31&s)<<6|63&r,n<128){l--;continue}e[h++]=n}else if(224==(240&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(n=(15&s)<<12|(63&r)<<6|63&a,n<2048||n>=55296&&n<=57343||65279===n)continue;e[h++]=n}else if(240==(248&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=a,h;if(o=t[l++],128!=(192&o)){l--;continue}if(n=(7&s)<<18|(63&r)<<12|(63&a)<<6|63&o,n<65536||n>1114111)continue;e[h++]=n}}return h}}},864(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellColorResolver=void 0;const s=i(564),r=i(993),a=i(959),o=i(915);let n,h=0,L=0,T=!1,l=!1,d=!1,c=0;e.CellColorResolver=class{constructor(t,e,i,s,r,a){this._terminal=t,this._optionService=e,this._selectionRenderModel=i,this._decorationService=s,this._coreBrowserService=r,this._themeService=a,this.result={fg:0,bg:0,ext:0}}resolve(t,e,i,_,Q){this.result.bg=t.bg,this.result.fg=t.fg,this.result.ext=268435456&t.bg?t.extended.ext:0,L=0,h=0,l=!1,T=!1,d=!1,n=this._themeService.colors,c=0;const u=t.getCode();if(u!==s.NULL_CELL_CODE&&4===t.extended.underlineStyle){const t=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));c=e*_%(2*Math.round(t))}if(0===c&&o.blockPatternCodepoints.has(u)&&(c=e*_%2*2+i*Q%2),this._decorationService.forEachDecorationAtCell(e,i,"bottom",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),d=this._selectionRenderModel.isCellSelected(this._terminal,e,i),d){if(67108864&this.result.fg||50331648&this.result.bg){if(67108864&this.result.fg)switch(50331648&this.result.fg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:L=(16777215&this.result.fg)<<8|255;break;default:L=this._themeService.colors.foreground.rgba}else switch(50331648&this.result.bg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:L=(16777215&this.result.bg)<<8|255}L=r.rgba.blend(L,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}else L=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(l=!0,n.selectionForeground&&(h=n.selectionForeground.rgba>>8&16777215,T=!0),(0,a.treatGlyphAsBackgroundColor)(t.getCode())){if(67108864&this.result.fg&&!(50331648&this.result.bg))h=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(67108864&this.result.fg)switch(50331648&this.result.bg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:h=(16777215&this.result.bg)<<8|255}else switch(50331648&this.result.fg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:h=(16777215&this.result.fg)<<8|255;break;default:h=this._themeService.colors.foreground.rgba}h=r.rgba.blend(h,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}T=!0}}this._decorationService.forEachDecorationAtCell(e,i,"top",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),l&&(L=d?-16777216&t.bg&-134217729|L|50331648:-16777216&t.bg|L|50331648),T&&(h=-16777216&t.fg&-67108865|h|50331648),67108864&this.result.fg&&(l&&!T&&(h=50331648&this.result.bg?-134217728&this.result.fg|67108863&this.result.bg:-134217728&this.result.fg|16777215&n.background.rgba>>8|50331648,T=!0),!l&&T&&(L=50331648&this.result.fg?-67108864&this.result.bg|67108863&this.result.fg:-67108864&this.result.bg|16777215&n.foreground.rgba>>8|50331648,l=!0)),n=void 0,this.result.bg=l?L:this.result.bg,this.result.fg=T?h:this.result.fg,this.result.ext&=536870911,this.result.ext|=c<<29&3758096384}}},670(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.acquireTextureAtlas=function(t,e,i,o,n,h,L,T,l,d=!0){const c=(0,r.generateConfig)(o,n,h,L,e,i,T,l,d);for(let e=0;e=0){if((0,r.configEquals)(i.config,c))return i.atlas;1===i.ownedBy.length?(i.atlas.dispose(),a.splice(e,1)):i.ownedBy.splice(s,1);break}}for(let e=0;e{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(t=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0)return void this._restartInterval(t)}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);return this._animationTimeRestarted=void 0,void this._restartInterval(t)}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},t)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}}},697(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.observeDevicePixelDimensions=function(t,e,i){let r=new e.ResizeObserver(e=>{const s=e.find(e=>e.target===t);if(!s)return;if(!("devicePixelContentBoxSize"in s))return r?.disconnect(),void(r=void 0);const a=s.devicePixelContentBoxSize[0].inlineSize,o=s.devicePixelContentBoxSize[0].blockSize;a>0&&o>0&&i(a,o)});try{r.observe(t,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return(0,s.toDisposable)(()=>r?.disconnect())};const s=i(426)},28(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GlyphRenderer=void 0;const s=i(115),r=i(564),a=i(426),o=i(719),n=i(959);let h,L=0,T=0,l=0;class d extends a.Disposable{constructor(t,e,i,r,h){super(),this._terminal=t,this._gl=e,this._dimensions=i,this._optionsService=r,this._logService=h,this._lastSeenPageLayoutVersion=-1,this._pageOverflowWarned=!1,this._activeBuffer=0,this._vertices={count:0,attributes:new Float32Array(0),attributesBuffers:[new Float32Array(0),new Float32Array(0)]};const L=this._gl;void 0===s.TextureAtlas.maxAtlasPages&&(s.TextureAtlas.maxAtlasPages=Math.min(32,(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_IMAGE_UNITS))),s.TextureAtlas.maxTextureSize=(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_SIZE))),this._program=(0,n.throwIfFalsy)((0,o.createProgram)(L,"#version 300 es\nlayout (location = 0) in vec2 a_unitquad;\nlayout (location = 1) in vec2 a_cellpos;\nlayout (location = 2) in vec2 a_offset;\nlayout (location = 3) in vec2 a_size;\nlayout (location = 4) in float a_texpage;\nlayout (location = 5) in vec2 a_texcoord;\nlayout (location = 6) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}",function(t){let e="";for(let i=1;iL.deleteProgram(this._program))),this._projectionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_projection")),this._resolutionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_resolution")),this._textureLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_texture"));const T=this._vertexArrayObject=L.createVertexArray();this._register((0,a.toDisposable)(()=>L.deleteVertexArray(T))),L.bindVertexArray(T);const l=new Float32Array([0,0,1,0,0,1,1,1]),d=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(d))),L.bindBuffer(L.ARRAY_BUFFER,d),L.bufferData(L.ARRAY_BUFFER,l,L.STATIC_DRAW),L.enableVertexAttribArray(0),L.vertexAttribPointer(0,2,this._gl.FLOAT,!1,0,0);const c=new Uint8Array([0,1,2,3]),_=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(_))),L.bindBuffer(L.ELEMENT_ARRAY_BUFFER,_),L.bufferData(L.ELEMENT_ARRAY_BUFFER,c,L.STATIC_DRAW),this._attributesBuffer=(0,n.throwIfFalsy)(L.createBuffer()),this._register((0,a.toDisposable)(()=>L.deleteBuffer(this._attributesBuffer))),L.bindBuffer(L.ARRAY_BUFFER,this._attributesBuffer),L.enableVertexAttribArray(2),L.vertexAttribPointer(2,2,L.FLOAT,!1,44,0),L.vertexAttribDivisor(2,1),L.enableVertexAttribArray(3),L.vertexAttribPointer(3,2,L.FLOAT,!1,44,2*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(3,1),L.enableVertexAttribArray(4),L.vertexAttribPointer(4,1,L.FLOAT,!1,44,4*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(4,1),L.enableVertexAttribArray(5),L.vertexAttribPointer(5,2,L.FLOAT,!1,44,5*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(5,1),L.enableVertexAttribArray(6),L.vertexAttribPointer(6,2,L.FLOAT,!1,44,7*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(6,1),L.enableVertexAttribArray(1),L.vertexAttribPointer(1,2,L.FLOAT,!1,44,9*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(1,1),L.useProgram(this._program);const Q=new Int32Array(s.TextureAtlas.maxAtlasPages);for(let t=0;tL.deleteTexture(e.texture))),L.activeTexture(L.TEXTURE0+t),L.bindTexture(L.TEXTURE_2D,e.texture),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_S,L.CLAMP_TO_EDGE),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_T,L.CLAMP_TO_EDGE),L.texImage2D(L.TEXTURE_2D,0,L.RGBA,1,1,0,L.RGBA,L.UNSIGNED_BYTE,new Uint8Array([255,0,0,255])),this._atlasTextures[t]=e}L.enable(L.BLEND),L.blendFunc(L.SRC_ALPHA,L.ONE_MINUS_SRC_ALPHA),this.handleResize()}beginFrame(){return!this._atlas||this._atlas.pageLayoutVersion!==this._lastSeenPageLayoutVersion&&(this._lastSeenPageLayoutVersion=this._atlas.pageLayoutVersion,!0)}updateCell(t,e,i,s,r,a,o,n,h){this._updateCell(this._vertices.attributes,t,e,i,s,r,a,o,n,h)}_updateCell(t,e,i,s,a,o,d,c,_,Q){L=11*(i*this._terminal.cols+e),s!==r.NULL_CELL_CODE&&void 0!==s?this._atlas&&(h=c&&c.length>1?this._atlas.getRasterizedGlyphCombinedChar(c,a,o,d,!1,this._terminal.element):this._atlas.getRasterizedGlyph(s,a,o,d,!1,this._terminal.element),T=Math.floor((this._dimensions.device.cell.width-this._dimensions.device.char.width)/2),a!==Q&&h.offset.x>T?(l=h.offset.x-T,t[L]=-(h.offset.x-l)+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=(h.size.x-l)/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x+l/this._atlas.pages[h.texturePage].canvas.width,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x-l/this._atlas.pages[h.texturePage].canvas.width,t[L+8]=h.sizeClipSpace.y):(t[L]=-h.offset.x+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=h.size.x/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x,t[L+8]=h.sizeClipSpace.y),this._optionsService.rawOptions.rescaleOverlappingGlyphs&&(0,n.allowRescaling)(s,_,h.size.x,this._dimensions.device.cell.width)&&(t[L+2]=(this._dimensions.device.cell.width-1)/this._dimensions.device.canvas.width)):t.fill(0,L,L+11-1-2)}clear(){const t=this._terminal,e=t.cols*t.rows*11;this._vertices.count!==e?this._vertices.attributes=new Float32Array(e):this._vertices.attributes.fill(0);let i=0;for(;ithis._atlasTextures.length&&!this._pageOverflowWarned&&(this._pageOverflowWarned=!0,this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`));for(let t=0;tT.deleteProgram(this._program))),this._projectionLocation=(0,a.throwIfFalsy)(T.getUniformLocation(this._program,"u_projection"));const l=this._vertexArrayObject=T.createVertexArray();this._register((0,s.toDisposable)(()=>T.deleteVertexArray(l))),T.bindVertexArray(l);const d=new Float32Array([0,0,1,0,0,1,1,1]),c=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(c))),T.bindBuffer(T.ARRAY_BUFFER,c),T.bufferData(T.ARRAY_BUFFER,d,T.STATIC_DRAW),T.enableVertexAttribArray(3),T.vertexAttribPointer(3,2,this._gl.FLOAT,!1,0,0);const _=new Uint8Array([0,1,2,3]),Q=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(Q))),T.bindBuffer(T.ELEMENT_ARRAY_BUFFER,Q),T.bufferData(T.ELEMENT_ARRAY_BUFFER,_,T.STATIC_DRAW),this._attributesBuffer=(0,a.throwIfFalsy)(T.createBuffer()),this._register((0,s.toDisposable)(()=>T.deleteBuffer(this._attributesBuffer))),T.bindBuffer(T.ARRAY_BUFFER,this._attributesBuffer),T.enableVertexAttribArray(0),T.vertexAttribPointer(0,2,T.FLOAT,!1,o,0),T.vertexAttribDivisor(0,1),T.enableVertexAttribArray(1),T.vertexAttribPointer(1,2,T.FLOAT,!1,o,2*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(1,1),T.enableVertexAttribArray(2),T.vertexAttribPointer(2,4,T.FLOAT,!1,o,4*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(2,1),this._updateCachedColors(h.colors),this._register(this._themeService.onChangeColors(t=>{this._updateCachedColors(t),this._updateViewportRectangle()}))}renderBackgrounds(){this._renderVertices(this._vertices)}renderCursor(){this._renderVertices(this._verticesCursor)}_renderVertices(t){const e=this._gl;e.useProgram(this._program),e.bindVertexArray(this._vertexArrayObject),e.uniformMatrix4fv(this._projectionLocation,!1,r.PROJECTION_MATRIX),e.bindBuffer(e.ARRAY_BUFFER,this._attributesBuffer),e.bufferData(e.ARRAY_BUFFER,t.attributes,e.DYNAMIC_DRAW),e.drawElementsInstanced(this._gl.TRIANGLE_STRIP,4,e.UNSIGNED_BYTE,0,t.count)}handleResize(){this._updateViewportRectangle()}setDimensions(t){this._dimensions=t}_updateCachedColors(t){this._bgFloat=this._colorToFloat32Array(t.background),this._cursorFloat=this._colorToFloat32Array(t.cursor)}_updateViewportRectangle(){this._addRectangleFloat(this._vertices.attributes,0,0,0,this._terminal.cols*this._dimensions.device.cell.width,this._terminal.rows*this._dimensions.device.cell.height,this._bgFloat)}updateBackgrounds(t){const e=this._terminal,i=this._vertices;let s,r,a,o,n,h,L,T,l,d,c,_=1;for(s=0;s>24&255)/255,d=(h>>16&255)/255,c=(h>>8&255)/255,_=1,this._addRectangle(t.attributes,e,L,T,(o-a)*this._dimensions.device.cell.width,this._dimensions.device.cell.height,l,d,c,_)}_addRectangle(t,e,i,s,r,a,o,n,h,L){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o,t[e+5]=n,t[e+6]=h,t[e+7]=L}_addRectangleFloat(t,e,i,s,r,a,o){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o[0],t[e+5]=o[1],t[e+6]=o[2],t[e+7]=o[3]}_colorToFloat32Array(t){return new Float32Array([(t.rgba>>24&255)/255,(t.rgba>>16&255)/255,(t.rgba>>8&255)/255,(255&t.rgba)/255])}}e.RectangleRenderer=Q},208(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.RenderModel=e.COMBINED_CHAR_BIT_MASK=void 0;const s=i(948);e.COMBINED_CHAR_BIT_MASK=2147483648,e.RenderModel=class{constructor(){this.cells=new Uint32Array(0),this.lineLengths=new Uint32Array(0),this.selection=(0,s.createSelectionRenderModel)()}resize(t,e){const i=t*e*4;i!==this.cells.length&&(this.cells=new Uint32Array(i),this.lineLengths=new Uint32Array(e))}clear(){this.cells.fill(0,0),this.lineLengths.fill(0,0)}}},115(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextureAtlas=void 0;const s=i(0),r=i(183),a=i(959),o=i(993),n=i(836),h=i(930),L=i(917),T=i(564),l=i(414),d={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}};let c;class _{get pages(){return this._pages}constructor(t,e,i,s){this._document=t,this._config=e,this._unicodeService=i,this._logService=s,this._didWarmUp=!1,this._cacheMap=new n.FourKeyMap,this._cacheMapCombined=new n.FourKeyMap,this._pages=[],this._activePages=[],this._workBoundingBox={top:0,left:0,bottom:0,right:0},this._workAttributeData=new L.AttributeData,this._textureSize=512,this._onAddTextureAtlasCanvas=new l.Emitter,this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=new l.Emitter,this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._pageLayoutVersion=0,this._createNewPage(),this._tmpCanvas=p(t,4*this._config.deviceCellWidth+4,this._config.deviceCellHeight+4),this._tmpCtx=(0,a.throwIfFalsy)(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}dispose(){this._tmpCanvas.remove();for(const t of this.pages)t.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){const t=new h.IdleTaskQueue(this._logService);for(let e=33;e<126;e++)t.enqueue(()=>{if(!this._cacheMap.get(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT)){const t=this._drawToCache(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,!1,void 0);this._cacheMap.set(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,t)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){if(0!==this._pages[0].currentRow.x||0!==this._pages[0].currentRow.y){for(const t of this._pages)t.clear();this._cacheMap.clear(),this._cacheMapCombined.clear(),this._didWarmUp=!1,this._pageLayoutVersion++}}_createNewPage(){if(_.maxAtlasPages&&this._pages.length>=Math.max(4,_.maxAtlasPages)){const t=this._pages.filter(t=>2*t.canvas.width<=(_.maxTextureSize||4096)).sort((t,e)=>e.canvas.width!==t.canvas.width?e.canvas.width-t.canvas.width:e.percentageUsed-t.percentageUsed);let e=-1,i=0;for(let s=0;st.canvas.width!==s[0].canvas.width)){this._evictAllPages();const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}const r=s.map(t=>t.glyphs[0].texturePage).sort((t,e)=>t-e),a=this.pages.length-s.length,o=this._mergePages(s,a);o.version=++Q.nextVersion;for(let t=r.length-1;t>=0;t--)this._deletePage(r[t]);this.pages.push(o),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(o.canvas)}const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}_mergePages(t,e){const i=2*t[0].canvas.width,s=new Q(this._document,i,t);for(const[r,a]of t.entries()){const t=r*a.canvas.width%i,o=Math.floor(r/2)*a.canvas.height;s.ctx.drawImage(a.canvas,t,o);for(const s of a.glyphs)s.texturePage=e,s.sizeClipSpace.x=s.size.x/i,s.sizeClipSpace.y=s.size.y/i,s.texturePosition.x+=t,s.texturePosition.y+=o,s.texturePositionClipSpace.x=s.texturePosition.x/i,s.texturePositionClipSpace.y=s.texturePosition.y/i;this._onRemoveTextureAtlasCanvas.fire(a.canvas);const n=this._activePages.indexOf(a);-1!==n&&this._activePages.splice(n,1)}return s}_deletePage(t){this._pages.splice(t,1);for(let e=t;e=this._config.colors.ansi.length)throw new Error("No color found for idx "+t);return this._config.colors.ansi[t]}_getBackgroundColor(t,e,i,s){if(this._config.allowTransparency)return o.NULL_COLOR;let r;switch(t){case 16777216:case 33554432:r=this._getColorFromAnsiIndex(e);break;case 50331648:const t=L.AttributeData.toColorRGB(e);r=o.channels.toColor(t[0],t[1],t[2]);break;default:r=i?o.color.opaque(this._config.colors.foreground):this._config.colors.background}return this._config.allowTransparency||(r=o.color.opaque(r)),r}_getForegroundColor(t,e,i,r,a,n,h,T,l,d){const c=this._getMinimumContrastColor(t,e,i,r,a,n,h,l,T,d);if(c)return c;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&l&&n<8&&(n+=8),_=this._getColorFromAnsiIndex(n);break;case 50331648:const t=L.AttributeData.toColorRGB(n);_=o.channels.toColor(t[0],t[1],t[2]);break;default:_=h?this._config.colors.background:this._config.colors.foreground}return this._config.allowTransparency&&(_=o.color.opaque(_)),T&&(_=o.color.multiplyOpacity(_,s.DIM_OPACITY)),_}_resolveBackgroundRgba(t,e,i){switch(t){case 16777216:case 33554432:return this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(t,e,i,s){switch(t){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&e<8&&(e+=8),this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(t,e,i,s,r,a,n,h,L,T){if(1===this._config.minimumContrastRatio||T)return;const l=this._getContrastCache(L),d=l.getColor(t,s);if(void 0!==d)return d??void 0;const c=this._resolveBackgroundRgba(e,i,n),_=this._resolveForegroundRgba(r,a,n,h),Q=o.rgba.ensureContrastRatio(c,_,this._config.minimumContrastRatio/(L?2:1));if(!Q)return void l.setColor(t,s,null);const u=o.channels.toColor(Q>>24&255,Q>>16&255,Q>>8&255);return l.setColor(t,s,u),u}_getContrastCache(t){return t?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_drawToCache(t,e,i,o,n,h){const T="number"==typeof t?String.fromCharCode(t):t;h&&this._tmpCanvas.parentElement!==h&&(this._tmpCanvas.style.display="none",h.append(this._tmpCanvas));const l=Math.min(this._config.deviceCellWidth*Math.max(T.length,2)+4,this._config.deviceMaxTextureSize);this._tmpCanvas.width=t?2*t-o:t-o;!1==!(o>=t)||0===_?(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L+_,s),this._tmpCtx.lineTo(T,s)):(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(L+_,s),this._tmpCtx.moveTo(L+_+t,s),this._tmpCtx.lineTo(T,s)),o=(0,a.computeNextVariantOffset)(T-L,t,o);break;case 5:const Q=.6,u=.3,p=T-L,g=Math.floor(Q*p),M=Math.floor(u*p),y=p-g-M;this._tmpCtx.setLineDash([g,M,y]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s);break;default:this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s)}n||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!O&&this._config.fontSize>=12&&!this._config.allowTransparency&&" "!==T){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";const e=this._tmpCtx.measureText(T);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in e&&e.actualBoundingBoxDescent>0){this._tmpCtx.save();const e=new Path2D;e.rect(i,h-Math.ceil(t/2),this._config.deviceCellWidth*I,l-h+Math.ceil(t/2)),this._tmpCtx.clip(e),this._tmpCtx.lineWidth=3*this._config.devicePixelRatio,this._tmpCtx.strokeStyle=E.css,this._tmpCtx.strokeText(T,S,S+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(C){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),e=t%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+e),this._tmpCtx.stroke()}if(O||this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight),"_"===T&&!this._config.allowTransparency){let t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W);if(t)for(let e=1;e<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=E.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight-e),t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W),t);e++);}if(f){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),e=this._tmpCtx.lineWidth%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.stroke()}this._tmpCtx.restore();const P=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height);let N;if(N=this._config.allowTransparency?function(t){for(let e=0;e0)return!1;return!0}(P):u(P,E,D,W),N)return d;const B=this._findGlyphBoundingBox(P,this._workBoundingBox,l,Z,O,S);let $,F;for(;;){if(0===this._activePages.length){const t=this._createNewPage();$=t,F=t.currentRow,F.height=B.size.y;break}$=this._activePages[this._activePages.length-1],F=$.currentRow;for(const t of this._activePages)B.size.y<=t.currentRow.height&&($=t,F=t.currentRow);for(let t=this._activePages.length-1;t>=0;t--)for(const e of this._activePages[t].fixedRows)e.height<=F.height&&B.size.y<=e.height&&($=this._activePages[t],F=e);if(B.size.x>this._textureSize){this._overflowSizePage||(_.maxAtlasPages&&this._pages.length>=_.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new Q(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),$=this._overflowSizePage,F=this._overflowSizePage.currentRow,F.x+B.size.x>=$.canvas.width&&(F.x=0,F.y+=F.height,F.height=0);break}if(F.y+B.size.y>=$.canvas.height||F.height>B.size.y+2){let t=!1;if($.currentRow.y+$.currentRow.height+B.size.y>=$.canvas.height){let e;for(const t of this._activePages)if(t.currentRow.y+t.currentRow.height+B.size.y=_.maxAtlasPages&&F.y+B.size.y<=$.canvas.height&&F.height>=B.size.y&&F.x+B.size.x<=$.canvas.width)t=!0;else{const e=this._createNewPage();$=e,F=e.currentRow,F.height=B.size.y,t=!0}}t||($.currentRow.height>0&&$.fixedRows.push($.currentRow),F={x:0,y:$.currentRow.y+$.currentRow.height,height:B.size.y},$.fixedRows.push(F),$.currentRow={x:0,y:F.y+F.height,height:0})}if(F.x+B.size.x<=$.canvas.width)break;F===$.currentRow?(F.x=0,F.y+=F.height,F.height=0):$.fixedRows.splice($.fixedRows.indexOf(F),1)}return B.texturePage=this._pages.indexOf($),B.texturePosition.x=F.x,B.texturePosition.y=F.y,B.texturePositionClipSpace.x=F.x/$.canvas.width,B.texturePositionClipSpace.y=F.y/$.canvas.height,B.sizeClipSpace.x/=$.canvas.width,B.sizeClipSpace.y/=$.canvas.height,F.height=Math.max(F.height,B.size.y),F.x+=B.size.x,$.ctx.putImageData(P,B.texturePosition.x-this._workBoundingBox.left,B.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,B.size.x,B.size.y),$.addGlyph(B),$.version=++Q.nextVersion,B}_findGlyphBoundingBox(t,e,i,s,r,a){e.top=0;const o=s?this._config.deviceCellHeight:this._tmpCanvas.height,n=s?this._config.deviceCellWidth:i;let h=!1;for(let i=0;i=a;i--){for(let s=0;s=0;i--){for(let s=0;s>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=i.rgba>>>24,h=i.rgba>>>16&255,L=i.rgba>>>8&255,T=Math.floor((Math.abs(r-n)+Math.abs(a-h)+Math.abs(o-L))/12);let l=!0;for(let e=0;ethis._handleColorChange())),this._cellColorResolver=new s.CellColorResolver(this._terminal,this._optionsService,this._model.selection,this._decorationService,this._coreBrowserService,this._themeService),this._core=this._terminal._core,this._renderLayers=[new _.LinkRenderLayer(this._core.screenElement,2,this._terminal,this._core.linkifier,this._coreBrowserService,d,this._themeService)],this.dimensions=(0,g.createRenderDimensions)(),this._devicePixelRatio=this._coreBrowserService.dpr,this._updateDimensions(),this._updateCursorBlink(),this._register(d.onOptionChange(()=>this._handleOptionsChanged())),this._textBlinkStateManager=this._register(new T.TextBlinkStateManager(()=>this._requestRedrawViewport(),this._coreBrowserService,this._optionsService)),this._resetBlinkingRowState(),this._deviceMaxTextureSize=this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextlost",t=>{this._logService.debug("webglcontextlost event received"),t.preventDefault(),this._contextRestorationTimeout=setTimeout(()=>{this._contextRestorationTimeout=void 0,this._logService.warn("webgl context not restored; firing onContextLoss"),this._onContextLoss.fire(t)},3e3)})),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextrestored",t=>{this._logService.warn("webglcontextrestored event received"),clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0,(0,r.removeTerminalFromCache)(this._terminal),this._initializeWebGLState(),this._requestRedrawViewport()})),this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,this._coreBrowserService.window,(t,e)=>this._setCanvasDevicePixelDimensions(t,e)),this._register(this._coreBrowserService.onWindowChange(t=>{this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,t,(t,e)=>this._setCanvasDevicePixelDimensions(t,e))})),this._register((0,u.addDisposableListener)(this._coreBrowserService.mainDocument,"mousedown",()=>this._cursorBlinkStateManager.value?.restartBlinkAnimation())),this._core.screenElement.appendChild(this._canvas),[this._rectangleRenderer.value,this._glyphRenderer.value]=this._initializeWebGLState(),this._isAttached=this._core.screenElement.isConnected,this._register((0,p.toDisposable)(()=>{clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0;for(const t of this._renderLayers)t.dispose();this._canvas.parentElement?.removeChild(this._canvas),(0,r.removeTerminalFromCache)(this._terminal)}))}get textureAtlas(){return this._charAtlas?.pages[0].canvas}_handleColorChange(){this._refreshCharAtlas(),this._clearModel(!0)}handleDevicePixelRatioChange(){this._devicePixelRatio!==this._coreBrowserService.dpr&&(this._devicePixelRatio=this._coreBrowserService.dpr,this.handleResize(this._terminal.cols,this._terminal.rows))}handleResize(t,e){this._updateDimensions(),this._model.resize(this._terminal.cols,this._terminal.rows),this._resetBlinkingRowState();for(const t of this._renderLayers)t.resize(this._terminal,this.dimensions);this._canvas.width=this.dimensions.device.canvas.width,this._canvas.height=this.dimensions.device.canvas.height,this._canvas.style.width=`${this.dimensions.css.canvas.width}px`,this._canvas.style.height=`${this.dimensions.css.canvas.height}px`,this._core.screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._core.screenElement.style.height=`${this.dimensions.css.canvas.height}px`,this._rectangleRenderer.value?.setDimensions(this.dimensions),this._rectangleRenderer.value?.handleResize(),this._glyphRenderer.value?.setDimensions(this.dimensions),this._glyphRenderer.value?.handleResize(),this._refreshCharAtlas(),this._clearModel(!1),this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0})}handleCharSizeChanged(){this.handleResize(this._terminal.cols,this._terminal.rows)}handleBlur(){for(const t of this._renderLayers)t.handleBlur(this._terminal);this._cursorBlinkStateManager.value?.pause(),this._requestRedrawViewport()}handleFocus(){for(const t of this._renderLayers)t.handleFocus(this._terminal);this._cursorBlinkStateManager.value?.resume(),this._requestRedrawViewport()}handleViewportVisibilityChange(t){this._textBlinkStateManager.setViewportVisible(t)}handleSelectionChanged(t,e,i){for(const s of this._renderLayers)s.handleSelectionChanged(this._terminal,t,e,i);this._model.selection.update(this._core,t,e,i),this._requestRedrawViewport()}handleCursorMove(){for(const t of this._renderLayers)t.handleCursorMove(this._terminal);this._cursorBlinkStateManager.value?.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._refreshCharAtlas(),this._updateCursorBlink()}_initializeWebGLState(){return this._rectangleRenderer.value=new d.RectangleRenderer(this._terminal,this._gl,this.dimensions,this._themeService,this._logService),this._glyphRenderer.value=new l.GlyphRenderer(this._terminal,this._gl,this.dimensions,this._optionsService,this._logService),this.handleCharSizeChanged(),[this._rectangleRenderer.value,this._glyphRenderer.value]}_refreshCharAtlas(){if(this.dimensions.device.char.width<=0&&this.dimensions.device.char.height<=0)return void(this._isAttached=!1);const t=(0,r.acquireTextureAtlas)(this._terminal,this._optionsService.rawOptions,this._themeService.colors,this.dimensions.device.cell.width,this.dimensions.device.cell.height,this.dimensions.device.char.width,this.dimensions.device.char.height,this._coreBrowserService.dpr,this._deviceMaxTextureSize,this._customGlyphs);this._charAtlas!==t&&(this._onChangeTextureAtlas.fire(t.pages[0].canvas),this._charAtlasDisposable.value=(0,p.combinedDisposable)(Q.EventUtils.forward(t.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas),Q.EventUtils.forward(t.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas))),this._charAtlas=t,this._charAtlas.warmUp(),this._glyphRenderer.value?.setAtlas(this._charAtlas)}_clearModel(t){this._model.clear(),t&&this._glyphRenderer.value?.clear()}clearTextureAtlas(){this._charAtlas?.clearTexture(),this._clearModel(!0),this._requestRedrawViewport()}clear(){this._clearModel(!0);for(const t of this._renderLayers)t.reset(this._terminal);this._resetBlinkingRowState(),this._textBlinkStateManager.setNeedsBlinkInViewport(!1),this._cursorBlinkStateManager.value?.restartBlinkAnimation(),this._updateCursorBlink()}renderRows(t,e){if(!this._isAttached){if(!(this._core.screenElement?.isConnected&&this._charSizeService.width&&this._charSizeService.height))return;this._updateDimensions(),this._refreshCharAtlas(),this._isAttached=!0}for(const i of this._renderLayers)i.handleGridChanged(this._terminal,t,e);if(!this._glyphRenderer.value||!this._rectangleRenderer.value)return;this._glyphRenderer.value.beginFrame()?(this._clearModel(!0),this._updateModel(0,this._terminal.rows-1)):this._updateModel(t,e);let i=!1,s=0;for(;this._charAtlas&&this._glyphRenderer.value.beginFrame()&&s++<32;)i=!0,this._clearModel(!0),this._updateModel(0,this._terminal.rows-1);i&&this._glyphRenderer.value.invalidateAtlasTextures(),this._rectangleRenderer.value.renderBackgrounds(),this._glyphRenderer.value.render(this._model),this._cursorBlinkStateManager.value&&!this._cursorBlinkStateManager.value.isCursorVisible||this._rectangleRenderer.value.renderCursor()}_updateCursorBlink(){this._coreService.decPrivateModes.cursorBlink??this._terminal.options.cursorBlink?this._cursorBlinkStateManager.value=new a.CursorBlinkStateManager(()=>{this._requestRedrawCursor()},this._coreBrowserService):this._cursorBlinkStateManager.clear(),this._requestRedrawCursor()}_updateModel(t,e){const i=this._core;let s,r,a,o,n,h,T,l,d,_,Q,u,p,g,M,f,C,m=this._workCell;t=v(t,i.rows-1,0),e=v(e,i.rows-1,0);const w=this._coreService.decPrivateModes.cursorStyle??i.options.cursorStyle??"block",x=this._terminal.buffer.active.baseY+this._terminal.buffer.active.cursorY,b=x-i.buffer.ydisp,E=Math.min(this._terminal.buffer.active.cursorX,i.cols-1);let R=-1;const k=this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden&&(!this._cursorBlinkStateManager.value||this._cursorBlinkStateManager.value.isCursorVisible);this._model.cursor=void 0;let A=!1;for(r=t;r<=e;r++){a=r+i.buffer.ydisp;const t=i.buffer.lines.get(a);if(!t){for(this._model.lineLengths[r]=0,f=0;f=T,d=f,n.length>0&&f===n[0][0]&&l){_=n.shift();const t=this._model.selection.isCellSelected(this._terminal,_[0],a);for(M=_[0]+1;M<_[1];M++)l&&=t===this._model.selection.isCellSelected(this._terminal,M,a);l&&=!Q||E<_[0]||E>=_[1],l?(h=!0,m=new y(m,o.translateToString(!0,_[0],_[1]),_[1]-_[0]),d=_[1]-1):T=_[1]}if(u=m.getChars(),p=m.getCode(),M=4*(r*i.cols+f),!e&&m.isBlink()&&(e=!0),this._cellColorResolver.resolve(m,f,a,this.dimensions.device.cell.width,this.dimensions.device.cell.height),k&&a===x&&(f===E&&(this._model.cursor={x:E,y:b,width:m.getWidth(),style:this._coreBrowserService.isFocused?w:i.options.cursorInactiveStyle,cursorWidth:i.options.cursorWidth,dpr:this._devicePixelRatio},R=E+m.getWidth()-1),f>=E&&f<=R&&(this._coreBrowserService.isFocused&&"block"===w||!1===this._coreBrowserService.isFocused&&"block"===i.options.cursorInactiveStyle)&&(this._cellColorResolver.result.fg=50331648|this._themeService.colors.cursorAccent.rgba>>8&16777215,this._cellColorResolver.result.bg=50331648|this._themeService.colors.cursor.rgba>>8&16777215)),this._textBlinkStateManager.isEnabled&&!this._textBlinkStateManager.isBlinkOn&&m.isBlink()&&(this._cellColorResolver.result.fg|=1073741824),p!==L.NULL_CELL_CODE&&(this._model.lineLengths[r]=f+1),(this._model.cells[M]!==p||this._model.cells[M+1]!==this._cellColorResolver.result.bg||this._model.cells[M+2]!==this._cellColorResolver.result.fg||this._model.cells[M+3]!==this._cellColorResolver.result.ext)&&(A=!0,u.length>1&&(p|=c.COMBINED_CHAR_BIT_MASK),this._model.cells[M]=p,this._model.cells[M+1]=this._cellColorResolver.result.bg,this._model.cells[M+2]=this._cellColorResolver.result.fg,this._model.cells[M+3]=this._cellColorResolver.result.ext,g=m.getWidth(),this._glyphRenderer.value.updateCell(f,r,p,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext,u,g,s),h)){for(m=this._workCell,f++;f<=d;f++)C=4*(r*i.cols+f),this._nullModelCell(f,r,C,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext);f--}}this._setRowBlinkState(r,e)}A&&this._rectangleRenderer.value.updateBackgrounds(this._model),this._rectangleRenderer.value.updateCursor(this._model),this._updateTextBlinkState()}_nullModelCell(t,e,i,s,r,a){this._glyphRenderer.value.updateCell(t,e,L.NULL_CELL_CODE,s,r,a,L.NULL_CELL_CHAR,0,0),this._model.cells[i]=L.NULL_CELL_CODE,this._model.cells[i+1]=s,this._model.cells[i+2]=r,this._model.cells[i+3]=a}_resetBlinkingRowState(){this._rowHasBlinkingCells=new Array(this._terminal.rows).fill(!1),this._rowHasBlinkingCellsCount=0}_setRowBlinkState(t,e){this._rowHasBlinkingCells[t]!==e&&(this._rowHasBlinkingCells[t]=e,this._rowHasBlinkingCellsCount+=e?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}_updateDimensions(){this._charSizeService.width&&this._charSizeService.height&&(this.dimensions.device.char.width=Math.floor(this._charSizeService.width*this._devicePixelRatio),this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*this._devicePixelRatio),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.top=1===this._optionsService.rawOptions.lineHeight?0:Math.round((this.dimensions.device.cell.height-this.dimensions.device.char.height)/2),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.char.left=Math.floor(this._optionsService.rawOptions.letterSpacing/2),this.dimensions.device.canvas.height=this._terminal.rows*this.dimensions.device.cell.height,this.dimensions.device.canvas.width=this._terminal.cols*this.dimensions.device.cell.width,this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/this._devicePixelRatio),this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/this._devicePixelRatio),this.dimensions.css.cell.height=this.dimensions.device.cell.height/this._devicePixelRatio,this.dimensions.css.cell.width=this.dimensions.device.cell.width/this._devicePixelRatio)}_setCanvasDevicePixelDimensions(t,e){this._canvas.width===t&&this._canvas.height===e||(this._canvas.width=t,this._canvas.height=e,this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0}))}_requestRedrawViewport(){this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1})}_requestRedrawCursor(){const t=this._terminal.buffer.active.cursorY;this._onRequestRedraw.fire({start:t,end:t})}}e.WebglRenderer=M;class y extends n.AttributeData{constructor(t,e,i){super(),this.content=0,this.combinedData="",this.fg=t.fg,this.bg=t.bg,this.combinedData=e,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(t){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}function v(t,e,i=0){return Math.max(Math.min(t,e),i)}e.JoinedCellData=y},719(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GLTexture=e.PROJECTION_MATRIX=void 0,e.createProgram=function(t,e,i,a){const o=(0,s.throwIfFalsy)(t.createProgram());if(t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.VERTEX_SHADER,e,a))),t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.FRAGMENT_SHADER,i,a))),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS))return o;a.error(t.getProgramInfoLog(o)),t.deleteProgram(o)},e.createShader=r,e.expandFloat32Array=function(t,e){const i=Math.min(2*t.length,e),s=new Float32Array(i);for(let e=0;e{const e=[],i=[3/8,2/8,3/8],s=[0,3/8,5/8];for(let r=0;r<3;r++){const a=t>>2*r&1,o=t>>2*r+1&1;a&&o?e.push(`M0,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):a?e.push(`M0,${s[r]} L0.5,${s[r]} L0.5,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):o&&e.push(`M0.5,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0.5,${s[r]+i[r]} Z`)}return e.join(" ")}}}function r(t){const e=[],i=.15,s=.015,r=.075,a=.0375,o=.95;if(64&t){const t=.175,a=.2125,n=.25,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(32&t){const t=o-i,s=.875,r=o,n=.265,h=.485;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(16&t){const t=o-i,s=.875,r=o,n=.515,h=.735;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(8&t){const t=.75,a=.7875,n=.825,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(4&t){const t=.05,i=.125,s=.2,r=.515,o=.735;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(2&t){const t=.05,i=.125,s=.2,r=.265,o=.485;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(1&t){const t=.4625,a=.5,n=.5375,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}return e.join(" ")}Object.defineProperty(e,"__esModule",{value:!0}),e.blockPatternCodepoints=e.customGlyphDefinitions=void 0,function(t){t.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),t.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),t.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),t.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),t.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),t.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),t.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.CURVE_UP_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_UP_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),t.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),t.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),t.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),t.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),t.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})}(i||(i={})),e.customGlyphDefinitions={"─":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"━":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"│":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"┃":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"┄":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"┅":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"┆":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"┇":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"┈":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"┉":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"┊":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"┋":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"┌":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"┍":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┎":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┏":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"┐":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"┑":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┒":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┓":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"└":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"┕":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┖":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┗":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"┘":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"┙":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┚":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┛":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"├":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"┝":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┞":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┟":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┠":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┡":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┢":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┣":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"┤":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"┥":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┦":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┧":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┨":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┩":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┪":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┫":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"┬":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"┭":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┮":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┯":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┰":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┱":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┲":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┳":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"┴":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"┵":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┶":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┷":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┸":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┹":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┺":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┻":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"┼":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"┽":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┾":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┿":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"╀":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"╁":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╂":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"╃":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"╄":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"╅":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"╆":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"╇":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"╈":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"╉":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"╊":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"╋":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"╌":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"╍":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"╎":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"╏":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"═":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"║":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╒":{type:2,data:(t,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╓":{type:2,data:(t,e)=>`M${.5-t},1 L${.5-t},.5 L1,.5 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╔":{type:2,data:(t,e)=>`M1,${.5-e} L${.5-t},${.5-e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╕":{type:2,data:(t,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╖":{type:2,data:(t,e)=>`M${.5+t},1 L${.5+t},.5 L0,.5 M${.5-t},.5 L${.5-t},1`,strokeWidth:1},"╗":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5+t},${.5-e} L${.5+t},1`,strokeWidth:1},"╘":{type:2,data:(t,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"╙":{type:2,data:(t,e)=>`M1,.5 L${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╚":{type:2,data:(t,e)=>`M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0 M1,${.5+e} L${.5-t},${.5+e} L${.5-t},0`,strokeWidth:1},"╛":{type:2,data:(t,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"╜":{type:2,data:(t,e)=>`M0,.5 L${.5+t},.5 L${.5+t},0 M${.5-t},.5 L${.5-t},0`,strokeWidth:1},"╝":{type:2,data:(t,e)=>`M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M0,${.5+e} L${.5+t},${.5+e} L${.5+t},0`,strokeWidth:1},"╞":{type:2,data:(t,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╟":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1 M${.5+t},.5 L1,.5`,strokeWidth:1},"╠":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╡":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╢":{type:2,data:(t,e)=>`M0,.5 L${.5-t},.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╣":{type:2,data:(t,e)=>`M${.5+t},0 L${.5+t},1 M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0`,strokeWidth:1},"╤":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"╥":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},1 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╦":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╧":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╨":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╩":{type:2,data:(t,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╪":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╫":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╬":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╭":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╮":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╯":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╰":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╱":{type:2,data:"M1,0 L0,1",strokeWidth:1},"╲":{type:2,data:"M0,0 L1,1",strokeWidth:1},"╳":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"╴":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"╵":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"╶":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"╷":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"╸":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"╹":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"╺":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"╻":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"╼":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"╽":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╾":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"╿":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"▀":{type:0,data:[{x:0,y:0,w:8,h:4}]},"▁":{type:0,data:[{x:0,y:7,w:8,h:1}]},"▂":{type:0,data:[{x:0,y:6,w:8,h:2}]},"▃":{type:0,data:[{x:0,y:5,w:8,h:3}]},"▄":{type:0,data:[{x:0,y:4,w:8,h:4}]},"▅":{type:0,data:[{x:0,y:3,w:8,h:5}]},"▆":{type:0,data:[{x:0,y:2,w:8,h:6}]},"▇":{type:0,data:[{x:0,y:1,w:8,h:7}]},"█":{type:0,data:[{x:0,y:0,w:8,h:8}]},"▉":{type:0,data:[{x:0,y:0,w:7,h:8}]},"▊":{type:0,data:[{x:0,y:0,w:6,h:8}]},"▋":{type:0,data:[{x:0,y:0,w:5,h:8}]},"▌":{type:0,data:[{x:0,y:0,w:4,h:8}]},"▍":{type:0,data:[{x:0,y:0,w:3,h:8}]},"▎":{type:0,data:[{x:0,y:0,w:2,h:8}]},"▏":{type:0,data:[{x:0,y:0,w:1,h:8}]},"▐":{type:0,data:[{x:4,y:0,w:4,h:8}]},"░":{type:1,data:[[1,0],[0,0]]},"▒":{type:1,data:[[1,0],[0,1]]},"▓":{type:1,data:[[1,1],[1,0]]},"▔":{type:0,data:[{x:0,y:0,w:8,h:1}]},"▕":{type:0,data:[{x:7,y:0,w:1,h:8}]},"▖":{type:0,data:[{x:0,y:4,w:4,h:4}]},"▗":{type:0,data:[{x:4,y:4,w:4,h:4}]},"▘":{type:0,data:[{x:0,y:0,w:4,h:4}]},"▙":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"▚":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"▛":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"▜":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"▝":{type:0,data:[{x:4,y:0,w:4,h:4}]},"▞":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"▟":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"":i.LINE_H,"":i.LINE_V,"":i.FADE_RIGHT,"":i.FADE_LEFT,"":i.FADE_DOWN,"":i.FADE_UP,"":i.CURVE_DOWN_RIGHT,"":i.CURVE_DOWN_LEFT,"":i.CURVE_UP_RIGHT,"":i.CURVE_UP_LEFT,"":[i.LINE_V,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT],"":[i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_UP_RIGHT],"":[i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE],"":i.NODE_STROKE,"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"🬀":s(1),"🬁":s(2),"🬂":s(3),"🬃":s(4),"🬄":s(5),"🬅":s(6),"🬆":s(7),"🬇":s(8),"🬈":s(9),"🬉":s(10),"🬊":s(11),"🬋":s(12),"🬌":s(13),"🬍":s(14),"🬎":s(15),"🬏":s(16),"🬐":s(17),"🬑":s(18),"🬒":s(19),"🬓":s(20),"🬔":s(22),"🬕":s(23),"🬖":s(24),"🬗":s(25),"🬘":s(26),"🬙":s(27),"🬚":s(28),"🬛":s(29),"🬜":s(30),"🬝":s(31),"🬞":s(32),"🬟":s(33),"🬠":s(34),"🬡":s(35),"🬢":s(36),"🬣":s(37),"🬤":s(38),"🬥":s(39),"🬦":s(40),"🬧":s(41),"🬨":s(43),"🬩":s(44),"🬪":s(45),"🬫":s(46),"🬬":s(47),"🬭":s(48),"🬮":s(49),"🬯":s(50),"🬰":s(51),"🬱":s(52),"🬲":s(53),"🬳":s(54),"🬴":s(55),"🬵":s(56),"🬶":s(57),"🬷":s(58),"🬸":s(59),"🬹":s(60),"🬺":s(61),"🬻":s(62),"🬼":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"🬽":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"🬾":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"🬿":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"🭀":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"🭁":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭂":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"🭃":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭄":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"🭅":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"🭆":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"🭇":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"🭈":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"🭉":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"🭊":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"🭋":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"🭌":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"🭍":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"🭎":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"🭏":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"🭐":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"🭑":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"🭒":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭓":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"🭔":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭕":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"🭖":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"🭗":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"🭘":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"🭙":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"🭚":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"🭛":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"🭜":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"🭝":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"🭞":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"🭟":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"🭠":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"🭡":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"🭢":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"🭣":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"🭤":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"🭥":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"🭦":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"🭧":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"🭨":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"🭩":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"🭪":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"🭫":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"🭬":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"🭭":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"🭮":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"🭯":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"🭰":{type:0,data:[{x:1,y:0,w:1,h:8}]},"🭱":{type:0,data:[{x:2,y:0,w:1,h:8}]},"🭲":{type:0,data:[{x:3,y:0,w:1,h:8}]},"🭳":{type:0,data:[{x:4,y:0,w:1,h:8}]},"🭴":{type:0,data:[{x:5,y:0,w:1,h:8}]},"🭵":{type:0,data:[{x:6,y:0,w:1,h:8}]},"🭶":{type:0,data:[{x:0,y:1,w:8,h:1}]},"🭷":{type:0,data:[{x:0,y:2,w:8,h:1}]},"🭸":{type:0,data:[{x:0,y:3,w:8,h:1}]},"🭹":{type:0,data:[{x:0,y:4,w:8,h:1}]},"🭺":{type:0,data:[{x:0,y:5,w:8,h:1}]},"🭻":{type:0,data:[{x:0,y:6,w:8,h:1}]},"🭼":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🭽":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭾":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭿":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🮀":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮁":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮂":{type:0,data:[{x:0,y:0,w:8,h:2}]},"🮃":{type:0,data:[{x:0,y:0,w:8,h:3}]},"🮄":{type:0,data:[{x:0,y:0,w:8,h:5}]},"🮅":{type:0,data:[{x:0,y:0,w:8,h:6}]},"🮆":{type:0,data:[{x:0,y:0,w:8,h:7}]},"🮇":{type:0,data:[{x:6,y:0,w:2,h:8}]},"🮈":{type:0,data:[{x:5,y:0,w:3,h:8}]},"🮉":{type:0,data:[{x:3,y:0,w:5,h:8}]},"🮊":{type:0,data:[{x:2,y:0,w:6,h:8}]},"🮋":{type:0,data:[{x:1,y:0,w:7,h:8}]},"🮌":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"🮍":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"🮎":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"🮏":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"🮐":{type:1,data:[[0,1],[1,0]]},"🮑":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"🮒":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"🮔":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"🮕":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"🮖":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"🮗":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"🮘":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"🮙":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"🮚":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"🮛":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"🮜":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"🮝":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"🮞":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"🮟":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"🮠":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"🮡":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"🮢":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"🮣":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"🮤":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"🮥":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"🮦":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"🮧":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"🮨":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"🮩":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"🮪":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"🮫":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"🮬":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"🮭":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"🮮":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"🮯":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"🮰":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"🮱":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"🮲":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"🮳":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"🮴":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"🮵":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮶":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮷":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮸":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮹":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"🮺":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"🮻":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"🮼":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"🮽":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"🮾":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"🮿":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"🯀":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"🯁":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"🯂":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"🯃":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"🯄":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"🯅":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯆":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯇":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯈":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯉":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯊":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"🯋":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"🯌":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"🯍":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"🯎":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"🯏":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"🯐":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"🯑":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"🯒":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"🯓":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"🯔":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"🯕":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"🯖":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"🯗":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"🯘":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"🯙":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"🯚":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"🯛":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"🯜":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"🯝":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"🯞":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"🯟":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"🯠":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"🯡":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"🯢":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"🯣":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"🯤":{type:0,data:[{x:2,y:0,w:4,h:4}]},"🯥":{type:0,data:[{x:2,y:4,w:4,h:4}]},"🯦":{type:0,data:[{x:0,y:2,w:4,h:4}]},"🯧":{type:0,data:[{x:4,y:2,w:4,h:4}]},"🯨":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"🯩":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"🯪":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"🯫":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"🯬":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"🯭":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"🯮":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"🯯":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"🯰":{type:5,data:{d:r(126),type:0},scaleType:1},"🯱":{type:5,data:{d:r(48),type:0},scaleType:1},"🯲":{type:5,data:{d:r(109),type:0},scaleType:1},"🯳":{type:5,data:{d:r(121),type:0},scaleType:1},"🯴":{type:5,data:{d:r(51),type:0},scaleType:1},"🯵":{type:5,data:{d:r(91),type:0},scaleType:1},"🯶":{type:5,data:{d:r(95),type:0},scaleType:1},"🯷":{type:5,data:{d:r(114),type:0},scaleType:1},"🯸":{type:5,data:{d:r(127),type:0},scaleType:1},"🯹":{type:5,data:{d:r(123),type:0},scaleType:1},"🯺":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(t,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},e.blockPatternCodepoints=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951])},183(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.createPatternCanvas=n,e.tryDrawCustomGlyph=function(t,e,i,s,a,o,n,L,T,l,d,c,_=0){const Q=r.customGlyphDefinitions[e];if(Q){const e=Array.isArray(Q)?Q:[Q];for(const r of e)h(t,r,i,s,a,o,n,L,T,l,d,c,_);return!0}return!1};const s=i(959),r=i(915),a="undefined"==typeof OffscreenCanvas?void 0:(t,e)=>new OffscreenCanvas(t,e),o=(t,e)=>{const i=document.createElement("canvas");return i.width=t,i.height=e,i};function n(t,e,i=a,s=o){return i?.(t,e)??s(t,e)}function h(t,e,i,r,a,o,h,d,Q,u,p,g,M=0){let y=a,v=o,f=i,C=r;switch(1===e.scaleType&&(y=h,v=d,f=i+(a-h)/2,C=r+(o-d)/2),e.clipPath&&(t.save(),function(t,e,i,s,r,a){t.beginPath();for(const o of e.split(" ")){const e=o[0];if("Z"===e){t.closePath();continue}const n=o.substring(1).split(",");if(!n[0]||!n[1])continue;const h=i+parseFloat(n[0])*r,L=s+parseFloat(n[1])*a;"M"===e?t.moveTo(h,L):"L"===e&&t.lineTo(h,L)}t.clip()}(t,e.clipPath,f,C,y,v)),e.type){case 0:!function(t,e,i,s,r,a){for(let o=0;o7&&parseInt(T.slice(7,9),16)||1;else{if(!T.startsWith("rgba"))throw new Error(`Unexpected fillStyle color format "${T}" when drawing pattern glyph`);[l,c,_,Q]=T.substring(5,T.length-1).split(",").map(t=>parseFloat(t))}for(let t=0;t>1&1,_=1&h;0!==c||0!==_?d.setTransform((new DOMMatrix).translateSelf(-c,-_)):d.setTransform(new DOMMatrix),t.fillStyle=d,t.fillRect(i,r,a,o)}(t,e.data,f,C,y,v,M);break;case 2:!function(t,e,i,s,r,a,o,n,h){let L;t.save(),t.beginPath(),t.rect(i,s,r,a),t.clip(),t.beginPath(),L="function"==typeof e?e(.15,.15/a*r):e;const T={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const e of L.split(" ")){const h=e[0];if("Z"===h){t.closePath(),T.lastCommand=h;continue}const L=c[h];if(!L){n.error(`Could not find drawing instructions for "${h}"`);continue}const l=e.substring(1).split(",");l[0]&&l[1]&&(L(t,_(l,r,a,i,s,!0,o,0,0,!1),T),T.lastCommand=h)}void 0!==h?(t.strokeStyle=t.fillStyle,t.lineWidth=o*h,t.stroke()):t.fill(),t.closePath(),t.restore()}(t,e.data,f,C,y,v,u,p,e.strokeWidth);break;case 3:!function(t,e,i,s,r,a,o,n){const h="string"==typeof e?e:e(0,0);t.beginPath();let L=0,l=0,d=0,c=0,_="";for(const e of h.split(" ")){const o=e[0],n=e.substring(1).split(",");if("Z"===o){t.closePath(),_=o;continue}if("V"===o){const e=s+parseFloat(n[0])*a;t.lineTo(L,e),l=e,d=L,c=l,_=o;continue}if("H"===o){const e=i+parseFloat(n[0])*r;t.lineTo(e,l),L=e,d=L,c=l,_=o;continue}if(!n[0]||!n[1])continue;if("A"===o){const e=parseFloat(n[0])*r,o=parseFloat(n[1])*a,h=parseFloat(n[2])*Math.PI/180,d=parseInt(n[3],10),c=parseInt(n[4],10),_=i+parseFloat(n[5])*r,Q=s+parseFloat(n[6])*a;T(t,L,l,e,o,h,d,c,_,Q),L=_,l=Q;continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});if("M"===o)t.moveTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("L"===o)t.lineTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("Q"===o)t.quadraticCurveTo(h[0],h[1],h[2],h[3]),d=h[0],c=h[1],L=h[2],l=h[3];else if("T"===o){let e,i;"Q"===_||"T"===_?(e=2*L-d,i=2*l-c):(e=L,i=l),t.quadraticCurveTo(e,i,h[0],h[1]),d=e,c=i,L=h[0],l=h[1]}else"C"===o&&(t.bezierCurveTo(h[0],h[1],h[2],h[3],h[4],h[5]),d=h[2],c=h[3],L=h[4],l=h[5]);_=o}void 0!==n?(t.strokeStyle=t.fillStyle,t.lineWidth=o*n,t.stroke()):t.fill()}(t,e.data,f,C,y,v,u,e.strokeWidth);break;case 4:!function(t,e,i,s,r,a,o,n){t.save(),t.fillRect(i,s,r,a),n&&(t.fillStyle=n,t.strokeStyle=n),t.lineWidth=o,t.lineCap="square",t.beginPath();for(const o of e.d.split(" ")){const e=o[0],n=o.substring(1).split(",");if(!n[0]||!n[1]){"Z"===e&&t.closePath();continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});"M"===e?t.moveTo(h[0],h[1]):"L"===e&&t.lineTo(h[0],h[1])}1===e.type?t.stroke():t.fill(),t.restore()}(t,e.data,f,C,y,v,u,g);break;case 5:!function(t,e,i,s,r,a,o,n,h){const L=new Path2D;L.rect(i,s,r,a),t.clip(L),t.beginPath();const T=o/12;t.lineWidth=n*T;const l={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const o of e.d.split(" ")){const L=o[0];if("Z"===L){t.closePath(),l.lastCommand=L;continue}const d=c[L];if(!d){h.error(`Could not find drawing instructions for "${L}"`);continue}const Q=o.substring(1).split(",");Q[0]&&Q[1]&&(d(t,_(Q,r,a,i,s,!1,n,(e.leftPadding??0)*(T/2),(e.rightPadding??0)*(T/2)),l),l.lastCommand=L)}1===e.type?(t.strokeStyle=t.fillStyle,t.stroke()):t.fill(),t.closePath()}(t,e.data,f,C,y,v,Q,u,p);break;case 6:!function(t,e,i,s,r,a){const o=r/8,n=.1*a,h=.8*a/8,T=Math.min(o,h);for(let r=0;r<8;r++)if(e&1<1){const t=Math.sqrt(y);u=(s*=t)*s,p=(r*=t)*r}let v=(u*p-u*M-p*g)/(u*M+p*g);v<0&&(v=0);const f=(o===n?-1:1)*Math.sqrt(v),C=f*(s*Q/r),m=f*(-r*_/s),w=T*C-l*m+(e+h)/2,x=l*C+T*m+(i+L)/2,b=(_-C)/s,E=(Q-m)/r,R=(-_-C)/s,k=(-Q-m)/r,A=Math.atan2(E,b);let Z=Math.atan2(k,R)-A;0===n&&Z>0?Z-=2*Math.PI:1===n&&Z<0&&(Z+=2*Math.PI);const D=A+Z;t.ellipse(w,x,s,r,a,A,D,0===n)}const l=new Map;function d(t,e,i=0){return Math.max(Math.min(t,e),i)}const c={C:(t,e,i)=>{t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),i.lastControlX=e[2],i.lastControlY=e[3],i.currentX=e[4],i.currentY=e[5]},L:(t,e,i)=>{t.lineTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},M:(t,e,i)=>{t.moveTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},Q:(t,e,i)=>{t.quadraticCurveTo(e[0],e[1],e[2],e[3]),i.lastControlX=e[0],i.lastControlY=e[1],i.currentX=e[2],i.currentY=e[3]},T:(t,e,i)=>{let s,r;"Q"===i.lastCommand||"T"===i.lastCommand?(s=2*i.currentX-i.lastControlX,r=2*i.currentY-i.lastControlY):(s=i.currentX,r=i.currentY),t.quadraticCurveTo(s,r,e[0],e[1]),i.lastControlX=s,i.lastControlY=r,i.currentX=e[0],i.currentY=e[1]}};function _(t,e,i,s,r,a,o,n=0,h=0,L=!0){const T=t.map(t=>parseFloat(t)||parseInt(t));if(T.length<2)throw new Error("Too few arguments for instruction");for(let t=0;t{this._refreshCharAtlas(t,e),this.reset(t)})),this._register((0,r.toDisposable)(()=>{this._canvas.remove()}))}_initCanvas(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()}handleBlur(t){}handleFocus(t){}handleCursorMove(t){}handleGridChanged(t,e,i){}handleSelectionChanged(t,e,i,s=!1){}_setTransparency(t,e){if(e===this._alpha)return;const i=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,i),this._refreshCharAtlas(t,this._themeService.colors),this.handleGridChanged(t,0,t.rows-1)}_refreshCharAtlas(t,e){this._deviceCharWidth<=0&&this._deviceCharHeight<=0||(this._charAtlas=(0,s.acquireTextureAtlas)(t,this._optionsService.rawOptions,e,this._deviceCellWidth,this._deviceCellHeight,this._deviceCharWidth,this._deviceCharHeight,this._coreBrowserService.dpr,2048),this._charAtlas.warmUp())}resize(t,e){this._deviceCellWidth=e.device.cell.width,this._deviceCellHeight=e.device.cell.height,this._deviceCharWidth=e.device.char.width,this._deviceCharHeight=e.device.char.height,this._deviceCharLeft=e.device.char.left,this._deviceCharTop=e.device.char.top,this._canvas.width=e.device.canvas.width,this._canvas.height=e.device.canvas.height,this._canvas.style.width=`${e.css.canvas.width}px`,this._canvas.style.height=`${e.css.canvas.height}px`,this._alpha||this._clearAll(),this._refreshCharAtlas(t,this._themeService.colors)}_fillBottomLineAtCells(t,e,i=1){this._ctx.fillRect(t*this._deviceCellWidth,(e+1)*this._deviceCellHeight-this._coreBrowserService.dpr-1,i*this._deviceCellWidth,this._coreBrowserService.dpr)}_clearAll(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))}_clearCells(t,e,i,s){this._alpha?this._ctx.clearRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight))}_fillCharTrueColor(t,e,i,s){this._ctx.font=this._getFont(t,!1,!1),this._ctx.textBaseline=o.TEXT_BASELINE,this._clipCell(i,s,e.getWidth()),this._ctx.fillText(e.getChars(),i*this._deviceCellWidth+this._deviceCharLeft,s*this._deviceCellHeight+this._deviceCharTop+this._deviceCharHeight)}_clipCell(t,e,i){this._ctx.beginPath(),this._ctx.rect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,this._deviceCellHeight),this._ctx.clip()}_getFont(t,e,i){return`${i?"italic":""} ${e?t.options.fontWeightBold:t.options.fontWeight} ${t.options.fontSize*this._coreBrowserService.dpr}px ${t.options.fontFamily}`}}e.BaseRenderLayer=n},306(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.LinkRenderLayer=void 0;const s=i(657),r=i(814),a=i(133);class o extends a.BaseRenderLayer{constructor(t,e,i,s,r,a,o){super(i,t,"link",e,!0,r,a,o),this._register(s.onShowLinkUnderline(t=>this._handleShowLinkUnderline(t))),this._register(s.onHideLinkUnderline(t=>this._handleHideLinkUnderline(t)))}resize(t,e){super.resize(t,e),this._state=void 0}reset(t){this._clearCurrentLink()}_clearCurrentLink(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);const t=this._state.y2-this._state.y1-1;t>0&&this._clearCells(0,this._state.y1+1,this._state.cols,t),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}}_handleShowLinkUnderline(t){if(t.fg===r.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._themeService.colors.background.css:void 0!==t.fg&&(0,s.is256Color)(t.fg)?this._ctx.fillStyle=this._themeService.colors.ansi[t.fg].css:this._ctx.fillStyle=this._themeService.colors.foreground.css,t.y1===t.y2)this._fillBottomLineAtCells(t.x1,t.y1,t.x2-t.x1);else{this._fillBottomLineAtCells(t.x1,t.y1,t.cols-t.x1);for(let e=t.y1+1;e{var t=s;Object.defineProperty(t,"__esModule",{value:!0}),t.WebglAddon=void 0;const e=i(426),r=i(95),a=i(399),o=i(414);class n extends e.Disposable{constructor(t){if(r.isSafari&&(0,r.getSafariVersion)()<16){const t={antialias:!1,depth:!1,preserveDrawingBuffer:!0};if(!document.createElement("canvas").getContext("webgl2",t))throw new Error("WebGL2 is only supported on Safari 16 and above")}super(),this._onChangeTextureAtlas=this._register(new o.Emitter),this.onChangeTextureAtlas=this._onChangeTextureAtlas.event,this._onAddTextureAtlasCanvas=this._register(new o.Emitter),this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=this._register(new o.Emitter),this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._onContextLoss=this._register(new o.Emitter),this.onContextLoss=this._onContextLoss.event,this._customGlyphs=t?.customGlyphs??!0,this._preserveDrawingBuffer=t?.preserveDrawingBuffer}activate(t){const i=t._core;if(!t.element)return void this._register(i.onWillOpen(()=>this.activate(t)));this._terminal=t;const s=i.coreService,r=i.optionsService,n=i,h=n._renderService,L=n._characterJoinerService,T=n._charSizeService,l=n._coreBrowserService,d=n._decorationService,c=n._logService,_=n._themeService;this._renderer=this._register(new a.WebglRenderer(t,L,T,l,s,d,c,r,_,this._customGlyphs,this._preserveDrawingBuffer)),this._register(o.EventUtils.forward(this._renderer.onContextLoss,this._onContextLoss)),this._register(o.EventUtils.forward(this._renderer.onChangeTextureAtlas,this._onChangeTextureAtlas)),this._register(o.EventUtils.forward(this._renderer.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas)),this._register(o.EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas)),h.setRenderer(this._renderer),this._register((0,e.toDisposable)(()=>{if(this._terminal._core._store._isDisposed)return;const e=this._terminal._core._renderService;e.setRenderer(this._terminal._core._createRenderer()),e.handleResize(t.cols,t.rows)}))}get textureAtlas(){return this._renderer?.textureAtlas}clearTextureAtlas(){this._renderer?.clearTextureAtlas()}}t.WebglAddon=n})(),s})()); ++!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.WebglAddon=e():t.WebglAddon=e()}(globalThis,()=>(()=>{"use strict";var t={105(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.WindowIntervalTimer=e.eventType=void 0,e.getWindow=r,e.addDisposableListener=o,e.addStandardDisposableListener=function(t,e,i,s){return o(t,e,i,s)},e.getDomNodePagePosition=function(t){const e=t.getBoundingClientRect(),i=r(t);return{left:e.left+i.scrollX,top:e.top+i.scrollY,width:e.width,height:e.height}},e.scheduleAtNextAnimationFrame=function(t,e,i=0){const s=L(t),r=new n(e,i);return s.next.push(r),s.animFrameRequested||(s.animFrameRequested=!0,t.requestAnimationFrame(()=>function(t){const e=L(t);for(e.animFrameRequested=!1,e.current=e.next,e.next=[],e.inAnimationFrameRunner=!0;e.current.length>0;)e.current.sort(n.sort),e.current.shift().execute();e.inAnimationFrameRunner=!1}(t))),r};const s=i(578);function r(t){const e=t;if(e?.ownerDocument?.defaultView)return e.ownerDocument.defaultView;const i=t;return i?.view?i.view:window}class a{constructor(t,e,i,s){this._node=t,this._type=e,this._handler=i,this._options=s,t.addEventListener(e,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function o(t,e,i,s){return new a(t,e,i,s)}e.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class n{constructor(t,e){this._runner=t,this.priority=e,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(t){console.error(t)}}static sort(t,e){return e.priority-t.priority}}const h=new Map;function L(t){let e=h.get(t);return e||(e={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(t,e)),e}class T extends s.IntervalTimer{constructor(t){super(),this._defaultTarget=t?r(t):void 0}cancelAndSet(t,e,i){super.cancelAndSet(t,e,i??this._defaultTarget??window)}}e.WindowIntervalTimer=T},814(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.INVERTED_DEFAULT_COLOR=void 0,e.INVERTED_DEFAULT_COLOR=257},959(t,e){function i(t){return 57508<=t&&t<=57558}function s(t){return t>=128512&&t<=128591||t>=127744&&t<=128511||t>=128640&&t<=128767||t>=9728&&t<=9983||t>=9984&&t<=10175||t>=65024&&t<=65039||t>=129280&&t<=129535||t>=127462&&t<=127487}Object.defineProperty(e,"__esModule",{value:!0}),e.throwIfFalsy=function(t){if(!t)throw new Error("value must not be falsy");return t},e.isPowerlineGlyph=i,e.isRestrictedPowerlineGlyph=function(t){return 57520<=t&&t<=57527},e.isEmoji=s,e.allowRescaling=function(t,e,r,a){return 1===e&&r>Math.ceil(1.5*a)&&void 0!==t&&t>255&&!s(t)&&!i(t)&&!function(t){return 57344<=t&&t<=63743}(t)},e.treatGlyphAsBackgroundColor=function(t){return i(t)||function(t){return 9472<=t&&t<=9631}(t)},e.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},e.computeNextVariantOffset=function(t,e,i=0){return(t-(2*Math.round(e)-i))%(2*Math.round(e))}},948(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(t,e,i,s=!1){if(this.selectionStart=e,this.selectionEnd=i,!e||!i||e[0]===i[0]&&e[1]===i[1])return void this.clear();const r=t.buffers.active.ydisp,a=e[1]-r,o=i[1]-r,n=Math.max(a,0),h=Math.min(o,t.rows-1);n>=t.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=a,this.viewportEndRow=o,this.viewportCappedStartRow=n,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=i[0])}isCellSelected(t,e,i){return!!this.hasSelection&&(i-=t.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&i>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&e=this.startCol)}}},536(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextBlinkStateManager=void 0;const s=i(426);class r extends s.Disposable{constructor(t,e,i){super(),this._renderCallback=t,this._coreBrowserService=e,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",t=>{this.setIntervalDuration(t)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const t=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(t||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}e.TextBlinkStateManager=r},578(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.IntervalTimer=e.MicrotaskTimer=e.TimeoutTimer=void 0,e.timeout=function(t){return new Promise(e=>setTimeout(e,t))},e.disposableTimeout=function(t,e=0,i){const r=setTimeout(()=>{t(),i&&a.dispose()},e),a=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(a),a};const s=i(426);e.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(t,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,t()},e)}setIfNotSet(t,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,t()},e))}},e.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(t){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,t())}))}},e.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(t,e,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{t()},e);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},993(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.rgba=e.rgb=e.css=e.color=e.channels=e.NULL_COLOR=void 0,e.toPaddedHex=l,e.contrastRatio=d;let i=0,s=0,r=0,a=0;var o,n,h,L,T;function l(t){const e=t.toString(16);return e.length<2?"0"+e:e}function d(t,e){return t>>0},t.toColor=function(e,i,s,r){return{css:t.toCss(e,i,s,r),rgba:t.toRgba(e,i,s,r)}}}(o||(e.channels=o={})),function(t){function e(t,e){return a=Math.round(255*e),[i,s,r]=T.toChannels(t.rgba),{css:o.toCss(i,s,r,a),rgba:o.toRgba(i,s,r,a)}}t.blend=function(t,e){if(a=(255&e.rgba)/255,1===a)return{css:e.css,rgba:e.rgba};const n=e.rgba>>24&255,h=e.rgba>>16&255,L=e.rgba>>8&255,T=t.rgba>>24&255,l=t.rgba>>16&255,d=t.rgba>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),{css:o.toCss(i,s,r),rgba:o.toRgba(i,s,r)}},t.isOpaque=function(t){return!(255&~t.rgba)},t.ensureContrastRatio=function(t,e,i){const s=T.ensureContrastRatio(t.rgba,e.rgba,i);if(s)return o.toColor(s>>24&255,s>>16&255,s>>8&255)},t.opaque=function(t){const e=(255|t.rgba)>>>0;return[i,s,r]=T.toChannels(e),{css:o.toCss(i,s,r),rgba:e}},t.opacity=e,t.multiplyOpacity=function(t,i){return a=255&t.rgba,e(t,a*i/255)},t.toColorRGB=function(t){return[t.rgba>>24&255,t.rgba>>16&255,t.rgba>>8&255]}}(n||(e.color=n={})),function(t){let e,n;try{const t=document.createElement("canvas");t.width=1,t.height=1;const i=t.getContext("2d",{willReadFrequently:!0});i&&(e=i,e.globalCompositeOperation="copy",n=e.createLinearGradient(0,0,1,1))}catch{}t.toColor=function(t){if(t.match(/#[\da-f]{3,8}/i))switch(t.length){case 4:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),o.toColor(i,s,r);case 5:return i=parseInt(t.slice(1,2).repeat(2),16),s=parseInt(t.slice(2,3).repeat(2),16),r=parseInt(t.slice(3,4).repeat(2),16),a=parseInt(t.slice(4,5).repeat(2),16),o.toColor(i,s,r,a);case 7:return{css:t,rgba:(parseInt(t.slice(1),16)<<8|255)>>>0};case 9:return{css:t,rgba:parseInt(t.slice(1),16)>>>0}}const h=t.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),a=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),o.toColor(i,s,r,a);if("transparent"===t)return{css:"transparent",rgba:0};if(!e||!n)throw new Error("css.toColor: Unsupported css format");if(e.fillStyle=n,e.fillStyle=t,"string"!=typeof e.fillStyle)throw new Error("css.toColor: Unsupported css format");if(e.fillRect(0,0,1,1),[i,s,r,a]=e.getImageData(0,0,1,1).data,255!==a)throw new Error("css.toColor: Unsupported css format");return{rgba:o.toRgba(i,s,r,a),css:t}}}(h||(e.css=h={})),function(t){function e(t,e,i){const s=t/255,r=e/255,a=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4))}t.relativeLuminance=function(t){return e(t>>16&255,t>>8&255,255&t)},t.relativeLuminance2=e}(L||(e.rgb=L={})),function(t){function e(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T0||n>0||h>0);)o-=Math.max(0,Math.ceil(.1*o)),n-=Math.max(0,Math.ceil(.1*n)),h-=Math.max(0,Math.ceil(.1*h)),T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));return(o<<24|n<<16|h<<8|255)>>>0}function n(t,e,i){const s=t>>24&255,r=t>>16&255,a=t>>8&255;let o=e>>24&255,n=e>>16&255,h=e>>8&255,T=d(L.relativeLuminance2(o,n,h),L.relativeLuminance2(s,r,a));for(;T>>0}t.blend=function(t,e){if(a=(255&e)/255,1===a)return e;const n=e>>24&255,h=e>>16&255,L=e>>8&255,T=t>>24&255,l=t>>16&255,d=t>>8&255;return i=T+Math.round((n-T)*a),s=l+Math.round((h-l)*a),r=d+Math.round((L-d)*a),o.toRgba(i,s,r)},t.ensureContrastRatio=function(t,i,s){const r=L.relativeLuminance(t>>8),a=L.relativeLuminance(i>>8);if(d(r,a)>8));if(od(r,L.relativeLuminance(e>>8))?a:e}return a}const o=n(t,i,s),h=d(r,L.relativeLuminance(o>>8));if(hd(r,L.relativeLuminance(a>>8))?o:a}return o}},t.reduceLuminance=e,t.increaseLuminance=n,t.toChannels=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]}}(T||(e.rgba=T={}))},414(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.EventUtils=e.Emitter=void 0;const s=i(426);var r;e.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(t,e,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:t,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);const a=(0,s.toDisposable)(()=>{const t=this._listeners.indexOf(r);-1!==t&&(this._listeners=this._listeners.slice(),this._listeners.splice(t,1))});return i&&(Array.isArray(i)?i.push(a):i.add(a)),a}),this._event}fire(t){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,t);const e=this._listeners;for(let i=0,s=e.length;ie.fire(t))},t.map=function(t,e){return(i,s,r)=>t(t=>i.call(s,e(t)),void 0,r)},t.any=function(...t){return(e,i,r)=>{const a=new s.DisposableStore;for(const s of t)a.add(s(t=>e.call(i,t)));return r&&(Array.isArray(r)?r.push(a):r.add(a)),a}},t.runAndSubscribe=function(t,e,i){return e(i),t(t=>e(t))}}(r||(e.EventUtils=r={}))},426(t,e){function i(t){return{dispose:t}}function s(t){if(!t)return t;if(Array.isArray(t)){for(const e of t)e.dispose();return[]}return t.dispose(),t}Object.defineProperty(e,"__esModule",{value:!0}),e.MutableDisposable=e.Disposable=e.DisposableStore=void 0,e.toDisposable=i,e.dispose=s,e.combinedDisposable=function(...t){return i(()=>s(t))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(t){return this._isDisposed?t.dispose():this._disposables.add(t),t}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const t of this._disposables)t.dispose();this._disposables.clear()}}clear(){for(const t of this._disposables)t.dispose();this._disposables.clear()}}e.DisposableStore=r;class a{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(t){return this._store.add(t)}}e.Disposable=a,a.None=Object.freeze({dispose(){}}),e.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(t){this._isDisposed||t===this._value||(this._value?.dispose(),this._value=t)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},836(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.FourKeyMap=e.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(t,e,i){this._data[t]||(this._data[t]={}),this._data[t][e]=i}get(t,e){return this._data[t]?this._data[t][e]:void 0}clear(){this._data={}}}e.TwoKeyMap=i,e.FourKeyMap=class{constructor(){this._data=new i}set(t,e,s,r,a){this._data.get(t,e)||this._data.set(t,e,new i),this._data.get(t,e).set(s,r,a)}get(t,e,i,s){return this._data.get(t,e)?.get(i,s)}clear(){this._data.clear()}}},95(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.isChromeOS=e.isLinux=e.isWindows=e.isMac=e.isSafari=e.isLegacyEdge=e.isChrome=e.isFirefox=e.isNode=void 0,e.getZoomFactor=function(t){return 1},e.getSafariVersion=function(){if(!e.isSafari)return 0;const t=i.match(/Version\/(\d+)/);return null===t||t.length<2?0:parseInt(t[1],10)},e.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=e.isNode?"node":navigator.userAgent,s=e.isNode?"node":navigator.platform;e.isFirefox=i.includes("Firefox"),e.isChrome=i.includes("Chrome"),e.isLegacyEdge=i.includes("Edge"),e.isSafari=/^((?!chrome|android).)*safari/i.test(i),e.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),e.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),e.isLinux=s.indexOf("Linux")>=0,e.isChromeOS=/\bCrOS\b/.test(i)},930(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.DebouncedIdleTask=e.IdleTaskQueue=e.PriorityTaskQueue=void 0;class i{constructor(t){this._tasks=[],this._i=0,this._logService=t}enqueue(t){this._tasks.push(t),this._start()}flush(){for(;this._ii)return r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(t){return setTimeout(()=>t(this._createDeadline(16)))}_cancelCallback(t){clearTimeout(t)}_createDeadline(t){const e=performance.now()+t;return{timeRemaining:()=>Math.max(0,e-performance.now())}}}e.PriorityTaskQueue=s,e.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(t){return requestIdleCallback(t)}_cancelCallback(t){cancelIdleCallback(t)}}:s,e.DebouncedIdleTask=class{constructor(t){this._queue=new e.IdleTaskQueue(t)}set(t){this._queue.clear(),this._queue.enqueue(t)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},917(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedAttrs=e.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(t){return[t>>>16&255,t>>>8&255,255&t]}static fromColorRGB(t){return(255&t[0])<<16|(255&t[1])<<8|255&t[2]}clone(){const t=new i;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}e.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(t){this._ext=t}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(t){this._ext&=-469762049,this._ext|=t<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(t){this._ext&=-67108864,this._ext|=67108863&t}get urlId(){return this._urlId}set urlId(t){this._urlId=t}get underlineVariantOffset(){const t=(3758096384&this._ext)>>29;return t<0?4294967288^t:t}set underlineVariantOffset(t){this._ext&=536870911,this._ext|=t<<29&3758096384}constructor(t=0,e=0){this._ext=0,this._urlId=0,this._ext=t,this._urlId=e}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&void 0===this.payload}}e.ExtendedAttrs=s},721(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellData=void 0;const s=i(348),r=i(564),a=i(917);class o extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(t){const e=new o;return e.setFromCharData(t),e}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(t){this.fg=t[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let e=!1;if(t[r.CHAR_DATA_CHAR_INDEX].length>2)e=!0;else if(2===t[r.CHAR_DATA_CHAR_INDEX].length){const i=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|t[r.CHAR_DATA_WIDTH_INDEX]<<22:e=!0}else e=!0}else this.content=t[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[r.CHAR_DATA_WIDTH_INDEX]<<22;e&&(this.combinedData=t[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|t[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor())return!1;if(this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor())return!1;if(this.isInverse()!==t.isInverse())return!1;if(this.isBold()!==t.isBold())return!1;if(this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;const e=this.isUnderlineColorDefault(),i=t.isUnderlineColorDefault();if(!e||!i){if(e!==i)return!1;if(this.getUnderlineColor()!==t.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==t.getUnderlineColorMode())return!1}}return this.isOverline()===t.isOverline()&&this.isBlink()===t.isBlink()&&this.isInvisible()===t.isInvisible()&&this.isItalic()===t.isItalic()&&this.isDim()===t.isDim()&&this.isStrikethrough()===t.isStrikethrough()}}e.CellData=o},564(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.WHITESPACE_CELL_CODE=e.WHITESPACE_CELL_WIDTH=e.WHITESPACE_CELL_CHAR=e.NULL_CELL_CODE=e.NULL_CELL_WIDTH=e.NULL_CELL_CHAR=e.CHAR_DATA_CODE_INDEX=e.CHAR_DATA_WIDTH_INDEX=e.CHAR_DATA_CHAR_INDEX=e.CHAR_DATA_ATTR_INDEX=e.DEFAULT_EXT=e.DEFAULT_ATTR=e.DEFAULT_COLOR=void 0,e.DEFAULT_COLOR=0,e.DEFAULT_ATTR=e.DEFAULT_COLOR<<9|256,e.DEFAULT_EXT=0,e.CHAR_DATA_ATTR_INDEX=0,e.CHAR_DATA_CHAR_INDEX=1,e.CHAR_DATA_WIDTH_INDEX=2,e.CHAR_DATA_CODE_INDEX=3,e.NULL_CELL_CHAR="",e.NULL_CELL_WIDTH=1,e.NULL_CELL_CODE=0,e.WHITESPACE_CELL_CHAR=" ",e.WHITESPACE_CELL_WIDTH=1,e.WHITESPACE_CELL_CODE=32},348(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Utf8ToUtf32=e.StringToUtf32=void 0,e.stringFromCodePoint=function(t){return t>65535?(t-=65536,String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):String.fromCharCode(t)},e.utf32ToString=function(t,e=0,i=t.length){let s="";for(let r=e;r65535?(e-=65536,s+=String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):s+=String.fromCharCode(e)}return s},e.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(t,e){const i=t.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=t.charCodeAt(r++);56320<=i&&i<=57343?e[s++]=1024*(this._interim-55296)+i-56320+65536:(e[s++]=this._interim,e[s++]=i),this._interim=0}for(let a=r;a=i)return this._interim=r,s;const o=t.charCodeAt(a);56320<=o&&o<=57343?e[s++]=1024*(r-55296)+o-56320+65536:(e[s++]=r,e[s++]=o);continue}65279!==r&&(e[s++]=r)}return s}},e.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(t,e){const i=t.length;if(!i)return 0;let s,r,a,o,n,h=0,L=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let a,o=0;for(;(a=this.interim[++o])&&o<4;)r<<=6,r|=63&a;const n=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,T=n-o;for(;L=i)return 0;if(a=t[L++],128!=(192&a)){L--,s=!0;break}this.interim[o++]=a,r<<=6,r|=63&a}s||(2===n?r<128?L--:e[h++]=r:3===n?r<2048||r>=55296&&r<=57343||65279===r||(e[h++]=r):r<65536||r>1114111||(e[h++]=r)),this.interim.fill(0)}const T=i-4;let l=L;for(;l=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(n=(31&s)<<6|63&r,n<128){l--;continue}e[h++]=n}else if(224==(240&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(n=(15&s)<<12|(63&r)<<6|63&a,n<2048||n>=55296&&n<=57343||65279===n)continue;e[h++]=n}else if(240==(248&s)){if(l>=i)return this.interim[0]=s,h;if(r=t[l++],128!=(192&r)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,h;if(a=t[l++],128!=(192&a)){l--;continue}if(l>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=a,h;if(o=t[l++],128!=(192&o)){l--;continue}if(n=(7&s)<<18|(63&r)<<12|(63&a)<<6|63&o,n<65536||n>1114111)continue;e[h++]=n}}return h}}},864(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.CellColorResolver=void 0;const s=i(564),r=i(993),a=i(959),o=i(915);let n,h=0,L=0,T=!1,l=!1,d=!1,c=0;e.CellColorResolver=class{constructor(t,e,i,s,r,a){this._terminal=t,this._optionService=e,this._selectionRenderModel=i,this._decorationService=s,this._coreBrowserService=r,this._themeService=a,this.result={fg:0,bg:0,ext:0}}resolve(t,e,i,_,Q){this.result.bg=t.bg,this.result.fg=t.fg,this.result.ext=268435456&t.bg?t.extended.ext:0,L=0,h=0,l=!1,T=!1,d=!1,n=this._themeService.colors,c=0;const u=t.getCode();if(u!==s.NULL_CELL_CODE&&4===t.extended.underlineStyle){const t=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));c=e*_%(2*Math.round(t))}if(0===c&&o.blockPatternCodepoints.has(u)&&(c=e*_%2*2+i*Q%2),this._decorationService.forEachDecorationAtCell(e,i,"bottom",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),d=this._selectionRenderModel.isCellSelected(this._terminal,e,i),d){if(67108864&this.result.fg||50331648&this.result.bg){if(67108864&this.result.fg)switch(50331648&this.result.fg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:L=(16777215&this.result.fg)<<8|255;break;default:L=this._themeService.colors.foreground.rgba}else switch(50331648&this.result.bg){case 16777216:case 33554432:L=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:L=(16777215&this.result.bg)<<8|255}L=r.rgba.blend(L,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}else L=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(l=!0,n.selectionForeground&&(h=n.selectionForeground.rgba>>8&16777215,T=!0),(0,a.treatGlyphAsBackgroundColor)(t.getCode())){if(67108864&this.result.fg&&!(50331648&this.result.bg))h=(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(67108864&this.result.fg)switch(50331648&this.result.bg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.bg].rgba;break;case 50331648:h=(16777215&this.result.bg)<<8|255}else switch(50331648&this.result.fg){case 16777216:case 33554432:h=this._themeService.colors.ansi[255&this.result.fg].rgba;break;case 50331648:h=(16777215&this.result.fg)<<8|255;break;default:h=this._themeService.colors.foreground.rgba}h=r.rgba.blend(h,4294967040&(this._coreBrowserService.isFocused?n.selectionBackgroundOpaque:n.selectionInactiveBackgroundOpaque).rgba|128)>>8&16777215}T=!0}}this._decorationService.forEachDecorationAtCell(e,i,"top",t=>{t.backgroundColorRGB&&(L=t.backgroundColorRGB.rgba>>8&16777215,l=!0),t.foregroundColorRGB&&(h=t.foregroundColorRGB.rgba>>8&16777215,T=!0)}),l&&(L=d?-16777216&t.bg&-134217729|L|50331648:-16777216&t.bg|L|50331648),T&&(h=-16777216&t.fg&-67108865|h|50331648),67108864&this.result.fg&&(l&&!T&&(h=50331648&this.result.bg?-134217728&this.result.fg|67108863&this.result.bg:-134217728&this.result.fg|16777215&n.background.rgba>>8|50331648,T=!0),!l&&T&&(L=50331648&this.result.fg?-67108864&this.result.bg|67108863&this.result.fg:-67108864&this.result.bg|16777215&n.foreground.rgba>>8|50331648,l=!0)),n=void 0,this.result.bg=l?L:this.result.bg,this.result.fg=T?h:this.result.fg,this.result.ext&=536870911,this.result.ext|=c<<29&3758096384}}},670(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.acquireTextureAtlas=function(t,e,i,o,n,h,L,T,l,d=!0){const c=(0,r.generateConfig)(o,n,h,L,e,i,T,l,d);for(let e=0;e=0){if((0,r.configEquals)(i.config,c))return i.atlas;1===i.ownedBy.length?(i.atlas.dispose(),a.splice(e,1)):i.ownedBy.splice(s,1);break}}for(let e=0;e{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(t=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0)return void this._restartInterval(t)}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){const t=600-(Date.now()-this._animationTimeRestarted);return this._animationTimeRestarted=void 0,void this._restartInterval(t)}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},t)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}}},697(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.observeDevicePixelDimensions=function(t,e,i){let r=new e.ResizeObserver(e=>{const s=e.find(e=>e.target===t);if(!s)return;if(!("devicePixelContentBoxSize"in s))return r?.disconnect(),void(r=void 0);const a=s.devicePixelContentBoxSize[0].inlineSize,o=s.devicePixelContentBoxSize[0].blockSize;a>0&&o>0&&i(a,o)});try{r.observe(t,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return(0,s.toDisposable)(()=>r?.disconnect())};const s=i(426)},28(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GlyphRenderer=void 0;const s=i(115),r=i(564),a=i(426),o=i(719),n=i(959);let h,L=0,T=0,l=0;class d extends a.Disposable{constructor(t,e,i,r,h){super(),this._terminal=t,this._gl=e,this._dimensions=i,this._optionsService=r,this._logService=h,this._lastSeenPageLayoutVersion=-1,this._pageOverflowWarned=!1,this._activeBuffer=0,this._vertices={count:0,attributes:new Float32Array(0),attributesBuffers:[new Float32Array(0),new Float32Array(0)]};const L=this._gl;void 0===s.TextureAtlas.maxAtlasPages&&(s.TextureAtlas.maxAtlasPages=Math.min(32,(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_IMAGE_UNITS))),s.TextureAtlas.maxTextureSize=(0,n.throwIfFalsy)(L.getParameter(L.MAX_TEXTURE_SIZE))),this._program=(0,n.throwIfFalsy)((0,o.createProgram)(L,"#version 300 es\nlayout (location = 0) in vec2 a_unitquad;\nlayout (location = 1) in vec2 a_cellpos;\nlayout (location = 2) in vec2 a_offset;\nlayout (location = 3) in vec2 a_size;\nlayout (location = 4) in float a_texpage;\nlayout (location = 5) in vec2 a_texcoord;\nlayout (location = 6) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}",function(t){let e="";for(let i=1;iL.deleteProgram(this._program))),this._projectionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_projection")),this._resolutionLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_resolution")),this._textureLocation=(0,n.throwIfFalsy)(L.getUniformLocation(this._program,"u_texture"));const T=this._vertexArrayObject=L.createVertexArray();this._register((0,a.toDisposable)(()=>L.deleteVertexArray(T))),L.bindVertexArray(T);const l=new Float32Array([0,0,1,0,0,1,1,1]),d=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(d))),L.bindBuffer(L.ARRAY_BUFFER,d),L.bufferData(L.ARRAY_BUFFER,l,L.STATIC_DRAW),L.enableVertexAttribArray(0),L.vertexAttribPointer(0,2,this._gl.FLOAT,!1,0,0);const c=new Uint8Array([0,1,2,3]),_=L.createBuffer();this._register((0,a.toDisposable)(()=>L.deleteBuffer(_))),L.bindBuffer(L.ELEMENT_ARRAY_BUFFER,_),L.bufferData(L.ELEMENT_ARRAY_BUFFER,c,L.STATIC_DRAW),this._attributesBuffer=(0,n.throwIfFalsy)(L.createBuffer()),this._register((0,a.toDisposable)(()=>L.deleteBuffer(this._attributesBuffer))),L.bindBuffer(L.ARRAY_BUFFER,this._attributesBuffer),L.enableVertexAttribArray(2),L.vertexAttribPointer(2,2,L.FLOAT,!1,44,0),L.vertexAttribDivisor(2,1),L.enableVertexAttribArray(3),L.vertexAttribPointer(3,2,L.FLOAT,!1,44,2*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(3,1),L.enableVertexAttribArray(4),L.vertexAttribPointer(4,1,L.FLOAT,!1,44,4*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(4,1),L.enableVertexAttribArray(5),L.vertexAttribPointer(5,2,L.FLOAT,!1,44,5*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(5,1),L.enableVertexAttribArray(6),L.vertexAttribPointer(6,2,L.FLOAT,!1,44,7*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(6,1),L.enableVertexAttribArray(1),L.vertexAttribPointer(1,2,L.FLOAT,!1,44,9*Float32Array.BYTES_PER_ELEMENT),L.vertexAttribDivisor(1,1),L.useProgram(this._program);const Q=new Int32Array(s.TextureAtlas.maxAtlasPages);for(let t=0;tL.deleteTexture(e.texture))),L.activeTexture(L.TEXTURE0+t),L.bindTexture(L.TEXTURE_2D,e.texture),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_S,L.CLAMP_TO_EDGE),L.texParameteri(L.TEXTURE_2D,L.TEXTURE_WRAP_T,L.CLAMP_TO_EDGE),L.texImage2D(L.TEXTURE_2D,0,L.RGBA,1,1,0,L.RGBA,L.UNSIGNED_BYTE,new Uint8Array([255,0,0,255])),this._atlasTextures[t]=e}L.enable(L.BLEND),L.blendFunc(L.SRC_ALPHA,L.ONE_MINUS_SRC_ALPHA),this.handleResize()}beginFrame(){return!this._atlas||this._atlas.pageLayoutVersion!==this._lastSeenPageLayoutVersion&&(this._lastSeenPageLayoutVersion=this._atlas.pageLayoutVersion,!0)}updateCell(t,e,i,s,r,a,o,n,h){this._updateCell(this._vertices.attributes,t,e,i,s,r,a,o,n,h)}_updateCell(t,e,i,s,a,o,d,c,_,Q){L=11*(i*this._terminal.cols+e),s!==r.NULL_CELL_CODE&&void 0!==s?this._atlas&&(h=c&&c.length>1?this._atlas.getRasterizedGlyphCombinedChar(c,a,o,d,!1,this._terminal.element):this._atlas.getRasterizedGlyph(s,a,o,d,!1,this._terminal.element),T=Math.floor((this._dimensions.device.cell.width-this._dimensions.device.char.width)/2),a!==Q&&h.offset.x>T?(l=h.offset.x-T,t[L]=-(h.offset.x-l)+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=(h.size.x-l)/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x+l/this._atlas.pages[h.texturePage].canvas.width,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x-l/this._atlas.pages[h.texturePage].canvas.width,t[L+8]=h.sizeClipSpace.y):(t[L]=-h.offset.x+this._dimensions.device.char.left,t[L+1]=-h.offset.y+this._dimensions.device.char.top,t[L+2]=h.size.x/this._dimensions.device.canvas.width,t[L+3]=h.size.y/this._dimensions.device.canvas.height,t[L+4]=h.texturePage,t[L+5]=h.texturePositionClipSpace.x,t[L+6]=h.texturePositionClipSpace.y,t[L+7]=h.sizeClipSpace.x,t[L+8]=h.sizeClipSpace.y),this._optionsService.rawOptions.rescaleOverlappingGlyphs&&(0,n.allowRescaling)(s,_,h.size.x,this._dimensions.device.cell.width)&&(t[L+2]=(this._dimensions.device.cell.width-1)/this._dimensions.device.canvas.width)):t.fill(0,L,L+11-1-2)}clear(){const t=this._terminal,e=t.cols*t.rows*11;this._vertices.count!==e?this._vertices.attributes=new Float32Array(e):this._vertices.attributes.fill(0);let i=0;for(;ithis._atlasTextures.length&&!this._pageOverflowWarned&&(this._pageOverflowWarned=!0,this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`));for(let t=0;tT.deleteProgram(this._program))),this._projectionLocation=(0,a.throwIfFalsy)(T.getUniformLocation(this._program,"u_projection"));const l=this._vertexArrayObject=T.createVertexArray();this._register((0,s.toDisposable)(()=>T.deleteVertexArray(l))),T.bindVertexArray(l);const d=new Float32Array([0,0,1,0,0,1,1,1]),c=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(c))),T.bindBuffer(T.ARRAY_BUFFER,c),T.bufferData(T.ARRAY_BUFFER,d,T.STATIC_DRAW),T.enableVertexAttribArray(3),T.vertexAttribPointer(3,2,this._gl.FLOAT,!1,0,0);const _=new Uint8Array([0,1,2,3]),Q=T.createBuffer();this._register((0,s.toDisposable)(()=>T.deleteBuffer(Q))),T.bindBuffer(T.ELEMENT_ARRAY_BUFFER,Q),T.bufferData(T.ELEMENT_ARRAY_BUFFER,_,T.STATIC_DRAW),this._attributesBuffer=(0,a.throwIfFalsy)(T.createBuffer()),this._register((0,s.toDisposable)(()=>T.deleteBuffer(this._attributesBuffer))),T.bindBuffer(T.ARRAY_BUFFER,this._attributesBuffer),T.enableVertexAttribArray(0),T.vertexAttribPointer(0,2,T.FLOAT,!1,o,0),T.vertexAttribDivisor(0,1),T.enableVertexAttribArray(1),T.vertexAttribPointer(1,2,T.FLOAT,!1,o,2*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(1,1),T.enableVertexAttribArray(2),T.vertexAttribPointer(2,4,T.FLOAT,!1,o,4*Float32Array.BYTES_PER_ELEMENT),T.vertexAttribDivisor(2,1),this._updateCachedColors(h.colors),this._register(this._themeService.onChangeColors(t=>{this._updateCachedColors(t),this._updateViewportRectangle()}))}renderBackgrounds(){this._renderVertices(this._vertices)}renderCursor(){this._renderVertices(this._verticesCursor)}_renderVertices(t){const e=this._gl;e.useProgram(this._program),e.bindVertexArray(this._vertexArrayObject),e.uniformMatrix4fv(this._projectionLocation,!1,r.PROJECTION_MATRIX),e.bindBuffer(e.ARRAY_BUFFER,this._attributesBuffer),e.bufferData(e.ARRAY_BUFFER,t.attributes,e.DYNAMIC_DRAW),e.drawElementsInstanced(this._gl.TRIANGLE_STRIP,4,e.UNSIGNED_BYTE,0,t.count)}handleResize(){this._updateViewportRectangle()}setDimensions(t){this._dimensions=t}_updateCachedColors(t){this._bgFloat=this._colorToFloat32Array(t.background),this._cursorFloat=this._colorToFloat32Array(t.cursor)}_updateViewportRectangle(){this._addRectangleFloat(this._vertices.attributes,0,0,0,this._terminal.cols*this._dimensions.device.cell.width,this._terminal.rows*this._dimensions.device.cell.height,this._bgFloat)}updateBackgrounds(t){const e=this._terminal,i=this._vertices;let s,r,a,o,n,h,L,T,l,d,c,_=1;for(s=0;s>24&255)/255,d=(h>>16&255)/255,c=(h>>8&255)/255,_=1,this._addRectangle(t.attributes,e,L,T,(o-a)*this._dimensions.device.cell.width,this._dimensions.device.cell.height,l,d,c,_)}_addRectangle(t,e,i,s,r,a,o,n,h,L){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o,t[e+5]=n,t[e+6]=h,t[e+7]=L}_addRectangleFloat(t,e,i,s,r,a,o){t[e]=i/this._dimensions.device.canvas.width,t[e+1]=s/this._dimensions.device.canvas.height,t[e+2]=r/this._dimensions.device.canvas.width,t[e+3]=a/this._dimensions.device.canvas.height,t[e+4]=o[0],t[e+5]=o[1],t[e+6]=o[2],t[e+7]=o[3]}_colorToFloat32Array(t){return new Float32Array([(t.rgba>>24&255)/255,(t.rgba>>16&255)/255,(t.rgba>>8&255)/255,(255&t.rgba)/255])}}e.RectangleRenderer=Q},208(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.RenderModel=e.COMBINED_CHAR_BIT_MASK=void 0;const s=i(948);e.COMBINED_CHAR_BIT_MASK=2147483648,e.RenderModel=class{constructor(){this.cells=new Uint32Array(0),this.lineLengths=new Uint32Array(0),this.selection=(0,s.createSelectionRenderModel)()}resize(t,e){const i=t*e*4;i!==this.cells.length&&(this.cells=new Uint32Array(i),this.lineLengths=new Uint32Array(e))}clear(){this.cells.fill(0,0),this.lineLengths.fill(0,0)}}},115(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.TextureAtlas=void 0;const s=i(0),r=i(183),a=i(959),o=i(993),n=i(836),h=i(930),L=i(917),T=i(564),l=i(414),d={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}};let c;class _{get pages(){return this._pages}constructor(t,e,i,s){this._document=t,this._config=e,this._unicodeService=i,this._logService=s,this._didWarmUp=!1,this._cacheMap=new n.FourKeyMap,this._cacheMapCombined=new n.FourKeyMap,this._pages=[],this._activePages=[],this._workBoundingBox={top:0,left:0,bottom:0,right:0},this._workAttributeData=new L.AttributeData,this._textureSize=512,this._onAddTextureAtlasCanvas=new l.Emitter,this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=new l.Emitter,this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._pageLayoutVersion=0,this.fontProbeMismatchCount=0,this._createNewPage(),this._tmpCanvas=p(t,4*this._config.deviceCellWidth+4,this._config.deviceCellHeight+4),this._tmpCtx=(0,a.throwIfFalsy)(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}dispose(){this._tmpCanvas.remove();for(const t of this.pages)t.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){const t=new h.IdleTaskQueue(this._logService);for(let e=33;e<126;e++)t.enqueue(()=>{if(!this._cacheMap.get(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT)){const t=this._drawToCache(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,!1,void 0);this._cacheMap.set(e,T.DEFAULT_COLOR,T.DEFAULT_COLOR,T.DEFAULT_EXT,t)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){this._pages.every(t=>0===t.glyphs.length&&0===t.currentRow.x&&0===t.currentRow.y)||(this._evictAllPages(),this._createNewPage())}_createNewPage(){if(_.maxAtlasPages&&this._pages.length>=Math.max(4,_.maxAtlasPages)){const t=this._pages.filter(t=>2*t.canvas.width<=(_.maxTextureSize||4096)).sort((t,e)=>e.canvas.width!==t.canvas.width?e.canvas.width-t.canvas.width:e.percentageUsed-t.percentageUsed);let e=-1,i=0;for(let s=0;st.canvas.width!==s[0].canvas.width)){this._evictAllPages();const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}const r=s.map(t=>t.glyphs[0].texturePage).sort((t,e)=>t-e),a=this.pages.length-s.length,o=this._mergePages(s,a);o.version=++Q.nextVersion;for(let t=r.length-1;t>=0;t--)this._deletePage(r[t]);this.pages.push(o),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(o.canvas)}const t=new Q(this._document,this._textureSize);return this._pages.push(t),this._activePages.push(t),this._onAddTextureAtlasCanvas.fire(t.canvas),t}_mergePages(t,e){const i=2*t[0].canvas.width,s=new Q(this._document,i,t);for(const[r,a]of t.entries()){const t=r*a.canvas.width%i,o=Math.floor(r/2)*a.canvas.height;s.ctx.drawImage(a.canvas,t,o);for(const s of a.glyphs)s.texturePage=e,s.sizeClipSpace.x=s.size.x/i,s.sizeClipSpace.y=s.size.y/i,s.texturePosition.x+=t,s.texturePosition.y+=o,s.texturePositionClipSpace.x=s.texturePosition.x/i,s.texturePositionClipSpace.y=s.texturePosition.y/i;this._onRemoveTextureAtlasCanvas.fire(a.canvas);const n=this._activePages.indexOf(a);-1!==n&&this._activePages.splice(n,1)}return s}_deletePage(t){this._pages.splice(t,1);for(let e=t;e=this._config.colors.ansi.length)throw new Error("No color found for idx "+t);return this._config.colors.ansi[t]}_getBackgroundColor(t,e,i,s){if(this._config.allowTransparency)return o.NULL_COLOR;let r;switch(t){case 16777216:case 33554432:r=this._getColorFromAnsiIndex(e);break;case 50331648:const t=L.AttributeData.toColorRGB(e);r=o.channels.toColor(t[0],t[1],t[2]);break;default:r=i?o.color.opaque(this._config.colors.foreground):this._config.colors.background}return this._config.allowTransparency||(r=o.color.opaque(r)),r}_getForegroundColor(t,e,i,r,a,n,h,T,l,d){const c=this._getMinimumContrastColor(t,e,i,r,a,n,h,l,T,d);if(c)return c;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&l&&n<8&&(n+=8),_=this._getColorFromAnsiIndex(n);break;case 50331648:const t=L.AttributeData.toColorRGB(n);_=o.channels.toColor(t[0],t[1],t[2]);break;default:_=h?this._config.colors.background:this._config.colors.foreground}return this._config.allowTransparency&&(_=o.color.opaque(_)),T&&(_=o.color.multiplyOpacity(_,s.DIM_OPACITY)),_}_resolveBackgroundRgba(t,e,i){switch(t){case 16777216:case 33554432:return this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(t,e,i,s){switch(t){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&e<8&&(e+=8),this._getColorFromAnsiIndex(e).rgba;case 50331648:return e<<8;default:return i?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(t,e,i,s,r,a,n,h,L,T){if(1===this._config.minimumContrastRatio||T)return;const l=this._getContrastCache(L),d=l.getColor(t,s);if(void 0!==d)return d??void 0;const c=this._resolveBackgroundRgba(e,i,n),_=this._resolveForegroundRgba(r,a,n,h),Q=o.rgba.ensureContrastRatio(c,_,this._config.minimumContrastRatio/(L?2:1));if(!Q)return void l.setColor(t,s,null);const u=o.channels.toColor(Q>>24&255,Q>>16&255,Q>>8&255);return l.setColor(t,s,u),u}_getContrastCache(t){return t?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_probeRasterizationFontWeight(t){const e=String(t);if(!/^(?:[1-8]\d{2}|900)$/.test(e))return;const i=this._tmpCtx.font.match(/(?:^|\s)(normal|bold|[1-9]\d{0,3})(?=\s+\d+(?:\.\d+)?px(?:\s|$))/)?.[1]??"400";if(("normal"===i?"400":"bold"===i?"700":i)!==e){this.fontProbeMismatchCount++,this.fontProbeLastMismatch={desired:e,actual:this._tmpCtx.font};try{globalThis.__orcaAtlasFontProbe?.(this.fontProbeLastMismatch)}catch{}}}_drawToCache(t,e,i,o,n,h){const T="number"==typeof t?String.fromCharCode(t):t;h&&this._tmpCanvas.parentElement!==h&&(this._tmpCanvas.style.display="none",h.append(this._tmpCanvas));const l=Math.min(this._config.deviceCellWidth*Math.max(T.length,2)+4,this._config.deviceMaxTextureSize);this._tmpCanvas.width=t?2*t-o:t-o;!1==!(o>=t)||0===_?(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L+_,s),this._tmpCtx.lineTo(T,s)):(this._tmpCtx.setLineDash([Math.round(t),Math.round(t)]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(L+_,s),this._tmpCtx.moveTo(L+_+t,s),this._tmpCtx.lineTo(T,s)),o=(0,a.computeNextVariantOffset)(T-L,t,o);break;case 5:const Q=.6,u=.3,p=T-L,g=Math.floor(Q*p),M=Math.floor(u*p),y=p-g-M;this._tmpCtx.setLineDash([g,M,y]),this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s);break;default:this._tmpCtx.moveTo(L,s),this._tmpCtx.lineTo(T,s)}n||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!O&&this._config.fontSize>=12&&!this._config.allowTransparency&&" "!==T){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";const e=this._tmpCtx.measureText(T);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in e&&e.actualBoundingBoxDescent>0){this._tmpCtx.save();const e=new Path2D;e.rect(i,h-Math.ceil(t/2),this._config.deviceCellWidth*I,l-h+Math.ceil(t/2)),this._tmpCtx.clip(e),this._tmpCtx.lineWidth=3*this._config.devicePixelRatio,this._tmpCtx.strokeStyle=E.css,this._tmpCtx.strokeText(T,S,S+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(C){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),e=t%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+e),this._tmpCtx.stroke()}if(O||this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight),"_"===T&&!this._config.allowTransparency){let t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W);if(t)for(let e=1;e<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=E.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(T,S,S+this._config.deviceCharHeight-e),t=u(this._tmpCtx.getImageData(S,S,this._config.deviceCellWidth,this._config.deviceCellHeight),E,D,W),t);e++);}if(f){const t=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),e=this._tmpCtx.lineWidth%2==1?.5:0;this._tmpCtx.lineWidth=t,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(S,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.lineTo(S+this._config.deviceCharWidth*I,S+Math.floor(this._config.deviceCharHeight/2)-e),this._tmpCtx.stroke()}this._tmpCtx.restore();const P=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height);let N;if(N=this._config.allowTransparency?function(t){for(let e=0;e0)return!1;return!0}(P):u(P,E,D,W),N)return d;const B=this._findGlyphBoundingBox(P,this._workBoundingBox,l,Z,O,S);let $,F;for(;;){if(0===this._activePages.length){const t=this._createNewPage();$=t,F=t.currentRow,F.height=B.size.y;break}$=this._activePages[this._activePages.length-1],F=$.currentRow;for(const t of this._activePages)B.size.y<=t.currentRow.height&&($=t,F=t.currentRow);for(let t=this._activePages.length-1;t>=0;t--)for(const e of this._activePages[t].fixedRows)e.height<=F.height&&B.size.y<=e.height&&($=this._activePages[t],F=e);if(B.size.x>this._textureSize){this._overflowSizePage||(_.maxAtlasPages&&this._pages.length>=_.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new Q(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),$=this._overflowSizePage,F=this._overflowSizePage.currentRow,F.x+B.size.x>=$.canvas.width&&(F.x=0,F.y+=F.height,F.height=0);break}if(F.y+B.size.y>=$.canvas.height||F.height>B.size.y+2){let t=!1;if($.currentRow.y+$.currentRow.height+B.size.y>=$.canvas.height){let e;for(const t of this._activePages)if(t.currentRow.y+t.currentRow.height+B.size.y=_.maxAtlasPages&&F.y+B.size.y<=$.canvas.height&&F.height>=B.size.y&&F.x+B.size.x<=$.canvas.width)t=!0;else{const e=this._createNewPage();$=e,F=e.currentRow,F.height=B.size.y,t=!0}}t||($.currentRow.height>0&&$.fixedRows.push($.currentRow),F={x:0,y:$.currentRow.y+$.currentRow.height,height:B.size.y},$.fixedRows.push(F),$.currentRow={x:0,y:F.y+F.height,height:0})}if(F.x+B.size.x<=$.canvas.width)break;F===$.currentRow?(F.x=0,F.y+=F.height,F.height=0):$.fixedRows.splice($.fixedRows.indexOf(F),1)}return B.texturePage=this._pages.indexOf($),B.texturePosition.x=F.x,B.texturePosition.y=F.y,B.texturePositionClipSpace.x=F.x/$.canvas.width,B.texturePositionClipSpace.y=F.y/$.canvas.height,B.sizeClipSpace.x/=$.canvas.width,B.sizeClipSpace.y/=$.canvas.height,F.height=Math.max(F.height,B.size.y),F.x+=B.size.x,$.ctx.putImageData(P,B.texturePosition.x-this._workBoundingBox.left,B.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,B.size.x,B.size.y),$.addGlyph(B),$.version=++Q.nextVersion,B}_findGlyphBoundingBox(t,e,i,s,r,a){e.top=0;const o=s?this._config.deviceCellHeight:this._tmpCanvas.height,n=s?this._config.deviceCellWidth:i;let h=!1;for(let i=0;i=a;i--){for(let s=0;s=0;i--){for(let s=0;s>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=i.rgba>>>24,h=i.rgba>>>16&255,L=i.rgba>>>8&255,T=Math.floor((Math.abs(r-n)+Math.abs(a-h)+Math.abs(o-L))/12);let l=!0;for(let e=0;ethis._handleColorChange())),this._cellColorResolver=new s.CellColorResolver(this._terminal,this._optionsService,this._model.selection,this._decorationService,this._coreBrowserService,this._themeService),this._core=this._terminal._core,this._renderLayers=[new _.LinkRenderLayer(this._core.screenElement,2,this._terminal,this._core.linkifier,this._coreBrowserService,d,this._themeService)],this.dimensions=(0,g.createRenderDimensions)(),this._devicePixelRatio=this._coreBrowserService.dpr,this._updateDimensions(),this._updateCursorBlink(),this._register(d.onOptionChange(()=>this._handleOptionsChanged())),this._textBlinkStateManager=this._register(new T.TextBlinkStateManager(()=>this._requestRedrawViewport(),this._coreBrowserService,this._optionsService)),this._resetBlinkingRowState(),this._deviceMaxTextureSize=this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextlost",t=>{this._logService.debug("webglcontextlost event received"),t.preventDefault(),this._contextRestorationTimeout=setTimeout(()=>{this._contextRestorationTimeout=void 0,this._logService.warn("webgl context not restored; firing onContextLoss"),this._onContextLoss.fire(t)},3e3)})),this._register((0,u.addDisposableListener)(this._canvas,"webglcontextrestored",t=>{this._logService.warn("webglcontextrestored event received"),clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0,(0,r.removeTerminalFromCache)(this._terminal),this._initializeWebGLState(),this._requestRedrawViewport()})),this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,this._coreBrowserService.window,(t,e)=>this._setCanvasDevicePixelDimensions(t,e)),this._register(this._coreBrowserService.onWindowChange(t=>{this._observerDisposable.value=(0,o.observeDevicePixelDimensions)(this._canvas,t,(t,e)=>this._setCanvasDevicePixelDimensions(t,e))})),this._register((0,u.addDisposableListener)(this._coreBrowserService.mainDocument,"mousedown",()=>this._cursorBlinkStateManager.value?.restartBlinkAnimation())),this._core.screenElement.appendChild(this._canvas),[this._rectangleRenderer.value,this._glyphRenderer.value]=this._initializeWebGLState(),this._isAttached=this._core.screenElement.isConnected,this._register((0,p.toDisposable)(()=>{clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0;for(const t of this._renderLayers)t.dispose();this._canvas.parentElement?.removeChild(this._canvas),(0,r.removeTerminalFromCache)(this._terminal)}))}get textureAtlas(){return this._charAtlas?.pages[0].canvas}_handleColorChange(){this._refreshCharAtlas(),this._clearModel(!0)}handleDevicePixelRatioChange(){this._devicePixelRatio!==this._coreBrowserService.dpr&&(this._devicePixelRatio=this._coreBrowserService.dpr,this.handleResize(this._terminal.cols,this._terminal.rows))}handleResize(t,e){this._updateDimensions(),this._model.resize(this._terminal.cols,this._terminal.rows),this._resetBlinkingRowState();for(const t of this._renderLayers)t.resize(this._terminal,this.dimensions);this._canvas.width=this.dimensions.device.canvas.width,this._canvas.height=this.dimensions.device.canvas.height,this._canvas.style.width=`${this.dimensions.css.canvas.width}px`,this._canvas.style.height=`${this.dimensions.css.canvas.height}px`,this._core.screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._core.screenElement.style.height=`${this.dimensions.css.canvas.height}px`,this._rectangleRenderer.value?.setDimensions(this.dimensions),this._rectangleRenderer.value?.handleResize(),this._glyphRenderer.value?.setDimensions(this.dimensions),this._glyphRenderer.value?.handleResize(),this._refreshCharAtlas(),this._clearModel(!1),this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0})}handleCharSizeChanged(){this.handleResize(this._terminal.cols,this._terminal.rows)}handleBlur(){for(const t of this._renderLayers)t.handleBlur(this._terminal);this._cursorBlinkStateManager.value?.pause(),this._requestRedrawViewport()}handleFocus(){for(const t of this._renderLayers)t.handleFocus(this._terminal);this._cursorBlinkStateManager.value?.resume(),this._requestRedrawViewport()}handleViewportVisibilityChange(t){this._textBlinkStateManager.setViewportVisible(t)}handleSelectionChanged(t,e,i){for(const s of this._renderLayers)s.handleSelectionChanged(this._terminal,t,e,i);this._model.selection.update(this._core,t,e,i),this._requestRedrawViewport()}handleCursorMove(){for(const t of this._renderLayers)t.handleCursorMove(this._terminal);this._cursorBlinkStateManager.value?.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._refreshCharAtlas(),this._updateCursorBlink()}_initializeWebGLState(){return this._rectangleRenderer.value=new d.RectangleRenderer(this._terminal,this._gl,this.dimensions,this._themeService,this._logService),this._glyphRenderer.value=new l.GlyphRenderer(this._terminal,this._gl,this.dimensions,this._optionsService,this._logService),this.handleCharSizeChanged(),[this._rectangleRenderer.value,this._glyphRenderer.value]}_refreshCharAtlas(){if(this.dimensions.device.char.width<=0&&this.dimensions.device.char.height<=0)return void(this._isAttached=!1);const t=(0,r.acquireTextureAtlas)(this._terminal,this._optionsService.rawOptions,this._themeService.colors,this.dimensions.device.cell.width,this.dimensions.device.cell.height,this.dimensions.device.char.width,this.dimensions.device.char.height,this._coreBrowserService.dpr,this._deviceMaxTextureSize,this._customGlyphs);this._charAtlas!==t&&(this._onChangeTextureAtlas.fire(t.pages[0].canvas),this._charAtlasDisposable.value=(0,p.combinedDisposable)(Q.EventUtils.forward(t.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas),Q.EventUtils.forward(t.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas))),this._charAtlas=t,this._charAtlas.warmUp(),this._glyphRenderer.value?.setAtlas(this._charAtlas)}_clearModel(t){this._model.clear(),t&&this._glyphRenderer.value?.clear()}clearTextureAtlas(){this._charAtlas?.clearTexture(),this._clearModel(!0),this._requestRedrawViewport()}clear(){this._clearModel(!0);for(const t of this._renderLayers)t.reset(this._terminal);this._resetBlinkingRowState(),this._textBlinkStateManager.setNeedsBlinkInViewport(!1),this._cursorBlinkStateManager.value?.restartBlinkAnimation(),this._updateCursorBlink()}renderRows(t,e){if(!this._isAttached){if(!(this._core.screenElement?.isConnected&&this._charSizeService.width&&this._charSizeService.height))return;this._updateDimensions(),this._refreshCharAtlas(),this._isAttached=!0}for(const i of this._renderLayers)i.handleGridChanged(this._terminal,t,e);if(!this._glyphRenderer.value||!this._rectangleRenderer.value)return;this._glyphRenderer.value.beginFrame()?(this._clearModel(!0),this._updateModel(0,this._terminal.rows-1)):this._updateModel(t,e);let i=!1,s=0;for(;this._charAtlas&&s++<32&&this._glyphRenderer.value.beginFrame();)i=!0,this._clearModel(!0),this._updateModel(0,this._terminal.rows-1);i&&this._glyphRenderer.value.invalidateAtlasTextures(),this._rectangleRenderer.value.renderBackgrounds(),this._glyphRenderer.value.render(this._model),this._cursorBlinkStateManager.value&&!this._cursorBlinkStateManager.value.isCursorVisible||this._rectangleRenderer.value.renderCursor()}_updateCursorBlink(){this._coreService.decPrivateModes.cursorBlink??this._terminal.options.cursorBlink?this._cursorBlinkStateManager.value=new a.CursorBlinkStateManager(()=>{this._requestRedrawCursor()},this._coreBrowserService):this._cursorBlinkStateManager.clear(),this._requestRedrawCursor()}_updateModel(t,e){const i=this._core;let s,r,a,o,n,h,T,l,d,_,Q,u,p,g,M,f,C,m=this._workCell;t=v(t,i.rows-1,0),e=v(e,i.rows-1,0);const w=this._coreService.decPrivateModes.cursorStyle??i.options.cursorStyle??"block",x=this._terminal.buffer.active.baseY+this._terminal.buffer.active.cursorY,b=x-i.buffer.ydisp,E=Math.min(this._terminal.buffer.active.cursorX,i.cols-1);let R=-1;const k=this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden&&(!this._cursorBlinkStateManager.value||this._cursorBlinkStateManager.value.isCursorVisible);this._model.cursor=void 0;let A=!1;for(r=t;r<=e;r++){a=r+i.buffer.ydisp;const t=i.buffer.lines.get(a);if(!t){for(this._model.lineLengths[r]=0,f=0;f=T,d=f,n.length>0&&f===n[0][0]&&l){_=n.shift();const t=this._model.selection.isCellSelected(this._terminal,_[0],a);for(M=_[0]+1;M<_[1];M++)l&&=t===this._model.selection.isCellSelected(this._terminal,M,a);l&&=!Q||E<_[0]||E>=_[1],l?(h=!0,m=new y(m,o.translateToString(!0,_[0],_[1]),_[1]-_[0]),d=_[1]-1):T=_[1]}if(u=m.getChars(),p=m.getCode(),M=4*(r*i.cols+f),!e&&m.isBlink()&&(e=!0),this._cellColorResolver.resolve(m,f,a,this.dimensions.device.cell.width,this.dimensions.device.cell.height),k&&a===x&&(f===E&&(this._model.cursor={x:E,y:b,width:m.getWidth(),style:this._coreBrowserService.isFocused?w:i.options.cursorInactiveStyle,cursorWidth:i.options.cursorWidth,dpr:this._devicePixelRatio},R=E+m.getWidth()-1),f>=E&&f<=R&&(this._coreBrowserService.isFocused&&"block"===w||!1===this._coreBrowserService.isFocused&&"block"===i.options.cursorInactiveStyle)&&(this._cellColorResolver.result.fg=50331648|this._themeService.colors.cursorAccent.rgba>>8&16777215,this._cellColorResolver.result.bg=50331648|this._themeService.colors.cursor.rgba>>8&16777215)),this._textBlinkStateManager.isEnabled&&!this._textBlinkStateManager.isBlinkOn&&m.isBlink()&&(this._cellColorResolver.result.fg|=1073741824),p!==L.NULL_CELL_CODE&&(this._model.lineLengths[r]=f+1),(this._model.cells[M]!==p||this._model.cells[M+1]!==this._cellColorResolver.result.bg||this._model.cells[M+2]!==this._cellColorResolver.result.fg||this._model.cells[M+3]!==this._cellColorResolver.result.ext)&&(A=!0,u.length>1&&(p|=c.COMBINED_CHAR_BIT_MASK),this._model.cells[M]=p,this._model.cells[M+1]=this._cellColorResolver.result.bg,this._model.cells[M+2]=this._cellColorResolver.result.fg,this._model.cells[M+3]=this._cellColorResolver.result.ext,g=m.getWidth(),this._glyphRenderer.value.updateCell(f,r,p,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext,u,g,s),h)){for(m=this._workCell,f++;f<=d;f++)C=4*(r*i.cols+f),this._nullModelCell(f,r,C,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext);f--}}this._setRowBlinkState(r,e)}A&&this._rectangleRenderer.value.updateBackgrounds(this._model),this._rectangleRenderer.value.updateCursor(this._model),this._updateTextBlinkState()}_nullModelCell(t,e,i,s,r,a){this._glyphRenderer.value.updateCell(t,e,L.NULL_CELL_CODE,s,r,a,L.NULL_CELL_CHAR,0,0),this._model.cells[i]=L.NULL_CELL_CODE,this._model.cells[i+1]=s,this._model.cells[i+2]=r,this._model.cells[i+3]=a}_resetBlinkingRowState(){this._rowHasBlinkingCells=new Array(this._terminal.rows).fill(!1),this._rowHasBlinkingCellsCount=0}_setRowBlinkState(t,e){this._rowHasBlinkingCells[t]!==e&&(this._rowHasBlinkingCells[t]=e,this._rowHasBlinkingCellsCount+=e?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}_updateDimensions(){this._charSizeService.width&&this._charSizeService.height&&(this.dimensions.device.char.width=Math.floor(this._charSizeService.width*this._devicePixelRatio),this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*this._devicePixelRatio),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.top=1===this._optionsService.rawOptions.lineHeight?0:Math.round((this.dimensions.device.cell.height-this.dimensions.device.char.height)/2),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.char.left=Math.floor(this._optionsService.rawOptions.letterSpacing/2),this.dimensions.device.canvas.height=this._terminal.rows*this.dimensions.device.cell.height,this.dimensions.device.canvas.width=this._terminal.cols*this.dimensions.device.cell.width,this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/this._devicePixelRatio),this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/this._devicePixelRatio),this.dimensions.css.cell.height=this.dimensions.device.cell.height/this._devicePixelRatio,this.dimensions.css.cell.width=this.dimensions.device.cell.width/this._devicePixelRatio)}_setCanvasDevicePixelDimensions(t,e){this._canvas.width===t&&this._canvas.height===e||(this._canvas.width=t,this._canvas.height=e,this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0}))}_requestRedrawViewport(){this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1})}_requestRedrawCursor(){const t=this._terminal.buffer.active.cursorY;this._onRequestRedraw.fire({start:t,end:t})}}e.WebglRenderer=M;class y extends n.AttributeData{constructor(t,e,i){super(),this.content=0,this.combinedData="",this.fg=t.fg,this.bg=t.bg,this.combinedData=e,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(t){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}function v(t,e,i=0){return Math.max(Math.min(t,e),i)}e.JoinedCellData=y},719(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.GLTexture=e.PROJECTION_MATRIX=void 0,e.createProgram=function(t,e,i,a){const o=(0,s.throwIfFalsy)(t.createProgram());if(t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.VERTEX_SHADER,e,a))),t.attachShader(o,(0,s.throwIfFalsy)(r(t,t.FRAGMENT_SHADER,i,a))),t.linkProgram(o),t.getProgramParameter(o,t.LINK_STATUS))return o;a.error(t.getProgramInfoLog(o)),t.deleteProgram(o)},e.createShader=r,e.expandFloat32Array=function(t,e){const i=Math.min(2*t.length,e),s=new Float32Array(i);for(let e=0;e{const e=[],i=[3/8,2/8,3/8],s=[0,3/8,5/8];for(let r=0;r<3;r++){const a=t>>2*r&1,o=t>>2*r+1&1;a&&o?e.push(`M0,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):a?e.push(`M0,${s[r]} L0.5,${s[r]} L0.5,${s[r]+i[r]} L0,${s[r]+i[r]} Z`):o&&e.push(`M0.5,${s[r]} L1,${s[r]} L1,${s[r]+i[r]} L0.5,${s[r]+i[r]} Z`)}return e.join(" ")}}}function r(t){const e=[],i=.15,s=.015,r=.075,a=.0375,o=.95;if(64&t){const t=.175,a=.2125,n=.25,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(32&t){const t=o-i,s=.875,r=o,n=.265,h=.485;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(16&t){const t=o-i,s=.875,r=o,n=.515,h=.735;e.push(`M${s},${n} L${r},${n+a} L${r},${h-a} L${s},${h} L${t},${h-a} L${t},${n+a} Z`)}if(8&t){const t=.75,a=.7875,n=.825,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}if(4&t){const t=.05,i=.125,s=.2,r=.515,o=.735;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(2&t){const t=.05,i=.125,s=.2,r=.265,o=.485;e.push(`M${i},${r} L${s},${r+a} L${s},${o-a} L${i},${o} L${t},${o-a} L${t},${r+a} Z`)}if(1&t){const t=.4625,a=.5,n=.5375,h=.2+s,L=o-i-s;e.push(`M${h},${a} L${h+r},${t} L${L-r},${t} L${L},${a} L${L-r},${n} L${h+r},${n} Z`)}return e.join(" ")}Object.defineProperty(e,"__esModule",{value:!0}),e.blockPatternCodepoints=e.customGlyphDefinitions=void 0,function(t){t.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),t.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),t.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),t.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),t.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),t.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),t.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.CURVE_UP_RIGHT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1}),t.CURVE_UP_LEFT=Object.freeze({type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1}),t.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),t.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),t.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),t.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),t.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),t.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})}(i||(i={})),e.customGlyphDefinitions={"─":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"━":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"│":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"┃":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"┄":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"┅":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"┆":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"┇":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"┈":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"┉":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"┊":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"┋":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"┌":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"┍":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┎":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┏":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"┐":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"┑":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┒":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┓":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"└":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"┕":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┖":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┗":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"┘":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"┙":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┚":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┛":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"├":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"┝":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┞":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┟":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┠":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┡":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┢":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┣":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"┤":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"┥":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┦":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┧":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┨":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"┩":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┪":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┫":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"┬":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"┭":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┮":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┯":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┰":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"┱":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"┲":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"┳":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"┴":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"┵":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┶":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┷":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"┸":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"┹":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"┺":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"┻":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"┼":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"┽":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"┾":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"┿":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"╀":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"╁":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╂":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"╃":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"╄":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"╅":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"╆":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"╇":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"╈":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"╉":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"╊":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"╋":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"╌":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"╍":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"╎":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"╏":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"═":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"║":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╒":{type:2,data:(t,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╓":{type:2,data:(t,e)=>`M${.5-t},1 L${.5-t},.5 L1,.5 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╔":{type:2,data:(t,e)=>`M1,${.5-e} L${.5-t},${.5-e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╕":{type:2,data:(t,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╖":{type:2,data:(t,e)=>`M${.5+t},1 L${.5+t},.5 L0,.5 M${.5-t},.5 L${.5-t},1`,strokeWidth:1},"╗":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5+t},${.5-e} L${.5+t},1`,strokeWidth:1},"╘":{type:2,data:(t,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"╙":{type:2,data:(t,e)=>`M1,.5 L${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╚":{type:2,data:(t,e)=>`M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0 M1,${.5+e} L${.5-t},${.5+e} L${.5-t},0`,strokeWidth:1},"╛":{type:2,data:(t,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"╜":{type:2,data:(t,e)=>`M0,.5 L${.5+t},.5 L${.5+t},0 M${.5-t},.5 L${.5-t},0`,strokeWidth:1},"╝":{type:2,data:(t,e)=>`M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M0,${.5+e} L${.5+t},${.5+e} L${.5+t},0`,strokeWidth:1},"╞":{type:2,data:(t,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"╟":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1 M${.5+t},.5 L1,.5`,strokeWidth:1},"╠":{type:2,data:(t,e)=>`M${.5-t},0 L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╡":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"╢":{type:2,data:(t,e)=>`M0,.5 L${.5-t},.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╣":{type:2,data:(t,e)=>`M${.5+t},0 L${.5+t},1 M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0`,strokeWidth:1},"╤":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"╥":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},1 M${.5+t},.5 L${.5+t},1`,strokeWidth:1},"╦":{type:2,data:(t,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1`,strokeWidth:1},"╧":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╨":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},.5 L${.5-t},0 M${.5+t},.5 L${.5+t},0`,strokeWidth:1},"╩":{type:2,data:(t,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╪":{type:2,data:(t,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"╫":{type:2,data:(t,e)=>`M0,.5 L1,.5 M${.5-t},0 L${.5-t},1 M${.5+t},0 L${.5+t},1`,strokeWidth:1},"╬":{type:2,data:(t,e)=>`M0,${.5+e} L${.5-t},${.5+e} L${.5-t},1 M1,${.5+e} L${.5+t},${.5+e} L${.5+t},1 M0,${.5-e} L${.5-t},${.5-e} L${.5-t},0 M1,${.5-e} L${.5+t},${.5-e} L${.5+t},0`,strokeWidth:1},"╭":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╮":{type:2,data:(t,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╯":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"╰":{type:2,data:(t,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"╱":{type:2,data:"M1,0 L0,1",strokeWidth:1},"╲":{type:2,data:"M0,0 L1,1",strokeWidth:1},"╳":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"╴":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"╵":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"╶":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"╷":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"╸":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"╹":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"╺":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"╻":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"╼":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"╽":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"╾":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"╿":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"▀":{type:0,data:[{x:0,y:0,w:8,h:4}]},"▁":{type:0,data:[{x:0,y:7,w:8,h:1}]},"▂":{type:0,data:[{x:0,y:6,w:8,h:2}]},"▃":{type:0,data:[{x:0,y:5,w:8,h:3}]},"▄":{type:0,data:[{x:0,y:4,w:8,h:4}]},"▅":{type:0,data:[{x:0,y:3,w:8,h:5}]},"▆":{type:0,data:[{x:0,y:2,w:8,h:6}]},"▇":{type:0,data:[{x:0,y:1,w:8,h:7}]},"█":{type:0,data:[{x:0,y:0,w:8,h:8}]},"▉":{type:0,data:[{x:0,y:0,w:7,h:8}]},"▊":{type:0,data:[{x:0,y:0,w:6,h:8}]},"▋":{type:0,data:[{x:0,y:0,w:5,h:8}]},"▌":{type:0,data:[{x:0,y:0,w:4,h:8}]},"▍":{type:0,data:[{x:0,y:0,w:3,h:8}]},"▎":{type:0,data:[{x:0,y:0,w:2,h:8}]},"▏":{type:0,data:[{x:0,y:0,w:1,h:8}]},"▐":{type:0,data:[{x:4,y:0,w:4,h:8}]},"░":{type:1,data:[[1,0],[0,0]]},"▒":{type:1,data:[[1,0],[0,1]]},"▓":{type:1,data:[[1,1],[1,0]]},"▔":{type:0,data:[{x:0,y:0,w:8,h:1}]},"▕":{type:0,data:[{x:7,y:0,w:1,h:8}]},"▖":{type:0,data:[{x:0,y:4,w:4,h:4}]},"▗":{type:0,data:[{x:4,y:4,w:4,h:4}]},"▘":{type:0,data:[{x:0,y:0,w:4,h:4}]},"▙":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"▚":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"▛":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"▜":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"▝":{type:0,data:[{x:4,y:0,w:4,h:4}]},"▞":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"▟":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"":i.LINE_H,"":i.LINE_V,"":i.FADE_RIGHT,"":i.FADE_LEFT,"":i.FADE_DOWN,"":i.FADE_UP,"":i.CURVE_DOWN_RIGHT,"":i.CURVE_DOWN_LEFT,"":i.CURVE_UP_RIGHT,"":i.CURVE_UP_LEFT,"":[i.LINE_V,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT],"":[i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT],"":[i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_UP_RIGHT],"":[i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_UP_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_DOWN_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_RIGHT],"":[i.LINE_V,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_V,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.LINE_H,i.CURVE_DOWN_RIGHT,i.CURVE_UP_LEFT],"":[i.LINE_H,i.CURVE_DOWN_LEFT,i.CURVE_UP_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE],"":i.NODE_STROKE,"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_STROKE,i.NODE_LINE_DOWN],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_UP],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_FILL,i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"":[i.NODE_STROKE,i.NODE_LINE_UP,i.NODE_LINE_DOWN,i.NODE_LINE_LEFT,i.NODE_LINE_RIGHT],"🬀":s(1),"🬁":s(2),"🬂":s(3),"🬃":s(4),"🬄":s(5),"🬅":s(6),"🬆":s(7),"🬇":s(8),"🬈":s(9),"🬉":s(10),"🬊":s(11),"🬋":s(12),"🬌":s(13),"🬍":s(14),"🬎":s(15),"🬏":s(16),"🬐":s(17),"🬑":s(18),"🬒":s(19),"🬓":s(20),"🬔":s(22),"🬕":s(23),"🬖":s(24),"🬗":s(25),"🬘":s(26),"🬙":s(27),"🬚":s(28),"🬛":s(29),"🬜":s(30),"🬝":s(31),"🬞":s(32),"🬟":s(33),"🬠":s(34),"🬡":s(35),"🬢":s(36),"🬣":s(37),"🬤":s(38),"🬥":s(39),"🬦":s(40),"🬧":s(41),"🬨":s(43),"🬩":s(44),"🬪":s(45),"🬫":s(46),"🬬":s(47),"🬭":s(48),"🬮":s(49),"🬯":s(50),"🬰":s(51),"🬱":s(52),"🬲":s(53),"🬳":s(54),"🬴":s(55),"🬵":s(56),"🬶":s(57),"🬷":s(58),"🬸":s(59),"🬹":s(60),"🬺":s(61),"🬻":s(62),"🬼":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"🬽":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"🬾":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"🬿":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"🭀":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"🭁":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭂":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"🭃":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"🭄":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"🭅":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"🭆":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"🭇":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"🭈":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"🭉":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"🭊":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"🭋":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"🭌":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"🭍":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"🭎":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"🭏":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"🭐":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"🭑":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"🭒":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭓":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"🭔":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"🭕":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"🭖":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"🭗":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"🭘":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"🭙":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"🭚":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"🭛":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"🭜":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"🭝":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"🭞":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"🭟":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"🭠":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"🭡":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"🭢":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"🭣":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"🭤":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"🭥":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"🭦":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"🭧":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"🭨":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"🭩":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"🭪":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"🭫":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"🭬":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"🭭":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"🭮":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"🭯":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"🭰":{type:0,data:[{x:1,y:0,w:1,h:8}]},"🭱":{type:0,data:[{x:2,y:0,w:1,h:8}]},"🭲":{type:0,data:[{x:3,y:0,w:1,h:8}]},"🭳":{type:0,data:[{x:4,y:0,w:1,h:8}]},"🭴":{type:0,data:[{x:5,y:0,w:1,h:8}]},"🭵":{type:0,data:[{x:6,y:0,w:1,h:8}]},"🭶":{type:0,data:[{x:0,y:1,w:8,h:1}]},"🭷":{type:0,data:[{x:0,y:2,w:8,h:1}]},"🭸":{type:0,data:[{x:0,y:3,w:8,h:1}]},"🭹":{type:0,data:[{x:0,y:4,w:8,h:1}]},"🭺":{type:0,data:[{x:0,y:5,w:8,h:1}]},"🭻":{type:0,data:[{x:0,y:6,w:8,h:1}]},"🭼":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🭽":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭾":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"🭿":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"🮀":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮁":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"🮂":{type:0,data:[{x:0,y:0,w:8,h:2}]},"🮃":{type:0,data:[{x:0,y:0,w:8,h:3}]},"🮄":{type:0,data:[{x:0,y:0,w:8,h:5}]},"🮅":{type:0,data:[{x:0,y:0,w:8,h:6}]},"🮆":{type:0,data:[{x:0,y:0,w:8,h:7}]},"🮇":{type:0,data:[{x:6,y:0,w:2,h:8}]},"🮈":{type:0,data:[{x:5,y:0,w:3,h:8}]},"🮉":{type:0,data:[{x:3,y:0,w:5,h:8}]},"🮊":{type:0,data:[{x:2,y:0,w:6,h:8}]},"🮋":{type:0,data:[{x:1,y:0,w:7,h:8}]},"🮌":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"🮍":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"🮎":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"🮏":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"🮐":{type:1,data:[[0,1],[1,0]]},"🮑":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"🮒":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"🮔":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"🮕":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"🮖":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"🮗":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"🮘":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"🮙":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"🮚":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"🮛":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"🮜":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"🮝":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"🮞":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"🮟":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"🮠":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"🮡":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"🮢":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"🮣":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"🮤":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"🮥":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"🮦":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"🮧":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"🮨":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"🮩":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"🮪":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"🮫":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"🮬":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"🮭":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"🮮":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"🮯":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"🮰":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"🮱":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"🮲":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"🮳":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"🮴":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"🮵":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮶":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"🮷":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮸":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"🮹":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"🮺":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"🮻":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"🮼":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"🮽":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"🮾":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"🮿":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"🯀":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"🯁":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"🯂":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"🯃":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"🯄":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"🯅":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯆":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯇":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯈":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯉":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"🯊":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"🯋":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"🯌":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"🯍":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"🯎":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"🯏":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"🯐":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"🯑":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"🯒":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"🯓":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"🯔":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"🯕":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"🯖":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"🯗":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"🯘":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"🯙":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"🯚":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"🯛":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"🯜":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"🯝":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"🯞":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"🯟":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"🯠":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"🯡":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"🯢":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"🯣":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"🯤":{type:0,data:[{x:2,y:0,w:4,h:4}]},"🯥":{type:0,data:[{x:2,y:4,w:4,h:4}]},"🯦":{type:0,data:[{x:0,y:2,w:4,h:4}]},"🯧":{type:0,data:[{x:4,y:2,w:4,h:4}]},"🯨":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"🯩":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"🯪":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"🯫":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"🯬":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"🯭":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"🯮":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"🯯":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"🯰":{type:5,data:{d:r(126),type:0},scaleType:1},"🯱":{type:5,data:{d:r(48),type:0},scaleType:1},"🯲":{type:5,data:{d:r(109),type:0},scaleType:1},"🯳":{type:5,data:{d:r(121),type:0},scaleType:1},"🯴":{type:5,data:{d:r(51),type:0},scaleType:1},"🯵":{type:5,data:{d:r(91),type:0},scaleType:1},"🯶":{type:5,data:{d:r(95),type:0},scaleType:1},"🯷":{type:5,data:{d:r(114),type:0},scaleType:1},"🯸":{type:5,data:{d:r(127),type:0},scaleType:1},"🯹":{type:5,data:{d:r(123),type:0},scaleType:1},"🯺":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(t,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},e.blockPatternCodepoints=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951])},183(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.createPatternCanvas=n,e.tryDrawCustomGlyph=function(t,e,i,s,a,o,n,L,T,l,d,c,_=0){const Q=r.customGlyphDefinitions[e];if(Q){const e=Array.isArray(Q)?Q:[Q];for(const r of e)h(t,r,i,s,a,o,n,L,T,l,d,c,_);return!0}return!1};const s=i(959),r=i(915),a="undefined"==typeof OffscreenCanvas?void 0:(t,e)=>new OffscreenCanvas(t,e),o=(t,e)=>{const i=document.createElement("canvas");return i.width=t,i.height=e,i};function n(t,e,i=a,s=o){return i?.(t,e)??s(t,e)}function h(t,e,i,r,a,o,h,d,Q,u,p,g,M=0){let y=a,v=o,f=i,C=r;switch(1===e.scaleType&&(y=h,v=d,f=i+(a-h)/2,C=r+(o-d)/2),e.clipPath&&(t.save(),function(t,e,i,s,r,a){t.beginPath();for(const o of e.split(" ")){const e=o[0];if("Z"===e){t.closePath();continue}const n=o.substring(1).split(",");if(!n[0]||!n[1])continue;const h=i+parseFloat(n[0])*r,L=s+parseFloat(n[1])*a;"M"===e?t.moveTo(h,L):"L"===e&&t.lineTo(h,L)}t.clip()}(t,e.clipPath,f,C,y,v)),e.type){case 0:!function(t,e,i,s,r,a){for(let o=0;o7&&parseInt(T.slice(7,9),16)||1;else{if(!T.startsWith("rgba"))throw new Error(`Unexpected fillStyle color format "${T}" when drawing pattern glyph`);[l,c,_,Q]=T.substring(5,T.length-1).split(",").map(t=>parseFloat(t))}for(let t=0;t>1&1,_=1&h;0!==c||0!==_?d.setTransform((new DOMMatrix).translateSelf(-c,-_)):d.setTransform(new DOMMatrix),t.fillStyle=d,t.fillRect(i,r,a,o)}(t,e.data,f,C,y,v,M);break;case 2:!function(t,e,i,s,r,a,o,n,h){let L;t.save(),t.beginPath(),t.rect(i,s,r,a),t.clip(),t.beginPath(),L="function"==typeof e?e(.15,.15/a*r):e;const T={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const e of L.split(" ")){const h=e[0];if("Z"===h){t.closePath(),T.lastCommand=h;continue}const L=c[h];if(!L){n.error(`Could not find drawing instructions for "${h}"`);continue}const l=e.substring(1).split(",");l[0]&&l[1]&&(L(t,_(l,r,a,i,s,!0,o,0,0,!1),T),T.lastCommand=h)}void 0!==h?(t.strokeStyle=t.fillStyle,t.lineWidth=o*h,t.stroke()):t.fill(),t.closePath(),t.restore()}(t,e.data,f,C,y,v,u,p,e.strokeWidth);break;case 3:!function(t,e,i,s,r,a,o,n){const h="string"==typeof e?e:e(0,0);t.beginPath();let L=0,l=0,d=0,c=0,_="";for(const e of h.split(" ")){const o=e[0],n=e.substring(1).split(",");if("Z"===o){t.closePath(),_=o;continue}if("V"===o){const e=s+parseFloat(n[0])*a;t.lineTo(L,e),l=e,d=L,c=l,_=o;continue}if("H"===o){const e=i+parseFloat(n[0])*r;t.lineTo(e,l),L=e,d=L,c=l,_=o;continue}if(!n[0]||!n[1])continue;if("A"===o){const e=parseFloat(n[0])*r,o=parseFloat(n[1])*a,h=parseFloat(n[2])*Math.PI/180,d=parseInt(n[3],10),c=parseInt(n[4],10),_=i+parseFloat(n[5])*r,Q=s+parseFloat(n[6])*a;T(t,L,l,e,o,h,d,c,_,Q),L=_,l=Q;continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});if("M"===o)t.moveTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("L"===o)t.lineTo(h[0],h[1]),L=h[0],l=h[1],d=L,c=l;else if("Q"===o)t.quadraticCurveTo(h[0],h[1],h[2],h[3]),d=h[0],c=h[1],L=h[2],l=h[3];else if("T"===o){let e,i;"Q"===_||"T"===_?(e=2*L-d,i=2*l-c):(e=L,i=l),t.quadraticCurveTo(e,i,h[0],h[1]),d=e,c=i,L=h[0],l=h[1]}else"C"===o&&(t.bezierCurveTo(h[0],h[1],h[2],h[3],h[4],h[5]),d=h[2],c=h[3],L=h[4],l=h[5]);_=o}void 0!==n?(t.strokeStyle=t.fillStyle,t.lineWidth=o*n,t.stroke()):t.fill()}(t,e.data,f,C,y,v,u,e.strokeWidth);break;case 4:!function(t,e,i,s,r,a,o,n){t.save(),t.fillRect(i,s,r,a),n&&(t.fillStyle=n,t.strokeStyle=n),t.lineWidth=o,t.lineCap="square",t.beginPath();for(const o of e.d.split(" ")){const e=o[0],n=o.substring(1).split(",");if(!n[0]||!n[1]){"Z"===e&&t.closePath();continue}const h=n.map((t,e)=>{const o=parseFloat(t);return e%2==0?i+o*r:s+o*a});"M"===e?t.moveTo(h[0],h[1]):"L"===e&&t.lineTo(h[0],h[1])}1===e.type?t.stroke():t.fill(),t.restore()}(t,e.data,f,C,y,v,u,g);break;case 5:!function(t,e,i,s,r,a,o,n,h){const L=new Path2D;L.rect(i,s,r,a),t.clip(L),t.beginPath();const T=o/12;t.lineWidth=n*T;const l={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(const o of e.d.split(" ")){const L=o[0];if("Z"===L){t.closePath(),l.lastCommand=L;continue}const d=c[L];if(!d){h.error(`Could not find drawing instructions for "${L}"`);continue}const Q=o.substring(1).split(",");Q[0]&&Q[1]&&(d(t,_(Q,r,a,i,s,!1,n,(e.leftPadding??0)*(T/2),(e.rightPadding??0)*(T/2)),l),l.lastCommand=L)}1===e.type?(t.strokeStyle=t.fillStyle,t.stroke()):t.fill(),t.closePath()}(t,e.data,f,C,y,v,Q,u,p);break;case 6:!function(t,e,i,s,r,a){const o=r/8,n=.1*a,h=.8*a/8,T=Math.min(o,h);for(let r=0;r<8;r++)if(e&1<1){const t=Math.sqrt(y);u=(s*=t)*s,p=(r*=t)*r}let v=(u*p-u*M-p*g)/(u*M+p*g);v<0&&(v=0);const f=(o===n?-1:1)*Math.sqrt(v),C=f*(s*Q/r),m=f*(-r*_/s),w=T*C-l*m+(e+h)/2,x=l*C+T*m+(i+L)/2,b=(_-C)/s,E=(Q-m)/r,R=(-_-C)/s,k=(-Q-m)/r,A=Math.atan2(E,b);let Z=Math.atan2(k,R)-A;0===n&&Z>0?Z-=2*Math.PI:1===n&&Z<0&&(Z+=2*Math.PI);const D=A+Z;t.ellipse(w,x,s,r,a,A,D,0===n)}const l=new Map;function d(t,e,i=0){return Math.max(Math.min(t,e),i)}const c={C:(t,e,i)=>{t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),i.lastControlX=e[2],i.lastControlY=e[3],i.currentX=e[4],i.currentY=e[5]},L:(t,e,i)=>{t.lineTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},M:(t,e,i)=>{t.moveTo(e[0],e[1]),i.lastControlX=i.currentX=e[0],i.lastControlY=i.currentY=e[1]},Q:(t,e,i)=>{t.quadraticCurveTo(e[0],e[1],e[2],e[3]),i.lastControlX=e[0],i.lastControlY=e[1],i.currentX=e[2],i.currentY=e[3]},T:(t,e,i)=>{let s,r;"Q"===i.lastCommand||"T"===i.lastCommand?(s=2*i.currentX-i.lastControlX,r=2*i.currentY-i.lastControlY):(s=i.currentX,r=i.currentY),t.quadraticCurveTo(s,r,e[0],e[1]),i.lastControlX=s,i.lastControlY=r,i.currentX=e[0],i.currentY=e[1]}};function _(t,e,i,s,r,a,o,n=0,h=0,L=!0){const T=t.map(t=>parseFloat(t)||parseInt(t));if(T.length<2)throw new Error("Too few arguments for instruction");for(let t=0;t{this._refreshCharAtlas(t,e),this.reset(t)})),this._register((0,r.toDisposable)(()=>{this._canvas.remove()}))}_initCanvas(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()}handleBlur(t){}handleFocus(t){}handleCursorMove(t){}handleGridChanged(t,e,i){}handleSelectionChanged(t,e,i,s=!1){}_setTransparency(t,e){if(e===this._alpha)return;const i=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,i),this._refreshCharAtlas(t,this._themeService.colors),this.handleGridChanged(t,0,t.rows-1)}_refreshCharAtlas(t,e){this._deviceCharWidth<=0&&this._deviceCharHeight<=0||(this._charAtlas=(0,s.acquireTextureAtlas)(t,this._optionsService.rawOptions,e,this._deviceCellWidth,this._deviceCellHeight,this._deviceCharWidth,this._deviceCharHeight,this._coreBrowserService.dpr,2048),this._charAtlas.warmUp())}resize(t,e){this._deviceCellWidth=e.device.cell.width,this._deviceCellHeight=e.device.cell.height,this._deviceCharWidth=e.device.char.width,this._deviceCharHeight=e.device.char.height,this._deviceCharLeft=e.device.char.left,this._deviceCharTop=e.device.char.top,this._canvas.width=e.device.canvas.width,this._canvas.height=e.device.canvas.height,this._canvas.style.width=`${e.css.canvas.width}px`,this._canvas.style.height=`${e.css.canvas.height}px`,this._alpha||this._clearAll(),this._refreshCharAtlas(t,this._themeService.colors)}_fillBottomLineAtCells(t,e,i=1){this._ctx.fillRect(t*this._deviceCellWidth,(e+1)*this._deviceCellHeight-this._coreBrowserService.dpr-1,i*this._deviceCellWidth,this._coreBrowserService.dpr)}_clearAll(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))}_clearCells(t,e,i,s){this._alpha?this._ctx.clearRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,s*this._deviceCellHeight))}_fillCharTrueColor(t,e,i,s){this._ctx.font=this._getFont(t,!1,!1),this._ctx.textBaseline=o.TEXT_BASELINE,this._clipCell(i,s,e.getWidth()),this._ctx.fillText(e.getChars(),i*this._deviceCellWidth+this._deviceCharLeft,s*this._deviceCellHeight+this._deviceCharTop+this._deviceCharHeight)}_clipCell(t,e,i){this._ctx.beginPath(),this._ctx.rect(t*this._deviceCellWidth,e*this._deviceCellHeight,i*this._deviceCellWidth,this._deviceCellHeight),this._ctx.clip()}_getFont(t,e,i){return`${i?"italic":""} ${e?t.options.fontWeightBold:t.options.fontWeight} ${t.options.fontSize*this._coreBrowserService.dpr}px ${t.options.fontFamily}`}}e.BaseRenderLayer=n},306(t,e,i){Object.defineProperty(e,"__esModule",{value:!0}),e.LinkRenderLayer=void 0;const s=i(657),r=i(814),a=i(133);class o extends a.BaseRenderLayer{constructor(t,e,i,s,r,a,o){super(i,t,"link",e,!0,r,a,o),this._register(s.onShowLinkUnderline(t=>this._handleShowLinkUnderline(t))),this._register(s.onHideLinkUnderline(t=>this._handleHideLinkUnderline(t)))}resize(t,e){super.resize(t,e),this._state=void 0}reset(t){this._clearCurrentLink()}_clearCurrentLink(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);const t=this._state.y2-this._state.y1-1;t>0&&this._clearCells(0,this._state.y1+1,this._state.cols,t),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}}_handleShowLinkUnderline(t){if(t.fg===r.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._themeService.colors.background.css:void 0!==t.fg&&(0,s.is256Color)(t.fg)?this._ctx.fillStyle=this._themeService.colors.ansi[t.fg].css:this._ctx.fillStyle=this._themeService.colors.foreground.css,t.y1===t.y2)this._fillBottomLineAtCells(t.x1,t.y1,t.x2-t.x1);else{this._fillBottomLineAtCells(t.x1,t.y1,t.cols-t.x1);for(let e=t.y1+1;e{var t=s;Object.defineProperty(t,"__esModule",{value:!0}),t.WebglAddon=void 0;const e=i(426),r=i(95),a=i(399),o=i(414);class n extends e.Disposable{constructor(t){if(r.isSafari&&(0,r.getSafariVersion)()<16){const t={antialias:!1,depth:!1,preserveDrawingBuffer:!0};if(!document.createElement("canvas").getContext("webgl2",t))throw new Error("WebGL2 is only supported on Safari 16 and above")}super(),this._onChangeTextureAtlas=this._register(new o.Emitter),this.onChangeTextureAtlas=this._onChangeTextureAtlas.event,this._onAddTextureAtlasCanvas=this._register(new o.Emitter),this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event,this._onRemoveTextureAtlasCanvas=this._register(new o.Emitter),this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event,this._onContextLoss=this._register(new o.Emitter),this.onContextLoss=this._onContextLoss.event,this._customGlyphs=t?.customGlyphs??!0,this._preserveDrawingBuffer=t?.preserveDrawingBuffer}activate(t){const i=t._core;if(!t.element)return void this._register(i.onWillOpen(()=>this.activate(t)));this._terminal=t;const s=i.coreService,r=i.optionsService,n=i,h=n._renderService,L=n._characterJoinerService,T=n._charSizeService,l=n._coreBrowserService,d=n._decorationService,c=n._logService,_=n._themeService;this._renderer=this._register(new a.WebglRenderer(t,L,T,l,s,d,c,r,_,this._customGlyphs,this._preserveDrawingBuffer)),this._register(o.EventUtils.forward(this._renderer.onContextLoss,this._onContextLoss)),this._register(o.EventUtils.forward(this._renderer.onChangeTextureAtlas,this._onChangeTextureAtlas)),this._register(o.EventUtils.forward(this._renderer.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas)),this._register(o.EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas)),h.setRenderer(this._renderer),this._register((0,e.toDisposable)(()=>{if(this._terminal._core._store._isDisposed)return;const e=this._terminal._core._renderService;e.setRenderer(this._terminal._core._createRenderer()),e.handleResize(t.cols,t.rows)}))}get textureAtlas(){return this._renderer?.textureAtlas}clearTextureAtlas(){this._renderer?.clearTextureAtlas()}}t.WebglAddon=n})(),s})()); //# sourceMappingURL=addon-webgl.js.map \ No newline at end of file diff --git a/lib/addon-webgl.js.map b/lib/addon-webgl.js.map -index 07f1560db82df8bd440e9bac15075efea891ccee..bb49fa91a5835941fe4ca0dfeb92a796caf4d197 100644 +index 0ae403444767a96ac7b0d1bca7527cc456894c72..6a209915c7775eda7ceaaa218bfbbe942e7dfba2 100644 --- a/lib/addon-webgl.js.map +++ b/lib/addon-webgl.js.map @@ -1 +1 @@ --{"version":3,"file":"addon-webgl.js","mappings":"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","sources":["webpack://WebglAddon/webpack/universalModuleDefinition","webpack://WebglAddon/../src/browser/Dom.ts","webpack://WebglAddon/../src/browser/renderer/shared/Constants.ts","webpack://WebglAddon/../src/browser/renderer/shared/RendererUtils.ts","webpack://WebglAddon/../src/browser/renderer/shared/SelectionRenderModel.ts","webpack://WebglAddon/../src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://WebglAddon/../src/common/Async.ts","webpack://WebglAddon/../src/common/Color.ts","webpack://WebglAddon/../src/common/Event.ts","webpack://WebglAddon/../src/common/Lifecycle.ts","webpack://WebglAddon/../src/common/MultiKeyMap.ts","webpack://WebglAddon/../src/common/Platform.ts","webpack://WebglAddon/../src/common/TaskQueue.ts","webpack://WebglAddon/../src/common/buffer/AttributeData.ts","webpack://WebglAddon/../src/common/buffer/CellData.ts","webpack://WebglAddon/../src/common/buffer/Constants.ts","webpack://WebglAddon/../src/common/input/TextDecoder.ts","webpack://WebglAddon/./src/CellColorResolver.ts","webpack://WebglAddon/./src/CharAtlasCache.ts","webpack://WebglAddon/./src/CharAtlasUtils.ts","webpack://WebglAddon/./src/Constants.ts","webpack://WebglAddon/./src/CursorBlinkStateManager.ts","webpack://WebglAddon/./src/DevicePixelObserver.ts","webpack://WebglAddon/./src/GlyphRenderer.ts","webpack://WebglAddon/./src/RectangleRenderer.ts","webpack://WebglAddon/./src/RenderModel.ts","webpack://WebglAddon/./src/TextureAtlas.ts","webpack://WebglAddon/./src/WebglRenderer.ts","webpack://WebglAddon/./src/WebglUtils.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphDefinitions.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphRasterizer.ts","webpack://WebglAddon/./src/renderLayer/BaseRenderLayer.ts","webpack://WebglAddon/./src/renderLayer/LinkRenderLayer.ts","webpack://WebglAddon/webpack/bootstrap","webpack://WebglAddon/./src/WebglAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WebglAddon\"] = factory();\n\telse\n\t\troot[\"WebglAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals}\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n public clearTexture(): void {\n if (this._pages[0].currentRow.x === 0 && this._pages[0].currentRow.y === 0) {\n return;\n }\n for (const page of this._pages) {\n page.clear();\n }\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n\n // Invalidate renderer models so all texture pages are refreshed. The atlas may be shared, in\n // which case the clearing renderer has cleared only its own model and every other owner still\n // holds texture coords into the rows just wiped.\n this._pageLayoutVersion++;\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded — both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n while (this._charAtlas && this._glyphRenderer.value.beginFrame() && mergeRetries++ < Constants.MERGE_RETRY_LIMIT) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '─': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '━': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '│': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '┃': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '┄': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┅': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┆': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '┇': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '┈': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┉': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┊': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '┋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '┌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '┍': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┎': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '┐': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '┑': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┒': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '└': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '┕': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┖': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '┘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '┙': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┚': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '├': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '┝': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┞': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┟': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┠': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┡': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┢': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '┤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '┥': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┦': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┧': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┨': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┩': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┪': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '┬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '┭': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┮': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┯': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┰': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┱': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┲': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '┴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '┵': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┶': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┷': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┸': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┹': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┺': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '┼': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '┽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '╀': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '╁': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╂': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '╃': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '╄': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '╅': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '╆': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '╇': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '╈': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '╉': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '╊': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '╋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '╌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '╍': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '╎': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '╏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '═': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '║': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '╒': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╔': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╕': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╖': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '╗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '╙': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╚': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '╜': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '╝': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╞': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╟': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '╠': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╡': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╢': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '╥': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╦': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╧': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╨': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╩': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╪': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '╭': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '╮': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╯': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╰': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '╱': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '╲': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '╳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '╴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '╵': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '╶': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '╷': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '╸': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '╹': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '╺': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '╻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '╼': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '╽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '╿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '▀': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '▁': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '▂': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '▃': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '▄': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '▅': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '▆': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '▇': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '█': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '▉': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '▊': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '▋': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '▌': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '▍': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '▎': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '▏': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '▐': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '░': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '▒': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '▓': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '▔': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '▕': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '▖': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '▗': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '▘': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '▙': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '▚': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '▛': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '▜': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '▝': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '▞': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '▟': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * ─a─\n * │ │\n * f b\n * ─g─\n * e c\n * │ │\n * ─d─\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","node","type","handler","useCapture","addDisposableListener","domNode","bb","getBoundingClientRect","win","getWindow","left","scrollX","top","scrollY","width","height","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","push","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","length","sort","shift","execute","animationFrameRunner","Async_1","__webpack_require__","e","candidateNode","ownerDocument","defaultView","candidateEvent","view","window","DomListener","constructor","options","this","_node","_type","_handler","_options","addEventListener","dispose","removeEventListener","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","console","error","a","b","animationFrameState","Map","get","set","WindowIntervalTimer","IntervalTimer","super","_defaultTarget","undefined","cancelAndSet","interval","INVERTED_DEFAULT_COLOR","isPowerlineGlyph","codepoint","isEmoji","value","Error","glyphSizeX","deviceCellWidth","Math","ceil","isNerdFontGlyph","isBoxOrBlockGlyph","css","canvas","cell","device","char","cellWidth","lineWidth","currentOffset","round","SelectionRenderModel","clear","hasSelection","columnSelectMode","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startCol","endCol","selectionStart","selectionEnd","update","terminal","start","end","viewportY","buffers","active","ydisp","max","min","rows","isCellSelected","x","y","buffer","Lifecycle_1","TextBlinkStateManager","Disposable","_renderCallback","_coreBrowserService","_optionsService","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","_register","onSpecificOptionChange","duration","setIntervalDuration","rawOptions","blinkIntervalDuration","toDisposable","_clearInterval","isBlinkOn","isEnabled","setNeedsBlinkInViewport","needsBlinkInViewport","_updateIntervalState","setViewportVisible","isVisible","_interval","wasBlinkOn","setInterval","clearInterval","millis","Promise","resolve","setTimeout","timeout","store","timer","disposable","clearTimeout","add","_token","_isDisposed","cancel","setIfNotSet","_isScheduled","queueMicrotask","_disposable","context","handle","$r","$g","$b","$a","channels","color","rgb","rgba","toPaddedHex","c","s","toString","contrastRatio","l1","l2","NULL_COLOR","toCss","r","g","toRgba","toColor","color_1","opacity","toChannels","blend","bg","fg","fgR","fgG","fgB","bgR","bgG","bgB","isOpaque","ensureContrastRatio","ratio","result","opaque","rgbaColor","multiplyOpacity","factor","toColorRGB","css_1","$ctx","$litmusColor","document","createElement","ctx","getContext","willReadFrequently","globalCompositeOperation","createLinearGradient","match","parseInt","slice","repeat","rgbaMatch","parseFloat","fillStyle","fillRect","getImageData","data","rgb_1","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","entry","fn","idx","indexOf","splice","Array","isArray","fire","call","listeners","i","len","forward","from","to","map","any","events","DisposableStore","runAndSubscribe","initial","arg","d","_disposables","Set","isDisposed","o","_store","None","Object","freeze","_value","TwoKeyMap","_data","first","second","third","fourth","_targetWindow","isSafari","majorVersion","userAgent","isNode","process","navigator","startsWith","platform","isFirefox","includes","isChrome","isLegacyEdge","test","isMac","isWindows","isLinux","isChromeOS","TaskQueue","logService","_tasks","_i","_logService","enqueue","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","bind","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","performance","now","warn","abs","PriorityTaskQueue","callback","_createDeadline","identifier","IdleTaskQueue","requestIdleCallback","cancelIdleCallback","_queue","AttributeData","extended","ExtendedAttrs","fromColorRGB","clone","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","underlineStyle","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isProtected","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","updateExtended","isEmpty","getUnderlineColor","underlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","urlId","val","TextDecoder_1","Constants_1","AttributeData_1","CellData","content","combinedData","fromCharData","obj","setFromCharData","isCombined","getWidth","getChars","stringFromCodePoint","getCode","charCodeAt","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","code","CHAR_DATA_WIDTH_INDEX","getAsCharData","attributesEquals","other","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","CHAR_DATA_CODE_INDEX","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","String","fromCharCode","_interim","decode","input","target","size","startPos","interim","Uint8Array","fill","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","missing","fourStop","Color_1","RendererUtils_1","CustomGlyphDefinitions_1","$colors","$fg","$bg","$hasFg","$hasBg","$isSelected","$variantOffset","_terminal","_optionService","_selectionRenderModel","_decorationService","_themeService","deviceCellHeight","colors","floor","fontSize","dpr","blockPatternCodepoints","has","forEachDecorationAtCell","backgroundColorRGB","foregroundColorRGB","ansi","foreground","isFocused","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","selectionForeground","treatGlyphAsBackgroundColor","background","deviceCharWidth","deviceCharHeight","devicePixelRatio","deviceMaxTextureSize","customGlyphs","newConfig","CharAtlasUtils_1","generateConfig","charAtlasCache","ownedByIndex","ownedBy","configEquals","config","atlas","core","_core","newEntry","TextureAtlas_1","TextureAtlas","unicodeService","index","clonedColors","cursor","cursorAccent","selectionBackgroundTransparent","selectionInactiveBackgroundTransparent","overviewRulerBorder","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","contrastCache","halfContrastCache","letterSpacing","lineHeight","fontFamily","fontWeight","fontWeightBold","allowTransparency","drawBoldTextInBrightColors","minimumContrastRatio","colorCode","Platform_1","DIM_OPACITY","TEXT_BASELINE","_isIdlePaused","isCursorVisible","_restartInterval","_resetIdleTimer","isPaused","_blinkStartTimeout","_blinkInterval","_animationFrame","cancelAnimationFrame","_idleTimeout","restartBlinkAnimation","_animationTimeRestarted","Date","timeToStart","time","pause","resume","_stopBlinkingDueToIdle","element","parentWindow","observer","ResizeObserver","entries","find","disconnect","devicePixelContentBoxSize","inlineSize","blockSize","observe","box","WebglUtils_1","$glyph","$i","$leftCellPadding","$clippedPixels","GlyphRenderer","_gl","_dimensions","_lastSeenPageLayoutVersion","_pageOverflowWarned","_activeBuffer","_vertices","count","attributes","Float32Array","attributesBuffers","gl","maxAtlasPages","throwIfFalsy","getParameter","MAX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","_program","createProgram","maxFragmentShaderTextureUnits","textureConditionals","createFragmentShaderSource","deleteProgram","_projectionLocation","getUniformLocation","_resolutionLocation","_textureLocation","vertexArrayObject","_vertexArrayObject","createVertexArray","deleteVertexArray","bindVertexArray","unitQuadVertices","unitQuadVerticesBuffer","createBuffer","deleteBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","unitQuadElementIndices","elementIndicesBuffer","ELEMENT_ARRAY_BUFFER","_attributesBuffer","vertexAttribDivisor","BYTES_PER_ELEMENT","useProgram","textureUnits","Int32Array","uniform1iv","uniformMatrix4fv","PROJECTION_MATRIX","_atlasTextures","glTexture","GLTexture","createTexture","deleteTexture","texture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","enable","BLEND","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","handleResize","beginFrame","_atlas","pageLayoutVersion","updateCell","chars","lastBg","_updateCell","array","cols","getRasterizedGlyphCombinedChar","getRasterizedGlyph","offset","texturePage","texturePositionClipSpace","pages","sizeClipSpace","rescaleOverlappingGlyphs","allowRescaling","newCount","viewport","uniform2f","render","renderModel","activeBuffer","bufferLength","lineLengths","si","sub","subarray","STREAM_DRAW","pageCount","version","_bindAtlasPageTexture","drawElementsInstanced","TRIANGLE_STRIP","setAtlas","invalidateAtlasTextures","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","setDimensions","dimensions","BYTES_PER_RECTANGLE","Vertices","$rgba","$x1","$y1","RectangleRenderer","_verticesCursor","_updateCachedColors","onChangeColors","_updateViewportRectangle","renderBackgrounds","_renderVertices","renderCursor","vertices","DYNAMIC_DRAW","_bgFloat","_colorToFloat32Array","_cursorFloat","_addRectangleFloat","updateBackgrounds","model","currentStartX","currentBg","currentFg","currentInverse","modelIndex","inverse","rectangleCount","cells","_updateRectangle","updateCursor","style","cursorWidth","startX","endX","expandFloat32Array","_addRectangle","x1","y1","SelectionRenderModel_1","COMBINED_CHAR_BIT_MASK","Uint32Array","selection","createSelectionRenderModel","resize","indexCount","CustomGlyphRasterizer_1","MultiKeyMap_1","TaskQueue_1","Constants_2","Event_1","NULL_RASTERIZED_GLYPH","texturePosition","_pages","_document","_config","_unicodeService","_didWarmUp","_cacheMap","FourKeyMap","_cacheMapCombined","_activePages","_workBoundingBox","bottom","right","_workAttributeData","_textureSize","_onAddTextureAtlasCanvas","Emitter","onAddTextureAtlasCanvas","_onRemoveTextureAtlasCanvas","onRemoveTextureAtlasCanvas","_pageLayoutVersion","_createNewPage","_tmpCanvas","createCanvas","TMP_CANVAS_GLYPH_PADDING","_tmpCtx","alpha","remove","page","warmUp","_doWarmUp","queue","rasterizedGlyph","_drawToCache","clearTexture","currentRow","pagesBySize","filter","percentageUsed","sameSizeI","mergingPages","some","p","_evictAllPages","newPage","AtlasPage","sortedMergingPagesIndexes","glyphs","mergedPageIndex","mergedPage","_mergePages","nextVersion","_deletePage","mergedSize","xOffset","yOffset","drawImage","pageIndex","j","adjustingPage","startTime","_overflowSizePage","debug","toFixed","restrictToCellHeight","domContainer","_getFromCacheMap","cacheMap","key","_getColorFromAnsiIndex","_getBackgroundColor","bgColorMode","bgColor","dim","arr","_getForegroundColor","fgColorMode","fgColor","bold","excludeFromContrastRatioDemands","minimumContrastColor","_getMinimumContrastColor","_resolveBackgroundRgba","_resolveForegroundRgba","cache","_getContrastCache","adjustedColor","getColor","setColor","codeOrChars","parentElement","display","append","allowedWidth","allowedHeight","save","italic","underline","strikethrough","overline","temp","temp2","backgroundColor","fontStyle","font","textBaseline","powerlineGlyph","restrictedPowerlineGlyph","isRestrictedPowerlineGlyph","foregroundColor","padding","customGlyph","variantOffset","tryDrawCustomGlyph","chWidth","enableClearThresholdCheck","wcwidth","getStringCellWidth","strokeStyle","join","beginPath","xLeft","yTopDefault","yBotDefault","nextOffset","yTop","yBot","wasFilled","xChLeft","xChRight","moveTo","lineTo","clipRegion","Path2D","rect","clip","scaleX","scaleY","polygons","polygon","closePath","offsetWidth","setLineDash","computeNextVariantOffset","lineRatio","gapRatio","xChWidth","line","gap","stroke","restore","metrics","measureText","actualBoundingBoxDescent","strokeText","fillText","isBeyondCellBounds","clearColor","imageData","checkCompletelyTransparent","_findGlyphBoundingBox","activePage","activeRow","row","fixedRows","wasPageAndRowFound","candidatePage","putImageData","addGlyph","boundingBox","restrictedGlyph","found","alphaOffset","_usedPixels","_glyphs","glyph","sourcePages","concat","clearRect","enableThresholdCheck","threshold","CellColorResolver_1","CharAtlasCache_1","CursorBlinkStateManager_1","DevicePixelObserver_1","CellData_1","TextBlinkStateManager_1","GlyphRenderer_1","RectangleRenderer_1","RenderModel_1","LinkRenderLayer_1","Dom_1","WebglRenderer","_characterJoinerService","_charSizeService","_coreService","_customGlyphs","preserveDrawingBuffer","_cursorBlinkStateManager","MutableDisposable","_charAtlasDisposable","_observerDisposable","_model","RenderModel","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_workCell","_rectangleRenderer","_glyphRenderer","_onChangeTextureAtlas","onChangeTextureAtlas","_onRequestRedraw","onRequestRedraw","_onContextLoss","onContextLoss","_canvas","mainDocument","contextAttributes","antialias","depth","_handleColorChange","_cellColorResolver","CellColorResolver","_renderLayers","LinkRenderLayer","screenElement","linkifier","createRenderDimensions","_devicePixelRatio","_updateDimensions","_updateCursorBlink","onOptionChange","_handleOptionsChanged","_textBlinkStateManager","_requestRedrawViewport","_resetBlinkingRowState","_deviceMaxTextureSize","preventDefault","_contextRestorationTimeout","removeTerminalFromCache","_initializeWebGLState","observeDevicePixelDimensions","w","h","_setCanvasDevicePixelDimensions","onWindowChange","appendChild","_isAttached","isConnected","l","removeChild","textureAtlas","_charAtlas","_refreshCharAtlas","_clearModel","handleDevicePixelRatioChange","sync","handleCharSizeChanged","handleBlur","handleFocus","handleViewportVisibilityChange","handleSelectionChanged","handleCursorMove","acquireTextureAtlas","combinedDisposable","clearGlyphRenderer","clearTextureAtlas","reset","renderRows","handleGridChanged","_updateModel","merged","mergeRetries","decPrivateModes","cursorBlink","CursorBlinkStateManager","_requestRedrawCursor","joinedRanges","isJoined","skipJoinedCheckUntilX","isValidJoinRange","lastCharX","range","isCursorRow","clamp","cursorStyle","cursorY","baseY","viewportRelativeCursorY","cursorX","lastCursorX","isCursorInitialized","isCursorHidden","modelUpdated","bufferLine","lines","_nullModelCell","_setRowBlinkState","rowHasBlinkingCells","getJoinedCharacters","loadCell","firstSelectionState","JoinedCellData","translateToString","cursorInactiveStyle","_updateTextBlinkState","cellIndex","hasBlinkingCells","firstCell","_width","vertexSource","fragmentSource","program","attachShader","createShader","VERTEX_SHADER","FRAGMENT_SHADER","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","source","newLength","newArray","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","GitBranchSymbolsParts","sextant","pattern","rects","rowH","rowY","leftBit","rightBit","segmentedDigit","paths","segW","taperX","taperY","segH","y2","y3","x2","x3","midY","LINE_H","strokeWidth","LINE_V","FADE_RIGHT","FADE_LEFT","FADE_DOWN","FADE_UP","CURVE_DOWN_RIGHT","xp","yp","CURVE_DOWN_LEFT","CURVE_UP_RIGHT","CURVE_UP_LEFT","NODE_FILL","NODE_STROKE","NODE_LINE_RIGHT","NODE_LINE_LEFT","NODE_LINE_DOWN","NODE_LINE_UP","customGlyphDefinitions","rightPadding","leftPadding","scaleType","clipPath","fromEntries","_","fromCodePoint","unifiedCharDefinition","parts","part","drawDefinitionPart","createOffscreenPatternCanvas","OffscreenCanvas","createDomPatternCanvas","createPatternCanvas","offscreenCanvasFactory","domCanvasFactory","drawWidth","drawHeight","drawXOffset","drawYOffset","instruction","split","args","substring","applyClipPath","charDefinition","xEighth","yEighth","drawBlockVectorChar","patternSet","cachedPatterns","tmpCanvas","tmpCtx","ImageData","createPattern","dx","dy","setTransform","DOMMatrix","translateSelf","drawPatternChar","actualInstructions","currentX","currentY","lastControlX","lastControlY","lastCommand","f","svgToCanvasInstructionMap","translateArgs","drawPathFunctionCharacter","instructions","rx","ry","xAxisRotation","PI","largeArcFlag","sweepFlag","drawSvgArc","translatedArgs","quadraticCurveTo","cpX","cpY","bezierCurveTo","drawPathDefinitionCharacter","lineCap","drawPathNegativeDefinitionCharacter","cssLineWidth","drawVectorShape","paddingY","radius","bit","cx","brailleDotPositions","cy","arc","drawBrailleCharacter","phi","cosPhi","cos","sinPhi","sin","x1p","y1p","rxSq","rySq","x1pSq","y1pSq","lambda","lambdaSqrt","sqrt","sq","coef","cxp","cyp","ux","uy","vx","vy","startAngle","atan2","dTheta","endAngle","ellipse","C","L","M","Q","T","cellHeight","doClamp","clampToCell","rounded","BaseRenderLayer","_container","id","zIndex","_alpha","_deviceCharWidth","_deviceCharHeight","_deviceCellWidth","_deviceCellHeight","_deviceCharLeft","_deviceCharTop","classList","_initCanvas","_ctx","_clearAll","startRow","endRow","_setTransparency","oldCanvas","cloneNode","replaceChild","colorSet","_fillBottomLineAtCells","_clearCells","_fillCharTrueColor","_getFont","_clipCell","BaseRenderLayer_1","container","linkifier2","coreBrowserService","optionsService","themeService","onShowLinkUnderline","_handleShowLinkUnderline","onHideLinkUnderline","_handleHideLinkUnderline","_state","_clearCurrentLink","middleRowCount","is256Color","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","WebglRenderer_1","WebglAddon","getSafariVersion","_preserveDrawingBuffer","activate","onWillOpen","coreService","unsafeCore","renderService","_renderService","characterJoinerService","charSizeService","decorationService","_renderer","setRenderer","_createRenderer"],"sourceRoot":""} +-{"version":3,"file":"addon-webgl.js","mappings":"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","sources":["webpack://WebglAddon/webpack/universalModuleDefinition","webpack://WebglAddon/../src/browser/Dom.ts","webpack://WebglAddon/../src/browser/renderer/shared/Constants.ts","webpack://WebglAddon/../src/browser/renderer/shared/RendererUtils.ts","webpack://WebglAddon/../src/browser/renderer/shared/SelectionRenderModel.ts","webpack://WebglAddon/../src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://WebglAddon/../src/common/Async.ts","webpack://WebglAddon/../src/common/Color.ts","webpack://WebglAddon/../src/common/Event.ts","webpack://WebglAddon/../src/common/Lifecycle.ts","webpack://WebglAddon/../src/common/MultiKeyMap.ts","webpack://WebglAddon/../src/common/Platform.ts","webpack://WebglAddon/../src/common/TaskQueue.ts","webpack://WebglAddon/../src/common/buffer/AttributeData.ts","webpack://WebglAddon/../src/common/buffer/CellData.ts","webpack://WebglAddon/../src/common/buffer/Constants.ts","webpack://WebglAddon/../src/common/input/TextDecoder.ts","webpack://WebglAddon/./src/CellColorResolver.ts","webpack://WebglAddon/./src/CharAtlasCache.ts","webpack://WebglAddon/./src/CharAtlasUtils.ts","webpack://WebglAddon/./src/Constants.ts","webpack://WebglAddon/./src/CursorBlinkStateManager.ts","webpack://WebglAddon/./src/DevicePixelObserver.ts","webpack://WebglAddon/./src/GlyphRenderer.ts","webpack://WebglAddon/./src/RectangleRenderer.ts","webpack://WebglAddon/./src/RenderModel.ts","webpack://WebglAddon/./src/TextureAtlas.ts","webpack://WebglAddon/./src/WebglRenderer.ts","webpack://WebglAddon/./src/WebglUtils.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphDefinitions.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphRasterizer.ts","webpack://WebglAddon/./src/renderLayer/BaseRenderLayer.ts","webpack://WebglAddon/./src/renderLayer/LinkRenderLayer.ts","webpack://WebglAddon/webpack/bootstrap","webpack://WebglAddon/./src/WebglAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WebglAddon\"] = factory();\n\telse\n\t\troot[\"WebglAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals}\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n public clearTexture(): void {\n if (this._pages[0].currentRow.x === 0 && this._pages[0].currentRow.y === 0) {\n return;\n }\n for (const page of this._pages) {\n page.clear();\n }\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n\n // Invalidate renderer models so all texture pages are refreshed. The atlas may be shared, in\n // which case the clearing renderer has cleared only its own model and every other owner still\n // holds texture coords into the rows just wiped.\n this._pageLayoutVersion++;\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded — both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n while (this._charAtlas && this._glyphRenderer.value.beginFrame() && mergeRetries++ < Constants.MERGE_RETRY_LIMIT) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '─': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '━': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '│': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '┃': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '┄': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┅': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┆': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '┇': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '┈': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┉': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┊': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '┋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '┌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '┍': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┎': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '┐': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '┑': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┒': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '└': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '┕': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┖': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '┘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '┙': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┚': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '├': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '┝': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┞': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┟': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┠': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┡': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┢': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '┤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '┥': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┦': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┧': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┨': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┩': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┪': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '┬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '┭': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┮': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┯': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┰': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┱': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┲': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '┴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '┵': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┶': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┷': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┸': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┹': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┺': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '┼': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '┽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '╀': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '╁': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╂': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '╃': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '╄': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '╅': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '╆': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '╇': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '╈': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '╉': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '╊': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '╋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '╌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '╍': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '╎': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '╏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '═': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '║': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '╒': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╔': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╕': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╖': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '╗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '╙': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╚': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '╜': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '╝': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╞': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╟': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '╠': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╡': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╢': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '╥': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╦': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╧': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╨': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╩': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╪': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '╭': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '╮': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╯': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╰': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '╱': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '╲': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '╳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '╴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '╵': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '╶': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '╷': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '╸': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '╹': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '╺': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '╻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '╼': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '╽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '╿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '▀': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '▁': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '▂': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '▃': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '▄': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '▅': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '▆': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '▇': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '█': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '▉': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '▊': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '▋': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '▌': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '▍': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '▎': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '▏': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '▐': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '░': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '▒': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '▓': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '▔': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '▕': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '▖': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '▗': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '▘': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '▙': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '▚': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '▛': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '▜': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '▝': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '▞': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '▟': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * ─a─\n * │ │\n * f b\n * ─g─\n * e c\n * │ │\n * ─d─\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","node","type","handler","useCapture","addDisposableListener","domNode","bb","getBoundingClientRect","win","getWindow","left","scrollX","top","scrollY","width","height","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","push","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","length","sort","shift","execute","animationFrameRunner","Async_1","__webpack_require__","e","candidateNode","ownerDocument","defaultView","candidateEvent","view","window","DomListener","constructor","options","this","_node","_type","_handler","_options","addEventListener","dispose","removeEventListener","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","console","error","a","b","animationFrameState","Map","get","set","WindowIntervalTimer","IntervalTimer","super","_defaultTarget","undefined","cancelAndSet","interval","INVERTED_DEFAULT_COLOR","isPowerlineGlyph","codepoint","isEmoji","value","Error","glyphSizeX","deviceCellWidth","Math","ceil","isNerdFontGlyph","isBoxOrBlockGlyph","css","canvas","cell","device","char","cellWidth","lineWidth","currentOffset","round","SelectionRenderModel","clear","hasSelection","columnSelectMode","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startCol","endCol","selectionStart","selectionEnd","update","terminal","start","end","viewportY","buffers","active","ydisp","max","min","rows","isCellSelected","x","y","buffer","Lifecycle_1","TextBlinkStateManager","Disposable","_renderCallback","_coreBrowserService","_optionsService","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","_register","onSpecificOptionChange","duration","setIntervalDuration","rawOptions","blinkIntervalDuration","toDisposable","_clearInterval","isBlinkOn","isEnabled","setNeedsBlinkInViewport","needsBlinkInViewport","_updateIntervalState","setViewportVisible","isVisible","_interval","wasBlinkOn","setInterval","clearInterval","millis","Promise","resolve","setTimeout","timeout","store","timer","disposable","clearTimeout","add","_token","_isDisposed","cancel","setIfNotSet","_isScheduled","queueMicrotask","_disposable","context","handle","$r","$g","$b","$a","channels","color","rgb","rgba","toPaddedHex","c","s","toString","contrastRatio","l1","l2","NULL_COLOR","toCss","r","g","toRgba","toColor","color_1","opacity","toChannels","blend","bg","fg","fgR","fgG","fgB","bgR","bgG","bgB","isOpaque","ensureContrastRatio","ratio","result","opaque","rgbaColor","multiplyOpacity","factor","toColorRGB","css_1","$ctx","$litmusColor","document","createElement","ctx","getContext","willReadFrequently","globalCompositeOperation","createLinearGradient","match","parseInt","slice","repeat","rgbaMatch","parseFloat","fillStyle","fillRect","getImageData","data","rgb_1","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","entry","fn","idx","indexOf","splice","Array","isArray","fire","call","listeners","i","len","forward","from","to","map","any","events","DisposableStore","runAndSubscribe","initial","arg","d","_disposables","Set","isDisposed","o","_store","None","Object","freeze","_value","TwoKeyMap","_data","first","second","third","fourth","_targetWindow","isSafari","majorVersion","userAgent","isNode","process","navigator","startsWith","platform","isFirefox","includes","isChrome","isLegacyEdge","test","isMac","isWindows","isLinux","isChromeOS","TaskQueue","logService","_tasks","_i","_logService","enqueue","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","bind","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","performance","now","warn","abs","PriorityTaskQueue","callback","_createDeadline","identifier","IdleTaskQueue","requestIdleCallback","cancelIdleCallback","_queue","AttributeData","extended","ExtendedAttrs","fromColorRGB","clone","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","underlineStyle","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isProtected","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","updateExtended","isEmpty","getUnderlineColor","underlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","urlId","val","payload","TextDecoder_1","Constants_1","AttributeData_1","CellData","content","combinedData","fromCharData","obj","setFromCharData","isCombined","getWidth","getChars","stringFromCodePoint","getCode","charCodeAt","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","code","CHAR_DATA_WIDTH_INDEX","getAsCharData","attributesEquals","other","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","CHAR_DATA_CODE_INDEX","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","String","fromCharCode","_interim","decode","input","target","size","startPos","interim","Uint8Array","fill","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","missing","fourStop","Color_1","RendererUtils_1","CustomGlyphDefinitions_1","$colors","$fg","$bg","$hasFg","$hasBg","$isSelected","$variantOffset","_terminal","_optionService","_selectionRenderModel","_decorationService","_themeService","deviceCellHeight","colors","floor","fontSize","dpr","blockPatternCodepoints","has","forEachDecorationAtCell","backgroundColorRGB","foregroundColorRGB","ansi","foreground","isFocused","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","selectionForeground","treatGlyphAsBackgroundColor","background","deviceCharWidth","deviceCharHeight","devicePixelRatio","deviceMaxTextureSize","customGlyphs","newConfig","CharAtlasUtils_1","generateConfig","charAtlasCache","ownedByIndex","ownedBy","configEquals","config","atlas","core","_core","newEntry","TextureAtlas_1","TextureAtlas","unicodeService","index","clonedColors","cursor","cursorAccent","selectionBackgroundTransparent","selectionInactiveBackgroundTransparent","overviewRulerBorder","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","contrastCache","halfContrastCache","letterSpacing","lineHeight","fontFamily","fontWeight","fontWeightBold","allowTransparency","drawBoldTextInBrightColors","minimumContrastRatio","colorCode","Platform_1","DIM_OPACITY","TEXT_BASELINE","_isIdlePaused","isCursorVisible","_restartInterval","_resetIdleTimer","isPaused","_blinkStartTimeout","_blinkInterval","_animationFrame","cancelAnimationFrame","_idleTimeout","restartBlinkAnimation","_animationTimeRestarted","Date","timeToStart","time","pause","resume","_stopBlinkingDueToIdle","element","parentWindow","observer","ResizeObserver","entries","find","disconnect","devicePixelContentBoxSize","inlineSize","blockSize","observe","box","WebglUtils_1","$glyph","$i","$leftCellPadding","$clippedPixels","GlyphRenderer","_gl","_dimensions","_lastSeenPageLayoutVersion","_pageOverflowWarned","_activeBuffer","_vertices","count","attributes","Float32Array","attributesBuffers","gl","maxAtlasPages","throwIfFalsy","getParameter","MAX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","_program","createProgram","maxFragmentShaderTextureUnits","textureConditionals","createFragmentShaderSource","deleteProgram","_projectionLocation","getUniformLocation","_resolutionLocation","_textureLocation","vertexArrayObject","_vertexArrayObject","createVertexArray","deleteVertexArray","bindVertexArray","unitQuadVertices","unitQuadVerticesBuffer","createBuffer","deleteBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","unitQuadElementIndices","elementIndicesBuffer","ELEMENT_ARRAY_BUFFER","_attributesBuffer","vertexAttribDivisor","BYTES_PER_ELEMENT","useProgram","textureUnits","Int32Array","uniform1iv","uniformMatrix4fv","PROJECTION_MATRIX","_atlasTextures","glTexture","GLTexture","createTexture","deleteTexture","texture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","enable","BLEND","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","handleResize","beginFrame","_atlas","pageLayoutVersion","updateCell","chars","lastBg","_updateCell","array","cols","getRasterizedGlyphCombinedChar","getRasterizedGlyph","offset","texturePage","texturePositionClipSpace","pages","sizeClipSpace","rescaleOverlappingGlyphs","allowRescaling","newCount","viewport","uniform2f","render","renderModel","activeBuffer","bufferLength","lineLengths","si","sub","subarray","STREAM_DRAW","pageCount","version","_bindAtlasPageTexture","drawElementsInstanced","TRIANGLE_STRIP","setAtlas","invalidateAtlasTextures","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","setDimensions","dimensions","BYTES_PER_RECTANGLE","Vertices","$rgba","$x1","$y1","RectangleRenderer","_verticesCursor","_updateCachedColors","onChangeColors","_updateViewportRectangle","renderBackgrounds","_renderVertices","renderCursor","vertices","DYNAMIC_DRAW","_bgFloat","_colorToFloat32Array","_cursorFloat","_addRectangleFloat","updateBackgrounds","model","currentStartX","currentBg","currentFg","currentInverse","modelIndex","inverse","rectangleCount","cells","_updateRectangle","updateCursor","style","cursorWidth","startX","endX","expandFloat32Array","_addRectangle","x1","y1","SelectionRenderModel_1","COMBINED_CHAR_BIT_MASK","Uint32Array","selection","createSelectionRenderModel","resize","indexCount","CustomGlyphRasterizer_1","MultiKeyMap_1","TaskQueue_1","Constants_2","Event_1","NULL_RASTERIZED_GLYPH","texturePosition","_pages","_document","_config","_unicodeService","_didWarmUp","_cacheMap","FourKeyMap","_cacheMapCombined","_activePages","_workBoundingBox","bottom","right","_workAttributeData","_textureSize","_onAddTextureAtlasCanvas","Emitter","onAddTextureAtlasCanvas","_onRemoveTextureAtlasCanvas","onRemoveTextureAtlasCanvas","_pageLayoutVersion","_createNewPage","_tmpCanvas","createCanvas","TMP_CANVAS_GLYPH_PADDING","_tmpCtx","alpha","remove","page","warmUp","_doWarmUp","queue","rasterizedGlyph","_drawToCache","clearTexture","currentRow","pagesBySize","filter","percentageUsed","sameSizeI","mergingPages","some","p","_evictAllPages","newPage","AtlasPage","sortedMergingPagesIndexes","glyphs","mergedPageIndex","mergedPage","_mergePages","nextVersion","_deletePage","mergedSize","xOffset","yOffset","drawImage","pageIndex","j","adjustingPage","startTime","_overflowSizePage","debug","toFixed","restrictToCellHeight","domContainer","_getFromCacheMap","cacheMap","key","_getColorFromAnsiIndex","_getBackgroundColor","bgColorMode","bgColor","dim","arr","_getForegroundColor","fgColorMode","fgColor","bold","excludeFromContrastRatioDemands","minimumContrastColor","_getMinimumContrastColor","_resolveBackgroundRgba","_resolveForegroundRgba","cache","_getContrastCache","adjustedColor","getColor","setColor","codeOrChars","parentElement","display","append","allowedWidth","allowedHeight","save","italic","underline","strikethrough","overline","temp","temp2","backgroundColor","fontStyle","font","textBaseline","powerlineGlyph","restrictedPowerlineGlyph","isRestrictedPowerlineGlyph","foregroundColor","padding","customGlyph","variantOffset","tryDrawCustomGlyph","chWidth","enableClearThresholdCheck","wcwidth","getStringCellWidth","strokeStyle","join","beginPath","xLeft","yTopDefault","yBotDefault","nextOffset","yTop","yBot","wasFilled","xChLeft","xChRight","moveTo","lineTo","clipRegion","Path2D","rect","clip","scaleX","scaleY","polygons","polygon","closePath","offsetWidth","setLineDash","computeNextVariantOffset","lineRatio","gapRatio","xChWidth","line","gap","stroke","restore","metrics","measureText","actualBoundingBoxDescent","strokeText","fillText","isBeyondCellBounds","clearColor","imageData","checkCompletelyTransparent","_findGlyphBoundingBox","activePage","activeRow","row","fixedRows","wasPageAndRowFound","candidatePage","putImageData","addGlyph","boundingBox","restrictedGlyph","found","alphaOffset","_usedPixels","_glyphs","glyph","sourcePages","concat","clearRect","enableThresholdCheck","threshold","CellColorResolver_1","CharAtlasCache_1","CursorBlinkStateManager_1","DevicePixelObserver_1","CellData_1","TextBlinkStateManager_1","GlyphRenderer_1","RectangleRenderer_1","RenderModel_1","LinkRenderLayer_1","Dom_1","WebglRenderer","_characterJoinerService","_charSizeService","_coreService","_customGlyphs","preserveDrawingBuffer","_cursorBlinkStateManager","MutableDisposable","_charAtlasDisposable","_observerDisposable","_model","RenderModel","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_workCell","_rectangleRenderer","_glyphRenderer","_onChangeTextureAtlas","onChangeTextureAtlas","_onRequestRedraw","onRequestRedraw","_onContextLoss","onContextLoss","_canvas","mainDocument","contextAttributes","antialias","depth","_handleColorChange","_cellColorResolver","CellColorResolver","_renderLayers","LinkRenderLayer","screenElement","linkifier","createRenderDimensions","_devicePixelRatio","_updateDimensions","_updateCursorBlink","onOptionChange","_handleOptionsChanged","_textBlinkStateManager","_requestRedrawViewport","_resetBlinkingRowState","_deviceMaxTextureSize","preventDefault","_contextRestorationTimeout","removeTerminalFromCache","_initializeWebGLState","observeDevicePixelDimensions","w","h","_setCanvasDevicePixelDimensions","onWindowChange","appendChild","_isAttached","isConnected","l","removeChild","textureAtlas","_charAtlas","_refreshCharAtlas","_clearModel","handleDevicePixelRatioChange","sync","handleCharSizeChanged","handleBlur","handleFocus","handleViewportVisibilityChange","handleSelectionChanged","handleCursorMove","acquireTextureAtlas","combinedDisposable","clearGlyphRenderer","clearTextureAtlas","reset","renderRows","handleGridChanged","_updateModel","merged","mergeRetries","decPrivateModes","cursorBlink","CursorBlinkStateManager","_requestRedrawCursor","joinedRanges","isJoined","skipJoinedCheckUntilX","isValidJoinRange","lastCharX","range","isCursorRow","clamp","cursorStyle","cursorY","baseY","viewportRelativeCursorY","cursorX","lastCursorX","isCursorInitialized","isCursorHidden","modelUpdated","bufferLine","lines","_nullModelCell","_setRowBlinkState","rowHasBlinkingCells","getJoinedCharacters","loadCell","firstSelectionState","JoinedCellData","translateToString","cursorInactiveStyle","_updateTextBlinkState","cellIndex","hasBlinkingCells","firstCell","_width","vertexSource","fragmentSource","program","attachShader","createShader","VERTEX_SHADER","FRAGMENT_SHADER","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","source","newLength","newArray","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","GitBranchSymbolsParts","sextant","pattern","rects","rowH","rowY","leftBit","rightBit","segmentedDigit","paths","segW","taperX","taperY","segH","y2","y3","x2","x3","midY","LINE_H","strokeWidth","LINE_V","FADE_RIGHT","FADE_LEFT","FADE_DOWN","FADE_UP","CURVE_DOWN_RIGHT","xp","yp","CURVE_DOWN_LEFT","CURVE_UP_RIGHT","CURVE_UP_LEFT","NODE_FILL","NODE_STROKE","NODE_LINE_RIGHT","NODE_LINE_LEFT","NODE_LINE_DOWN","NODE_LINE_UP","customGlyphDefinitions","rightPadding","leftPadding","scaleType","clipPath","fromEntries","_","fromCodePoint","unifiedCharDefinition","parts","part","drawDefinitionPart","createOffscreenPatternCanvas","OffscreenCanvas","createDomPatternCanvas","createPatternCanvas","offscreenCanvasFactory","domCanvasFactory","drawWidth","drawHeight","drawXOffset","drawYOffset","instruction","split","args","substring","applyClipPath","charDefinition","xEighth","yEighth","drawBlockVectorChar","patternSet","cachedPatterns","tmpCanvas","tmpCtx","ImageData","createPattern","dx","dy","setTransform","DOMMatrix","translateSelf","drawPatternChar","actualInstructions","currentX","currentY","lastControlX","lastControlY","lastCommand","f","svgToCanvasInstructionMap","translateArgs","drawPathFunctionCharacter","instructions","rx","ry","xAxisRotation","PI","largeArcFlag","sweepFlag","drawSvgArc","translatedArgs","quadraticCurveTo","cpX","cpY","bezierCurveTo","drawPathDefinitionCharacter","lineCap","drawPathNegativeDefinitionCharacter","cssLineWidth","drawVectorShape","paddingY","radius","bit","cx","brailleDotPositions","cy","arc","drawBrailleCharacter","phi","cosPhi","cos","sinPhi","sin","x1p","y1p","rxSq","rySq","x1pSq","y1pSq","lambda","lambdaSqrt","sqrt","sq","coef","cxp","cyp","ux","uy","vx","vy","startAngle","atan2","dTheta","endAngle","ellipse","C","L","M","Q","T","cellHeight","doClamp","clampToCell","rounded","BaseRenderLayer","_container","id","zIndex","_alpha","_deviceCharWidth","_deviceCharHeight","_deviceCellWidth","_deviceCellHeight","_deviceCharLeft","_deviceCharTop","classList","_initCanvas","_ctx","_clearAll","startRow","endRow","_setTransparency","oldCanvas","cloneNode","replaceChild","colorSet","_fillBottomLineAtCells","_clearCells","_fillCharTrueColor","_getFont","_clipCell","BaseRenderLayer_1","container","linkifier2","coreBrowserService","optionsService","themeService","onShowLinkUnderline","_handleShowLinkUnderline","onHideLinkUnderline","_handleHideLinkUnderline","_state","_clearCurrentLink","middleRowCount","is256Color","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","WebglRenderer_1","WebglAddon","getSafariVersion","_preserveDrawingBuffer","activate","onWillOpen","coreService","unsafeCore","renderService","_renderService","characterJoinerService","charSizeService","decorationService","_renderer","setRenderer","_createRenderer"],"sourceRoot":""} \ No newline at end of file -+{"version":3,"file":"addon-webgl.js","mappings":"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","sources":["webpack://WebglAddon/webpack/universalModuleDefinition","webpack://WebglAddon/../src/browser/Dom.ts","webpack://WebglAddon/../src/browser/renderer/shared/Constants.ts","webpack://WebglAddon/../src/browser/renderer/shared/RendererUtils.ts","webpack://WebglAddon/../src/browser/renderer/shared/SelectionRenderModel.ts","webpack://WebglAddon/../src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://WebglAddon/../src/common/Async.ts","webpack://WebglAddon/../src/common/Color.ts","webpack://WebglAddon/../src/common/Event.ts","webpack://WebglAddon/../src/common/Lifecycle.ts","webpack://WebglAddon/../src/common/MultiKeyMap.ts","webpack://WebglAddon/../src/common/Platform.ts","webpack://WebglAddon/../src/common/TaskQueue.ts","webpack://WebglAddon/../src/common/buffer/AttributeData.ts","webpack://WebglAddon/../src/common/buffer/CellData.ts","webpack://WebglAddon/../src/common/buffer/Constants.ts","webpack://WebglAddon/../src/common/input/TextDecoder.ts","webpack://WebglAddon/./src/CellColorResolver.ts","webpack://WebglAddon/./src/CharAtlasCache.ts","webpack://WebglAddon/./src/CharAtlasUtils.ts","webpack://WebglAddon/./src/Constants.ts","webpack://WebglAddon/./src/CursorBlinkStateManager.ts","webpack://WebglAddon/./src/DevicePixelObserver.ts","webpack://WebglAddon/./src/GlyphRenderer.ts","webpack://WebglAddon/./src/RectangleRenderer.ts","webpack://WebglAddon/./src/RenderModel.ts","webpack://WebglAddon/./src/TextureAtlas.ts","webpack://WebglAddon/./src/WebglRenderer.ts","webpack://WebglAddon/./src/WebglUtils.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphDefinitions.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphRasterizer.ts","webpack://WebglAddon/./src/renderLayer/BaseRenderLayer.ts","webpack://WebglAddon/./src/renderLayer/LinkRenderLayer.ts","webpack://WebglAddon/webpack/bootstrap","webpack://WebglAddon/./src/WebglAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WebglAddon\"] = factory();\n\telse\n\t\troot[\"WebglAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n // A v_texpage beyond the sampler budget matches no branch above. Leaving outColor unwritten\n // is undefined behaviour in GLSL ES and paints garbage, so fall through to transparent.\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals} else { outColor = vec4(0.0, 0.0, 0.0, 0.0); }\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { FontWeight } from '@xterm/xterm';\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n // Orca diagnostics: read by terminal-render-desync-weight-probe.ts to tell a real\n // bold-collapse from a repaint problem. Canvas silently keeps its previous font when an\n // assignment fails to parse, which rasterizes glyphs at a stale weight.\n public fontProbeMismatchCount = 0;\n public fontProbeLastMismatch: { desired: string, actual: string } | undefined;\n\n public clearTexture(): void {\n // Guard on every page rather than pages[0]: a merged page is never written through\n // currentRow, so once one lands at index 0 the old check made every later clear a no-op.\n if (this._pages.every(page => page.glyphs.length === 0 && page.currentRow.x === 0 && page.currentRow.y === 0)) {\n return;\n }\n // Return the atlas to its constructor state instead of clearing in place: page.clear() leaves\n // page.glyphs populated, which would keep the guard above from ever firing again. Eviction\n // also bumps _pageLayoutVersion, so every renderer sharing this atlas rebuilds its model.\n this._evictAllPages();\n this._createNewPage();\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n /**\n * Orca diagnostic. Canvas ignores a font assignment it cannot parse and silently keeps the\n * previous value, so a bad family or weight rasterizes every glyph at a stale weight. Record\n * the mismatch rather than correcting it: the goal is to tell that failure apart from a\n * repaint bug when a terminal renders bold-collapsed.\n */\n private _probeRasterizationFontWeight(fontWeight: FontWeight): void {\n const desired = String(fontWeight);\n // Only numeric weights are comparable; keywords round-trip through Canvas unchanged.\n if (!/^(?:[1-8]\\d{2}|900)$/.test(desired)) {\n return;\n }\n // Canvas normalizes font serialization: Chromium omits 400 and emits the keyword bold for 700.\n const token = this._tmpCtx.font.match(\n /(?:^|\\s)(normal|bold|[1-9]\\d{0,3})(?=\\s+\\d+(?:\\.\\d+)?px(?:\\s|$))/\n )?.[1] ?? '400';\n const actual = token === 'normal' ? '400' : token === 'bold' ? '700' : token;\n if (actual === desired) {\n return;\n }\n this.fontProbeMismatchCount++;\n this.fontProbeLastMismatch = { desired, actual: this._tmpCtx.font };\n try {\n (globalThis as { __orcaAtlasFontProbe?: (mismatch: { desired: string, actual: string }) => void })\n .__orcaAtlasFontProbe?.(this.fontProbeLastMismatch);\n } catch {\n // Diagnostics only; a throwing listener must never break rasterization.\n }\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._probeRasterizationFontWeight(fontWeight);\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded — both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n // Test the retry budget before beginFrame: beginFrame latches the page layout version it\n // observed, so tripping the limit after consuming it would strand a stale model with no\n // later frame able to notice it needs rebuilding.\n while (this._charAtlas && mergeRetries++ < Constants.MERGE_RETRY_LIMIT && this._glyphRenderer.value.beginFrame()) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '─': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '━': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '│': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '┃': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '┄': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┅': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┆': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '┇': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '┈': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┉': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┊': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '┋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '┌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '┍': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┎': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '┐': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '┑': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┒': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '└': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '┕': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┖': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '┘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '┙': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┚': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '├': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '┝': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┞': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┟': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┠': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┡': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┢': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '┤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '┥': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┦': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┧': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┨': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┩': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┪': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '┬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '┭': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┮': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┯': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┰': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┱': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┲': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '┴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '┵': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┶': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┷': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┸': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┹': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┺': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '┼': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '┽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '╀': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '╁': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╂': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '╃': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '╄': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '╅': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '╆': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '╇': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '╈': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '╉': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '╊': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '╋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '╌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '╍': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '╎': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '╏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '═': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '║': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '╒': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╔': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╕': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╖': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '╗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '╙': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╚': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '╜': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '╝': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╞': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╟': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '╠': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╡': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╢': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '╥': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╦': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╧': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╨': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╩': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╪': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '╭': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '╮': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╯': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╰': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '╱': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '╲': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '╳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '╴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '╵': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '╶': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '╷': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '╸': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '╹': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '╺': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '╻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '╼': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '╽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '╿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '▀': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '▁': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '▂': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '▃': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '▄': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '▅': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '▆': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '▇': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '█': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '▉': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '▊': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '▋': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '▌': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '▍': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '▎': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '▏': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '▐': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '░': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '▒': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '▓': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '▔': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '▕': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '▖': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '▗': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '▘': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '▙': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '▚': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '▛': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '▜': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '▝': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '▞': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '▟': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * ─a─\n * │ │\n * f b\n * ─g─\n * e c\n * │ │\n * ─d─\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","node","type","handler","useCapture","addDisposableListener","domNode","bb","getBoundingClientRect","win","getWindow","left","scrollX","top","scrollY","width","height","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","push","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","length","sort","shift","execute","animationFrameRunner","Async_1","__webpack_require__","e","candidateNode","ownerDocument","defaultView","candidateEvent","view","window","DomListener","constructor","options","this","_node","_type","_handler","_options","addEventListener","dispose","removeEventListener","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","console","error","a","b","animationFrameState","Map","get","set","WindowIntervalTimer","IntervalTimer","super","_defaultTarget","undefined","cancelAndSet","interval","INVERTED_DEFAULT_COLOR","isPowerlineGlyph","codepoint","isEmoji","value","Error","glyphSizeX","deviceCellWidth","Math","ceil","isNerdFontGlyph","isBoxOrBlockGlyph","css","canvas","cell","device","char","cellWidth","lineWidth","currentOffset","round","SelectionRenderModel","clear","hasSelection","columnSelectMode","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startCol","endCol","selectionStart","selectionEnd","update","terminal","start","end","viewportY","buffers","active","ydisp","max","min","rows","isCellSelected","x","y","buffer","Lifecycle_1","TextBlinkStateManager","Disposable","_renderCallback","_coreBrowserService","_optionsService","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","_register","onSpecificOptionChange","duration","setIntervalDuration","rawOptions","blinkIntervalDuration","toDisposable","_clearInterval","isBlinkOn","isEnabled","setNeedsBlinkInViewport","needsBlinkInViewport","_updateIntervalState","setViewportVisible","isVisible","_interval","wasBlinkOn","setInterval","clearInterval","millis","Promise","resolve","setTimeout","timeout","store","timer","disposable","clearTimeout","add","_token","_isDisposed","cancel","setIfNotSet","_isScheduled","queueMicrotask","_disposable","context","handle","$r","$g","$b","$a","channels","color","rgb","rgba","toPaddedHex","c","s","toString","contrastRatio","l1","l2","NULL_COLOR","toCss","r","g","toRgba","toColor","color_1","opacity","toChannels","blend","bg","fg","fgR","fgG","fgB","bgR","bgG","bgB","isOpaque","ensureContrastRatio","ratio","result","opaque","rgbaColor","multiplyOpacity","factor","toColorRGB","css_1","$ctx","$litmusColor","document","createElement","ctx","getContext","willReadFrequently","globalCompositeOperation","createLinearGradient","match","parseInt","slice","repeat","rgbaMatch","parseFloat","fillStyle","fillRect","getImageData","data","rgb_1","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","entry","fn","idx","indexOf","splice","Array","isArray","fire","call","listeners","i","len","forward","from","to","map","any","events","DisposableStore","runAndSubscribe","initial","arg","d","_disposables","Set","isDisposed","o","_store","None","Object","freeze","_value","TwoKeyMap","_data","first","second","third","fourth","_targetWindow","isSafari","majorVersion","userAgent","isNode","process","navigator","startsWith","platform","isFirefox","includes","isChrome","isLegacyEdge","test","isMac","isWindows","isLinux","isChromeOS","TaskQueue","logService","_tasks","_i","_logService","enqueue","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","bind","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","performance","now","warn","abs","PriorityTaskQueue","callback","_createDeadline","identifier","IdleTaskQueue","requestIdleCallback","cancelIdleCallback","_queue","AttributeData","extended","ExtendedAttrs","fromColorRGB","clone","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","underlineStyle","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isProtected","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","updateExtended","isEmpty","getUnderlineColor","underlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","urlId","val","TextDecoder_1","Constants_1","AttributeData_1","CellData","content","combinedData","fromCharData","obj","setFromCharData","isCombined","getWidth","getChars","stringFromCodePoint","getCode","charCodeAt","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","code","CHAR_DATA_WIDTH_INDEX","getAsCharData","attributesEquals","other","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","CHAR_DATA_CODE_INDEX","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","String","fromCharCode","_interim","decode","input","target","size","startPos","interim","Uint8Array","fill","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","missing","fourStop","Color_1","RendererUtils_1","CustomGlyphDefinitions_1","$colors","$fg","$bg","$hasFg","$hasBg","$isSelected","$variantOffset","_terminal","_optionService","_selectionRenderModel","_decorationService","_themeService","deviceCellHeight","colors","floor","fontSize","dpr","blockPatternCodepoints","has","forEachDecorationAtCell","backgroundColorRGB","foregroundColorRGB","ansi","foreground","isFocused","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","selectionForeground","treatGlyphAsBackgroundColor","background","deviceCharWidth","deviceCharHeight","devicePixelRatio","deviceMaxTextureSize","customGlyphs","newConfig","CharAtlasUtils_1","generateConfig","charAtlasCache","ownedByIndex","ownedBy","configEquals","config","atlas","core","_core","newEntry","TextureAtlas_1","TextureAtlas","unicodeService","index","clonedColors","cursor","cursorAccent","selectionBackgroundTransparent","selectionInactiveBackgroundTransparent","overviewRulerBorder","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","contrastCache","halfContrastCache","letterSpacing","lineHeight","fontFamily","fontWeight","fontWeightBold","allowTransparency","drawBoldTextInBrightColors","minimumContrastRatio","colorCode","Platform_1","DIM_OPACITY","TEXT_BASELINE","_isIdlePaused","isCursorVisible","_restartInterval","_resetIdleTimer","isPaused","_blinkStartTimeout","_blinkInterval","_animationFrame","cancelAnimationFrame","_idleTimeout","restartBlinkAnimation","_animationTimeRestarted","Date","timeToStart","time","pause","resume","_stopBlinkingDueToIdle","element","parentWindow","observer","ResizeObserver","entries","find","disconnect","devicePixelContentBoxSize","inlineSize","blockSize","observe","box","WebglUtils_1","$glyph","$i","$leftCellPadding","$clippedPixels","GlyphRenderer","_gl","_dimensions","_lastSeenPageLayoutVersion","_pageOverflowWarned","_activeBuffer","_vertices","count","attributes","Float32Array","attributesBuffers","gl","maxAtlasPages","throwIfFalsy","getParameter","MAX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","_program","createProgram","maxFragmentShaderTextureUnits","textureConditionals","createFragmentShaderSource","deleteProgram","_projectionLocation","getUniformLocation","_resolutionLocation","_textureLocation","vertexArrayObject","_vertexArrayObject","createVertexArray","deleteVertexArray","bindVertexArray","unitQuadVertices","unitQuadVerticesBuffer","createBuffer","deleteBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","unitQuadElementIndices","elementIndicesBuffer","ELEMENT_ARRAY_BUFFER","_attributesBuffer","vertexAttribDivisor","BYTES_PER_ELEMENT","useProgram","textureUnits","Int32Array","uniform1iv","uniformMatrix4fv","PROJECTION_MATRIX","_atlasTextures","glTexture","GLTexture","createTexture","deleteTexture","texture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","enable","BLEND","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","handleResize","beginFrame","_atlas","pageLayoutVersion","updateCell","chars","lastBg","_updateCell","array","cols","getRasterizedGlyphCombinedChar","getRasterizedGlyph","offset","texturePage","texturePositionClipSpace","pages","sizeClipSpace","rescaleOverlappingGlyphs","allowRescaling","newCount","viewport","uniform2f","render","renderModel","activeBuffer","bufferLength","lineLengths","si","sub","subarray","STREAM_DRAW","pageCount","version","_bindAtlasPageTexture","drawElementsInstanced","TRIANGLE_STRIP","setAtlas","invalidateAtlasTextures","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","setDimensions","dimensions","BYTES_PER_RECTANGLE","Vertices","$rgba","$x1","$y1","RectangleRenderer","_verticesCursor","_updateCachedColors","onChangeColors","_updateViewportRectangle","renderBackgrounds","_renderVertices","renderCursor","vertices","DYNAMIC_DRAW","_bgFloat","_colorToFloat32Array","_cursorFloat","_addRectangleFloat","updateBackgrounds","model","currentStartX","currentBg","currentFg","currentInverse","modelIndex","inverse","rectangleCount","cells","_updateRectangle","updateCursor","style","cursorWidth","startX","endX","expandFloat32Array","_addRectangle","x1","y1","SelectionRenderModel_1","COMBINED_CHAR_BIT_MASK","Uint32Array","selection","createSelectionRenderModel","resize","indexCount","CustomGlyphRasterizer_1","MultiKeyMap_1","TaskQueue_1","Constants_2","Event_1","NULL_RASTERIZED_GLYPH","texturePosition","_pages","_document","_config","_unicodeService","_didWarmUp","_cacheMap","FourKeyMap","_cacheMapCombined","_activePages","_workBoundingBox","bottom","right","_workAttributeData","_textureSize","_onAddTextureAtlasCanvas","Emitter","onAddTextureAtlasCanvas","_onRemoveTextureAtlasCanvas","onRemoveTextureAtlasCanvas","_pageLayoutVersion","fontProbeMismatchCount","_createNewPage","_tmpCanvas","createCanvas","TMP_CANVAS_GLYPH_PADDING","_tmpCtx","alpha","remove","page","warmUp","_doWarmUp","queue","rasterizedGlyph","_drawToCache","clearTexture","every","glyphs","currentRow","_evictAllPages","pagesBySize","filter","percentageUsed","sameSizeI","mergingPages","some","p","newPage","AtlasPage","sortedMergingPagesIndexes","mergedPageIndex","mergedPage","_mergePages","nextVersion","_deletePage","mergedSize","xOffset","yOffset","drawImage","pageIndex","j","adjustingPage","startTime","_overflowSizePage","debug","toFixed","restrictToCellHeight","domContainer","_getFromCacheMap","cacheMap","key","_getColorFromAnsiIndex","_getBackgroundColor","bgColorMode","bgColor","dim","arr","_getForegroundColor","fgColorMode","fgColor","bold","excludeFromContrastRatioDemands","minimumContrastColor","_getMinimumContrastColor","_resolveBackgroundRgba","_resolveForegroundRgba","cache","_getContrastCache","adjustedColor","getColor","setColor","_probeRasterizationFontWeight","desired","token","font","fontProbeLastMismatch","actual","__orcaAtlasFontProbe","codeOrChars","parentElement","display","append","allowedWidth","allowedHeight","save","italic","underline","strikethrough","overline","temp","temp2","backgroundColor","fontStyle","textBaseline","powerlineGlyph","restrictedPowerlineGlyph","isRestrictedPowerlineGlyph","foregroundColor","padding","customGlyph","variantOffset","tryDrawCustomGlyph","chWidth","enableClearThresholdCheck","wcwidth","getStringCellWidth","strokeStyle","join","beginPath","xLeft","yTopDefault","yBotDefault","nextOffset","yTop","yBot","wasFilled","xChLeft","xChRight","moveTo","lineTo","clipRegion","Path2D","rect","clip","scaleX","scaleY","polygons","polygon","closePath","offsetWidth","setLineDash","computeNextVariantOffset","lineRatio","gapRatio","xChWidth","line","gap","stroke","restore","metrics","measureText","actualBoundingBoxDescent","strokeText","fillText","isBeyondCellBounds","clearColor","imageData","checkCompletelyTransparent","_findGlyphBoundingBox","activePage","activeRow","row","fixedRows","wasPageAndRowFound","candidatePage","putImageData","addGlyph","boundingBox","restrictedGlyph","found","alphaOffset","_usedPixels","_glyphs","glyph","sourcePages","concat","clearRect","enableThresholdCheck","threshold","CellColorResolver_1","CharAtlasCache_1","CursorBlinkStateManager_1","DevicePixelObserver_1","CellData_1","TextBlinkStateManager_1","GlyphRenderer_1","RectangleRenderer_1","RenderModel_1","LinkRenderLayer_1","Dom_1","WebglRenderer","_characterJoinerService","_charSizeService","_coreService","_customGlyphs","preserveDrawingBuffer","_cursorBlinkStateManager","MutableDisposable","_charAtlasDisposable","_observerDisposable","_model","RenderModel","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_workCell","_rectangleRenderer","_glyphRenderer","_onChangeTextureAtlas","onChangeTextureAtlas","_onRequestRedraw","onRequestRedraw","_onContextLoss","onContextLoss","_canvas","mainDocument","contextAttributes","antialias","depth","_handleColorChange","_cellColorResolver","CellColorResolver","_renderLayers","LinkRenderLayer","screenElement","linkifier","createRenderDimensions","_devicePixelRatio","_updateDimensions","_updateCursorBlink","onOptionChange","_handleOptionsChanged","_textBlinkStateManager","_requestRedrawViewport","_resetBlinkingRowState","_deviceMaxTextureSize","preventDefault","_contextRestorationTimeout","removeTerminalFromCache","_initializeWebGLState","observeDevicePixelDimensions","w","h","_setCanvasDevicePixelDimensions","onWindowChange","appendChild","_isAttached","isConnected","l","removeChild","textureAtlas","_charAtlas","_refreshCharAtlas","_clearModel","handleDevicePixelRatioChange","sync","handleCharSizeChanged","handleBlur","handleFocus","handleViewportVisibilityChange","handleSelectionChanged","handleCursorMove","acquireTextureAtlas","combinedDisposable","clearGlyphRenderer","clearTextureAtlas","reset","renderRows","handleGridChanged","_updateModel","merged","mergeRetries","decPrivateModes","cursorBlink","CursorBlinkStateManager","_requestRedrawCursor","joinedRanges","isJoined","skipJoinedCheckUntilX","isValidJoinRange","lastCharX","range","isCursorRow","clamp","cursorStyle","cursorY","baseY","viewportRelativeCursorY","cursorX","lastCursorX","isCursorInitialized","isCursorHidden","modelUpdated","bufferLine","lines","_nullModelCell","_setRowBlinkState","rowHasBlinkingCells","getJoinedCharacters","loadCell","firstSelectionState","JoinedCellData","translateToString","cursorInactiveStyle","_updateTextBlinkState","cellIndex","hasBlinkingCells","firstCell","_width","vertexSource","fragmentSource","program","attachShader","createShader","VERTEX_SHADER","FRAGMENT_SHADER","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","source","newLength","newArray","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","GitBranchSymbolsParts","sextant","pattern","rects","rowH","rowY","leftBit","rightBit","segmentedDigit","paths","segW","taperX","taperY","segH","y2","y3","x2","x3","midY","LINE_H","strokeWidth","LINE_V","FADE_RIGHT","FADE_LEFT","FADE_DOWN","FADE_UP","CURVE_DOWN_RIGHT","xp","yp","CURVE_DOWN_LEFT","CURVE_UP_RIGHT","CURVE_UP_LEFT","NODE_FILL","NODE_STROKE","NODE_LINE_RIGHT","NODE_LINE_LEFT","NODE_LINE_DOWN","NODE_LINE_UP","customGlyphDefinitions","rightPadding","leftPadding","scaleType","clipPath","fromEntries","_","fromCodePoint","unifiedCharDefinition","parts","part","drawDefinitionPart","createOffscreenPatternCanvas","OffscreenCanvas","createDomPatternCanvas","createPatternCanvas","offscreenCanvasFactory","domCanvasFactory","drawWidth","drawHeight","drawXOffset","drawYOffset","instruction","split","args","substring","applyClipPath","charDefinition","xEighth","yEighth","drawBlockVectorChar","patternSet","cachedPatterns","tmpCanvas","tmpCtx","ImageData","createPattern","dx","dy","setTransform","DOMMatrix","translateSelf","drawPatternChar","actualInstructions","currentX","currentY","lastControlX","lastControlY","lastCommand","f","svgToCanvasInstructionMap","translateArgs","drawPathFunctionCharacter","instructions","rx","ry","xAxisRotation","PI","largeArcFlag","sweepFlag","drawSvgArc","translatedArgs","quadraticCurveTo","cpX","cpY","bezierCurveTo","drawPathDefinitionCharacter","lineCap","drawPathNegativeDefinitionCharacter","cssLineWidth","drawVectorShape","paddingY","radius","bit","cx","brailleDotPositions","cy","arc","drawBrailleCharacter","phi","cosPhi","cos","sinPhi","sin","x1p","y1p","rxSq","rySq","x1pSq","y1pSq","lambda","lambdaSqrt","sqrt","sq","coef","cxp","cyp","ux","uy","vx","vy","startAngle","atan2","dTheta","endAngle","ellipse","C","L","M","Q","T","cellHeight","doClamp","clampToCell","rounded","BaseRenderLayer","_container","id","zIndex","_alpha","_deviceCharWidth","_deviceCharHeight","_deviceCellWidth","_deviceCellHeight","_deviceCharLeft","_deviceCharTop","classList","_initCanvas","_ctx","_clearAll","startRow","endRow","_setTransparency","oldCanvas","cloneNode","replaceChild","colorSet","_fillBottomLineAtCells","_clearCells","_fillCharTrueColor","_getFont","_clipCell","BaseRenderLayer_1","container","linkifier2","coreBrowserService","optionsService","themeService","onShowLinkUnderline","_handleShowLinkUnderline","onHideLinkUnderline","_handleHideLinkUnderline","_state","_clearCurrentLink","middleRowCount","is256Color","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","WebglRenderer_1","WebglAddon","getSafariVersion","_preserveDrawingBuffer","activate","onWillOpen","coreService","unsafeCore","renderService","_renderService","characterJoinerService","charSizeService","decorationService","_renderer","setRenderer","_createRenderer"],"sourceRoot":""} ++{"version":3,"file":"addon-webgl.js","mappings":"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","sources":["webpack://WebglAddon/webpack/universalModuleDefinition","webpack://WebglAddon/../src/browser/Dom.ts","webpack://WebglAddon/../src/browser/renderer/shared/Constants.ts","webpack://WebglAddon/../src/browser/renderer/shared/RendererUtils.ts","webpack://WebglAddon/../src/browser/renderer/shared/SelectionRenderModel.ts","webpack://WebglAddon/../src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://WebglAddon/../src/common/Async.ts","webpack://WebglAddon/../src/common/Color.ts","webpack://WebglAddon/../src/common/Event.ts","webpack://WebglAddon/../src/common/Lifecycle.ts","webpack://WebglAddon/../src/common/MultiKeyMap.ts","webpack://WebglAddon/../src/common/Platform.ts","webpack://WebglAddon/../src/common/TaskQueue.ts","webpack://WebglAddon/../src/common/buffer/AttributeData.ts","webpack://WebglAddon/../src/common/buffer/CellData.ts","webpack://WebglAddon/../src/common/buffer/Constants.ts","webpack://WebglAddon/../src/common/input/TextDecoder.ts","webpack://WebglAddon/./src/CellColorResolver.ts","webpack://WebglAddon/./src/CharAtlasCache.ts","webpack://WebglAddon/./src/CharAtlasUtils.ts","webpack://WebglAddon/./src/Constants.ts","webpack://WebglAddon/./src/CursorBlinkStateManager.ts","webpack://WebglAddon/./src/DevicePixelObserver.ts","webpack://WebglAddon/./src/GlyphRenderer.ts","webpack://WebglAddon/./src/RectangleRenderer.ts","webpack://WebglAddon/./src/RenderModel.ts","webpack://WebglAddon/./src/TextureAtlas.ts","webpack://WebglAddon/./src/WebglRenderer.ts","webpack://WebglAddon/./src/WebglUtils.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphDefinitions.ts","webpack://WebglAddon/./src/customGlyphs/CustomGlyphRasterizer.ts","webpack://WebglAddon/./src/renderLayer/BaseRenderLayer.ts","webpack://WebglAddon/./src/renderLayer/LinkRenderLayer.ts","webpack://WebglAddon/webpack/bootstrap","webpack://WebglAddon/./src/WebglAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WebglAddon\"] = factory();\n\telse\n\t\troot[\"WebglAddon\"] = factory();\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n // A v_texpage beyond the sampler budget matches no branch above. Leaving outColor unwritten\n // is undefined behaviour in GLSL ES and paints garbage, so fall through to transparent.\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals} else { outColor = vec4(0.0, 0.0, 0.0, 0.0); }\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { FontWeight } from '@xterm/xterm';\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n // Orca diagnostics: read by terminal-render-desync-weight-probe.ts to tell a real\n // bold-collapse from a repaint problem. Canvas silently keeps its previous font when an\n // assignment fails to parse, which rasterizes glyphs at a stale weight.\n public fontProbeMismatchCount = 0;\n public fontProbeLastMismatch: { desired: string, actual: string } | undefined;\n\n public clearTexture(): void {\n // Guard on every page rather than pages[0]: a merged page is never written through\n // currentRow, so once one lands at index 0 the old check made every later clear a no-op.\n if (this._pages.every(page => page.glyphs.length === 0 && page.currentRow.x === 0 && page.currentRow.y === 0)) {\n return;\n }\n // Return the atlas to its constructor state instead of clearing in place: page.clear() leaves\n // page.glyphs populated, which would keep the guard above from ever firing again. Eviction\n // also bumps _pageLayoutVersion, so every renderer sharing this atlas rebuilds its model.\n this._evictAllPages();\n this._createNewPage();\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n /**\n * Orca diagnostic. Canvas ignores a font assignment it cannot parse and silently keeps the\n * previous value, so a bad family or weight rasterizes every glyph at a stale weight. Record\n * the mismatch rather than correcting it: the goal is to tell that failure apart from a\n * repaint bug when a terminal renders bold-collapsed.\n */\n private _probeRasterizationFontWeight(fontWeight: FontWeight): void {\n const desired = String(fontWeight);\n // Only numeric weights are comparable; keywords round-trip through Canvas unchanged.\n if (!/^(?:[1-8]\\d{2}|900)$/.test(desired)) {\n return;\n }\n // Canvas normalizes font serialization: Chromium omits 400 and emits the keyword bold for 700.\n const token = this._tmpCtx.font.match(\n /(?:^|\\s)(normal|bold|[1-9]\\d{0,3})(?=\\s+\\d+(?:\\.\\d+)?px(?:\\s|$))/\n )?.[1] ?? '400';\n const actual = token === 'normal' ? '400' : token === 'bold' ? '700' : token;\n if (actual === desired) {\n return;\n }\n this.fontProbeMismatchCount++;\n this.fontProbeLastMismatch = { desired, actual: this._tmpCtx.font };\n try {\n (globalThis as { __orcaAtlasFontProbe?: (mismatch: { desired: string, actual: string }) => void })\n .__orcaAtlasFontProbe?.(this.fontProbeLastMismatch);\n } catch {\n // Diagnostics only; a throwing listener must never break rasterization.\n }\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._probeRasterizationFontWeight(fontWeight);\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded — both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n // Test the retry budget before beginFrame: beginFrame latches the page layout version it\n // observed, so tripping the limit after consuming it would strand a stale model with no\n // later frame able to notice it needs rebuilding.\n while (this._charAtlas && mergeRetries++ < Constants.MERGE_RETRY_LIMIT && this._glyphRenderer.value.beginFrame()) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** ─ */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** └ */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** ┘ */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** ┐ */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** ┌ */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** ╵ */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** ╴ */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** ╶ */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** ╷ */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** ┴ */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** ┤ */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** ├ */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** ┬ */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** ┼ */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** ╌ */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** ┄ */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** ┉ */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** ╎ */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** ┆ */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** ┊ */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '─': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '━': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '│': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '┃': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '┄': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┅': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┆': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '┇': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '┈': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '┉': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '┊': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '┋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '┌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '┍': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┎': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '┐': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '┑': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┒': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '└': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '┕': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┖': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '┘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '┙': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┚': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '├': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '┝': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┞': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┟': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┠': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┡': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┢': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '┤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '┥': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┦': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┧': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┨': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '┩': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┪': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '┬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '┭': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┮': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┯': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┰': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '┱': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '┲': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '┳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '┴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '┵': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┶': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┷': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '┸': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '┹': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '┺': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '┻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '┼': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '┽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '┾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '┿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '╀': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '╁': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╂': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '╃': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '╄': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '╅': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '╆': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '╇': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '╈': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '╉': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '╊': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '╋': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '╌': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '╍': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '╎': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '╏': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '═': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '║': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '╒': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╓': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╔': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╕': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╖': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '╗': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╘': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '╙': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╚': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╛': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '╜': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '╝': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╞': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╟': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '╠': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╡': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '╢': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╣': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '╤': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '╥': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '╦': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '╧': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╨': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '╩': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '╪': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '╫': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '╬': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '╭': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '╮': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╯': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '╰': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '╱': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '╲': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '╳': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '╴': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '╵': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '╶': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '╷': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '╸': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '╹': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '╺': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '╻': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '╼': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '╽': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '╾': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '╿': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '▀': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '▁': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '▂': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '▃': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '▄': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '▅': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '▆': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '▇': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '█': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '▉': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '▊': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '▋': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '▌': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '▍': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '▎': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '▏': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '▐': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '░': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '▒': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '▓': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '▔': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '▕': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '▖': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '▗': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '▘': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '▙': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '▚': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '▛': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '▜': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '▝': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '▞': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '▟': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * ─a─\n * │ │\n * f b\n * ─g─\n * e c\n * │ │\n * ─d─\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","node","type","handler","useCapture","addDisposableListener","domNode","bb","getBoundingClientRect","win","getWindow","left","scrollX","top","scrollY","width","height","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","push","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","length","sort","shift","execute","animationFrameRunner","Async_1","__webpack_require__","e","candidateNode","ownerDocument","defaultView","candidateEvent","view","window","DomListener","constructor","options","this","_node","_type","_handler","_options","addEventListener","dispose","removeEventListener","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","console","error","a","b","animationFrameState","Map","get","set","WindowIntervalTimer","IntervalTimer","super","_defaultTarget","undefined","cancelAndSet","interval","INVERTED_DEFAULT_COLOR","isPowerlineGlyph","codepoint","isEmoji","value","Error","glyphSizeX","deviceCellWidth","Math","ceil","isNerdFontGlyph","isBoxOrBlockGlyph","css","canvas","cell","device","char","cellWidth","lineWidth","currentOffset","round","SelectionRenderModel","clear","hasSelection","columnSelectMode","viewportStartRow","viewportEndRow","viewportCappedStartRow","viewportCappedEndRow","startCol","endCol","selectionStart","selectionEnd","update","terminal","start","end","viewportY","buffers","active","ydisp","max","min","rows","isCellSelected","x","y","buffer","Lifecycle_1","TextBlinkStateManager","Disposable","_renderCallback","_coreBrowserService","_optionsService","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","_register","onSpecificOptionChange","duration","setIntervalDuration","rawOptions","blinkIntervalDuration","toDisposable","_clearInterval","isBlinkOn","isEnabled","setNeedsBlinkInViewport","needsBlinkInViewport","_updateIntervalState","setViewportVisible","isVisible","_interval","wasBlinkOn","setInterval","clearInterval","millis","Promise","resolve","setTimeout","timeout","store","timer","disposable","clearTimeout","add","_token","_isDisposed","cancel","setIfNotSet","_isScheduled","queueMicrotask","_disposable","context","handle","$r","$g","$b","$a","channels","color","rgb","rgba","toPaddedHex","c","s","toString","contrastRatio","l1","l2","NULL_COLOR","toCss","r","g","toRgba","toColor","color_1","opacity","toChannels","blend","bg","fg","fgR","fgG","fgB","bgR","bgG","bgB","isOpaque","ensureContrastRatio","ratio","result","opaque","rgbaColor","multiplyOpacity","factor","toColorRGB","css_1","$ctx","$litmusColor","document","createElement","ctx","getContext","willReadFrequently","globalCompositeOperation","createLinearGradient","match","parseInt","slice","repeat","rgbaMatch","parseFloat","fillStyle","fillRect","getImageData","data","rgb_1","relativeLuminance2","rs","gs","bs","pow","relativeLuminance","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","EventUtils","_listeners","_disposed","event","_event","listener","thisArgs","disposables","entry","fn","idx","indexOf","splice","Array","isArray","fire","call","listeners","i","len","forward","from","to","map","any","events","DisposableStore","runAndSubscribe","initial","arg","d","_disposables","Set","isDisposed","o","_store","None","Object","freeze","_value","TwoKeyMap","_data","first","second","third","fourth","_targetWindow","isSafari","majorVersion","userAgent","isNode","process","navigator","startsWith","platform","isFirefox","includes","isChrome","isLegacyEdge","test","isMac","isWindows","isLinux","isChromeOS","TaskQueue","logService","_tasks","_i","_logService","enqueue","task","_start","flush","_idleCallback","_cancelCallback","_requestCallback","_process","bind","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","performance","now","warn","abs","PriorityTaskQueue","callback","_createDeadline","identifier","IdleTaskQueue","requestIdleCallback","cancelIdleCallback","_queue","AttributeData","extended","ExtendedAttrs","fromColorRGB","clone","newObj","isInverse","isBold","isUnderline","hasExtendedAttrs","underlineStyle","isBlink","isInvisible","isItalic","isDim","isStrikethrough","isProtected","isOverline","getFgColorMode","getBgColorMode","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","getFgColor","getBgColor","updateExtended","isEmpty","getUnderlineColor","underlineColor","getUnderlineColorMode","isUnderlineColorRGB","isUnderlineColorPalette","isUnderlineColorDefault","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","ext","_urlId","_ext","urlId","val","payload","TextDecoder_1","Constants_1","AttributeData_1","CellData","content","combinedData","fromCharData","obj","setFromCharData","isCombined","getWidth","getChars","stringFromCodePoint","getCode","charCodeAt","CHAR_DATA_ATTR_INDEX","combined","CHAR_DATA_CHAR_INDEX","code","CHAR_DATA_WIDTH_INDEX","getAsCharData","attributesEquals","other","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","CHAR_DATA_CODE_INDEX","NULL_CELL_CHAR","NULL_CELL_WIDTH","NULL_CELL_CODE","WHITESPACE_CELL_CHAR","WHITESPACE_CELL_WIDTH","WHITESPACE_CELL_CODE","codePoint","String","fromCharCode","_interim","decode","input","target","size","startPos","interim","Uint8Array","fill","byte1","byte2","byte3","byte4","discardInterim","cp","tmp","pos","missing","fourStop","Color_1","RendererUtils_1","CustomGlyphDefinitions_1","$colors","$fg","$bg","$hasFg","$hasBg","$isSelected","$variantOffset","_terminal","_optionService","_selectionRenderModel","_decorationService","_themeService","deviceCellHeight","colors","floor","fontSize","dpr","blockPatternCodepoints","has","forEachDecorationAtCell","backgroundColorRGB","foregroundColorRGB","ansi","foreground","isFocused","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","selectionForeground","treatGlyphAsBackgroundColor","background","deviceCharWidth","deviceCharHeight","devicePixelRatio","deviceMaxTextureSize","customGlyphs","newConfig","CharAtlasUtils_1","generateConfig","charAtlasCache","ownedByIndex","ownedBy","configEquals","config","atlas","core","_core","newEntry","TextureAtlas_1","TextureAtlas","unicodeService","index","clonedColors","cursor","cursorAccent","selectionBackgroundTransparent","selectionInactiveBackgroundTransparent","overviewRulerBorder","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","contrastCache","halfContrastCache","letterSpacing","lineHeight","fontFamily","fontWeight","fontWeightBold","allowTransparency","drawBoldTextInBrightColors","minimumContrastRatio","colorCode","Platform_1","DIM_OPACITY","TEXT_BASELINE","_isIdlePaused","isCursorVisible","_restartInterval","_resetIdleTimer","isPaused","_blinkStartTimeout","_blinkInterval","_animationFrame","cancelAnimationFrame","_idleTimeout","restartBlinkAnimation","_animationTimeRestarted","Date","timeToStart","time","pause","resume","_stopBlinkingDueToIdle","element","parentWindow","observer","ResizeObserver","entries","find","disconnect","devicePixelContentBoxSize","inlineSize","blockSize","observe","box","WebglUtils_1","$glyph","$i","$leftCellPadding","$clippedPixels","GlyphRenderer","_gl","_dimensions","_lastSeenPageLayoutVersion","_pageOverflowWarned","_activeBuffer","_vertices","count","attributes","Float32Array","attributesBuffers","gl","maxAtlasPages","throwIfFalsy","getParameter","MAX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","_program","createProgram","maxFragmentShaderTextureUnits","textureConditionals","createFragmentShaderSource","deleteProgram","_projectionLocation","getUniformLocation","_resolutionLocation","_textureLocation","vertexArrayObject","_vertexArrayObject","createVertexArray","deleteVertexArray","bindVertexArray","unitQuadVertices","unitQuadVerticesBuffer","createBuffer","deleteBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","unitQuadElementIndices","elementIndicesBuffer","ELEMENT_ARRAY_BUFFER","_attributesBuffer","vertexAttribDivisor","BYTES_PER_ELEMENT","useProgram","textureUnits","Int32Array","uniform1iv","uniformMatrix4fv","PROJECTION_MATRIX","_atlasTextures","glTexture","GLTexture","createTexture","deleteTexture","texture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","enable","BLEND","blendFunc","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","handleResize","beginFrame","_atlas","pageLayoutVersion","updateCell","chars","lastBg","_updateCell","array","cols","getRasterizedGlyphCombinedChar","getRasterizedGlyph","offset","texturePage","texturePositionClipSpace","pages","sizeClipSpace","rescaleOverlappingGlyphs","allowRescaling","newCount","viewport","uniform2f","render","renderModel","activeBuffer","bufferLength","lineLengths","si","sub","subarray","STREAM_DRAW","pageCount","version","_bindAtlasPageTexture","drawElementsInstanced","TRIANGLE_STRIP","setAtlas","invalidateAtlasTextures","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","setDimensions","dimensions","BYTES_PER_RECTANGLE","Vertices","$rgba","$x1","$y1","RectangleRenderer","_verticesCursor","_updateCachedColors","onChangeColors","_updateViewportRectangle","renderBackgrounds","_renderVertices","renderCursor","vertices","DYNAMIC_DRAW","_bgFloat","_colorToFloat32Array","_cursorFloat","_addRectangleFloat","updateBackgrounds","model","currentStartX","currentBg","currentFg","currentInverse","modelIndex","inverse","rectangleCount","cells","_updateRectangle","updateCursor","style","cursorWidth","startX","endX","expandFloat32Array","_addRectangle","x1","y1","SelectionRenderModel_1","COMBINED_CHAR_BIT_MASK","Uint32Array","selection","createSelectionRenderModel","resize","indexCount","CustomGlyphRasterizer_1","MultiKeyMap_1","TaskQueue_1","Constants_2","Event_1","NULL_RASTERIZED_GLYPH","texturePosition","_pages","_document","_config","_unicodeService","_didWarmUp","_cacheMap","FourKeyMap","_cacheMapCombined","_activePages","_workBoundingBox","bottom","right","_workAttributeData","_textureSize","_onAddTextureAtlasCanvas","Emitter","onAddTextureAtlasCanvas","_onRemoveTextureAtlasCanvas","onRemoveTextureAtlasCanvas","_pageLayoutVersion","fontProbeMismatchCount","_createNewPage","_tmpCanvas","createCanvas","TMP_CANVAS_GLYPH_PADDING","_tmpCtx","alpha","remove","page","warmUp","_doWarmUp","queue","rasterizedGlyph","_drawToCache","clearTexture","every","glyphs","currentRow","_evictAllPages","pagesBySize","filter","percentageUsed","sameSizeI","mergingPages","some","p","newPage","AtlasPage","sortedMergingPagesIndexes","mergedPageIndex","mergedPage","_mergePages","nextVersion","_deletePage","mergedSize","xOffset","yOffset","drawImage","pageIndex","j","adjustingPage","startTime","_overflowSizePage","debug","toFixed","restrictToCellHeight","domContainer","_getFromCacheMap","cacheMap","key","_getColorFromAnsiIndex","_getBackgroundColor","bgColorMode","bgColor","dim","arr","_getForegroundColor","fgColorMode","fgColor","bold","excludeFromContrastRatioDemands","minimumContrastColor","_getMinimumContrastColor","_resolveBackgroundRgba","_resolveForegroundRgba","cache","_getContrastCache","adjustedColor","getColor","setColor","_probeRasterizationFontWeight","desired","token","font","fontProbeLastMismatch","actual","__orcaAtlasFontProbe","codeOrChars","parentElement","display","append","allowedWidth","allowedHeight","save","italic","underline","strikethrough","overline","temp","temp2","backgroundColor","fontStyle","textBaseline","powerlineGlyph","restrictedPowerlineGlyph","isRestrictedPowerlineGlyph","foregroundColor","padding","customGlyph","variantOffset","tryDrawCustomGlyph","chWidth","enableClearThresholdCheck","wcwidth","getStringCellWidth","strokeStyle","join","beginPath","xLeft","yTopDefault","yBotDefault","nextOffset","yTop","yBot","wasFilled","xChLeft","xChRight","moveTo","lineTo","clipRegion","Path2D","rect","clip","scaleX","scaleY","polygons","polygon","closePath","offsetWidth","setLineDash","computeNextVariantOffset","lineRatio","gapRatio","xChWidth","line","gap","stroke","restore","metrics","measureText","actualBoundingBoxDescent","strokeText","fillText","isBeyondCellBounds","clearColor","imageData","checkCompletelyTransparent","_findGlyphBoundingBox","activePage","activeRow","row","fixedRows","wasPageAndRowFound","candidatePage","putImageData","addGlyph","boundingBox","restrictedGlyph","found","alphaOffset","_usedPixels","_glyphs","glyph","sourcePages","concat","clearRect","enableThresholdCheck","threshold","CellColorResolver_1","CharAtlasCache_1","CursorBlinkStateManager_1","DevicePixelObserver_1","CellData_1","TextBlinkStateManager_1","GlyphRenderer_1","RectangleRenderer_1","RenderModel_1","LinkRenderLayer_1","Dom_1","WebglRenderer","_characterJoinerService","_charSizeService","_coreService","_customGlyphs","preserveDrawingBuffer","_cursorBlinkStateManager","MutableDisposable","_charAtlasDisposable","_observerDisposable","_model","RenderModel","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_workCell","_rectangleRenderer","_glyphRenderer","_onChangeTextureAtlas","onChangeTextureAtlas","_onRequestRedraw","onRequestRedraw","_onContextLoss","onContextLoss","_canvas","mainDocument","contextAttributes","antialias","depth","_handleColorChange","_cellColorResolver","CellColorResolver","_renderLayers","LinkRenderLayer","screenElement","linkifier","createRenderDimensions","_devicePixelRatio","_updateDimensions","_updateCursorBlink","onOptionChange","_handleOptionsChanged","_textBlinkStateManager","_requestRedrawViewport","_resetBlinkingRowState","_deviceMaxTextureSize","preventDefault","_contextRestorationTimeout","removeTerminalFromCache","_initializeWebGLState","observeDevicePixelDimensions","w","h","_setCanvasDevicePixelDimensions","onWindowChange","appendChild","_isAttached","isConnected","l","removeChild","textureAtlas","_charAtlas","_refreshCharAtlas","_clearModel","handleDevicePixelRatioChange","sync","handleCharSizeChanged","handleBlur","handleFocus","handleViewportVisibilityChange","handleSelectionChanged","handleCursorMove","acquireTextureAtlas","combinedDisposable","clearGlyphRenderer","clearTextureAtlas","reset","renderRows","handleGridChanged","_updateModel","merged","mergeRetries","decPrivateModes","cursorBlink","CursorBlinkStateManager","_requestRedrawCursor","joinedRanges","isJoined","skipJoinedCheckUntilX","isValidJoinRange","lastCharX","range","isCursorRow","clamp","cursorStyle","cursorY","baseY","viewportRelativeCursorY","cursorX","lastCursorX","isCursorInitialized","isCursorHidden","modelUpdated","bufferLine","lines","_nullModelCell","_setRowBlinkState","rowHasBlinkingCells","getJoinedCharacters","loadCell","firstSelectionState","JoinedCellData","translateToString","cursorInactiveStyle","_updateTextBlinkState","cellIndex","hasBlinkingCells","firstCell","_width","vertexSource","fragmentSource","program","attachShader","createShader","VERTEX_SHADER","FRAGMENT_SHADER","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","source","newLength","newArray","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","deleteShader","GitBranchSymbolsParts","sextant","pattern","rects","rowH","rowY","leftBit","rightBit","segmentedDigit","paths","segW","taperX","taperY","segH","y2","y3","x2","x3","midY","LINE_H","strokeWidth","LINE_V","FADE_RIGHT","FADE_LEFT","FADE_DOWN","FADE_UP","CURVE_DOWN_RIGHT","xp","yp","CURVE_DOWN_LEFT","CURVE_UP_RIGHT","CURVE_UP_LEFT","NODE_FILL","NODE_STROKE","NODE_LINE_RIGHT","NODE_LINE_LEFT","NODE_LINE_DOWN","NODE_LINE_UP","customGlyphDefinitions","rightPadding","leftPadding","scaleType","clipPath","fromEntries","_","fromCodePoint","unifiedCharDefinition","parts","part","drawDefinitionPart","createOffscreenPatternCanvas","OffscreenCanvas","createDomPatternCanvas","createPatternCanvas","offscreenCanvasFactory","domCanvasFactory","drawWidth","drawHeight","drawXOffset","drawYOffset","instruction","split","args","substring","applyClipPath","charDefinition","xEighth","yEighth","drawBlockVectorChar","patternSet","cachedPatterns","tmpCanvas","tmpCtx","ImageData","createPattern","dx","dy","setTransform","DOMMatrix","translateSelf","drawPatternChar","actualInstructions","currentX","currentY","lastControlX","lastControlY","lastCommand","f","svgToCanvasInstructionMap","translateArgs","drawPathFunctionCharacter","instructions","rx","ry","xAxisRotation","PI","largeArcFlag","sweepFlag","drawSvgArc","translatedArgs","quadraticCurveTo","cpX","cpY","bezierCurveTo","drawPathDefinitionCharacter","lineCap","drawPathNegativeDefinitionCharacter","cssLineWidth","drawVectorShape","paddingY","radius","bit","cx","brailleDotPositions","cy","arc","drawBrailleCharacter","phi","cosPhi","cos","sinPhi","sin","x1p","y1p","rxSq","rySq","x1pSq","y1pSq","lambda","lambdaSqrt","sqrt","sq","coef","cxp","cyp","ux","uy","vx","vy","startAngle","atan2","dTheta","endAngle","ellipse","C","L","M","Q","T","cellHeight","doClamp","clampToCell","rounded","BaseRenderLayer","_container","id","zIndex","_alpha","_deviceCharWidth","_deviceCharHeight","_deviceCellWidth","_deviceCellHeight","_deviceCharLeft","_deviceCharTop","classList","_initCanvas","_ctx","_clearAll","startRow","endRow","_setTransparency","oldCanvas","cloneNode","replaceChild","colorSet","_fillBottomLineAtCells","_clearCells","_fillCharTrueColor","_getFont","_clipCell","BaseRenderLayer_1","container","linkifier2","coreBrowserService","optionsService","themeService","onShowLinkUnderline","_handleShowLinkUnderline","onHideLinkUnderline","_handleHideLinkUnderline","_state","_clearCurrentLink","middleRowCount","is256Color","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","WebglRenderer_1","WebglAddon","getSafariVersion","_preserveDrawingBuffer","activate","onWillOpen","coreService","unsafeCore","renderService","_renderService","characterJoinerService","charSizeService","decorationService","_renderer","setRenderer","_createRenderer"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/addon-webgl.mjs b/lib/addon-webgl.mjs -index 3e3c99a1e6807b2f57d7f93631bcee02a423e9bb..f040d0011e6859dab64e357a89d0e08bf8ce69ba 100644 +index c11c1e998e0a8750ce31e5d62f31f55041683ac6..0cf11f69629c07ddcfc56628b903c86e0f320faa 100644 --- a/lib/addon-webgl.mjs +++ b/lib/addon-webgl.mjs @@ -14,7 +14,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ --function g(i){return{dispose:i}}function Ft(i){if(!i)return i;if(Array.isArray(i)){for(let e of i)e.dispose();return[]}return i.dispose(),i}function De(...i){return g(()=>Ft(i))}var R0=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(let e of this._disposables)e.dispose();this._disposables.clear()}},W=class{constructor(){this._store=new R0}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}};W.None=Object.freeze({dispose(){}});var m0=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Pe=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),O0=Pe?"node":navigator.userAgent,ce=Pe?"node":navigator.platform,Be=O0.includes("Firefox"),T1=O0.includes("Chrome"),we=O0.includes("Edge"),ue=/^((?!chrome|android).)*safari/i.test(O0);function He(){if(!ue)return 0;let i=O0.match(/Version\/(\d+)/);return i===null||i.length<2?0:parseInt(i[1],10)}var l1=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(ce),L1=["Windows","Win16","Win32","WinCE"].includes(ce),h1=ce.indexOf("Linux")>=0,d1=/\bCrOS\b/.test(O0);var P=0,B=0,w=0,x=0,K={css:"#00000000",rgba:0},Z;(r=>{function i(s,a,o,n){return n!==void 0?`#${E0(s)}${E0(a)}${E0(o)}${E0(n)}`:`#${E0(s)}${E0(a)}${E0(o)}`}r.toCss=i;function e(s,a,o,n=255){return(s<<24|a<<16|o<<8|n)>>>0}r.toRgba=e;function t(s,a,o,n){return{css:r.toCss(s,a,o,n),rgba:r.toRgba(s,a,o,n)}}r.toColor=t})(Z||={});var I0;(n=>{function i(L,T){if(x=(T.rgba&255)/255,x===1)return{css:T.css,rgba:T.rgba};let h=T.rgba>>24&255,d=T.rgba>>16&255,_=T.rgba>>8&255,p=L.rgba>>24&255,c=L.rgba>>16&255,u=L.rgba>>8&255;P=p+Math.round((h-p)*x),B=c+Math.round((d-c)*x),w=u+Math.round((_-u)*x);let C=Z.toCss(P,B,w),Q=Z.toRgba(P,B,w);return{css:C,rgba:Q}}n.blend=i;function e(L){return(L.rgba&255)===255}n.isOpaque=e;function t(L,T,h){let d=d0.ensureContrastRatio(L.rgba,T.rgba,h);if(d)return Z.toColor(d>>24&255,d>>16&255,d>>8&255)}n.ensureContrastRatio=t;function r(L){let T=(L.rgba|255)>>>0;return[P,B,w]=d0.toChannels(T),{css:Z.toCss(P,B,w),rgba:T}}n.opaque=r;function s(L,T){return x=Math.round(T*255),[P,B,w]=d0.toChannels(L.rgba),{css:Z.toCss(P,B,w,x),rgba:Z.toRgba(P,B,w,x)}}n.opacity=s;function a(L,T){return x=L.rgba&255,s(L,x*T/255)}n.multiplyOpacity=a;function o(L){return[L.rgba>>24&255,L.rgba>>16&255,L.rgba>>8&255]}n.toColorRGB=o})(I0||={});var gt;(r=>{let i,e;try{let s=document.createElement("canvas");s.width=1,s.height=1;let a=s.getContext("2d",{willReadFrequently:!0});a&&(i=a,i.globalCompositeOperation="copy",e=i.createLinearGradient(0,0,1,1))}catch{}function t(s){if(s.match(/#[\da-f]{3,8}/i))switch(s.length){case 4:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),Z.toColor(P,B,w);case 5:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),x=parseInt(s.slice(4,5).repeat(2),16),Z.toColor(P,B,w,x);case 7:return{css:s,rgba:(parseInt(s.slice(1),16)<<8|255)>>>0};case 9:return{css:s,rgba:parseInt(s.slice(1),16)>>>0}}let a=s.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(a)return P=parseInt(a[1],10),B=parseInt(a[2],10),w=parseInt(a[3],10),x=Math.round((a[5]===void 0?1:parseFloat(a[5]))*255),Z.toColor(P,B,w,x);if(s==="transparent")return{css:"transparent",rgba:0};if(!i||!e)throw new Error("css.toColor: Unsupported css format");if(i.fillStyle=e,i.fillStyle=s,typeof i.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(i.fillRect(0,0,1,1),[P,B,w,x]=i.getImageData(0,0,1,1).data,x!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:Z.toRgba(P,B,w,x),css:s}}r.toColor=t})(gt||={});var V;(t=>{function i(r){return e(r>>16&255,r>>8&255,r&255)}t.relativeLuminance=i;function e(r,s,a){let o=r/255,n=s/255,L=a/255,T=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),h=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),d=L<=.03928?L/12.92:Math.pow((L+.055)/1.055,2.4);return T*.2126+h*.7152+d*.0722}t.relativeLuminance2=e})(V||={});var d0;(a=>{function i(o,n){if(x=(n&255)/255,x===1)return n;let L=n>>24&255,T=n>>16&255,h=n>>8&255,d=o>>24&255,_=o>>16&255,p=o>>8&255;return P=d+Math.round((L-d)*x),B=_+Math.round((T-_)*x),w=p+Math.round((h-p)*x),Z.toRgba(P,B,w)}a.blend=i;function e(o,n,L){let T=V.relativeLuminance(o>>8),h=V.relativeLuminance(n>>8);if(h0(T,h)>8));if(u>8));return u>Q?c:C}return c}let _=r(o,n,L),p=h0(T,V.relativeLuminance(_>>8));if(p>8));return p>u?_:c}return _}}a.ensureContrastRatio=e;function t(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u0||p>0||c>0);)_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),c-=Math.max(0,Math.ceil(c*.1)),u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));return(_<<24|p<<16|c<<8|255)>>>0}a.reduceLuminance=t;function r(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u>>0}a.increaseLuminance=r;function s(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}a.toChannels=s})(d0||={});function E0(i){let e=i.toString(16);return e.length<2?"0"+e:e}function h0(i,e){return i=128512&&i<=128591||i>=127744&&i<=128511||i>=128640&&i<=128767||i>=9728&&i<=9983||i>=9984&&i<=10175||i>=65024&&i<=65039||i>=129280&&i<=129535||i>=127462&&i<=127487}function Ze(i,e,t,r){return e===1&&t>Math.ceil(r*1.5)&&i!==void 0&&i>255&&!yt(i)&&!W0(i)&&!Mt(i)}function V0(i){return W0(i)||At(i)}function Ue(){return{css:{canvas:U0(),cell:U0()},device:{canvas:U0(),cell:U0(),char:{width:0,height:0,left:0,top:0}}}}function U0(){return{width:0,height:0}}function We(i,e,t=0){return(i-(Math.round(e)*2-t))%(Math.round(e)*2)}var l;(C=>(C.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),C.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),C.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),C.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),C.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),C.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),C.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.CURVE_UP_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_UP_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),C.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),C.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),C.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),C.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),C.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})))(l||={});var Ve={"\u2500":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"\u2501":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"\u2502":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"\u2503":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"\u2504":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"\u2505":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"\u2506":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"\u2507":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"\u2508":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"\u2509":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"\u250A":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"\u250B":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"\u250C":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"\u250D":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u250E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u250F":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"\u2510":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"\u2511":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2512":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2513":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"\u2514":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"\u2515":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2516":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2517":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"\u2518":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"\u2519":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u251A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251B":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"\u251C":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"\u251D":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u251E":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251F":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2520":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2521":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2522":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2523":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"\u2524":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"\u2525":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2526":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2527":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2528":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2529":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u252A":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u252B":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"\u252C":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"\u252D":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u252E":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u252F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2530":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2531":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2532":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2533":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"\u2534":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"\u2535":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2536":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2537":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2538":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2539":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u253A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u253B":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"\u253C":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"\u253D":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u253E":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u253F":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2540":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2541":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2542":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2543":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u2544":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2545":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2546":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2547":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"\u2548":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"\u2549":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"\u254A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"\u254B":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"\u254C":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"\u254D":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"\u254E":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"\u254F":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"\u2550":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2551":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2552":{type:2,data:(i,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2553":{type:2,data:(i,e)=>`M${.5-i},1 L${.5-i},.5 L1,.5 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2554":{type:2,data:(i,e)=>`M1,${.5-e} L${.5-i},${.5-e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2555":{type:2,data:(i,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2556":{type:2,data:(i,e)=>`M${.5+i},1 L${.5+i},.5 L0,.5 M${.5-i},.5 L${.5-i},1`,strokeWidth:1},"\u2557":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5+i},${.5-e} L${.5+i},1`,strokeWidth:1},"\u2558":{type:2,data:(i,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"\u2559":{type:2,data:(i,e)=>`M1,.5 L${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u255A":{type:2,data:(i,e)=>`M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0 M1,${.5+e} L${.5-i},${.5+e} L${.5-i},0`,strokeWidth:1},"\u255B":{type:2,data:(i,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"\u255C":{type:2,data:(i,e)=>`M0,.5 L${.5+i},.5 L${.5+i},0 M${.5-i},.5 L${.5-i},0`,strokeWidth:1},"\u255D":{type:2,data:(i,e)=>`M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M0,${.5+e} L${.5+i},${.5+e} L${.5+i},0`,strokeWidth:1},"\u255E":{type:2,data:(i,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u255F":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1 M${.5+i},.5 L1,.5`,strokeWidth:1},"\u2560":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u2561":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2562":{type:2,data:(i,e)=>`M0,.5 L${.5-i},.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2563":{type:2,data:(i,e)=>`M${.5+i},0 L${.5+i},1 M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0`,strokeWidth:1},"\u2564":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"\u2565":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},1 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2566":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2567":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2568":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u2569":{type:2,data:(i,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256A":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u256B":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u256C":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256D":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u256E":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u256F":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u2570":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u2571":{type:2,data:"M1,0 L0,1",strokeWidth:1},"\u2572":{type:2,data:"M0,0 L1,1",strokeWidth:1},"\u2573":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"\u2574":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"\u2575":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"\u2576":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"\u2577":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"\u2578":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"\u2579":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"\u257A":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"\u257B":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"\u257C":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u257D":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u257E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u257F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2580":{type:0,data:[{x:0,y:0,w:8,h:4}]},"\u2581":{type:0,data:[{x:0,y:7,w:8,h:1}]},"\u2582":{type:0,data:[{x:0,y:6,w:8,h:2}]},"\u2583":{type:0,data:[{x:0,y:5,w:8,h:3}]},"\u2584":{type:0,data:[{x:0,y:4,w:8,h:4}]},"\u2585":{type:0,data:[{x:0,y:3,w:8,h:5}]},"\u2586":{type:0,data:[{x:0,y:2,w:8,h:6}]},"\u2587":{type:0,data:[{x:0,y:1,w:8,h:7}]},"\u2588":{type:0,data:[{x:0,y:0,w:8,h:8}]},"\u2589":{type:0,data:[{x:0,y:0,w:7,h:8}]},"\u258A":{type:0,data:[{x:0,y:0,w:6,h:8}]},"\u258B":{type:0,data:[{x:0,y:0,w:5,h:8}]},"\u258C":{type:0,data:[{x:0,y:0,w:4,h:8}]},"\u258D":{type:0,data:[{x:0,y:0,w:3,h:8}]},"\u258E":{type:0,data:[{x:0,y:0,w:2,h:8}]},"\u258F":{type:0,data:[{x:0,y:0,w:1,h:8}]},"\u2590":{type:0,data:[{x:4,y:0,w:4,h:8}]},"\u2591":{type:1,data:[[1,0],[0,0]]},"\u2592":{type:1,data:[[1,0],[0,1]]},"\u2593":{type:1,data:[[1,1],[1,0]]},"\u2594":{type:0,data:[{x:0,y:0,w:8,h:1}]},"\u2595":{type:0,data:[{x:7,y:0,w:1,h:8}]},"\u2596":{type:0,data:[{x:0,y:4,w:4,h:4}]},"\u2597":{type:0,data:[{x:4,y:4,w:4,h:4}]},"\u2598":{type:0,data:[{x:0,y:0,w:4,h:4}]},"\u2599":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\u259A":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"\u259B":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"\u259C":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"\u259D":{type:0,data:[{x:4,y:0,w:4,h:4}]},"\u259E":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"\u259F":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\uE0A0":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"\uE0A1":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0A2":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"\uE0A3":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0B0":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"\uE0B1":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B2":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"\uE0B3":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B4":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"\uE0B5":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"\uE0B6":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"\uE0B7":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"\uE0B8":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"\uE0B9":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BA":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"\uE0BB":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BC":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"\uE0BD":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BE":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"\uE0BF":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0C0":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"\uE0C1":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"\uE0C2":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"\uE0C3":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"\uE0C4":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"\uE0C5":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"\uE0C6":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"\uE0C7":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"\uE0C8":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"\uE0CA":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"\uE0CC":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"\uE0CD":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"\uE0CE":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"\uE0CF":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"\uE0D0":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"\uE0D1":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"\uE0D2":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"\uE0D4":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"\uEE00":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"\uEE01":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"\uEE02":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"\uEE03":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"\uEE04":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"\uEE05":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"\uEE06":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"\uEE07":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"\uEE08":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE09":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0A":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0B":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"\uF5D0":l.LINE_H,"\uF5D1":l.LINE_V,"\uF5D2":l.FADE_RIGHT,"\uF5D3":l.FADE_LEFT,"\uF5D4":l.FADE_DOWN,"\uF5D5":l.FADE_UP,"\uF5D6":l.CURVE_DOWN_RIGHT,"\uF5D7":l.CURVE_DOWN_LEFT,"\uF5D8":l.CURVE_UP_RIGHT,"\uF5D9":l.CURVE_UP_LEFT,"\uF5DA":[l.LINE_V,l.CURVE_UP_RIGHT],"\uF5DB":[l.LINE_V,l.CURVE_DOWN_RIGHT],"\uF5DC":[l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5DD":[l.LINE_V,l.CURVE_UP_LEFT],"\uF5DE":[l.LINE_V,l.CURVE_DOWN_LEFT],"\uF5DF":[l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E0":[l.LINE_H,l.CURVE_DOWN_LEFT],"\uF5E1":[l.LINE_H,l.CURVE_DOWN_RIGHT],"\uF5E2":[l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E3":[l.LINE_H,l.CURVE_UP_LEFT],"\uF5E4":[l.LINE_H,l.CURVE_UP_RIGHT],"\uF5E5":[l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E6":[l.LINE_V,l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E7":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E8":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E9":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5EA":[l.LINE_V,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5EB":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EC":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5ED":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EE":[l.NODE_FILL,l.NODE_STROKE],"\uF5EF":l.NODE_STROKE,"\uF5F0":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F1":[l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F2":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F3":[l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F4":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F5":[l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F6":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F7":[l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F8":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP],"\uF5F9":[l.NODE_STROKE,l.NODE_LINE_UP],"\uF5FA":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FB":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FC":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FD":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FE":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF5FF":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF600":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF601":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF602":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF603":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF604":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF605":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF606":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF607":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF608":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF609":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60A":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60B":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60C":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60D":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\u{1FB00}":f(1),"\u{1FB01}":f(2),"\u{1FB02}":f(3),"\u{1FB03}":f(4),"\u{1FB04}":f(5),"\u{1FB05}":f(6),"\u{1FB06}":f(7),"\u{1FB07}":f(8),"\u{1FB08}":f(9),"\u{1FB09}":f(10),"\u{1FB0A}":f(11),"\u{1FB0B}":f(12),"\u{1FB0C}":f(13),"\u{1FB0D}":f(14),"\u{1FB0E}":f(15),"\u{1FB0F}":f(16),"\u{1FB10}":f(17),"\u{1FB11}":f(18),"\u{1FB12}":f(19),"\u{1FB13}":f(20),"\u{1FB14}":f(22),"\u{1FB15}":f(23),"\u{1FB16}":f(24),"\u{1FB17}":f(25),"\u{1FB18}":f(26),"\u{1FB19}":f(27),"\u{1FB1A}":f(28),"\u{1FB1B}":f(29),"\u{1FB1C}":f(30),"\u{1FB1D}":f(31),"\u{1FB1E}":f(32),"\u{1FB1F}":f(33),"\u{1FB20}":f(34),"\u{1FB21}":f(35),"\u{1FB22}":f(36),"\u{1FB23}":f(37),"\u{1FB24}":f(38),"\u{1FB25}":f(39),"\u{1FB26}":f(40),"\u{1FB27}":f(41),"\u{1FB28}":f(43),"\u{1FB29}":f(44),"\u{1FB2A}":f(45),"\u{1FB2B}":f(46),"\u{1FB2C}":f(47),"\u{1FB2D}":f(48),"\u{1FB2E}":f(49),"\u{1FB2F}":f(50),"\u{1FB30}":f(51),"\u{1FB31}":f(52),"\u{1FB32}":f(53),"\u{1FB33}":f(54),"\u{1FB34}":f(55),"\u{1FB35}":f(56),"\u{1FB36}":f(57),"\u{1FB37}":f(58),"\u{1FB38}":f(59),"\u{1FB39}":f(60),"\u{1FB3A}":f(61),"\u{1FB3B}":f(62),"\u{1FB3C}":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"\u{1FB3D}":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"\u{1FB3E}":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"\u{1FB3F}":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"\u{1FB40}":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"\u{1FB41}":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB42}":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"\u{1FB43}":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB44}":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"\u{1FB45}":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"\u{1FB46}":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"\u{1FB47}":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"\u{1FB48}":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"\u{1FB49}":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"\u{1FB4A}":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"\u{1FB4B}":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"\u{1FB4C}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4D}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4E}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB4F}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB50}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"\u{1FB51}":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB52}":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB53}":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"\u{1FB54}":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB55}":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"\u{1FB56}":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"\u{1FB57}":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"\u{1FB58}":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"\u{1FB59}":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"\u{1FB5A}":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"\u{1FB5B}":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"\u{1FB5C}":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB5D}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5E}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5F}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB60}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB61}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"\u{1FB62}":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"\u{1FB63}":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"\u{1FB64}":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"\u{1FB65}":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"\u{1FB66}":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"\u{1FB67}":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"\u{1FB68}":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"\u{1FB69}":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"\u{1FB6A}":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"\u{1FB6B}":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"\u{1FB6C}":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"\u{1FB6D}":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"\u{1FB6E}":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"\u{1FB6F}":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"\u{1FB70}":{type:0,data:[{x:1,y:0,w:1,h:8}]},"\u{1FB71}":{type:0,data:[{x:2,y:0,w:1,h:8}]},"\u{1FB72}":{type:0,data:[{x:3,y:0,w:1,h:8}]},"\u{1FB73}":{type:0,data:[{x:4,y:0,w:1,h:8}]},"\u{1FB74}":{type:0,data:[{x:5,y:0,w:1,h:8}]},"\u{1FB75}":{type:0,data:[{x:6,y:0,w:1,h:8}]},"\u{1FB76}":{type:0,data:[{x:0,y:1,w:8,h:1}]},"\u{1FB77}":{type:0,data:[{x:0,y:2,w:8,h:1}]},"\u{1FB78}":{type:0,data:[{x:0,y:3,w:8,h:1}]},"\u{1FB79}":{type:0,data:[{x:0,y:4,w:8,h:1}]},"\u{1FB7A}":{type:0,data:[{x:0,y:5,w:8,h:1}]},"\u{1FB7B}":{type:0,data:[{x:0,y:6,w:8,h:1}]},"\u{1FB7C}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB7D}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7E}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7F}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB80}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB81}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB82}":{type:0,data:[{x:0,y:0,w:8,h:2}]},"\u{1FB83}":{type:0,data:[{x:0,y:0,w:8,h:3}]},"\u{1FB84}":{type:0,data:[{x:0,y:0,w:8,h:5}]},"\u{1FB85}":{type:0,data:[{x:0,y:0,w:8,h:6}]},"\u{1FB86}":{type:0,data:[{x:0,y:0,w:8,h:7}]},"\u{1FB87}":{type:0,data:[{x:6,y:0,w:2,h:8}]},"\u{1FB88}":{type:0,data:[{x:5,y:0,w:3,h:8}]},"\u{1FB89}":{type:0,data:[{x:3,y:0,w:5,h:8}]},"\u{1FB8A}":{type:0,data:[{x:2,y:0,w:6,h:8}]},"\u{1FB8B}":{type:0,data:[{x:1,y:0,w:7,h:8}]},"\u{1FB8C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"\u{1FB8D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"\u{1FB8E}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"\u{1FB8F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"\u{1FB90}":{type:1,data:[[0,1],[1,0]]},"\u{1FB91}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"\u{1FB92}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"\u{1FB94}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"\u{1FB95}":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"\u{1FB96}":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"\u{1FB97}":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"\u{1FB98}":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"\u{1FB99}":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"\u{1FB9A}":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"\u{1FB9B}":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"\u{1FB9C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"\u{1FB9D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"\u{1FB9E}":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"\u{1FB9F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"\u{1FBA0}":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"\u{1FBA1}":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"\u{1FBA2}":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"\u{1FBA3}":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"\u{1FBA4}":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBA5}":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBA6}":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBA7}":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"\u{1FBA8}":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"\u{1FBA9}":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"\u{1FBAA}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"\u{1FBAB}":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBAC}":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBAD}":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBAE}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"\u{1FBAF}":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"\u{1FBB0}":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"\u{1FBB1}":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"\u{1FBB2}":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"\u{1FBB3}":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"\u{1FBB4}":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"\u{1FBB5}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB6}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB7}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB8}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB9}":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"\u{1FBBA}":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"\u{1FBBB}":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"\u{1FBBC}":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"\u{1FBBD}":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"\u{1FBBE}":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"\u{1FBBF}":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"\u{1FBC0}":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"\u{1FBC1}":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"\u{1FBC2}":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"\u{1FBC3}":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"\u{1FBC4}":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"\u{1FBC5}":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC6}":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC7}":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC8}":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC9}":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBCA}":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"\u{1FBCB}":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"\u{1FBCC}":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"\u{1FBCD}":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"\u{1FBCE}":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"\u{1FBCF}":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"\u{1FBD0}":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"\u{1FBD1}":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"\u{1FBD2}":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"\u{1FBD3}":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"\u{1FBD4}":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"\u{1FBD5}":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"\u{1FBD6}":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"\u{1FBD7}":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"\u{1FBD8}":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"\u{1FBD9}":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDA}":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDB}":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"\u{1FBDC}":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"\u{1FBDD}":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"\u{1FBDE}":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"\u{1FBDF}":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"\u{1FBE0}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"\u{1FBE1}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"\u{1FBE2}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"\u{1FBE3}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"\u{1FBE4}":{type:0,data:[{x:2,y:0,w:4,h:4}]},"\u{1FBE5}":{type:0,data:[{x:2,y:4,w:4,h:4}]},"\u{1FBE6}":{type:0,data:[{x:0,y:2,w:4,h:4}]},"\u{1FBE7}":{type:0,data:[{x:4,y:2,w:4,h:4}]},"\u{1FBE8}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"\u{1FBE9}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"\u{1FBEA}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"\u{1FBEB}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"\u{1FBEC}":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"\u{1FBED}":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"\u{1FBEE}":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"\u{1FBEF}":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"\u{1FBF0}":{type:5,data:{d:o0(126),type:0},scaleType:1},"\u{1FBF1}":{type:5,data:{d:o0(48),type:0},scaleType:1},"\u{1FBF2}":{type:5,data:{d:o0(109),type:0},scaleType:1},"\u{1FBF3}":{type:5,data:{d:o0(121),type:0},scaleType:1},"\u{1FBF4}":{type:5,data:{d:o0(51),type:0},scaleType:1},"\u{1FBF5}":{type:5,data:{d:o0(91),type:0},scaleType:1},"\u{1FBF6}":{type:5,data:{d:o0(95),type:0},scaleType:1},"\u{1FBF7}":{type:5,data:{d:o0(114),type:0},scaleType:1},"\u{1FBF8}":{type:5,data:{d:o0(127),type:0},scaleType:1},"\u{1FBF9}":{type:5,data:{d:o0(123),type:0},scaleType:1},"\u{1FBFA}":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(i,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},$e=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951]);function f(i){return{type:2,data:()=>{let e=[],r=[.375,.25,.375],s=[0,3/8,5/8];for(let a=0;a<3;a++){let o=i>>a*2&1,n=i>>a*2+1&1;o&&n?e.push(`M0,${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L0,${s[a]+r[a]} Z`):o?e.push(`M0,${s[a]} L${.5},${s[a]} L${.5},${s[a]+r[a]} L0,${s[a]+r[a]} Z`):n&&e.push(`M${.5},${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L${.5},${s[a]+r[a]} Z`)}return e.join(" ")}}}function o0(i){let e=[];if(i&64){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.2125} L${Q+.075},${.175} L${m-.075},${.175} L${m},${.2125} L${m-.075},${.25} L${Q+.075},${.25} Z`)}if(i&32){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.175+.075+.015,m=.5-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&16){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.5+.015,m=.825-.075-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&8){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.7875} L${Q+.075},${.75} L${m-.075},${.75} L${m},${.7875} L${m-.075},${.825} L${Q+.075},${.825} Z`)}if(i&4&&e.push(`M${.125},${.515} L${.2},${.515+.0375} L${.2},${.735-.0375} L${.125},${.735} L${.05},${.735-.0375} L${.05},${.515+.0375} Z`),i&2&&e.push(`M${.125},${.265} L${.2},${.265+.0375} L${.2},${.485-.0375} L${.125},${.485} L${.05},${.485-.0375} L${.05},${.265+.0375} Z`),i&1){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.5} L${Q+.075},${.4625} L${m-.075},${.4625} L${m},${.5} L${m-.075},${.5375} L${Q+.075},${.5375} Z`)}return e.join(" ")}var k=0,H=0,T0=!1,_0=!1,$0=!1,z,x0=0,G0=class{constructor(e,t,r,s,a,o){this._terminal=e;this._optionService=t;this._selectionRenderModel=r;this._decorationService=s;this._coreBrowserService=a;this._themeService=o;this.result={fg:0,bg:0,ext:0}}resolve(e,t,r,s,a){this.result.bg=e.bg,this.result.fg=e.fg,this.result.ext=e.bg&268435456?e.extended.ext:0,H=0,k=0,_0=!1,T0=!1,$0=!1,z=this._themeService.colors,x0=0;let o=e.getCode();if(o!==0&&e.extended.underlineStyle===4){let n=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));x0=t*s%(Math.round(n)*2)}if(x0===0&&$e.has(o)&&(x0=t*s%2*2+r*a%2),this._decorationService.forEachDecorationAtCell(t,r,"bottom",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),$0=this._selectionRenderModel.isCellSelected(this._terminal,t,r),$0){if(this.result.fg&67108864||(this.result.bg&50331648)!==0){if(this.result.fg&67108864)switch(this.result.fg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:H=(this.result.fg&16777215)<<8|255;break;case 0:default:H=this._themeService.colors.foreground.rgba}else switch(this.result.bg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:H=(this.result.bg&16777215)<<8|255;break}H=d0.blend(H,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}else H=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(_0=!0,z.selectionForeground&&(k=z.selectionForeground.rgba>>8&16777215,T0=!0),V0(e.getCode())){if(this.result.fg&67108864&&(this.result.bg&50331648)===0)k=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(this.result.fg&67108864)switch(this.result.bg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:k=(this.result.bg&16777215)<<8|255;break}else switch(this.result.fg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:k=(this.result.fg&16777215)<<8|255;break;case 0:default:k=this._themeService.colors.foreground.rgba}k=d0.blend(k,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}T0=!0}}this._decorationService.forEachDecorationAtCell(t,r,"top",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),_0&&($0?H=e.bg&-16777216&-134217729|H|50331648:H=e.bg&-16777216|H|50331648),T0&&(k=e.fg&-16777216&-67108865|k|50331648),this.result.fg&67108864&&(_0&&!T0&&((this.result.bg&50331648)===0?k=this.result.fg&-134217728|z.background.rgba>>8&16777215&16777215|50331648:k=this.result.fg&-134217728|this.result.bg&67108863,T0=!0),!_0&&T0&&((this.result.fg&50331648)===0?H=this.result.bg&-67108864|z.foreground.rgba>>8&16777215&16777215|50331648:H=this.result.bg&-67108864|this.result.fg&67108863,_0=!0)),z=void 0,this.result.bg=_0?H:this.result.bg,this.result.fg=T0?k:this.result.fg,this.result.ext&=536870911,this.result.ext|=x0<<29&3758096384}};var Ke=.5,K0=Be||we?"bottom":"ideographic";var Pt=typeof OffscreenCanvas>"u"?void 0:(i,e)=>new OffscreenCanvas(i,e),Bt=(i,e)=>{let t=document.createElement("canvas");return t.width=i,t.height=e,t};function wt(i,e,t=Pt,r=Bt){return t?.(i,e)??r(i,e)}function qe(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=Ve[e];if(p){let c=Array.isArray(p)?p:[p];for(let u of c)Ht(i,u,t,r,s,a,o,n,L,T,h,d,_);return!0}return!1}function Ht(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=s,c=a,u=t,C=r;switch(e.scaleType===1&&(p=o,c=n,u=t+(s-o)/2,C=r+(a-n)/2),e.clipPath&&(i.save(),Kt(i,e.clipPath,u,C,p,c)),e.type){case 0:kt(i,e.data,u,C,p,c);break;case 1:$t(i,e.data,u,C,p,c,_);break;case 2:Gt(i,e.data,u,C,p,c,T,h,e.strokeWidth);break;case 3:Ut(i,e.data,u,C,p,c,T,e.strokeWidth);break;case 4:Vt(i,e.data,u,C,p,c,T,d);break;case 5:zt(i,e.data,u,C,p,c,L,T,h);break;case 6:Zt(i,e.data,u,C,p,c);break}e.clipPath&&i.restore()}function kt(i,e,t,r,s,a){for(let o=0;o{let F=parseFloat(m);return R%2===0?t+F*s:r+F*a});if(u==="M")i.moveTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="L")i.lineTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="Q")i.quadraticCurveTo(Q[0],Q[1],Q[2],Q[3]),d=Q[0],_=Q[1],T=Q[2],h=Q[3];else if(u==="T"){let m,R;p==="Q"||p==="T"?(m=2*T-d,R=2*h-_):(m=T,R=h),i.quadraticCurveTo(m,R,Q[0],Q[1]),d=m,_=R,T=Q[0],h=Q[1]}else u==="C"&&(i.bezierCurveTo(Q[0],Q[1],Q[2],Q[3],Q[4],Q[5]),d=Q[2],_=Q[3],T=Q[4],h=Q[5]);p=u}n!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*n,i.stroke()):i.fill()}function Wt(i,e,t,r,s,a,o,n,L,T){if(r===0||s===0){i.lineTo(L,T);return}r=Math.abs(r),s=Math.abs(s);let h=Math.cos(a),d=Math.sin(a),_=(e-L)/2,p=(t-T)/2,c=h*_+d*p,u=-d*_+h*p,C=r*r,Q=s*s,m=c*c,R=u*u,F=m/C+R/Q;if(F>1){let I=Math.sqrt(F);r*=I,s*=I,C=r*r,Q=s*s}let E=(C*Q-C*R-Q*m)/(C*R+Q*m);E<0&&(E=0);let y=(o===n?-1:1)*Math.sqrt(E),Y=y*(r*u/s),X=y*-(s*c/r),M0=h*Y-d*X+(e+L)/2,t0=d*Y+h*X+(t+T)/2,L0=(c-Y)/r,M=(u-X)/s,n0=(-c-Y)/r,a0=(-u-X)/s,$=Math.atan2(M,L0),q=Math.atan2(a0,n0)-$;n===0&&q>0?q-=2*Math.PI:n===1&&q<0&&(q+=2*Math.PI);let A0=$+q;i.ellipse(M0,t0,r,s,a,$,A0,n===0)}function Vt(i,e,t,r,s,a,o,n){i.save(),i.fillRect(t,r,s,a),n&&(i.fillStyle=n,i.strokeStyle=n),i.lineWidth=o,i.lineCap="square",i.beginPath();for(let L of e.d.split(" ")){let T=L[0],h=L.substring(1).split(",");if(!h[0]||!h[1]){T==="Z"&&i.closePath();continue}let d=h.map((_,p)=>{let c=parseFloat(_);return p%2===0?t+c*s:r+c*a});T==="M"?i.moveTo(d[0],d[1]):T==="L"&&i.lineTo(d[0],d[1])}e.type===1?i.stroke():i.fill(),i.restore()}var Xe=new Map;function $t(i,e,t,r,s,a,o=0){let n=Xe.get(e);n||(n=new Map,Xe.set(e,n));let L=i.fillStyle;if(typeof L!="string")throw new Error(`Unexpected fillStyle type "${L}"`);let T=n.get(L);if(!T){let _=e[0].length,p=e.length,c=wt(_,p),u=A(c.getContext("2d")),C=new ImageData(_,p),Q,m,R,F;if(L.startsWith("#"))Q=parseInt(L.slice(1,3),16),m=parseInt(L.slice(3,5),16),R=parseInt(L.slice(5,7),16),F=L.length>7&&parseInt(L.slice(7,9),16)||1;else if(L.startsWith("rgba"))[Q,m,R,F]=L.substring(5,L.length-1).split(",").map(E=>parseFloat(E));else throw new Error(`Unexpected fillStyle color format "${L}" when drawing pattern glyph`);for(let E=0;E>1&1,d=o&1;h!==0||d!==0?T.setTransform(new DOMMatrix().translateSelf(-h,-d)):T.setTransform(new DOMMatrix),i.fillStyle=T,i.fillRect(t,r,s,a)}function Gt(i,e,t,r,s,a,o,n,L){i.save(),i.beginPath(),i.rect(t,r,s,a),i.clip(),i.beginPath();let T;if(typeof e=="function"){let _=.15/a*s;T=e(.15,_)}else T=e;let h={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let d of T.split(" ")){let _=d[0];if(_==="Z"){i.closePath(),h.lastCommand=_;continue}let p=je[_];if(!p){n.error(`Could not find drawing instructions for "${_}"`);continue}let c=d.substring(1).split(",");!c[0]||!c[1]||(p(i,Je(c,s,a,t,r,!0,o,0,0,!1),h),h.lastCommand=_)}L!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*L,i.stroke()):i.fill(),i.closePath(),i.restore()}function Kt(i,e,t,r,s,a){i.beginPath();for(let o of e.split(" ")){let n=o[0];if(n==="Z"){i.closePath();continue}let L=o.substring(1).split(",");if(!L[0]||!L[1])continue;let T=t+parseFloat(L[0])*s,h=r+parseFloat(L[1])*a;n==="M"?i.moveTo(T,h):n==="L"&&i.lineTo(T,h)}i.clip()}function zt(i,e,t,r,s,a,o,n,L){let T=new Path2D;T.rect(t,r,s,a),i.clip(T),i.beginPath();let h=o/12;i.lineWidth=n*h;let d={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let _ of e.d.split(" ")){let p=_[0];if(p==="Z"){i.closePath(),d.lastCommand=p;continue}let c=je[p];if(!c){L.error(`Could not find drawing instructions for "${p}"`);continue}let u=_.substring(1).split(",");!u[0]||!u[1]||(c(i,Je(u,s,a,t,r,!1,n,(e.leftPadding??0)*(h/2),(e.rightPadding??0)*(h/2)),d),d.lastCommand=p)}e.type===1?(i.strokeStyle=i.fillStyle,i.stroke()):i.fill(),i.closePath()}function Ye(i,e,t=0){return Math.max(Math.min(i,e),t)}var je={C:(i,e,t)=>{i.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),t.lastControlX=e[2],t.lastControlY=e[3],t.currentX=e[4],t.currentY=e[5]},L:(i,e,t)=>{i.lineTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},M:(i,e,t)=>{i.moveTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},Q:(i,e,t)=>{i.quadraticCurveTo(e[0],e[1],e[2],e[3]),t.lastControlX=e[0],t.lastControlY=e[1],t.currentX=e[2],t.currentY=e[3]},T:(i,e,t)=>{let r,s;t.lastCommand==="Q"||t.lastCommand==="T"?(r=2*t.currentX-t.lastControlX,s=2*t.currentY-t.lastControlY):(r=t.currentX,s=t.currentY),i.quadraticCurveTo(r,s,e[0],e[1]),t.lastControlX=r,t.lastControlY=s,t.currentX=e[0],t.currentY=e[1]}};function Je(i,e,t,r,s,a,o,n=0,L=0,T=!0){let h=i.map(d=>parseFloat(d)||parseInt(d));if(h.length<2)throw new Error("Too few arguments for instruction");for(let d=0;da){s-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),this._start();return}s=a}this.clear()}},Ce=class extends X0{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){let t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}},Qe=class extends X0{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}},et="requestIdleCallback"in globalThis?Qe:Ce;var s0=class i{constructor(){this.fg=0;this.bg=0;this.extended=new P0}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},P0=class i{constructor(e=0,t=0){this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new i(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}};var U=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(e,t,r)=>{if(this._disposed)return g(()=>{});let s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);let a=g(()=>{let o=this._listeners.indexOf(s);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return r&&(Array.isArray(r)?r.push(a):r.add(a)),a},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let r=0,s=t.length;r{function i(a,o){return a(n=>o.fire(n))}s.forward=i;function e(a,o){return(n,L,T)=>a(h=>n.call(L,o(h)),void 0,T)}s.map=e;function t(...a){return(o,n,L)=>{let T=new R0;for(let h of a)T.add(h(d=>o.call(n,d)));return L&&(Array.isArray(L)?L.push(T):L.add(T)),T}}s.any=t;function r(a,o,n){return o(n),a(L=>o(L))}s.runAndSubscribe=r})(c0||={});var tt={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}},B0=2;var w0,J=class i{constructor(e,t,r,s){this._document=e;this._config=t;this._unicodeService=r;this._logService=s;this._didWarmUp=!1;this._cacheMap=new D0;this._cacheMapCombined=new D0;this._pages=[];this._activePages=[];this._workBoundingBox={top:0,left:0,bottom:0,right:0};this._workAttributeData=new s0;this._textureSize=512;this._onAddTextureAtlasCanvas=new U;this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event;this._onRemoveTextureAtlasCanvas=new U;this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event;this._pageLayoutVersion=0;this._createNewPage(),this._tmpCanvas=it(e,this._config.deviceCellWidth*4+B0*2,this._config.deviceCellHeight+B0*2),this._tmpCtx=A(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}get pages(){return this._pages}dispose(){this._tmpCanvas.remove();for(let e of this.pages)e.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){let e=new et(this._logService);for(let t=33;t<126;t++)e.enqueue(()=>{if(!this._cacheMap.get(t,0,0,0)){let r=this._drawToCache(t,0,0,0,!1,void 0);this._cacheMap.set(t,0,0,0,r)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){if(!(this._pages[0].currentRow.x===0&&this._pages[0].currentRow.y===0)){for(let e of this._pages)e.clear();this._cacheMap.clear(),this._cacheMapCombined.clear(),this._didWarmUp=!1,this._pageLayoutVersion++}}_createNewPage(){if(i.maxAtlasPages&&this._pages.length>=Math.max(4,i.maxAtlasPages)){let t=this._pages.filter(T=>T.canvas.width*2<=(i.maxTextureSize||4096)).sort((T,h)=>h.canvas.width!==T.canvas.width?h.canvas.width-T.canvas.width:h.percentageUsed-T.percentageUsed),r=-1,s=0;for(let T=0;TT.canvas.width!==a[0].canvas.width)){this._evictAllPages();let T=new u0(this._document,this._textureSize);return this._pages.push(T),this._activePages.push(T),this._onAddTextureAtlasCanvas.fire(T.canvas),T}let o=a.map(T=>T.glyphs[0].texturePage).sort((T,h)=>T-h),n=this.pages.length-a.length,L=this._mergePages(a,n);L.version=++u0.nextVersion;for(let T=o.length-1;T>=0;T--)this._deletePage(o[T]);this.pages.push(L),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(L.canvas)}let e=new u0(this._document,this._textureSize);return this._pages.push(e),this._activePages.push(e),this._onAddTextureAtlasCanvas.fire(e.canvas),e}_mergePages(e,t){let r=e[0].canvas.width*2,s=new u0(this._document,r,e);for(let[a,o]of e.entries()){let n=a*o.canvas.width%r,L=Math.floor(a/2)*o.canvas.height;s.ctx.drawImage(o.canvas,n,L);for(let h of o.glyphs)h.texturePage=t,h.sizeClipSpace.x=h.size.x/r,h.sizeClipSpace.y=h.size.y/r,h.texturePosition.x+=n,h.texturePosition.y+=L,h.texturePositionClipSpace.x=h.texturePosition.x/r,h.texturePositionClipSpace.y=h.texturePosition.y/r;this._onRemoveTextureAtlasCanvas.fire(o.canvas);let T=this._activePages.indexOf(o);T!==-1&&this._activePages.splice(T,1)}return s}_deletePage(e){this._pages.splice(e,1);for(let t=e;t=this._config.colors.ansi.length)throw new Error("No color found for idx "+e);return this._config.colors.ansi[e]}_getBackgroundColor(e,t,r,s){if(this._config.allowTransparency)return K;let a;switch(e){case 16777216:case 33554432:a=this._getColorFromAnsiIndex(t);break;case 50331648:let o=s0.toColorRGB(t);a=Z.toColor(o[0],o[1],o[2]);break;case 0:default:r?a=I0.opaque(this._config.colors.foreground):a=this._config.colors.background;break}return this._config.allowTransparency||(a=I0.opaque(a)),a}_getForegroundColor(e,t,r,s,a,o,n,L,T,h){let d=this._getMinimumContrastColor(e,t,r,s,a,o,n,T,L,h);if(d)return d;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&T&&o<8&&(o+=8),_=this._getColorFromAnsiIndex(o);break;case 50331648:let p=s0.toColorRGB(o);_=Z.toColor(p[0],p[1],p[2]);break;case 0:default:n?_=this._config.colors.background:_=this._config.colors.foreground}return this._config.allowTransparency&&(_=I0.opaque(_)),L&&(_=I0.multiplyOpacity(_,Ke)),_}_resolveBackgroundRgba(e,t,r){switch(e){case 16777216:case 33554432:return this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(e,t,r,s){switch(e){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&t<8&&(t+=8),this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(e,t,r,s,a,o,n,L,T,h){if(this._config.minimumContrastRatio===1||h)return;let d=this._getContrastCache(T),_=d.getColor(e,s);if(_!==void 0)return _??void 0;let p=this._resolveBackgroundRgba(t,r,n),c=this._resolveForegroundRgba(a,o,n,L),u=d0.ensureContrastRatio(p,c,this._config.minimumContrastRatio/(T?2:1));if(!u){d.setColor(e,s,null);return}let C=Z.toColor(u>>24&255,u>>16&255,u>>8&255);return d.setColor(e,s,C),C}_getContrastCache(e){return e?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_drawToCache(e,t,r,s,a,o){let n=typeof e=="number"?String.fromCharCode(e):e;o&&this._tmpCanvas.parentElement!==o&&(this._tmpCanvas.style.display="none",o.append(this._tmpCanvas));let L=Math.min(this._config.deviceCellWidth*Math.max(n.length,2)+B0*2,this._config.deviceMaxTextureSize);this._tmpCanvas.width=b?b*2-f0:b-f0;!(f0>=b)===!1||Z0===0?(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j+Z0,G),this._tmpCtx.lineTo(Q0,G)):(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(j+Z0,G),this._tmpCtx.moveTo(j+Z0+b,G),this._tmpCtx.lineTo(Q0,G)),f0=We(Q0-j,b,f0);break;case 5:let vt=.6,Ot=.3,de=Q0-j,Se=Math.floor(vt*de),Re=Math.floor(Ot*de),It=de-Se-Re;this._tmpCtx.setLineDash([Se,Re,It]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break;case 1:default:this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break}y0||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!n0&&this._config.fontSize>=12&&!this._config.allowTransparency&&n!==" "){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";let r0=this._tmpCtx.measureText(n);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in r0&&r0.actualBoundingBoxDescent>0){this._tmpCtx.save();let y0=new Path2D;y0.rect(i0,C0-Math.ceil(b/2),this._config.deviceCellWidth*$,v0-C0+Math.ceil(b/2)),this._tmpCtx.clip(y0),this._tmpCtx.lineWidth=this._config.devicePixelRatio*3,this._tmpCtx.strokeStyle=y.css,this._tmpCtx.strokeText(n,M,M+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(Q){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),D=b%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+D),this._tmpCtx.stroke()}if(n0||this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight),n==="_"&&!this._config.allowTransparency){let b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0);if(b)for(let D=1;D<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=y.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight-D),b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0),!!b);D++);}if(C){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),D=this._tmpCtx.lineWidth%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.stroke()}this._tmpCtx.restore();let q=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height),A0;if(this._config.allowTransparency?A0=Xt(q):A0=fe(q,y,L0,a0),A0)return tt;let I=this._findGlyphBoundingBox(q,this._workBoundingBox,L,t0,n0,M),O,v;for(;;){if(this._activePages.length===0){let b=this._createNewPage();O=b,v=b.currentRow,v.height=I.size.y;break}O=this._activePages[this._activePages.length-1],v=O.currentRow;for(let b of this._activePages)I.size.y<=b.currentRow.height&&(O=b,v=b.currentRow);for(let b=this._activePages.length-1;b>=0;b--)for(let D of this._activePages[b].fixedRows)D.height<=v.height&&I.size.y<=D.height&&(O=this._activePages[b],v=D);if(I.size.x>this._textureSize){this._overflowSizePage||(i.maxAtlasPages&&this._pages.length>=i.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new u0(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),O=this._overflowSizePage,v=this._overflowSizePage.currentRow,v.x+I.size.x>=O.canvas.width&&(v.x=0,v.y+=v.height,v.height=0);break}if(v.y+I.size.y>=O.canvas.height||v.height>I.size.y+2){let b=!1;if(O.currentRow.y+O.currentRow.height+I.size.y>=O.canvas.height){let D;for(let i0 of this._activePages)if(i0.currentRow.y+i0.currentRow.height+I.size.y=i.maxAtlasPages&&v.y+I.size.y<=O.canvas.height&&v.height>=I.size.y&&v.x+I.size.x<=O.canvas.width)b=!0;else{let i0=this._createNewPage();O=i0,v=i0.currentRow,v.height=I.size.y,b=!0}}b||(O.currentRow.height>0&&O.fixedRows.push(O.currentRow),v={x:0,y:O.currentRow.y+O.currentRow.height,height:I.size.y},O.fixedRows.push(v),O.currentRow={x:0,y:v.y+v.height,height:0})}if(v.x+I.size.x<=O.canvas.width)break;v===O.currentRow?(v.x=0,v.y+=v.height,v.height=0):O.fixedRows.splice(O.fixedRows.indexOf(v),1)}return I.texturePage=this._pages.indexOf(O),I.texturePosition.x=v.x,I.texturePosition.y=v.y,I.texturePositionClipSpace.x=v.x/O.canvas.width,I.texturePositionClipSpace.y=v.y/O.canvas.height,I.sizeClipSpace.x/=O.canvas.width,I.sizeClipSpace.y/=O.canvas.height,v.height=Math.max(v.height,I.size.y),v.x+=I.size.x,O.ctx.putImageData(q,I.texturePosition.x-this._workBoundingBox.left,I.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,I.size.x,I.size.y),O.addGlyph(I),O.version=++u0.nextVersion,I}_findGlyphBoundingBox(e,t,r,s,a,o){t.top=0;let n=s?this._config.deviceCellHeight:this._tmpCanvas.height,L=s?this._config.deviceCellWidth:r,T=!1;for(let h=0;h=o;h--){for(let d=0;d=0;h--){for(let d=0;d>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=t.rgba>>>24,L=t.rgba>>>16&255,T=t.rgba>>>8&255,h=Math.floor((Math.abs(s-n)+Math.abs(a-L)+Math.abs(o-T))/12),d=!0;for(let _=0;_0)return!1;return!0}function it(i,e,t){let r=i.createElement("canvas");return r.width=e,r.height=t,r}function rt(i,e,t,r,s,a,o,n,L=!0){let T={foreground:a.foreground,background:a.background,cursor:K,cursorAccent:K,selectionForeground:K,selectionBackgroundTransparent:K,selectionBackgroundOpaque:K,selectionInactiveBackgroundTransparent:K,selectionInactiveBackgroundOpaque:K,overviewRulerBorder:K,scrollbarSliderBackground:K,scrollbarSliderHoverBackground:K,scrollbarSliderActiveBackground:K,ansi:a.ansi.slice(),contrastCache:a.contrastCache,halfContrastCache:a.halfContrastCache};return{customGlyphs:L,devicePixelRatio:o,deviceMaxTextureSize:n,letterSpacing:s.letterSpacing,lineHeight:s.lineHeight,deviceCellWidth:i,deviceCellHeight:e,deviceCharWidth:t,deviceCharHeight:r,fontFamily:s.fontFamily,fontSize:s.fontSize,fontWeight:s.fontWeight,fontWeightBold:s.fontWeightBold,allowTransparency:s.allowTransparency,drawBoldTextInBrightColors:s.drawBoldTextInBrightColors,minimumContrastRatio:s.minimumContrastRatio,colors:T}}function Ee(i,e){for(let t=0;t=0){if(Ee(u.config,h))return u.atlas;u.ownedBy.length===1?(u.atlas.dispose(),e0.splice(c,1)):u.ownedBy.splice(C,1);break}}for(let c=0;c{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(e=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0){this._restartInterval(t);return}}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);this._animationTimeRestarted=void 0,this._restartInterval(t);return}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},e)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}};function ve(i,e,t){let r=new e.ResizeObserver(s=>{let a=s.find(L=>L.target===i);if(!a)return;if(!("devicePixelContentBoxSize"in a)){r?.disconnect(),r=void 0;return}let o=a.devicePixelContentBoxSize[0].inlineSize,n=a.devicePixelContentBoxSize[0].blockSize;o>0&&n>0&&t(o,n)});try{r.observe(i,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return g(()=>r?.disconnect())}function nt(i){return i>65535?(i-=65536,String.fromCharCode((i>>10)+55296)+String.fromCharCode(i%1024+56320)):String.fromCharCode(i)}var j0=class i extends s0{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new P0;this.combinedData=""}static fromCharData(t){let r=new i;return r.setFromCharData(t),r}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?nt(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(t){this.fg=t[0],this.bg=0;let r=!1;if(t[1].length>2)r=!0;else if(t[1].length===2){let s=t[1].charCodeAt(0);if(55296<=s&&s<=56319){let a=t[1].charCodeAt(1);56320<=a&&a<=57343?this.content=(s-55296)*1024+a-56320+65536|t[2]<<22:r=!0}else r=!0}else this.content=t[1].charCodeAt(0)|t[2]<<22;r&&(this.combinedData=t[1],this.content=2097152|t[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor()||this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor()||this.isInverse()!==t.isInverse()||this.isBold()!==t.isBold()||this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;let r=this.isUnderlineColorDefault(),s=t.isUnderlineColorDefault();if(!(r&&s)&&(r!==s||this.getUnderlineColor()!==t.getUnderlineColor()||this.getUnderlineColorMode()!==t.getUnderlineColorMode()))return!1}return!(this.isOverline()!==t.isOverline()||this.isBlink()!==t.isBlink()||this.isInvisible()!==t.isInvisible()||this.isItalic()!==t.isItalic()||this.isDim()!==t.isDim()||this.isStrikethrough()!==t.isStrikethrough())}};var J0=class extends W{constructor(t,r,s){super();this._renderCallback=t;this._coreBrowserService=r;this._optionsService=s;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",a=>{this.setIntervalDuration(a)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(g(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let r=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),r||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var te=new Float32Array([2,0,0,0,0,-2,0,0,0,0,1,0,-1,1,0,1]);function ie(i,e,t,r){let s=A(i.createProgram());if(i.attachShader(s,A(at(i,i.VERTEX_SHADER,e,r))),i.attachShader(s,A(at(i,i.FRAGMENT_SHADER,t,r))),i.linkProgram(s),i.getProgramParameter(s,i.LINK_STATUS))return s;r.error(i.getProgramInfoLog(s)),i.deleteProgram(s)}function at(i,e,t,r){let s=A(i.createShader(e));if(i.shaderSource(s,t),i.compileShader(s),i.getShaderParameter(s,i.COMPILE_STATUS))return s;r.error(i.getShaderInfoLog(s)),i.deleteShader(s)}function ot(i,e){let t=Math.min(i.length*2,e),r=new Float32Array(t);for(let s=0;sFt(i))}var R0=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(let e of this._disposables)e.dispose();this._disposables.clear()}},W=class{constructor(){this._store=new R0}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}};W.None=Object.freeze({dispose(){}});var m0=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Pe=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),O0=Pe?"node":navigator.userAgent,ce=Pe?"node":navigator.platform,Be=O0.includes("Firefox"),T1=O0.includes("Chrome"),we=O0.includes("Edge"),ue=/^((?!chrome|android).)*safari/i.test(O0);function He(){if(!ue)return 0;let i=O0.match(/Version\/(\d+)/);return i===null||i.length<2?0:parseInt(i[1],10)}var l1=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(ce),L1=["Windows","Win16","Win32","WinCE"].includes(ce),h1=ce.indexOf("Linux")>=0,d1=/\bCrOS\b/.test(O0);var P=0,B=0,w=0,x=0,K={css:"#00000000",rgba:0},Z;(r=>{function i(s,a,o,n){return n!==void 0?`#${E0(s)}${E0(a)}${E0(o)}${E0(n)}`:`#${E0(s)}${E0(a)}${E0(o)}`}r.toCss=i;function e(s,a,o,n=255){return(s<<24|a<<16|o<<8|n)>>>0}r.toRgba=e;function t(s,a,o,n){return{css:r.toCss(s,a,o,n),rgba:r.toRgba(s,a,o,n)}}r.toColor=t})(Z||={});var I0;(n=>{function i(L,T){if(x=(T.rgba&255)/255,x===1)return{css:T.css,rgba:T.rgba};let h=T.rgba>>24&255,d=T.rgba>>16&255,_=T.rgba>>8&255,p=L.rgba>>24&255,c=L.rgba>>16&255,u=L.rgba>>8&255;P=p+Math.round((h-p)*x),B=c+Math.round((d-c)*x),w=u+Math.round((_-u)*x);let C=Z.toCss(P,B,w),Q=Z.toRgba(P,B,w);return{css:C,rgba:Q}}n.blend=i;function e(L){return(L.rgba&255)===255}n.isOpaque=e;function t(L,T,h){let d=d0.ensureContrastRatio(L.rgba,T.rgba,h);if(d)return Z.toColor(d>>24&255,d>>16&255,d>>8&255)}n.ensureContrastRatio=t;function r(L){let T=(L.rgba|255)>>>0;return[P,B,w]=d0.toChannels(T),{css:Z.toCss(P,B,w),rgba:T}}n.opaque=r;function s(L,T){return x=Math.round(T*255),[P,B,w]=d0.toChannels(L.rgba),{css:Z.toCss(P,B,w,x),rgba:Z.toRgba(P,B,w,x)}}n.opacity=s;function a(L,T){return x=L.rgba&255,s(L,x*T/255)}n.multiplyOpacity=a;function o(L){return[L.rgba>>24&255,L.rgba>>16&255,L.rgba>>8&255]}n.toColorRGB=o})(I0||={});var gt;(r=>{let i,e;try{let s=document.createElement("canvas");s.width=1,s.height=1;let a=s.getContext("2d",{willReadFrequently:!0});a&&(i=a,i.globalCompositeOperation="copy",e=i.createLinearGradient(0,0,1,1))}catch{}function t(s){if(s.match(/#[\da-f]{3,8}/i))switch(s.length){case 4:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),Z.toColor(P,B,w);case 5:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),x=parseInt(s.slice(4,5).repeat(2),16),Z.toColor(P,B,w,x);case 7:return{css:s,rgba:(parseInt(s.slice(1),16)<<8|255)>>>0};case 9:return{css:s,rgba:parseInt(s.slice(1),16)>>>0}}let a=s.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(a)return P=parseInt(a[1],10),B=parseInt(a[2],10),w=parseInt(a[3],10),x=Math.round((a[5]===void 0?1:parseFloat(a[5]))*255),Z.toColor(P,B,w,x);if(s==="transparent")return{css:"transparent",rgba:0};if(!i||!e)throw new Error("css.toColor: Unsupported css format");if(i.fillStyle=e,i.fillStyle=s,typeof i.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(i.fillRect(0,0,1,1),[P,B,w,x]=i.getImageData(0,0,1,1).data,x!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:Z.toRgba(P,B,w,x),css:s}}r.toColor=t})(gt||={});var V;(t=>{function i(r){return e(r>>16&255,r>>8&255,r&255)}t.relativeLuminance=i;function e(r,s,a){let o=r/255,n=s/255,L=a/255,T=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),h=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),d=L<=.03928?L/12.92:Math.pow((L+.055)/1.055,2.4);return T*.2126+h*.7152+d*.0722}t.relativeLuminance2=e})(V||={});var d0;(a=>{function i(o,n){if(x=(n&255)/255,x===1)return n;let L=n>>24&255,T=n>>16&255,h=n>>8&255,d=o>>24&255,_=o>>16&255,p=o>>8&255;return P=d+Math.round((L-d)*x),B=_+Math.round((T-_)*x),w=p+Math.round((h-p)*x),Z.toRgba(P,B,w)}a.blend=i;function e(o,n,L){let T=V.relativeLuminance(o>>8),h=V.relativeLuminance(n>>8);if(h0(T,h)>8));if(u>8));return u>Q?c:C}return c}let _=r(o,n,L),p=h0(T,V.relativeLuminance(_>>8));if(p>8));return p>u?_:c}return _}}a.ensureContrastRatio=e;function t(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u0||p>0||c>0);)_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),c-=Math.max(0,Math.ceil(c*.1)),u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));return(_<<24|p<<16|c<<8|255)>>>0}a.reduceLuminance=t;function r(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u>>0}a.increaseLuminance=r;function s(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}a.toChannels=s})(d0||={});function E0(i){let e=i.toString(16);return e.length<2?"0"+e:e}function h0(i,e){return i=128512&&i<=128591||i>=127744&&i<=128511||i>=128640&&i<=128767||i>=9728&&i<=9983||i>=9984&&i<=10175||i>=65024&&i<=65039||i>=129280&&i<=129535||i>=127462&&i<=127487}function Ze(i,e,t,r){return e===1&&t>Math.ceil(r*1.5)&&i!==void 0&&i>255&&!yt(i)&&!W0(i)&&!Mt(i)}function V0(i){return W0(i)||At(i)}function Ue(){return{css:{canvas:U0(),cell:U0()},device:{canvas:U0(),cell:U0(),char:{width:0,height:0,left:0,top:0}}}}function U0(){return{width:0,height:0}}function We(i,e,t=0){return(i-(Math.round(e)*2-t))%(Math.round(e)*2)}var l;(C=>(C.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),C.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),C.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),C.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),C.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),C.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),C.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.CURVE_UP_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_UP_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),C.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),C.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),C.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),C.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),C.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})))(l||={});var Ve={"\u2500":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"\u2501":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"\u2502":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"\u2503":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"\u2504":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"\u2505":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"\u2506":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"\u2507":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"\u2508":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"\u2509":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"\u250A":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"\u250B":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"\u250C":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"\u250D":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u250E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u250F":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"\u2510":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"\u2511":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2512":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2513":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"\u2514":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"\u2515":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2516":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2517":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"\u2518":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"\u2519":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u251A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251B":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"\u251C":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"\u251D":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u251E":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251F":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2520":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2521":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2522":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2523":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"\u2524":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"\u2525":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2526":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2527":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2528":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2529":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u252A":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u252B":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"\u252C":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"\u252D":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u252E":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u252F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2530":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2531":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2532":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2533":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"\u2534":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"\u2535":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2536":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2537":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2538":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2539":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u253A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u253B":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"\u253C":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"\u253D":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u253E":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u253F":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2540":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2541":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2542":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2543":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u2544":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2545":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2546":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2547":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"\u2548":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"\u2549":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"\u254A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"\u254B":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"\u254C":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"\u254D":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"\u254E":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"\u254F":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"\u2550":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2551":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2552":{type:2,data:(i,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2553":{type:2,data:(i,e)=>`M${.5-i},1 L${.5-i},.5 L1,.5 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2554":{type:2,data:(i,e)=>`M1,${.5-e} L${.5-i},${.5-e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2555":{type:2,data:(i,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2556":{type:2,data:(i,e)=>`M${.5+i},1 L${.5+i},.5 L0,.5 M${.5-i},.5 L${.5-i},1`,strokeWidth:1},"\u2557":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5+i},${.5-e} L${.5+i},1`,strokeWidth:1},"\u2558":{type:2,data:(i,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"\u2559":{type:2,data:(i,e)=>`M1,.5 L${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u255A":{type:2,data:(i,e)=>`M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0 M1,${.5+e} L${.5-i},${.5+e} L${.5-i},0`,strokeWidth:1},"\u255B":{type:2,data:(i,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"\u255C":{type:2,data:(i,e)=>`M0,.5 L${.5+i},.5 L${.5+i},0 M${.5-i},.5 L${.5-i},0`,strokeWidth:1},"\u255D":{type:2,data:(i,e)=>`M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M0,${.5+e} L${.5+i},${.5+e} L${.5+i},0`,strokeWidth:1},"\u255E":{type:2,data:(i,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u255F":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1 M${.5+i},.5 L1,.5`,strokeWidth:1},"\u2560":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u2561":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2562":{type:2,data:(i,e)=>`M0,.5 L${.5-i},.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2563":{type:2,data:(i,e)=>`M${.5+i},0 L${.5+i},1 M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0`,strokeWidth:1},"\u2564":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"\u2565":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},1 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2566":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2567":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2568":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u2569":{type:2,data:(i,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256A":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u256B":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u256C":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256D":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u256E":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u256F":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u2570":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u2571":{type:2,data:"M1,0 L0,1",strokeWidth:1},"\u2572":{type:2,data:"M0,0 L1,1",strokeWidth:1},"\u2573":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"\u2574":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"\u2575":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"\u2576":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"\u2577":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"\u2578":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"\u2579":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"\u257A":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"\u257B":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"\u257C":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u257D":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u257E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u257F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2580":{type:0,data:[{x:0,y:0,w:8,h:4}]},"\u2581":{type:0,data:[{x:0,y:7,w:8,h:1}]},"\u2582":{type:0,data:[{x:0,y:6,w:8,h:2}]},"\u2583":{type:0,data:[{x:0,y:5,w:8,h:3}]},"\u2584":{type:0,data:[{x:0,y:4,w:8,h:4}]},"\u2585":{type:0,data:[{x:0,y:3,w:8,h:5}]},"\u2586":{type:0,data:[{x:0,y:2,w:8,h:6}]},"\u2587":{type:0,data:[{x:0,y:1,w:8,h:7}]},"\u2588":{type:0,data:[{x:0,y:0,w:8,h:8}]},"\u2589":{type:0,data:[{x:0,y:0,w:7,h:8}]},"\u258A":{type:0,data:[{x:0,y:0,w:6,h:8}]},"\u258B":{type:0,data:[{x:0,y:0,w:5,h:8}]},"\u258C":{type:0,data:[{x:0,y:0,w:4,h:8}]},"\u258D":{type:0,data:[{x:0,y:0,w:3,h:8}]},"\u258E":{type:0,data:[{x:0,y:0,w:2,h:8}]},"\u258F":{type:0,data:[{x:0,y:0,w:1,h:8}]},"\u2590":{type:0,data:[{x:4,y:0,w:4,h:8}]},"\u2591":{type:1,data:[[1,0],[0,0]]},"\u2592":{type:1,data:[[1,0],[0,1]]},"\u2593":{type:1,data:[[1,1],[1,0]]},"\u2594":{type:0,data:[{x:0,y:0,w:8,h:1}]},"\u2595":{type:0,data:[{x:7,y:0,w:1,h:8}]},"\u2596":{type:0,data:[{x:0,y:4,w:4,h:4}]},"\u2597":{type:0,data:[{x:4,y:4,w:4,h:4}]},"\u2598":{type:0,data:[{x:0,y:0,w:4,h:4}]},"\u2599":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\u259A":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"\u259B":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"\u259C":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"\u259D":{type:0,data:[{x:4,y:0,w:4,h:4}]},"\u259E":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"\u259F":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\uE0A0":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"\uE0A1":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0A2":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"\uE0A3":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0B0":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"\uE0B1":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B2":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"\uE0B3":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B4":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"\uE0B5":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"\uE0B6":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"\uE0B7":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"\uE0B8":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"\uE0B9":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BA":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"\uE0BB":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BC":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"\uE0BD":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BE":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"\uE0BF":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0C0":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"\uE0C1":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"\uE0C2":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"\uE0C3":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"\uE0C4":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"\uE0C5":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"\uE0C6":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"\uE0C7":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"\uE0C8":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"\uE0CA":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"\uE0CC":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"\uE0CD":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"\uE0CE":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"\uE0CF":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"\uE0D0":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"\uE0D1":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"\uE0D2":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"\uE0D4":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"\uEE00":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"\uEE01":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"\uEE02":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"\uEE03":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"\uEE04":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"\uEE05":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"\uEE06":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"\uEE07":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"\uEE08":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE09":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0A":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0B":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"\uF5D0":l.LINE_H,"\uF5D1":l.LINE_V,"\uF5D2":l.FADE_RIGHT,"\uF5D3":l.FADE_LEFT,"\uF5D4":l.FADE_DOWN,"\uF5D5":l.FADE_UP,"\uF5D6":l.CURVE_DOWN_RIGHT,"\uF5D7":l.CURVE_DOWN_LEFT,"\uF5D8":l.CURVE_UP_RIGHT,"\uF5D9":l.CURVE_UP_LEFT,"\uF5DA":[l.LINE_V,l.CURVE_UP_RIGHT],"\uF5DB":[l.LINE_V,l.CURVE_DOWN_RIGHT],"\uF5DC":[l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5DD":[l.LINE_V,l.CURVE_UP_LEFT],"\uF5DE":[l.LINE_V,l.CURVE_DOWN_LEFT],"\uF5DF":[l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E0":[l.LINE_H,l.CURVE_DOWN_LEFT],"\uF5E1":[l.LINE_H,l.CURVE_DOWN_RIGHT],"\uF5E2":[l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E3":[l.LINE_H,l.CURVE_UP_LEFT],"\uF5E4":[l.LINE_H,l.CURVE_UP_RIGHT],"\uF5E5":[l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E6":[l.LINE_V,l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E7":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E8":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E9":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5EA":[l.LINE_V,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5EB":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EC":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5ED":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EE":[l.NODE_FILL,l.NODE_STROKE],"\uF5EF":l.NODE_STROKE,"\uF5F0":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F1":[l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F2":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F3":[l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F4":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F5":[l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F6":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F7":[l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F8":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP],"\uF5F9":[l.NODE_STROKE,l.NODE_LINE_UP],"\uF5FA":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FB":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FC":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FD":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FE":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF5FF":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF600":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF601":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF602":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF603":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF604":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF605":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF606":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF607":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF608":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF609":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60A":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60B":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60C":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60D":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\u{1FB00}":f(1),"\u{1FB01}":f(2),"\u{1FB02}":f(3),"\u{1FB03}":f(4),"\u{1FB04}":f(5),"\u{1FB05}":f(6),"\u{1FB06}":f(7),"\u{1FB07}":f(8),"\u{1FB08}":f(9),"\u{1FB09}":f(10),"\u{1FB0A}":f(11),"\u{1FB0B}":f(12),"\u{1FB0C}":f(13),"\u{1FB0D}":f(14),"\u{1FB0E}":f(15),"\u{1FB0F}":f(16),"\u{1FB10}":f(17),"\u{1FB11}":f(18),"\u{1FB12}":f(19),"\u{1FB13}":f(20),"\u{1FB14}":f(22),"\u{1FB15}":f(23),"\u{1FB16}":f(24),"\u{1FB17}":f(25),"\u{1FB18}":f(26),"\u{1FB19}":f(27),"\u{1FB1A}":f(28),"\u{1FB1B}":f(29),"\u{1FB1C}":f(30),"\u{1FB1D}":f(31),"\u{1FB1E}":f(32),"\u{1FB1F}":f(33),"\u{1FB20}":f(34),"\u{1FB21}":f(35),"\u{1FB22}":f(36),"\u{1FB23}":f(37),"\u{1FB24}":f(38),"\u{1FB25}":f(39),"\u{1FB26}":f(40),"\u{1FB27}":f(41),"\u{1FB28}":f(43),"\u{1FB29}":f(44),"\u{1FB2A}":f(45),"\u{1FB2B}":f(46),"\u{1FB2C}":f(47),"\u{1FB2D}":f(48),"\u{1FB2E}":f(49),"\u{1FB2F}":f(50),"\u{1FB30}":f(51),"\u{1FB31}":f(52),"\u{1FB32}":f(53),"\u{1FB33}":f(54),"\u{1FB34}":f(55),"\u{1FB35}":f(56),"\u{1FB36}":f(57),"\u{1FB37}":f(58),"\u{1FB38}":f(59),"\u{1FB39}":f(60),"\u{1FB3A}":f(61),"\u{1FB3B}":f(62),"\u{1FB3C}":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"\u{1FB3D}":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"\u{1FB3E}":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"\u{1FB3F}":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"\u{1FB40}":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"\u{1FB41}":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB42}":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"\u{1FB43}":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB44}":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"\u{1FB45}":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"\u{1FB46}":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"\u{1FB47}":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"\u{1FB48}":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"\u{1FB49}":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"\u{1FB4A}":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"\u{1FB4B}":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"\u{1FB4C}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4D}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4E}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB4F}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB50}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"\u{1FB51}":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB52}":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB53}":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"\u{1FB54}":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB55}":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"\u{1FB56}":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"\u{1FB57}":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"\u{1FB58}":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"\u{1FB59}":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"\u{1FB5A}":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"\u{1FB5B}":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"\u{1FB5C}":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB5D}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5E}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5F}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB60}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB61}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"\u{1FB62}":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"\u{1FB63}":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"\u{1FB64}":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"\u{1FB65}":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"\u{1FB66}":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"\u{1FB67}":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"\u{1FB68}":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"\u{1FB69}":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"\u{1FB6A}":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"\u{1FB6B}":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"\u{1FB6C}":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"\u{1FB6D}":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"\u{1FB6E}":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"\u{1FB6F}":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"\u{1FB70}":{type:0,data:[{x:1,y:0,w:1,h:8}]},"\u{1FB71}":{type:0,data:[{x:2,y:0,w:1,h:8}]},"\u{1FB72}":{type:0,data:[{x:3,y:0,w:1,h:8}]},"\u{1FB73}":{type:0,data:[{x:4,y:0,w:1,h:8}]},"\u{1FB74}":{type:0,data:[{x:5,y:0,w:1,h:8}]},"\u{1FB75}":{type:0,data:[{x:6,y:0,w:1,h:8}]},"\u{1FB76}":{type:0,data:[{x:0,y:1,w:8,h:1}]},"\u{1FB77}":{type:0,data:[{x:0,y:2,w:8,h:1}]},"\u{1FB78}":{type:0,data:[{x:0,y:3,w:8,h:1}]},"\u{1FB79}":{type:0,data:[{x:0,y:4,w:8,h:1}]},"\u{1FB7A}":{type:0,data:[{x:0,y:5,w:8,h:1}]},"\u{1FB7B}":{type:0,data:[{x:0,y:6,w:8,h:1}]},"\u{1FB7C}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB7D}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7E}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7F}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB80}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB81}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB82}":{type:0,data:[{x:0,y:0,w:8,h:2}]},"\u{1FB83}":{type:0,data:[{x:0,y:0,w:8,h:3}]},"\u{1FB84}":{type:0,data:[{x:0,y:0,w:8,h:5}]},"\u{1FB85}":{type:0,data:[{x:0,y:0,w:8,h:6}]},"\u{1FB86}":{type:0,data:[{x:0,y:0,w:8,h:7}]},"\u{1FB87}":{type:0,data:[{x:6,y:0,w:2,h:8}]},"\u{1FB88}":{type:0,data:[{x:5,y:0,w:3,h:8}]},"\u{1FB89}":{type:0,data:[{x:3,y:0,w:5,h:8}]},"\u{1FB8A}":{type:0,data:[{x:2,y:0,w:6,h:8}]},"\u{1FB8B}":{type:0,data:[{x:1,y:0,w:7,h:8}]},"\u{1FB8C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"\u{1FB8D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"\u{1FB8E}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"\u{1FB8F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"\u{1FB90}":{type:1,data:[[0,1],[1,0]]},"\u{1FB91}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"\u{1FB92}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"\u{1FB94}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"\u{1FB95}":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"\u{1FB96}":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"\u{1FB97}":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"\u{1FB98}":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"\u{1FB99}":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"\u{1FB9A}":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"\u{1FB9B}":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"\u{1FB9C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"\u{1FB9D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"\u{1FB9E}":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"\u{1FB9F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"\u{1FBA0}":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"\u{1FBA1}":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"\u{1FBA2}":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"\u{1FBA3}":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"\u{1FBA4}":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBA5}":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBA6}":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBA7}":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"\u{1FBA8}":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"\u{1FBA9}":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"\u{1FBAA}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"\u{1FBAB}":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBAC}":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBAD}":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBAE}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"\u{1FBAF}":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"\u{1FBB0}":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"\u{1FBB1}":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"\u{1FBB2}":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"\u{1FBB3}":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"\u{1FBB4}":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"\u{1FBB5}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB6}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB7}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB8}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB9}":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"\u{1FBBA}":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"\u{1FBBB}":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"\u{1FBBC}":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"\u{1FBBD}":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"\u{1FBBE}":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"\u{1FBBF}":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"\u{1FBC0}":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"\u{1FBC1}":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"\u{1FBC2}":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"\u{1FBC3}":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"\u{1FBC4}":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"\u{1FBC5}":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC6}":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC7}":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC8}":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC9}":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBCA}":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"\u{1FBCB}":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"\u{1FBCC}":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"\u{1FBCD}":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"\u{1FBCE}":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"\u{1FBCF}":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"\u{1FBD0}":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"\u{1FBD1}":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"\u{1FBD2}":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"\u{1FBD3}":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"\u{1FBD4}":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"\u{1FBD5}":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"\u{1FBD6}":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"\u{1FBD7}":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"\u{1FBD8}":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"\u{1FBD9}":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDA}":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDB}":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"\u{1FBDC}":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"\u{1FBDD}":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"\u{1FBDE}":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"\u{1FBDF}":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"\u{1FBE0}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"\u{1FBE1}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"\u{1FBE2}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"\u{1FBE3}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"\u{1FBE4}":{type:0,data:[{x:2,y:0,w:4,h:4}]},"\u{1FBE5}":{type:0,data:[{x:2,y:4,w:4,h:4}]},"\u{1FBE6}":{type:0,data:[{x:0,y:2,w:4,h:4}]},"\u{1FBE7}":{type:0,data:[{x:4,y:2,w:4,h:4}]},"\u{1FBE8}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"\u{1FBE9}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"\u{1FBEA}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"\u{1FBEB}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"\u{1FBEC}":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"\u{1FBED}":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"\u{1FBEE}":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"\u{1FBEF}":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"\u{1FBF0}":{type:5,data:{d:o0(126),type:0},scaleType:1},"\u{1FBF1}":{type:5,data:{d:o0(48),type:0},scaleType:1},"\u{1FBF2}":{type:5,data:{d:o0(109),type:0},scaleType:1},"\u{1FBF3}":{type:5,data:{d:o0(121),type:0},scaleType:1},"\u{1FBF4}":{type:5,data:{d:o0(51),type:0},scaleType:1},"\u{1FBF5}":{type:5,data:{d:o0(91),type:0},scaleType:1},"\u{1FBF6}":{type:5,data:{d:o0(95),type:0},scaleType:1},"\u{1FBF7}":{type:5,data:{d:o0(114),type:0},scaleType:1},"\u{1FBF8}":{type:5,data:{d:o0(127),type:0},scaleType:1},"\u{1FBF9}":{type:5,data:{d:o0(123),type:0},scaleType:1},"\u{1FBFA}":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(i,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},$e=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951]);function f(i){return{type:2,data:()=>{let e=[],r=[.375,.25,.375],s=[0,3/8,5/8];for(let a=0;a<3;a++){let o=i>>a*2&1,n=i>>a*2+1&1;o&&n?e.push(`M0,${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L0,${s[a]+r[a]} Z`):o?e.push(`M0,${s[a]} L${.5},${s[a]} L${.5},${s[a]+r[a]} L0,${s[a]+r[a]} Z`):n&&e.push(`M${.5},${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L${.5},${s[a]+r[a]} Z`)}return e.join(" ")}}}function o0(i){let e=[];if(i&64){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.2125} L${Q+.075},${.175} L${m-.075},${.175} L${m},${.2125} L${m-.075},${.25} L${Q+.075},${.25} Z`)}if(i&32){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.175+.075+.015,m=.5-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&16){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.5+.015,m=.825-.075-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&8){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.7875} L${Q+.075},${.75} L${m-.075},${.75} L${m},${.7875} L${m-.075},${.825} L${Q+.075},${.825} Z`)}if(i&4&&e.push(`M${.125},${.515} L${.2},${.515+.0375} L${.2},${.735-.0375} L${.125},${.735} L${.05},${.735-.0375} L${.05},${.515+.0375} Z`),i&2&&e.push(`M${.125},${.265} L${.2},${.265+.0375} L${.2},${.485-.0375} L${.125},${.485} L${.05},${.485-.0375} L${.05},${.265+.0375} Z`),i&1){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.5} L${Q+.075},${.4625} L${m-.075},${.4625} L${m},${.5} L${m-.075},${.5375} L${Q+.075},${.5375} Z`)}return e.join(" ")}var k=0,H=0,T0=!1,_0=!1,$0=!1,z,x0=0,G0=class{constructor(e,t,r,s,a,o){this._terminal=e;this._optionService=t;this._selectionRenderModel=r;this._decorationService=s;this._coreBrowserService=a;this._themeService=o;this.result={fg:0,bg:0,ext:0}}resolve(e,t,r,s,a){this.result.bg=e.bg,this.result.fg=e.fg,this.result.ext=e.bg&268435456?e.extended.ext:0,H=0,k=0,_0=!1,T0=!1,$0=!1,z=this._themeService.colors,x0=0;let o=e.getCode();if(o!==0&&e.extended.underlineStyle===4){let n=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));x0=t*s%(Math.round(n)*2)}if(x0===0&&$e.has(o)&&(x0=t*s%2*2+r*a%2),this._decorationService.forEachDecorationAtCell(t,r,"bottom",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),$0=this._selectionRenderModel.isCellSelected(this._terminal,t,r),$0){if(this.result.fg&67108864||(this.result.bg&50331648)!==0){if(this.result.fg&67108864)switch(this.result.fg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:H=(this.result.fg&16777215)<<8|255;break;case 0:default:H=this._themeService.colors.foreground.rgba}else switch(this.result.bg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:H=(this.result.bg&16777215)<<8|255;break}H=d0.blend(H,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}else H=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(_0=!0,z.selectionForeground&&(k=z.selectionForeground.rgba>>8&16777215,T0=!0),V0(e.getCode())){if(this.result.fg&67108864&&(this.result.bg&50331648)===0)k=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(this.result.fg&67108864)switch(this.result.bg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:k=(this.result.bg&16777215)<<8|255;break}else switch(this.result.fg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:k=(this.result.fg&16777215)<<8|255;break;case 0:default:k=this._themeService.colors.foreground.rgba}k=d0.blend(k,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}T0=!0}}this._decorationService.forEachDecorationAtCell(t,r,"top",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),_0&&($0?H=e.bg&-16777216&-134217729|H|50331648:H=e.bg&-16777216|H|50331648),T0&&(k=e.fg&-16777216&-67108865|k|50331648),this.result.fg&67108864&&(_0&&!T0&&((this.result.bg&50331648)===0?k=this.result.fg&-134217728|z.background.rgba>>8&16777215&16777215|50331648:k=this.result.fg&-134217728|this.result.bg&67108863,T0=!0),!_0&&T0&&((this.result.fg&50331648)===0?H=this.result.bg&-67108864|z.foreground.rgba>>8&16777215&16777215|50331648:H=this.result.bg&-67108864|this.result.fg&67108863,_0=!0)),z=void 0,this.result.bg=_0?H:this.result.bg,this.result.fg=T0?k:this.result.fg,this.result.ext&=536870911,this.result.ext|=x0<<29&3758096384}};var Ke=.5,K0=Be||we?"bottom":"ideographic";var Pt=typeof OffscreenCanvas>"u"?void 0:(i,e)=>new OffscreenCanvas(i,e),Bt=(i,e)=>{let t=document.createElement("canvas");return t.width=i,t.height=e,t};function wt(i,e,t=Pt,r=Bt){return t?.(i,e)??r(i,e)}function qe(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=Ve[e];if(p){let c=Array.isArray(p)?p:[p];for(let u of c)Ht(i,u,t,r,s,a,o,n,L,T,h,d,_);return!0}return!1}function Ht(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=s,c=a,u=t,C=r;switch(e.scaleType===1&&(p=o,c=n,u=t+(s-o)/2,C=r+(a-n)/2),e.clipPath&&(i.save(),Kt(i,e.clipPath,u,C,p,c)),e.type){case 0:kt(i,e.data,u,C,p,c);break;case 1:$t(i,e.data,u,C,p,c,_);break;case 2:Gt(i,e.data,u,C,p,c,T,h,e.strokeWidth);break;case 3:Ut(i,e.data,u,C,p,c,T,e.strokeWidth);break;case 4:Vt(i,e.data,u,C,p,c,T,d);break;case 5:zt(i,e.data,u,C,p,c,L,T,h);break;case 6:Zt(i,e.data,u,C,p,c);break}e.clipPath&&i.restore()}function kt(i,e,t,r,s,a){for(let o=0;o{let F=parseFloat(m);return R%2===0?t+F*s:r+F*a});if(u==="M")i.moveTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="L")i.lineTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="Q")i.quadraticCurveTo(Q[0],Q[1],Q[2],Q[3]),d=Q[0],_=Q[1],T=Q[2],h=Q[3];else if(u==="T"){let m,R;p==="Q"||p==="T"?(m=2*T-d,R=2*h-_):(m=T,R=h),i.quadraticCurveTo(m,R,Q[0],Q[1]),d=m,_=R,T=Q[0],h=Q[1]}else u==="C"&&(i.bezierCurveTo(Q[0],Q[1],Q[2],Q[3],Q[4],Q[5]),d=Q[2],_=Q[3],T=Q[4],h=Q[5]);p=u}n!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*n,i.stroke()):i.fill()}function Wt(i,e,t,r,s,a,o,n,L,T){if(r===0||s===0){i.lineTo(L,T);return}r=Math.abs(r),s=Math.abs(s);let h=Math.cos(a),d=Math.sin(a),_=(e-L)/2,p=(t-T)/2,c=h*_+d*p,u=-d*_+h*p,C=r*r,Q=s*s,m=c*c,R=u*u,F=m/C+R/Q;if(F>1){let I=Math.sqrt(F);r*=I,s*=I,C=r*r,Q=s*s}let E=(C*Q-C*R-Q*m)/(C*R+Q*m);E<0&&(E=0);let y=(o===n?-1:1)*Math.sqrt(E),X=y*(r*u/s),Y=y*-(s*c/r),M0=h*X-d*Y+(e+L)/2,t0=d*X+h*Y+(t+T)/2,L0=(c-X)/r,M=(u-Y)/s,n0=(-c-X)/r,a0=(-u-Y)/s,$=Math.atan2(M,L0),q=Math.atan2(a0,n0)-$;n===0&&q>0?q-=2*Math.PI:n===1&&q<0&&(q+=2*Math.PI);let A0=$+q;i.ellipse(M0,t0,r,s,a,$,A0,n===0)}function Vt(i,e,t,r,s,a,o,n){i.save(),i.fillRect(t,r,s,a),n&&(i.fillStyle=n,i.strokeStyle=n),i.lineWidth=o,i.lineCap="square",i.beginPath();for(let L of e.d.split(" ")){let T=L[0],h=L.substring(1).split(",");if(!h[0]||!h[1]){T==="Z"&&i.closePath();continue}let d=h.map((_,p)=>{let c=parseFloat(_);return p%2===0?t+c*s:r+c*a});T==="M"?i.moveTo(d[0],d[1]):T==="L"&&i.lineTo(d[0],d[1])}e.type===1?i.stroke():i.fill(),i.restore()}var Xe=new Map;function $t(i,e,t,r,s,a,o=0){let n=Xe.get(e);n||(n=new Map,Xe.set(e,n));let L=i.fillStyle;if(typeof L!="string")throw new Error(`Unexpected fillStyle type "${L}"`);let T=n.get(L);if(!T){let _=e[0].length,p=e.length,c=wt(_,p),u=A(c.getContext("2d")),C=new ImageData(_,p),Q,m,R,F;if(L.startsWith("#"))Q=parseInt(L.slice(1,3),16),m=parseInt(L.slice(3,5),16),R=parseInt(L.slice(5,7),16),F=L.length>7&&parseInt(L.slice(7,9),16)||1;else if(L.startsWith("rgba"))[Q,m,R,F]=L.substring(5,L.length-1).split(",").map(E=>parseFloat(E));else throw new Error(`Unexpected fillStyle color format "${L}" when drawing pattern glyph`);for(let E=0;E>1&1,d=o&1;h!==0||d!==0?T.setTransform(new DOMMatrix().translateSelf(-h,-d)):T.setTransform(new DOMMatrix),i.fillStyle=T,i.fillRect(t,r,s,a)}function Gt(i,e,t,r,s,a,o,n,L){i.save(),i.beginPath(),i.rect(t,r,s,a),i.clip(),i.beginPath();let T;if(typeof e=="function"){let _=.15/a*s;T=e(.15,_)}else T=e;let h={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let d of T.split(" ")){let _=d[0];if(_==="Z"){i.closePath(),h.lastCommand=_;continue}let p=je[_];if(!p){n.error(`Could not find drawing instructions for "${_}"`);continue}let c=d.substring(1).split(",");!c[0]||!c[1]||(p(i,Je(c,s,a,t,r,!0,o,0,0,!1),h),h.lastCommand=_)}L!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*L,i.stroke()):i.fill(),i.closePath(),i.restore()}function Kt(i,e,t,r,s,a){i.beginPath();for(let o of e.split(" ")){let n=o[0];if(n==="Z"){i.closePath();continue}let L=o.substring(1).split(",");if(!L[0]||!L[1])continue;let T=t+parseFloat(L[0])*s,h=r+parseFloat(L[1])*a;n==="M"?i.moveTo(T,h):n==="L"&&i.lineTo(T,h)}i.clip()}function zt(i,e,t,r,s,a,o,n,L){let T=new Path2D;T.rect(t,r,s,a),i.clip(T),i.beginPath();let h=o/12;i.lineWidth=n*h;let d={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let _ of e.d.split(" ")){let p=_[0];if(p==="Z"){i.closePath(),d.lastCommand=p;continue}let c=je[p];if(!c){L.error(`Could not find drawing instructions for "${p}"`);continue}let u=_.substring(1).split(",");!u[0]||!u[1]||(c(i,Je(u,s,a,t,r,!1,n,(e.leftPadding??0)*(h/2),(e.rightPadding??0)*(h/2)),d),d.lastCommand=p)}e.type===1?(i.strokeStyle=i.fillStyle,i.stroke()):i.fill(),i.closePath()}function Ye(i,e,t=0){return Math.max(Math.min(i,e),t)}var je={C:(i,e,t)=>{i.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),t.lastControlX=e[2],t.lastControlY=e[3],t.currentX=e[4],t.currentY=e[5]},L:(i,e,t)=>{i.lineTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},M:(i,e,t)=>{i.moveTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},Q:(i,e,t)=>{i.quadraticCurveTo(e[0],e[1],e[2],e[3]),t.lastControlX=e[0],t.lastControlY=e[1],t.currentX=e[2],t.currentY=e[3]},T:(i,e,t)=>{let r,s;t.lastCommand==="Q"||t.lastCommand==="T"?(r=2*t.currentX-t.lastControlX,s=2*t.currentY-t.lastControlY):(r=t.currentX,s=t.currentY),i.quadraticCurveTo(r,s,e[0],e[1]),t.lastControlX=r,t.lastControlY=s,t.currentX=e[0],t.currentY=e[1]}};function Je(i,e,t,r,s,a,o,n=0,L=0,T=!0){let h=i.map(d=>parseFloat(d)||parseInt(d));if(h.length<2)throw new Error("Too few arguments for instruction");for(let d=0;da){s-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),this._start();return}s=a}this.clear()}},Ce=class extends X0{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){let t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}},Qe=class extends X0{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}},et="requestIdleCallback"in globalThis?Qe:Ce;var s0=class i{constructor(){this.fg=0;this.bg=0;this.extended=new P0}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},P0=class i{constructor(e=0,t=0){this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new i(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}};var U=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(e,t,r)=>{if(this._disposed)return g(()=>{});let s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);let a=g(()=>{let o=this._listeners.indexOf(s);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return r&&(Array.isArray(r)?r.push(a):r.add(a)),a},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let r=0,s=t.length;r{function i(a,o){return a(n=>o.fire(n))}s.forward=i;function e(a,o){return(n,L,T)=>a(h=>n.call(L,o(h)),void 0,T)}s.map=e;function t(...a){return(o,n,L)=>{let T=new R0;for(let h of a)T.add(h(d=>o.call(n,d)));return L&&(Array.isArray(L)?L.push(T):L.add(T)),T}}s.any=t;function r(a,o,n){return o(n),a(L=>o(L))}s.runAndSubscribe=r})(c0||={});var tt={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}},B0=2;var w0,J=class i{constructor(e,t,r,s){this._document=e;this._config=t;this._unicodeService=r;this._logService=s;this._didWarmUp=!1;this._cacheMap=new D0;this._cacheMapCombined=new D0;this._pages=[];this._activePages=[];this._workBoundingBox={top:0,left:0,bottom:0,right:0};this._workAttributeData=new s0;this._textureSize=512;this._onAddTextureAtlasCanvas=new U;this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event;this._onRemoveTextureAtlasCanvas=new U;this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event;this._pageLayoutVersion=0;this.fontProbeMismatchCount=0;this._createNewPage(),this._tmpCanvas=it(e,this._config.deviceCellWidth*4+B0*2,this._config.deviceCellHeight+B0*2),this._tmpCtx=A(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}get pages(){return this._pages}dispose(){this._tmpCanvas.remove();for(let e of this.pages)e.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){let e=new et(this._logService);for(let t=33;t<126;t++)e.enqueue(()=>{if(!this._cacheMap.get(t,0,0,0)){let r=this._drawToCache(t,0,0,0,!1,void 0);this._cacheMap.set(t,0,0,0,r)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){this._pages.every(e=>e.glyphs.length===0&&e.currentRow.x===0&&e.currentRow.y===0)||(this._evictAllPages(),this._createNewPage())}_createNewPage(){if(i.maxAtlasPages&&this._pages.length>=Math.max(4,i.maxAtlasPages)){let t=this._pages.filter(T=>T.canvas.width*2<=(i.maxTextureSize||4096)).sort((T,h)=>h.canvas.width!==T.canvas.width?h.canvas.width-T.canvas.width:h.percentageUsed-T.percentageUsed),r=-1,s=0;for(let T=0;TT.canvas.width!==a[0].canvas.width)){this._evictAllPages();let T=new u0(this._document,this._textureSize);return this._pages.push(T),this._activePages.push(T),this._onAddTextureAtlasCanvas.fire(T.canvas),T}let o=a.map(T=>T.glyphs[0].texturePage).sort((T,h)=>T-h),n=this.pages.length-a.length,L=this._mergePages(a,n);L.version=++u0.nextVersion;for(let T=o.length-1;T>=0;T--)this._deletePage(o[T]);this.pages.push(L),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(L.canvas)}let e=new u0(this._document,this._textureSize);return this._pages.push(e),this._activePages.push(e),this._onAddTextureAtlasCanvas.fire(e.canvas),e}_mergePages(e,t){let r=e[0].canvas.width*2,s=new u0(this._document,r,e);for(let[a,o]of e.entries()){let n=a*o.canvas.width%r,L=Math.floor(a/2)*o.canvas.height;s.ctx.drawImage(o.canvas,n,L);for(let h of o.glyphs)h.texturePage=t,h.sizeClipSpace.x=h.size.x/r,h.sizeClipSpace.y=h.size.y/r,h.texturePosition.x+=n,h.texturePosition.y+=L,h.texturePositionClipSpace.x=h.texturePosition.x/r,h.texturePositionClipSpace.y=h.texturePosition.y/r;this._onRemoveTextureAtlasCanvas.fire(o.canvas);let T=this._activePages.indexOf(o);T!==-1&&this._activePages.splice(T,1)}return s}_deletePage(e){this._pages.splice(e,1);for(let t=e;t=this._config.colors.ansi.length)throw new Error("No color found for idx "+e);return this._config.colors.ansi[e]}_getBackgroundColor(e,t,r,s){if(this._config.allowTransparency)return K;let a;switch(e){case 16777216:case 33554432:a=this._getColorFromAnsiIndex(t);break;case 50331648:let o=s0.toColorRGB(t);a=Z.toColor(o[0],o[1],o[2]);break;case 0:default:r?a=I0.opaque(this._config.colors.foreground):a=this._config.colors.background;break}return this._config.allowTransparency||(a=I0.opaque(a)),a}_getForegroundColor(e,t,r,s,a,o,n,L,T,h){let d=this._getMinimumContrastColor(e,t,r,s,a,o,n,T,L,h);if(d)return d;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&T&&o<8&&(o+=8),_=this._getColorFromAnsiIndex(o);break;case 50331648:let p=s0.toColorRGB(o);_=Z.toColor(p[0],p[1],p[2]);break;case 0:default:n?_=this._config.colors.background:_=this._config.colors.foreground}return this._config.allowTransparency&&(_=I0.opaque(_)),L&&(_=I0.multiplyOpacity(_,Ke)),_}_resolveBackgroundRgba(e,t,r){switch(e){case 16777216:case 33554432:return this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(e,t,r,s){switch(e){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&t<8&&(t+=8),this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(e,t,r,s,a,o,n,L,T,h){if(this._config.minimumContrastRatio===1||h)return;let d=this._getContrastCache(T),_=d.getColor(e,s);if(_!==void 0)return _??void 0;let p=this._resolveBackgroundRgba(t,r,n),c=this._resolveForegroundRgba(a,o,n,L),u=d0.ensureContrastRatio(p,c,this._config.minimumContrastRatio/(T?2:1));if(!u){d.setColor(e,s,null);return}let C=Z.toColor(u>>24&255,u>>16&255,u>>8&255);return d.setColor(e,s,C),C}_getContrastCache(e){return e?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_probeRasterizationFontWeight(e){let t=String(e);if(!/^(?:[1-8]\d{2}|900)$/.test(t))return;let r=this._tmpCtx.font.match(/(?:^|\s)(normal|bold|[1-9]\d{0,3})(?=\s+\d+(?:\.\d+)?px(?:\s|$))/)?.[1]??"400";if((r==="normal"?"400":r==="bold"?"700":r)!==t){this.fontProbeMismatchCount++,this.fontProbeLastMismatch={desired:t,actual:this._tmpCtx.font};try{globalThis.__orcaAtlasFontProbe?.(this.fontProbeLastMismatch)}catch{}}}_drawToCache(e,t,r,s,a,o){let n=typeof e=="number"?String.fromCharCode(e):e;o&&this._tmpCanvas.parentElement!==o&&(this._tmpCanvas.style.display="none",o.append(this._tmpCanvas));let L=Math.min(this._config.deviceCellWidth*Math.max(n.length,2)+B0*2,this._config.deviceMaxTextureSize);this._tmpCanvas.width=b?b*2-f0:b-f0;!(f0>=b)===!1||Z0===0?(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j+Z0,G),this._tmpCtx.lineTo(Q0,G)):(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(j+Z0,G),this._tmpCtx.moveTo(j+Z0+b,G),this._tmpCtx.lineTo(Q0,G)),f0=We(Q0-j,b,f0);break;case 5:let vt=.6,Ot=.3,de=Q0-j,Se=Math.floor(vt*de),Re=Math.floor(Ot*de),It=de-Se-Re;this._tmpCtx.setLineDash([Se,Re,It]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break;case 1:default:this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break}y0||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!n0&&this._config.fontSize>=12&&!this._config.allowTransparency&&n!==" "){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";let r0=this._tmpCtx.measureText(n);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in r0&&r0.actualBoundingBoxDescent>0){this._tmpCtx.save();let y0=new Path2D;y0.rect(i0,C0-Math.ceil(b/2),this._config.deviceCellWidth*$,v0-C0+Math.ceil(b/2)),this._tmpCtx.clip(y0),this._tmpCtx.lineWidth=this._config.devicePixelRatio*3,this._tmpCtx.strokeStyle=y.css,this._tmpCtx.strokeText(n,M,M+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(Q){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),D=b%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+D),this._tmpCtx.stroke()}if(n0||this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight),n==="_"&&!this._config.allowTransparency){let b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0);if(b)for(let D=1;D<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=y.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight-D),b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0),!!b);D++);}if(C){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),D=this._tmpCtx.lineWidth%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.stroke()}this._tmpCtx.restore();let q=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height),A0;if(this._config.allowTransparency?A0=Xt(q):A0=fe(q,y,L0,a0),A0)return tt;let I=this._findGlyphBoundingBox(q,this._workBoundingBox,L,t0,n0,M),O,v;for(;;){if(this._activePages.length===0){let b=this._createNewPage();O=b,v=b.currentRow,v.height=I.size.y;break}O=this._activePages[this._activePages.length-1],v=O.currentRow;for(let b of this._activePages)I.size.y<=b.currentRow.height&&(O=b,v=b.currentRow);for(let b=this._activePages.length-1;b>=0;b--)for(let D of this._activePages[b].fixedRows)D.height<=v.height&&I.size.y<=D.height&&(O=this._activePages[b],v=D);if(I.size.x>this._textureSize){this._overflowSizePage||(i.maxAtlasPages&&this._pages.length>=i.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new u0(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),O=this._overflowSizePage,v=this._overflowSizePage.currentRow,v.x+I.size.x>=O.canvas.width&&(v.x=0,v.y+=v.height,v.height=0);break}if(v.y+I.size.y>=O.canvas.height||v.height>I.size.y+2){let b=!1;if(O.currentRow.y+O.currentRow.height+I.size.y>=O.canvas.height){let D;for(let i0 of this._activePages)if(i0.currentRow.y+i0.currentRow.height+I.size.y=i.maxAtlasPages&&v.y+I.size.y<=O.canvas.height&&v.height>=I.size.y&&v.x+I.size.x<=O.canvas.width)b=!0;else{let i0=this._createNewPage();O=i0,v=i0.currentRow,v.height=I.size.y,b=!0}}b||(O.currentRow.height>0&&O.fixedRows.push(O.currentRow),v={x:0,y:O.currentRow.y+O.currentRow.height,height:I.size.y},O.fixedRows.push(v),O.currentRow={x:0,y:v.y+v.height,height:0})}if(v.x+I.size.x<=O.canvas.width)break;v===O.currentRow?(v.x=0,v.y+=v.height,v.height=0):O.fixedRows.splice(O.fixedRows.indexOf(v),1)}return I.texturePage=this._pages.indexOf(O),I.texturePosition.x=v.x,I.texturePosition.y=v.y,I.texturePositionClipSpace.x=v.x/O.canvas.width,I.texturePositionClipSpace.y=v.y/O.canvas.height,I.sizeClipSpace.x/=O.canvas.width,I.sizeClipSpace.y/=O.canvas.height,v.height=Math.max(v.height,I.size.y),v.x+=I.size.x,O.ctx.putImageData(q,I.texturePosition.x-this._workBoundingBox.left,I.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,I.size.x,I.size.y),O.addGlyph(I),O.version=++u0.nextVersion,I}_findGlyphBoundingBox(e,t,r,s,a,o){t.top=0;let n=s?this._config.deviceCellHeight:this._tmpCanvas.height,L=s?this._config.deviceCellWidth:r,T=!1;for(let h=0;h=o;h--){for(let d=0;d=0;h--){for(let d=0;d>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=t.rgba>>>24,L=t.rgba>>>16&255,T=t.rgba>>>8&255,h=Math.floor((Math.abs(s-n)+Math.abs(a-L)+Math.abs(o-T))/12),d=!0;for(let _=0;_0)return!1;return!0}function it(i,e,t){let r=i.createElement("canvas");return r.width=e,r.height=t,r}function rt(i,e,t,r,s,a,o,n,L=!0){let T={foreground:a.foreground,background:a.background,cursor:K,cursorAccent:K,selectionForeground:K,selectionBackgroundTransparent:K,selectionBackgroundOpaque:K,selectionInactiveBackgroundTransparent:K,selectionInactiveBackgroundOpaque:K,overviewRulerBorder:K,scrollbarSliderBackground:K,scrollbarSliderHoverBackground:K,scrollbarSliderActiveBackground:K,ansi:a.ansi.slice(),contrastCache:a.contrastCache,halfContrastCache:a.halfContrastCache};return{customGlyphs:L,devicePixelRatio:o,deviceMaxTextureSize:n,letterSpacing:s.letterSpacing,lineHeight:s.lineHeight,deviceCellWidth:i,deviceCellHeight:e,deviceCharWidth:t,deviceCharHeight:r,fontFamily:s.fontFamily,fontSize:s.fontSize,fontWeight:s.fontWeight,fontWeightBold:s.fontWeightBold,allowTransparency:s.allowTransparency,drawBoldTextInBrightColors:s.drawBoldTextInBrightColors,minimumContrastRatio:s.minimumContrastRatio,colors:T}}function Ee(i,e){for(let t=0;t=0){if(Ee(u.config,h))return u.atlas;u.ownedBy.length===1?(u.atlas.dispose(),e0.splice(c,1)):u.ownedBy.splice(C,1);break}}for(let c=0;c{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(e=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0){this._restartInterval(t);return}}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);this._animationTimeRestarted=void 0,this._restartInterval(t);return}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},e)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}};function ve(i,e,t){let r=new e.ResizeObserver(s=>{let a=s.find(L=>L.target===i);if(!a)return;if(!("devicePixelContentBoxSize"in a)){r?.disconnect(),r=void 0;return}let o=a.devicePixelContentBoxSize[0].inlineSize,n=a.devicePixelContentBoxSize[0].blockSize;o>0&&n>0&&t(o,n)});try{r.observe(i,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return g(()=>r?.disconnect())}function nt(i){return i>65535?(i-=65536,String.fromCharCode((i>>10)+55296)+String.fromCharCode(i%1024+56320)):String.fromCharCode(i)}var j0=class i extends s0{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new P0;this.combinedData=""}static fromCharData(t){let r=new i;return r.setFromCharData(t),r}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?nt(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(t){this.fg=t[0],this.bg=0;let r=!1;if(t[1].length>2)r=!0;else if(t[1].length===2){let s=t[1].charCodeAt(0);if(55296<=s&&s<=56319){let a=t[1].charCodeAt(1);56320<=a&&a<=57343?this.content=(s-55296)*1024+a-56320+65536|t[2]<<22:r=!0}else r=!0}else this.content=t[1].charCodeAt(0)|t[2]<<22;r&&(this.combinedData=t[1],this.content=2097152|t[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor()||this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor()||this.isInverse()!==t.isInverse()||this.isBold()!==t.isBold()||this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;let r=this.isUnderlineColorDefault(),s=t.isUnderlineColorDefault();if(!(r&&s)&&(r!==s||this.getUnderlineColor()!==t.getUnderlineColor()||this.getUnderlineColorMode()!==t.getUnderlineColorMode()))return!1}return!(this.isOverline()!==t.isOverline()||this.isBlink()!==t.isBlink()||this.isInvisible()!==t.isInvisible()||this.isItalic()!==t.isItalic()||this.isDim()!==t.isDim()||this.isStrikethrough()!==t.isStrikethrough())}};var J0=class extends W{constructor(t,r,s){super();this._renderCallback=t;this._coreBrowserService=r;this._optionsService=s;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",a=>{this.setIntervalDuration(a)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(g(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let r=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),r||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var te=new Float32Array([2,0,0,0,0,-2,0,0,0,0,1,0,-1,1,0,1]);function ie(i,e,t,r){let s=A(i.createProgram());if(i.attachShader(s,A(at(i,i.VERTEX_SHADER,e,r))),i.attachShader(s,A(at(i,i.FRAGMENT_SHADER,t,r))),i.linkProgram(s),i.getProgramParameter(s,i.LINK_STATUS))return s;r.error(i.getProgramInfoLog(s)),i.deleteProgram(s)}function at(i,e,t,r){let s=A(i.createShader(e));if(i.shaderSource(s,t),i.compileShader(s),i.getShaderParameter(s,i.COMPILE_STATUS))return s;r.error(i.getShaderInfoLog(s)),i.deleteShader(s)}function ot(i,e){let t=Math.min(i.length*2,e),r=new Float32Array(t);for(let s=0;sFt(i))}var R0=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(let e of this._disposables)e.dispose();this._disposables.clear()}},W=class{constructor(){this._store=new R0}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}};W.None=Object.freeze({dispose(){}});var m0=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Pe=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),O0=Pe?"node":navigator.userAgent,ce=Pe?"node":navigator.platform,Be=O0.includes("Firefox"),T1=O0.includes("Chrome"),we=O0.includes("Edge"),ue=/^((?!chrome|android).)*safari/i.test(O0);function He(){if(!ue)return 0;let i=O0.match(/Version\/(\d+)/);return i===null||i.length<2?0:parseInt(i[1],10)}var l1=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(ce),L1=["Windows","Win16","Win32","WinCE"].includes(ce),h1=ce.indexOf("Linux")>=0,d1=/\bCrOS\b/.test(O0);var P=0,B=0,w=0,x=0,K={css:"#00000000",rgba:0},Z;(r=>{function i(s,a,o,n){return n!==void 0?`#${E0(s)}${E0(a)}${E0(o)}${E0(n)}`:`#${E0(s)}${E0(a)}${E0(o)}`}r.toCss=i;function e(s,a,o,n=255){return(s<<24|a<<16|o<<8|n)>>>0}r.toRgba=e;function t(s,a,o,n){return{css:r.toCss(s,a,o,n),rgba:r.toRgba(s,a,o,n)}}r.toColor=t})(Z||={});var I0;(n=>{function i(L,T){if(x=(T.rgba&255)/255,x===1)return{css:T.css,rgba:T.rgba};let h=T.rgba>>24&255,d=T.rgba>>16&255,_=T.rgba>>8&255,p=L.rgba>>24&255,c=L.rgba>>16&255,u=L.rgba>>8&255;P=p+Math.round((h-p)*x),B=c+Math.round((d-c)*x),w=u+Math.round((_-u)*x);let C=Z.toCss(P,B,w),Q=Z.toRgba(P,B,w);return{css:C,rgba:Q}}n.blend=i;function e(L){return(L.rgba&255)===255}n.isOpaque=e;function t(L,T,h){let d=d0.ensureContrastRatio(L.rgba,T.rgba,h);if(d)return Z.toColor(d>>24&255,d>>16&255,d>>8&255)}n.ensureContrastRatio=t;function r(L){let T=(L.rgba|255)>>>0;return[P,B,w]=d0.toChannels(T),{css:Z.toCss(P,B,w),rgba:T}}n.opaque=r;function s(L,T){return x=Math.round(T*255),[P,B,w]=d0.toChannels(L.rgba),{css:Z.toCss(P,B,w,x),rgba:Z.toRgba(P,B,w,x)}}n.opacity=s;function a(L,T){return x=L.rgba&255,s(L,x*T/255)}n.multiplyOpacity=a;function o(L){return[L.rgba>>24&255,L.rgba>>16&255,L.rgba>>8&255]}n.toColorRGB=o})(I0||={});var gt;(r=>{let i,e;try{let s=document.createElement("canvas");s.width=1,s.height=1;let a=s.getContext("2d",{willReadFrequently:!0});a&&(i=a,i.globalCompositeOperation="copy",e=i.createLinearGradient(0,0,1,1))}catch{}function t(s){if(s.match(/#[\da-f]{3,8}/i))switch(s.length){case 4:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),Z.toColor(P,B,w);case 5:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),x=parseInt(s.slice(4,5).repeat(2),16),Z.toColor(P,B,w,x);case 7:return{css:s,rgba:(parseInt(s.slice(1),16)<<8|255)>>>0};case 9:return{css:s,rgba:parseInt(s.slice(1),16)>>>0}}let a=s.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(a)return P=parseInt(a[1],10),B=parseInt(a[2],10),w=parseInt(a[3],10),x=Math.round((a[5]===void 0?1:parseFloat(a[5]))*255),Z.toColor(P,B,w,x);if(s==="transparent")return{css:"transparent",rgba:0};if(!i||!e)throw new Error("css.toColor: Unsupported css format");if(i.fillStyle=e,i.fillStyle=s,typeof i.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(i.fillRect(0,0,1,1),[P,B,w,x]=i.getImageData(0,0,1,1).data,x!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:Z.toRgba(P,B,w,x),css:s}}r.toColor=t})(gt||={});var V;(t=>{function i(r){return e(r>>16&255,r>>8&255,r&255)}t.relativeLuminance=i;function e(r,s,a){let o=r/255,n=s/255,L=a/255,T=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),h=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),d=L<=.03928?L/12.92:Math.pow((L+.055)/1.055,2.4);return T*.2126+h*.7152+d*.0722}t.relativeLuminance2=e})(V||={});var d0;(a=>{function i(o,n){if(x=(n&255)/255,x===1)return n;let L=n>>24&255,T=n>>16&255,h=n>>8&255,d=o>>24&255,_=o>>16&255,p=o>>8&255;return P=d+Math.round((L-d)*x),B=_+Math.round((T-_)*x),w=p+Math.round((h-p)*x),Z.toRgba(P,B,w)}a.blend=i;function e(o,n,L){let T=V.relativeLuminance(o>>8),h=V.relativeLuminance(n>>8);if(h0(T,h)>8));if(u>8));return u>Q?c:C}return c}let _=r(o,n,L),p=h0(T,V.relativeLuminance(_>>8));if(p>8));return p>u?_:c}return _}}a.ensureContrastRatio=e;function t(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u0||p>0||c>0);)_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),c-=Math.max(0,Math.ceil(c*.1)),u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));return(_<<24|p<<16|c<<8|255)>>>0}a.reduceLuminance=t;function r(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u>>0}a.increaseLuminance=r;function s(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}a.toChannels=s})(d0||={});function E0(i){let e=i.toString(16);return e.length<2?"0"+e:e}function h0(i,e){return i=128512&&i<=128591||i>=127744&&i<=128511||i>=128640&&i<=128767||i>=9728&&i<=9983||i>=9984&&i<=10175||i>=65024&&i<=65039||i>=129280&&i<=129535||i>=127462&&i<=127487}function Ze(i,e,t,r){return e===1&&t>Math.ceil(r*1.5)&&i!==void 0&&i>255&&!yt(i)&&!W0(i)&&!Mt(i)}function V0(i){return W0(i)||At(i)}function Ue(){return{css:{canvas:U0(),cell:U0()},device:{canvas:U0(),cell:U0(),char:{width:0,height:0,left:0,top:0}}}}function U0(){return{width:0,height:0}}function We(i,e,t=0){return(i-(Math.round(e)*2-t))%(Math.round(e)*2)}var l;(C=>(C.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),C.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),C.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),C.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),C.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),C.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),C.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.CURVE_UP_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_UP_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),C.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),C.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),C.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),C.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),C.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})))(l||={});var Ve={"\u2500":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"\u2501":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"\u2502":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"\u2503":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"\u2504":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"\u2505":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"\u2506":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"\u2507":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"\u2508":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"\u2509":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"\u250A":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"\u250B":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"\u250C":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"\u250D":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u250E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u250F":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"\u2510":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"\u2511":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2512":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2513":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"\u2514":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"\u2515":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2516":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2517":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"\u2518":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"\u2519":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u251A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251B":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"\u251C":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"\u251D":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u251E":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251F":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2520":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2521":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2522":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2523":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"\u2524":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"\u2525":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2526":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2527":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2528":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2529":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u252A":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u252B":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"\u252C":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"\u252D":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u252E":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u252F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2530":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2531":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2532":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2533":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"\u2534":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"\u2535":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2536":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2537":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2538":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2539":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u253A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u253B":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"\u253C":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"\u253D":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u253E":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u253F":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2540":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2541":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2542":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2543":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u2544":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2545":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2546":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2547":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"\u2548":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"\u2549":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"\u254A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"\u254B":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"\u254C":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"\u254D":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"\u254E":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"\u254F":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"\u2550":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2551":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2552":{type:2,data:(i,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2553":{type:2,data:(i,e)=>`M${.5-i},1 L${.5-i},.5 L1,.5 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2554":{type:2,data:(i,e)=>`M1,${.5-e} L${.5-i},${.5-e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2555":{type:2,data:(i,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2556":{type:2,data:(i,e)=>`M${.5+i},1 L${.5+i},.5 L0,.5 M${.5-i},.5 L${.5-i},1`,strokeWidth:1},"\u2557":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5+i},${.5-e} L${.5+i},1`,strokeWidth:1},"\u2558":{type:2,data:(i,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"\u2559":{type:2,data:(i,e)=>`M1,.5 L${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u255A":{type:2,data:(i,e)=>`M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0 M1,${.5+e} L${.5-i},${.5+e} L${.5-i},0`,strokeWidth:1},"\u255B":{type:2,data:(i,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"\u255C":{type:2,data:(i,e)=>`M0,.5 L${.5+i},.5 L${.5+i},0 M${.5-i},.5 L${.5-i},0`,strokeWidth:1},"\u255D":{type:2,data:(i,e)=>`M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M0,${.5+e} L${.5+i},${.5+e} L${.5+i},0`,strokeWidth:1},"\u255E":{type:2,data:(i,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u255F":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1 M${.5+i},.5 L1,.5`,strokeWidth:1},"\u2560":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u2561":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2562":{type:2,data:(i,e)=>`M0,.5 L${.5-i},.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2563":{type:2,data:(i,e)=>`M${.5+i},0 L${.5+i},1 M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0`,strokeWidth:1},"\u2564":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"\u2565":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},1 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2566":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2567":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2568":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u2569":{type:2,data:(i,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256A":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u256B":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u256C":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256D":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u256E":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u256F":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u2570":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u2571":{type:2,data:"M1,0 L0,1",strokeWidth:1},"\u2572":{type:2,data:"M0,0 L1,1",strokeWidth:1},"\u2573":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"\u2574":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"\u2575":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"\u2576":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"\u2577":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"\u2578":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"\u2579":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"\u257A":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"\u257B":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"\u257C":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u257D":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u257E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u257F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2580":{type:0,data:[{x:0,y:0,w:8,h:4}]},"\u2581":{type:0,data:[{x:0,y:7,w:8,h:1}]},"\u2582":{type:0,data:[{x:0,y:6,w:8,h:2}]},"\u2583":{type:0,data:[{x:0,y:5,w:8,h:3}]},"\u2584":{type:0,data:[{x:0,y:4,w:8,h:4}]},"\u2585":{type:0,data:[{x:0,y:3,w:8,h:5}]},"\u2586":{type:0,data:[{x:0,y:2,w:8,h:6}]},"\u2587":{type:0,data:[{x:0,y:1,w:8,h:7}]},"\u2588":{type:0,data:[{x:0,y:0,w:8,h:8}]},"\u2589":{type:0,data:[{x:0,y:0,w:7,h:8}]},"\u258A":{type:0,data:[{x:0,y:0,w:6,h:8}]},"\u258B":{type:0,data:[{x:0,y:0,w:5,h:8}]},"\u258C":{type:0,data:[{x:0,y:0,w:4,h:8}]},"\u258D":{type:0,data:[{x:0,y:0,w:3,h:8}]},"\u258E":{type:0,data:[{x:0,y:0,w:2,h:8}]},"\u258F":{type:0,data:[{x:0,y:0,w:1,h:8}]},"\u2590":{type:0,data:[{x:4,y:0,w:4,h:8}]},"\u2591":{type:1,data:[[1,0],[0,0]]},"\u2592":{type:1,data:[[1,0],[0,1]]},"\u2593":{type:1,data:[[1,1],[1,0]]},"\u2594":{type:0,data:[{x:0,y:0,w:8,h:1}]},"\u2595":{type:0,data:[{x:7,y:0,w:1,h:8}]},"\u2596":{type:0,data:[{x:0,y:4,w:4,h:4}]},"\u2597":{type:0,data:[{x:4,y:4,w:4,h:4}]},"\u2598":{type:0,data:[{x:0,y:0,w:4,h:4}]},"\u2599":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\u259A":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"\u259B":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"\u259C":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"\u259D":{type:0,data:[{x:4,y:0,w:4,h:4}]},"\u259E":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"\u259F":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\uE0A0":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"\uE0A1":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0A2":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"\uE0A3":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0B0":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"\uE0B1":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B2":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"\uE0B3":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B4":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"\uE0B5":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"\uE0B6":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"\uE0B7":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"\uE0B8":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"\uE0B9":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BA":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"\uE0BB":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BC":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"\uE0BD":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BE":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"\uE0BF":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0C0":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"\uE0C1":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"\uE0C2":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"\uE0C3":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"\uE0C4":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"\uE0C5":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"\uE0C6":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"\uE0C7":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"\uE0C8":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"\uE0CA":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"\uE0CC":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"\uE0CD":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"\uE0CE":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"\uE0CF":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"\uE0D0":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"\uE0D1":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"\uE0D2":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"\uE0D4":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"\uEE00":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"\uEE01":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"\uEE02":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"\uEE03":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"\uEE04":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"\uEE05":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"\uEE06":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"\uEE07":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"\uEE08":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE09":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0A":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0B":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"\uF5D0":l.LINE_H,"\uF5D1":l.LINE_V,"\uF5D2":l.FADE_RIGHT,"\uF5D3":l.FADE_LEFT,"\uF5D4":l.FADE_DOWN,"\uF5D5":l.FADE_UP,"\uF5D6":l.CURVE_DOWN_RIGHT,"\uF5D7":l.CURVE_DOWN_LEFT,"\uF5D8":l.CURVE_UP_RIGHT,"\uF5D9":l.CURVE_UP_LEFT,"\uF5DA":[l.LINE_V,l.CURVE_UP_RIGHT],"\uF5DB":[l.LINE_V,l.CURVE_DOWN_RIGHT],"\uF5DC":[l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5DD":[l.LINE_V,l.CURVE_UP_LEFT],"\uF5DE":[l.LINE_V,l.CURVE_DOWN_LEFT],"\uF5DF":[l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E0":[l.LINE_H,l.CURVE_DOWN_LEFT],"\uF5E1":[l.LINE_H,l.CURVE_DOWN_RIGHT],"\uF5E2":[l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E3":[l.LINE_H,l.CURVE_UP_LEFT],"\uF5E4":[l.LINE_H,l.CURVE_UP_RIGHT],"\uF5E5":[l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E6":[l.LINE_V,l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E7":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E8":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E9":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5EA":[l.LINE_V,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5EB":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EC":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5ED":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EE":[l.NODE_FILL,l.NODE_STROKE],"\uF5EF":l.NODE_STROKE,"\uF5F0":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F1":[l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F2":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F3":[l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F4":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F5":[l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F6":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F7":[l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F8":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP],"\uF5F9":[l.NODE_STROKE,l.NODE_LINE_UP],"\uF5FA":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FB":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FC":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FD":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FE":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF5FF":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF600":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF601":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF602":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF603":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF604":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF605":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF606":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF607":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF608":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF609":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60A":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60B":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60C":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60D":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\u{1FB00}":f(1),"\u{1FB01}":f(2),"\u{1FB02}":f(3),"\u{1FB03}":f(4),"\u{1FB04}":f(5),"\u{1FB05}":f(6),"\u{1FB06}":f(7),"\u{1FB07}":f(8),"\u{1FB08}":f(9),"\u{1FB09}":f(10),"\u{1FB0A}":f(11),"\u{1FB0B}":f(12),"\u{1FB0C}":f(13),"\u{1FB0D}":f(14),"\u{1FB0E}":f(15),"\u{1FB0F}":f(16),"\u{1FB10}":f(17),"\u{1FB11}":f(18),"\u{1FB12}":f(19),"\u{1FB13}":f(20),"\u{1FB14}":f(22),"\u{1FB15}":f(23),"\u{1FB16}":f(24),"\u{1FB17}":f(25),"\u{1FB18}":f(26),"\u{1FB19}":f(27),"\u{1FB1A}":f(28),"\u{1FB1B}":f(29),"\u{1FB1C}":f(30),"\u{1FB1D}":f(31),"\u{1FB1E}":f(32),"\u{1FB1F}":f(33),"\u{1FB20}":f(34),"\u{1FB21}":f(35),"\u{1FB22}":f(36),"\u{1FB23}":f(37),"\u{1FB24}":f(38),"\u{1FB25}":f(39),"\u{1FB26}":f(40),"\u{1FB27}":f(41),"\u{1FB28}":f(43),"\u{1FB29}":f(44),"\u{1FB2A}":f(45),"\u{1FB2B}":f(46),"\u{1FB2C}":f(47),"\u{1FB2D}":f(48),"\u{1FB2E}":f(49),"\u{1FB2F}":f(50),"\u{1FB30}":f(51),"\u{1FB31}":f(52),"\u{1FB32}":f(53),"\u{1FB33}":f(54),"\u{1FB34}":f(55),"\u{1FB35}":f(56),"\u{1FB36}":f(57),"\u{1FB37}":f(58),"\u{1FB38}":f(59),"\u{1FB39}":f(60),"\u{1FB3A}":f(61),"\u{1FB3B}":f(62),"\u{1FB3C}":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"\u{1FB3D}":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"\u{1FB3E}":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"\u{1FB3F}":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"\u{1FB40}":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"\u{1FB41}":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB42}":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"\u{1FB43}":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB44}":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"\u{1FB45}":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"\u{1FB46}":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"\u{1FB47}":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"\u{1FB48}":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"\u{1FB49}":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"\u{1FB4A}":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"\u{1FB4B}":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"\u{1FB4C}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4D}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4E}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB4F}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB50}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"\u{1FB51}":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB52}":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB53}":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"\u{1FB54}":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB55}":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"\u{1FB56}":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"\u{1FB57}":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"\u{1FB58}":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"\u{1FB59}":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"\u{1FB5A}":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"\u{1FB5B}":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"\u{1FB5C}":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB5D}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5E}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5F}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB60}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB61}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"\u{1FB62}":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"\u{1FB63}":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"\u{1FB64}":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"\u{1FB65}":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"\u{1FB66}":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"\u{1FB67}":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"\u{1FB68}":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"\u{1FB69}":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"\u{1FB6A}":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"\u{1FB6B}":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"\u{1FB6C}":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"\u{1FB6D}":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"\u{1FB6E}":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"\u{1FB6F}":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"\u{1FB70}":{type:0,data:[{x:1,y:0,w:1,h:8}]},"\u{1FB71}":{type:0,data:[{x:2,y:0,w:1,h:8}]},"\u{1FB72}":{type:0,data:[{x:3,y:0,w:1,h:8}]},"\u{1FB73}":{type:0,data:[{x:4,y:0,w:1,h:8}]},"\u{1FB74}":{type:0,data:[{x:5,y:0,w:1,h:8}]},"\u{1FB75}":{type:0,data:[{x:6,y:0,w:1,h:8}]},"\u{1FB76}":{type:0,data:[{x:0,y:1,w:8,h:1}]},"\u{1FB77}":{type:0,data:[{x:0,y:2,w:8,h:1}]},"\u{1FB78}":{type:0,data:[{x:0,y:3,w:8,h:1}]},"\u{1FB79}":{type:0,data:[{x:0,y:4,w:8,h:1}]},"\u{1FB7A}":{type:0,data:[{x:0,y:5,w:8,h:1}]},"\u{1FB7B}":{type:0,data:[{x:0,y:6,w:8,h:1}]},"\u{1FB7C}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB7D}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7E}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7F}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB80}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB81}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB82}":{type:0,data:[{x:0,y:0,w:8,h:2}]},"\u{1FB83}":{type:0,data:[{x:0,y:0,w:8,h:3}]},"\u{1FB84}":{type:0,data:[{x:0,y:0,w:8,h:5}]},"\u{1FB85}":{type:0,data:[{x:0,y:0,w:8,h:6}]},"\u{1FB86}":{type:0,data:[{x:0,y:0,w:8,h:7}]},"\u{1FB87}":{type:0,data:[{x:6,y:0,w:2,h:8}]},"\u{1FB88}":{type:0,data:[{x:5,y:0,w:3,h:8}]},"\u{1FB89}":{type:0,data:[{x:3,y:0,w:5,h:8}]},"\u{1FB8A}":{type:0,data:[{x:2,y:0,w:6,h:8}]},"\u{1FB8B}":{type:0,data:[{x:1,y:0,w:7,h:8}]},"\u{1FB8C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"\u{1FB8D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"\u{1FB8E}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"\u{1FB8F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"\u{1FB90}":{type:1,data:[[0,1],[1,0]]},"\u{1FB91}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"\u{1FB92}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"\u{1FB94}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"\u{1FB95}":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"\u{1FB96}":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"\u{1FB97}":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"\u{1FB98}":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"\u{1FB99}":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"\u{1FB9A}":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"\u{1FB9B}":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"\u{1FB9C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"\u{1FB9D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"\u{1FB9E}":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"\u{1FB9F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"\u{1FBA0}":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"\u{1FBA1}":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"\u{1FBA2}":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"\u{1FBA3}":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"\u{1FBA4}":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBA5}":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBA6}":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBA7}":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"\u{1FBA8}":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"\u{1FBA9}":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"\u{1FBAA}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"\u{1FBAB}":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBAC}":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBAD}":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBAE}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"\u{1FBAF}":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"\u{1FBB0}":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"\u{1FBB1}":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"\u{1FBB2}":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"\u{1FBB3}":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"\u{1FBB4}":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"\u{1FBB5}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB6}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB7}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB8}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB9}":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"\u{1FBBA}":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"\u{1FBBB}":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"\u{1FBBC}":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"\u{1FBBD}":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"\u{1FBBE}":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"\u{1FBBF}":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"\u{1FBC0}":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"\u{1FBC1}":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"\u{1FBC2}":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"\u{1FBC3}":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"\u{1FBC4}":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"\u{1FBC5}":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC6}":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC7}":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC8}":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC9}":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBCA}":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"\u{1FBCB}":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"\u{1FBCC}":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"\u{1FBCD}":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"\u{1FBCE}":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"\u{1FBCF}":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"\u{1FBD0}":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"\u{1FBD1}":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"\u{1FBD2}":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"\u{1FBD3}":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"\u{1FBD4}":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"\u{1FBD5}":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"\u{1FBD6}":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"\u{1FBD7}":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"\u{1FBD8}":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"\u{1FBD9}":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDA}":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDB}":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"\u{1FBDC}":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"\u{1FBDD}":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"\u{1FBDE}":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"\u{1FBDF}":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"\u{1FBE0}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"\u{1FBE1}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"\u{1FBE2}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"\u{1FBE3}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"\u{1FBE4}":{type:0,data:[{x:2,y:0,w:4,h:4}]},"\u{1FBE5}":{type:0,data:[{x:2,y:4,w:4,h:4}]},"\u{1FBE6}":{type:0,data:[{x:0,y:2,w:4,h:4}]},"\u{1FBE7}":{type:0,data:[{x:4,y:2,w:4,h:4}]},"\u{1FBE8}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"\u{1FBE9}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"\u{1FBEA}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"\u{1FBEB}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"\u{1FBEC}":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"\u{1FBED}":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"\u{1FBEE}":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"\u{1FBEF}":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"\u{1FBF0}":{type:5,data:{d:o0(126),type:0},scaleType:1},"\u{1FBF1}":{type:5,data:{d:o0(48),type:0},scaleType:1},"\u{1FBF2}":{type:5,data:{d:o0(109),type:0},scaleType:1},"\u{1FBF3}":{type:5,data:{d:o0(121),type:0},scaleType:1},"\u{1FBF4}":{type:5,data:{d:o0(51),type:0},scaleType:1},"\u{1FBF5}":{type:5,data:{d:o0(91),type:0},scaleType:1},"\u{1FBF6}":{type:5,data:{d:o0(95),type:0},scaleType:1},"\u{1FBF7}":{type:5,data:{d:o0(114),type:0},scaleType:1},"\u{1FBF8}":{type:5,data:{d:o0(127),type:0},scaleType:1},"\u{1FBF9}":{type:5,data:{d:o0(123),type:0},scaleType:1},"\u{1FBFA}":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(i,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},$e=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951]);function f(i){return{type:2,data:()=>{let e=[],r=[.375,.25,.375],s=[0,3/8,5/8];for(let a=0;a<3;a++){let o=i>>a*2&1,n=i>>a*2+1&1;o&&n?e.push(`M0,${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L0,${s[a]+r[a]} Z`):o?e.push(`M0,${s[a]} L${.5},${s[a]} L${.5},${s[a]+r[a]} L0,${s[a]+r[a]} Z`):n&&e.push(`M${.5},${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L${.5},${s[a]+r[a]} Z`)}return e.join(" ")}}}function o0(i){let e=[];if(i&64){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.2125} L${Q+.075},${.175} L${m-.075},${.175} L${m},${.2125} L${m-.075},${.25} L${Q+.075},${.25} Z`)}if(i&32){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.175+.075+.015,m=.5-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&16){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.5+.015,m=.825-.075-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&8){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.7875} L${Q+.075},${.75} L${m-.075},${.75} L${m},${.7875} L${m-.075},${.825} L${Q+.075},${.825} Z`)}if(i&4&&e.push(`M${.125},${.515} L${.2},${.515+.0375} L${.2},${.735-.0375} L${.125},${.735} L${.05},${.735-.0375} L${.05},${.515+.0375} Z`),i&2&&e.push(`M${.125},${.265} L${.2},${.265+.0375} L${.2},${.485-.0375} L${.125},${.485} L${.05},${.485-.0375} L${.05},${.265+.0375} Z`),i&1){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.5} L${Q+.075},${.4625} L${m-.075},${.4625} L${m},${.5} L${m-.075},${.5375} L${Q+.075},${.5375} Z`)}return e.join(" ")}var k=0,H=0,T0=!1,_0=!1,$0=!1,z,x0=0,G0=class{constructor(e,t,r,s,a,o){this._terminal=e;this._optionService=t;this._selectionRenderModel=r;this._decorationService=s;this._coreBrowserService=a;this._themeService=o;this.result={fg:0,bg:0,ext:0}}resolve(e,t,r,s,a){this.result.bg=e.bg,this.result.fg=e.fg,this.result.ext=e.bg&268435456?e.extended.ext:0,H=0,k=0,_0=!1,T0=!1,$0=!1,z=this._themeService.colors,x0=0;let o=e.getCode();if(o!==0&&e.extended.underlineStyle===4){let n=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));x0=t*s%(Math.round(n)*2)}if(x0===0&&$e.has(o)&&(x0=t*s%2*2+r*a%2),this._decorationService.forEachDecorationAtCell(t,r,"bottom",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),$0=this._selectionRenderModel.isCellSelected(this._terminal,t,r),$0){if(this.result.fg&67108864||(this.result.bg&50331648)!==0){if(this.result.fg&67108864)switch(this.result.fg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:H=(this.result.fg&16777215)<<8|255;break;case 0:default:H=this._themeService.colors.foreground.rgba}else switch(this.result.bg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:H=(this.result.bg&16777215)<<8|255;break}H=d0.blend(H,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}else H=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(_0=!0,z.selectionForeground&&(k=z.selectionForeground.rgba>>8&16777215,T0=!0),V0(e.getCode())){if(this.result.fg&67108864&&(this.result.bg&50331648)===0)k=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(this.result.fg&67108864)switch(this.result.bg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:k=(this.result.bg&16777215)<<8|255;break}else switch(this.result.fg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:k=(this.result.fg&16777215)<<8|255;break;case 0:default:k=this._themeService.colors.foreground.rgba}k=d0.blend(k,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}T0=!0}}this._decorationService.forEachDecorationAtCell(t,r,"top",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),_0&&($0?H=e.bg&-16777216&-134217729|H|50331648:H=e.bg&-16777216|H|50331648),T0&&(k=e.fg&-16777216&-67108865|k|50331648),this.result.fg&67108864&&(_0&&!T0&&((this.result.bg&50331648)===0?k=this.result.fg&-134217728|z.background.rgba>>8&16777215&16777215|50331648:k=this.result.fg&-134217728|this.result.bg&67108863,T0=!0),!_0&&T0&&((this.result.fg&50331648)===0?H=this.result.bg&-67108864|z.foreground.rgba>>8&16777215&16777215|50331648:H=this.result.bg&-67108864|this.result.fg&67108863,_0=!0)),z=void 0,this.result.bg=_0?H:this.result.bg,this.result.fg=T0?k:this.result.fg,this.result.ext&=536870911,this.result.ext|=x0<<29&3758096384}};var Ke=.5,K0=Be||we?"bottom":"ideographic";var Pt=typeof OffscreenCanvas>"u"?void 0:(i,e)=>new OffscreenCanvas(i,e),Bt=(i,e)=>{let t=document.createElement("canvas");return t.width=i,t.height=e,t};function wt(i,e,t=Pt,r=Bt){return t?.(i,e)??r(i,e)}function qe(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=Ve[e];if(p){let c=Array.isArray(p)?p:[p];for(let u of c)Ht(i,u,t,r,s,a,o,n,L,T,h,d,_);return!0}return!1}function Ht(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=s,c=a,u=t,C=r;switch(e.scaleType===1&&(p=o,c=n,u=t+(s-o)/2,C=r+(a-n)/2),e.clipPath&&(i.save(),Kt(i,e.clipPath,u,C,p,c)),e.type){case 0:kt(i,e.data,u,C,p,c);break;case 1:$t(i,e.data,u,C,p,c,_);break;case 2:Gt(i,e.data,u,C,p,c,T,h,e.strokeWidth);break;case 3:Ut(i,e.data,u,C,p,c,T,e.strokeWidth);break;case 4:Vt(i,e.data,u,C,p,c,T,d);break;case 5:zt(i,e.data,u,C,p,c,L,T,h);break;case 6:Zt(i,e.data,u,C,p,c);break}e.clipPath&&i.restore()}function kt(i,e,t,r,s,a){for(let o=0;o{let F=parseFloat(m);return R%2===0?t+F*s:r+F*a});if(u==="M")i.moveTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="L")i.lineTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="Q")i.quadraticCurveTo(Q[0],Q[1],Q[2],Q[3]),d=Q[0],_=Q[1],T=Q[2],h=Q[3];else if(u==="T"){let m,R;p==="Q"||p==="T"?(m=2*T-d,R=2*h-_):(m=T,R=h),i.quadraticCurveTo(m,R,Q[0],Q[1]),d=m,_=R,T=Q[0],h=Q[1]}else u==="C"&&(i.bezierCurveTo(Q[0],Q[1],Q[2],Q[3],Q[4],Q[5]),d=Q[2],_=Q[3],T=Q[4],h=Q[5]);p=u}n!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*n,i.stroke()):i.fill()}function Wt(i,e,t,r,s,a,o,n,L,T){if(r===0||s===0){i.lineTo(L,T);return}r=Math.abs(r),s=Math.abs(s);let h=Math.cos(a),d=Math.sin(a),_=(e-L)/2,p=(t-T)/2,c=h*_+d*p,u=-d*_+h*p,C=r*r,Q=s*s,m=c*c,R=u*u,F=m/C+R/Q;if(F>1){let I=Math.sqrt(F);r*=I,s*=I,C=r*r,Q=s*s}let E=(C*Q-C*R-Q*m)/(C*R+Q*m);E<0&&(E=0);let y=(o===n?-1:1)*Math.sqrt(E),Y=y*(r*u/s),X=y*-(s*c/r),M0=h*Y-d*X+(e+L)/2,t0=d*Y+h*X+(t+T)/2,L0=(c-Y)/r,M=(u-X)/s,n0=(-c-Y)/r,a0=(-u-X)/s,$=Math.atan2(M,L0),q=Math.atan2(a0,n0)-$;n===0&&q>0?q-=2*Math.PI:n===1&&q<0&&(q+=2*Math.PI);let A0=$+q;i.ellipse(M0,t0,r,s,a,$,A0,n===0)}function Vt(i,e,t,r,s,a,o,n){i.save(),i.fillRect(t,r,s,a),n&&(i.fillStyle=n,i.strokeStyle=n),i.lineWidth=o,i.lineCap="square",i.beginPath();for(let L of e.d.split(" ")){let T=L[0],h=L.substring(1).split(",");if(!h[0]||!h[1]){T==="Z"&&i.closePath();continue}let d=h.map((_,p)=>{let c=parseFloat(_);return p%2===0?t+c*s:r+c*a});T==="M"?i.moveTo(d[0],d[1]):T==="L"&&i.lineTo(d[0],d[1])}e.type===1?i.stroke():i.fill(),i.restore()}var Xe=new Map;function $t(i,e,t,r,s,a,o=0){let n=Xe.get(e);n||(n=new Map,Xe.set(e,n));let L=i.fillStyle;if(typeof L!="string")throw new Error(`Unexpected fillStyle type "${L}"`);let T=n.get(L);if(!T){let _=e[0].length,p=e.length,c=wt(_,p),u=A(c.getContext("2d")),C=new ImageData(_,p),Q,m,R,F;if(L.startsWith("#"))Q=parseInt(L.slice(1,3),16),m=parseInt(L.slice(3,5),16),R=parseInt(L.slice(5,7),16),F=L.length>7&&parseInt(L.slice(7,9),16)||1;else if(L.startsWith("rgba"))[Q,m,R,F]=L.substring(5,L.length-1).split(",").map(E=>parseFloat(E));else throw new Error(`Unexpected fillStyle color format "${L}" when drawing pattern glyph`);for(let E=0;E>1&1,d=o&1;h!==0||d!==0?T.setTransform(new DOMMatrix().translateSelf(-h,-d)):T.setTransform(new DOMMatrix),i.fillStyle=T,i.fillRect(t,r,s,a)}function Gt(i,e,t,r,s,a,o,n,L){i.save(),i.beginPath(),i.rect(t,r,s,a),i.clip(),i.beginPath();let T;if(typeof e=="function"){let _=.15/a*s;T=e(.15,_)}else T=e;let h={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let d of T.split(" ")){let _=d[0];if(_==="Z"){i.closePath(),h.lastCommand=_;continue}let p=je[_];if(!p){n.error(`Could not find drawing instructions for "${_}"`);continue}let c=d.substring(1).split(",");!c[0]||!c[1]||(p(i,Je(c,s,a,t,r,!0,o,0,0,!1),h),h.lastCommand=_)}L!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*L,i.stroke()):i.fill(),i.closePath(),i.restore()}function Kt(i,e,t,r,s,a){i.beginPath();for(let o of e.split(" ")){let n=o[0];if(n==="Z"){i.closePath();continue}let L=o.substring(1).split(",");if(!L[0]||!L[1])continue;let T=t+parseFloat(L[0])*s,h=r+parseFloat(L[1])*a;n==="M"?i.moveTo(T,h):n==="L"&&i.lineTo(T,h)}i.clip()}function zt(i,e,t,r,s,a,o,n,L){let T=new Path2D;T.rect(t,r,s,a),i.clip(T),i.beginPath();let h=o/12;i.lineWidth=n*h;let d={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let _ of e.d.split(" ")){let p=_[0];if(p==="Z"){i.closePath(),d.lastCommand=p;continue}let c=je[p];if(!c){L.error(`Could not find drawing instructions for "${p}"`);continue}let u=_.substring(1).split(",");!u[0]||!u[1]||(c(i,Je(u,s,a,t,r,!1,n,(e.leftPadding??0)*(h/2),(e.rightPadding??0)*(h/2)),d),d.lastCommand=p)}e.type===1?(i.strokeStyle=i.fillStyle,i.stroke()):i.fill(),i.closePath()}function Ye(i,e,t=0){return Math.max(Math.min(i,e),t)}var je={C:(i,e,t)=>{i.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),t.lastControlX=e[2],t.lastControlY=e[3],t.currentX=e[4],t.currentY=e[5]},L:(i,e,t)=>{i.lineTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},M:(i,e,t)=>{i.moveTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},Q:(i,e,t)=>{i.quadraticCurveTo(e[0],e[1],e[2],e[3]),t.lastControlX=e[0],t.lastControlY=e[1],t.currentX=e[2],t.currentY=e[3]},T:(i,e,t)=>{let r,s;t.lastCommand==="Q"||t.lastCommand==="T"?(r=2*t.currentX-t.lastControlX,s=2*t.currentY-t.lastControlY):(r=t.currentX,s=t.currentY),i.quadraticCurveTo(r,s,e[0],e[1]),t.lastControlX=r,t.lastControlY=s,t.currentX=e[0],t.currentY=e[1]}};function Je(i,e,t,r,s,a,o,n=0,L=0,T=!0){let h=i.map(d=>parseFloat(d)||parseInt(d));if(h.length<2)throw new Error("Too few arguments for instruction");for(let d=0;da){s-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),this._start();return}s=a}this.clear()}},Ce=class extends X0{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){let t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}},Qe=class extends X0{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}},et="requestIdleCallback"in globalThis?Qe:Ce;var s0=class i{constructor(){this.fg=0;this.bg=0;this.extended=new P0}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},P0=class i{constructor(e=0,t=0){this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new i(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.payload===void 0}};var U=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(e,t,r)=>{if(this._disposed)return g(()=>{});let s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);let a=g(()=>{let o=this._listeners.indexOf(s);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return r&&(Array.isArray(r)?r.push(a):r.add(a)),a},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let r=0,s=t.length;r{function i(a,o){return a(n=>o.fire(n))}s.forward=i;function e(a,o){return(n,L,T)=>a(h=>n.call(L,o(h)),void 0,T)}s.map=e;function t(...a){return(o,n,L)=>{let T=new R0;for(let h of a)T.add(h(d=>o.call(n,d)));return L&&(Array.isArray(L)?L.push(T):L.add(T)),T}}s.any=t;function r(a,o,n){return o(n),a(L=>o(L))}s.runAndSubscribe=r})(c0||={});var tt={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}},B0=2;var w0,J=class i{constructor(e,t,r,s){this._document=e;this._config=t;this._unicodeService=r;this._logService=s;this._didWarmUp=!1;this._cacheMap=new D0;this._cacheMapCombined=new D0;this._pages=[];this._activePages=[];this._workBoundingBox={top:0,left:0,bottom:0,right:0};this._workAttributeData=new s0;this._textureSize=512;this._onAddTextureAtlasCanvas=new U;this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event;this._onRemoveTextureAtlasCanvas=new U;this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event;this._pageLayoutVersion=0;this._createNewPage(),this._tmpCanvas=it(e,this._config.deviceCellWidth*4+B0*2,this._config.deviceCellHeight+B0*2),this._tmpCtx=A(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}get pages(){return this._pages}dispose(){this._tmpCanvas.remove();for(let e of this.pages)e.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){let e=new et(this._logService);for(let t=33;t<126;t++)e.enqueue(()=>{if(!this._cacheMap.get(t,0,0,0)){let r=this._drawToCache(t,0,0,0,!1,void 0);this._cacheMap.set(t,0,0,0,r)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){if(!(this._pages[0].currentRow.x===0&&this._pages[0].currentRow.y===0)){for(let e of this._pages)e.clear();this._cacheMap.clear(),this._cacheMapCombined.clear(),this._didWarmUp=!1,this._pageLayoutVersion++}}_createNewPage(){if(i.maxAtlasPages&&this._pages.length>=Math.max(4,i.maxAtlasPages)){let t=this._pages.filter(T=>T.canvas.width*2<=(i.maxTextureSize||4096)).sort((T,h)=>h.canvas.width!==T.canvas.width?h.canvas.width-T.canvas.width:h.percentageUsed-T.percentageUsed),r=-1,s=0;for(let T=0;TT.canvas.width!==a[0].canvas.width)){this._evictAllPages();let T=new u0(this._document,this._textureSize);return this._pages.push(T),this._activePages.push(T),this._onAddTextureAtlasCanvas.fire(T.canvas),T}let o=a.map(T=>T.glyphs[0].texturePage).sort((T,h)=>T-h),n=this.pages.length-a.length,L=this._mergePages(a,n);L.version=++u0.nextVersion;for(let T=o.length-1;T>=0;T--)this._deletePage(o[T]);this.pages.push(L),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(L.canvas)}let e=new u0(this._document,this._textureSize);return this._pages.push(e),this._activePages.push(e),this._onAddTextureAtlasCanvas.fire(e.canvas),e}_mergePages(e,t){let r=e[0].canvas.width*2,s=new u0(this._document,r,e);for(let[a,o]of e.entries()){let n=a*o.canvas.width%r,L=Math.floor(a/2)*o.canvas.height;s.ctx.drawImage(o.canvas,n,L);for(let h of o.glyphs)h.texturePage=t,h.sizeClipSpace.x=h.size.x/r,h.sizeClipSpace.y=h.size.y/r,h.texturePosition.x+=n,h.texturePosition.y+=L,h.texturePositionClipSpace.x=h.texturePosition.x/r,h.texturePositionClipSpace.y=h.texturePosition.y/r;this._onRemoveTextureAtlasCanvas.fire(o.canvas);let T=this._activePages.indexOf(o);T!==-1&&this._activePages.splice(T,1)}return s}_deletePage(e){this._pages.splice(e,1);for(let t=e;t=this._config.colors.ansi.length)throw new Error("No color found for idx "+e);return this._config.colors.ansi[e]}_getBackgroundColor(e,t,r,s){if(this._config.allowTransparency)return K;let a;switch(e){case 16777216:case 33554432:a=this._getColorFromAnsiIndex(t);break;case 50331648:let o=s0.toColorRGB(t);a=Z.toColor(o[0],o[1],o[2]);break;case 0:default:r?a=I0.opaque(this._config.colors.foreground):a=this._config.colors.background;break}return this._config.allowTransparency||(a=I0.opaque(a)),a}_getForegroundColor(e,t,r,s,a,o,n,L,T,h){let d=this._getMinimumContrastColor(e,t,r,s,a,o,n,T,L,h);if(d)return d;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&T&&o<8&&(o+=8),_=this._getColorFromAnsiIndex(o);break;case 50331648:let p=s0.toColorRGB(o);_=Z.toColor(p[0],p[1],p[2]);break;case 0:default:n?_=this._config.colors.background:_=this._config.colors.foreground}return this._config.allowTransparency&&(_=I0.opaque(_)),L&&(_=I0.multiplyOpacity(_,Ke)),_}_resolveBackgroundRgba(e,t,r){switch(e){case 16777216:case 33554432:return this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(e,t,r,s){switch(e){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&t<8&&(t+=8),this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(e,t,r,s,a,o,n,L,T,h){if(this._config.minimumContrastRatio===1||h)return;let d=this._getContrastCache(T),_=d.getColor(e,s);if(_!==void 0)return _??void 0;let p=this._resolveBackgroundRgba(t,r,n),c=this._resolveForegroundRgba(a,o,n,L),u=d0.ensureContrastRatio(p,c,this._config.minimumContrastRatio/(T?2:1));if(!u){d.setColor(e,s,null);return}let C=Z.toColor(u>>24&255,u>>16&255,u>>8&255);return d.setColor(e,s,C),C}_getContrastCache(e){return e?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_drawToCache(e,t,r,s,a,o){let n=typeof e=="number"?String.fromCharCode(e):e;o&&this._tmpCanvas.parentElement!==o&&(this._tmpCanvas.style.display="none",o.append(this._tmpCanvas));let L=Math.min(this._config.deviceCellWidth*Math.max(n.length,2)+B0*2,this._config.deviceMaxTextureSize);this._tmpCanvas.width=b?b*2-f0:b-f0;!(f0>=b)===!1||Z0===0?(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j+Z0,G),this._tmpCtx.lineTo(Q0,G)):(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(j+Z0,G),this._tmpCtx.moveTo(j+Z0+b,G),this._tmpCtx.lineTo(Q0,G)),f0=We(Q0-j,b,f0);break;case 5:let vt=.6,Ot=.3,de=Q0-j,Se=Math.floor(vt*de),Re=Math.floor(Ot*de),It=de-Se-Re;this._tmpCtx.setLineDash([Se,Re,It]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break;case 1:default:this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break}y0||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!n0&&this._config.fontSize>=12&&!this._config.allowTransparency&&n!==" "){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";let r0=this._tmpCtx.measureText(n);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in r0&&r0.actualBoundingBoxDescent>0){this._tmpCtx.save();let y0=new Path2D;y0.rect(i0,C0-Math.ceil(b/2),this._config.deviceCellWidth*$,v0-C0+Math.ceil(b/2)),this._tmpCtx.clip(y0),this._tmpCtx.lineWidth=this._config.devicePixelRatio*3,this._tmpCtx.strokeStyle=y.css,this._tmpCtx.strokeText(n,M,M+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(Q){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),D=b%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+D),this._tmpCtx.stroke()}if(n0||this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight),n==="_"&&!this._config.allowTransparency){let b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0);if(b)for(let D=1;D<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=y.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight-D),b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0),!!b);D++);}if(C){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),D=this._tmpCtx.lineWidth%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.stroke()}this._tmpCtx.restore();let q=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height),A0;if(this._config.allowTransparency?A0=Xt(q):A0=fe(q,y,L0,a0),A0)return tt;let I=this._findGlyphBoundingBox(q,this._workBoundingBox,L,t0,n0,M),O,v;for(;;){if(this._activePages.length===0){let b=this._createNewPage();O=b,v=b.currentRow,v.height=I.size.y;break}O=this._activePages[this._activePages.length-1],v=O.currentRow;for(let b of this._activePages)I.size.y<=b.currentRow.height&&(O=b,v=b.currentRow);for(let b=this._activePages.length-1;b>=0;b--)for(let D of this._activePages[b].fixedRows)D.height<=v.height&&I.size.y<=D.height&&(O=this._activePages[b],v=D);if(I.size.x>this._textureSize){this._overflowSizePage||(i.maxAtlasPages&&this._pages.length>=i.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new u0(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),O=this._overflowSizePage,v=this._overflowSizePage.currentRow,v.x+I.size.x>=O.canvas.width&&(v.x=0,v.y+=v.height,v.height=0);break}if(v.y+I.size.y>=O.canvas.height||v.height>I.size.y+2){let b=!1;if(O.currentRow.y+O.currentRow.height+I.size.y>=O.canvas.height){let D;for(let i0 of this._activePages)if(i0.currentRow.y+i0.currentRow.height+I.size.y=i.maxAtlasPages&&v.y+I.size.y<=O.canvas.height&&v.height>=I.size.y&&v.x+I.size.x<=O.canvas.width)b=!0;else{let i0=this._createNewPage();O=i0,v=i0.currentRow,v.height=I.size.y,b=!0}}b||(O.currentRow.height>0&&O.fixedRows.push(O.currentRow),v={x:0,y:O.currentRow.y+O.currentRow.height,height:I.size.y},O.fixedRows.push(v),O.currentRow={x:0,y:v.y+v.height,height:0})}if(v.x+I.size.x<=O.canvas.width)break;v===O.currentRow?(v.x=0,v.y+=v.height,v.height=0):O.fixedRows.splice(O.fixedRows.indexOf(v),1)}return I.texturePage=this._pages.indexOf(O),I.texturePosition.x=v.x,I.texturePosition.y=v.y,I.texturePositionClipSpace.x=v.x/O.canvas.width,I.texturePositionClipSpace.y=v.y/O.canvas.height,I.sizeClipSpace.x/=O.canvas.width,I.sizeClipSpace.y/=O.canvas.height,v.height=Math.max(v.height,I.size.y),v.x+=I.size.x,O.ctx.putImageData(q,I.texturePosition.x-this._workBoundingBox.left,I.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,I.size.x,I.size.y),O.addGlyph(I),O.version=++u0.nextVersion,I}_findGlyphBoundingBox(e,t,r,s,a,o){t.top=0;let n=s?this._config.deviceCellHeight:this._tmpCanvas.height,L=s?this._config.deviceCellWidth:r,T=!1;for(let h=0;h=o;h--){for(let d=0;d=0;h--){for(let d=0;d>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=t.rgba>>>24,L=t.rgba>>>16&255,T=t.rgba>>>8&255,h=Math.floor((Math.abs(s-n)+Math.abs(a-L)+Math.abs(o-T))/12),d=!0;for(let _=0;_0)return!1;return!0}function it(i,e,t){let r=i.createElement("canvas");return r.width=e,r.height=t,r}function rt(i,e,t,r,s,a,o,n,L=!0){let T={foreground:a.foreground,background:a.background,cursor:K,cursorAccent:K,selectionForeground:K,selectionBackgroundTransparent:K,selectionBackgroundOpaque:K,selectionInactiveBackgroundTransparent:K,selectionInactiveBackgroundOpaque:K,overviewRulerBorder:K,scrollbarSliderBackground:K,scrollbarSliderHoverBackground:K,scrollbarSliderActiveBackground:K,ansi:a.ansi.slice(),contrastCache:a.contrastCache,halfContrastCache:a.halfContrastCache};return{customGlyphs:L,devicePixelRatio:o,deviceMaxTextureSize:n,letterSpacing:s.letterSpacing,lineHeight:s.lineHeight,deviceCellWidth:i,deviceCellHeight:e,deviceCharWidth:t,deviceCharHeight:r,fontFamily:s.fontFamily,fontSize:s.fontSize,fontWeight:s.fontWeight,fontWeightBold:s.fontWeightBold,allowTransparency:s.allowTransparency,drawBoldTextInBrightColors:s.drawBoldTextInBrightColors,minimumContrastRatio:s.minimumContrastRatio,colors:T}}function Ee(i,e){for(let t=0;t=0){if(Ee(u.config,h))return u.atlas;u.ownedBy.length===1?(u.atlas.dispose(),e0.splice(c,1)):u.ownedBy.splice(C,1);break}}for(let c=0;c{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(e=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0){this._restartInterval(t);return}}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);this._animationTimeRestarted=void 0,this._restartInterval(t);return}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},e)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}};function ve(i,e,t){let r=new e.ResizeObserver(s=>{let a=s.find(L=>L.target===i);if(!a)return;if(!("devicePixelContentBoxSize"in a)){r?.disconnect(),r=void 0;return}let o=a.devicePixelContentBoxSize[0].inlineSize,n=a.devicePixelContentBoxSize[0].blockSize;o>0&&n>0&&t(o,n)});try{r.observe(i,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return g(()=>r?.disconnect())}function nt(i){return i>65535?(i-=65536,String.fromCharCode((i>>10)+55296)+String.fromCharCode(i%1024+56320)):String.fromCharCode(i)}var j0=class i extends s0{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new P0;this.combinedData=""}static fromCharData(t){let r=new i;return r.setFromCharData(t),r}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?nt(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(t){this.fg=t[0],this.bg=0;let r=!1;if(t[1].length>2)r=!0;else if(t[1].length===2){let s=t[1].charCodeAt(0);if(55296<=s&&s<=56319){let a=t[1].charCodeAt(1);56320<=a&&a<=57343?this.content=(s-55296)*1024+a-56320+65536|t[2]<<22:r=!0}else r=!0}else this.content=t[1].charCodeAt(0)|t[2]<<22;r&&(this.combinedData=t[1],this.content=2097152|t[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor()||this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor()||this.isInverse()!==t.isInverse()||this.isBold()!==t.isBold()||this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;let r=this.isUnderlineColorDefault(),s=t.isUnderlineColorDefault();if(!(r&&s)&&(r!==s||this.getUnderlineColor()!==t.getUnderlineColor()||this.getUnderlineColorMode()!==t.getUnderlineColorMode()))return!1}return!(this.isOverline()!==t.isOverline()||this.isBlink()!==t.isBlink()||this.isInvisible()!==t.isInvisible()||this.isItalic()!==t.isItalic()||this.isDim()!==t.isDim()||this.isStrikethrough()!==t.isStrikethrough())}};var J0=class extends W{constructor(t,r,s){super();this._renderCallback=t;this._coreBrowserService=r;this._optionsService=s;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",a=>{this.setIntervalDuration(a)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(g(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let r=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),r||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var te=new Float32Array([2,0,0,0,0,-2,0,0,0,0,1,0,-1,1,0,1]);function ie(i,e,t,r){let s=A(i.createProgram());if(i.attachShader(s,A(at(i,i.VERTEX_SHADER,e,r))),i.attachShader(s,A(at(i,i.FRAGMENT_SHADER,t,r))),i.linkProgram(s),i.getProgramParameter(s,i.LINK_STATUS))return s;r.error(i.getProgramInfoLog(s)),i.deleteProgram(s)}function at(i,e,t,r){let s=A(i.createShader(e));if(i.shaderSource(s,t),i.compileShader(s),i.getShaderParameter(s,i.COMPILE_STATUS))return s;r.error(i.getShaderInfoLog(s)),i.deleteShader(s)}function ot(i,e){let t=Math.min(i.length*2,e),r=new Float32Array(t);for(let s=0;sFt(i))}var R0=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(let e of this._disposables)e.dispose();this._disposables.clear()}},W=class{constructor(){this._store=new R0}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}};W.None=Object.freeze({dispose(){}});var m0=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Pe=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),O0=Pe?"node":navigator.userAgent,ce=Pe?"node":navigator.platform,Be=O0.includes("Firefox"),T1=O0.includes("Chrome"),we=O0.includes("Edge"),ue=/^((?!chrome|android).)*safari/i.test(O0);function He(){if(!ue)return 0;let i=O0.match(/Version\/(\d+)/);return i===null||i.length<2?0:parseInt(i[1],10)}var l1=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(ce),L1=["Windows","Win16","Win32","WinCE"].includes(ce),h1=ce.indexOf("Linux")>=0,d1=/\bCrOS\b/.test(O0);var P=0,B=0,w=0,x=0,K={css:"#00000000",rgba:0},Z;(r=>{function i(s,a,o,n){return n!==void 0?`#${E0(s)}${E0(a)}${E0(o)}${E0(n)}`:`#${E0(s)}${E0(a)}${E0(o)}`}r.toCss=i;function e(s,a,o,n=255){return(s<<24|a<<16|o<<8|n)>>>0}r.toRgba=e;function t(s,a,o,n){return{css:r.toCss(s,a,o,n),rgba:r.toRgba(s,a,o,n)}}r.toColor=t})(Z||={});var I0;(n=>{function i(L,T){if(x=(T.rgba&255)/255,x===1)return{css:T.css,rgba:T.rgba};let h=T.rgba>>24&255,d=T.rgba>>16&255,_=T.rgba>>8&255,p=L.rgba>>24&255,c=L.rgba>>16&255,u=L.rgba>>8&255;P=p+Math.round((h-p)*x),B=c+Math.round((d-c)*x),w=u+Math.round((_-u)*x);let C=Z.toCss(P,B,w),Q=Z.toRgba(P,B,w);return{css:C,rgba:Q}}n.blend=i;function e(L){return(L.rgba&255)===255}n.isOpaque=e;function t(L,T,h){let d=d0.ensureContrastRatio(L.rgba,T.rgba,h);if(d)return Z.toColor(d>>24&255,d>>16&255,d>>8&255)}n.ensureContrastRatio=t;function r(L){let T=(L.rgba|255)>>>0;return[P,B,w]=d0.toChannels(T),{css:Z.toCss(P,B,w),rgba:T}}n.opaque=r;function s(L,T){return x=Math.round(T*255),[P,B,w]=d0.toChannels(L.rgba),{css:Z.toCss(P,B,w,x),rgba:Z.toRgba(P,B,w,x)}}n.opacity=s;function a(L,T){return x=L.rgba&255,s(L,x*T/255)}n.multiplyOpacity=a;function o(L){return[L.rgba>>24&255,L.rgba>>16&255,L.rgba>>8&255]}n.toColorRGB=o})(I0||={});var gt;(r=>{let i,e;try{let s=document.createElement("canvas");s.width=1,s.height=1;let a=s.getContext("2d",{willReadFrequently:!0});a&&(i=a,i.globalCompositeOperation="copy",e=i.createLinearGradient(0,0,1,1))}catch{}function t(s){if(s.match(/#[\da-f]{3,8}/i))switch(s.length){case 4:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),Z.toColor(P,B,w);case 5:return P=parseInt(s.slice(1,2).repeat(2),16),B=parseInt(s.slice(2,3).repeat(2),16),w=parseInt(s.slice(3,4).repeat(2),16),x=parseInt(s.slice(4,5).repeat(2),16),Z.toColor(P,B,w,x);case 7:return{css:s,rgba:(parseInt(s.slice(1),16)<<8|255)>>>0};case 9:return{css:s,rgba:parseInt(s.slice(1),16)>>>0}}let a=s.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(a)return P=parseInt(a[1],10),B=parseInt(a[2],10),w=parseInt(a[3],10),x=Math.round((a[5]===void 0?1:parseFloat(a[5]))*255),Z.toColor(P,B,w,x);if(s==="transparent")return{css:"transparent",rgba:0};if(!i||!e)throw new Error("css.toColor: Unsupported css format");if(i.fillStyle=e,i.fillStyle=s,typeof i.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(i.fillRect(0,0,1,1),[P,B,w,x]=i.getImageData(0,0,1,1).data,x!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:Z.toRgba(P,B,w,x),css:s}}r.toColor=t})(gt||={});var V;(t=>{function i(r){return e(r>>16&255,r>>8&255,r&255)}t.relativeLuminance=i;function e(r,s,a){let o=r/255,n=s/255,L=a/255,T=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),h=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4),d=L<=.03928?L/12.92:Math.pow((L+.055)/1.055,2.4);return T*.2126+h*.7152+d*.0722}t.relativeLuminance2=e})(V||={});var d0;(a=>{function i(o,n){if(x=(n&255)/255,x===1)return n;let L=n>>24&255,T=n>>16&255,h=n>>8&255,d=o>>24&255,_=o>>16&255,p=o>>8&255;return P=d+Math.round((L-d)*x),B=_+Math.round((T-_)*x),w=p+Math.round((h-p)*x),Z.toRgba(P,B,w)}a.blend=i;function e(o,n,L){let T=V.relativeLuminance(o>>8),h=V.relativeLuminance(n>>8);if(h0(T,h)>8));if(u>8));return u>Q?c:C}return c}let _=r(o,n,L),p=h0(T,V.relativeLuminance(_>>8));if(p>8));return p>u?_:c}return _}}a.ensureContrastRatio=e;function t(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u0||p>0||c>0);)_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),c-=Math.max(0,Math.ceil(c*.1)),u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));return(_<<24|p<<16|c<<8|255)>>>0}a.reduceLuminance=t;function r(o,n,L){let T=o>>24&255,h=o>>16&255,d=o>>8&255,_=n>>24&255,p=n>>16&255,c=n>>8&255,u=h0(V.relativeLuminance2(_,p,c),V.relativeLuminance2(T,h,d));for(;u>>0}a.increaseLuminance=r;function s(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}a.toChannels=s})(d0||={});function E0(i){let e=i.toString(16);return e.length<2?"0"+e:e}function h0(i,e){return i=128512&&i<=128591||i>=127744&&i<=128511||i>=128640&&i<=128767||i>=9728&&i<=9983||i>=9984&&i<=10175||i>=65024&&i<=65039||i>=129280&&i<=129535||i>=127462&&i<=127487}function Ze(i,e,t,r){return e===1&&t>Math.ceil(r*1.5)&&i!==void 0&&i>255&&!yt(i)&&!W0(i)&&!Mt(i)}function V0(i){return W0(i)||At(i)}function Ue(){return{css:{canvas:U0(),cell:U0()},device:{canvas:U0(),cell:U0(),char:{width:0,height:0,left:0,top:0}}}}function U0(){return{width:0,height:0}}function We(i,e,t=0){return(i-(Math.round(e)*2-t))%(Math.round(e)*2)}var l;(C=>(C.LINE_H=Object.freeze({type:2,data:"M0,.5 L1,.5",strokeWidth:1}),C.LINE_V=Object.freeze({type:2,data:"M.5,0 L.5,1",strokeWidth:1}),C.FADE_RIGHT=Object.freeze({type:2,data:"M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5",strokeWidth:1}),C.FADE_LEFT=Object.freeze({type:2,data:"M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5",strokeWidth:1}),C.FADE_DOWN=Object.freeze({type:2,data:"M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90",strokeWidth:1}),C.FADE_UP=Object.freeze({type:2,data:"M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1",strokeWidth:1}),C.CURVE_DOWN_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_DOWN_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,1 L.5,${.5+m/.15*.5} C.5,${.5+m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.CURVE_UP_RIGHT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,1,.5`,strokeWidth:1}),C.CURVE_UP_LEFT=Object.freeze({type:2,data:(Q,m)=>`M.5,0 L.5,${.5-m/.15*.5} C.5,${.5-m/.15*.5},.5,.5,0,.5`,strokeWidth:1}),C.NODE_FILL=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5"}),C.NODE_STROKE=Object.freeze({type:3,data:"M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5",strokeWidth:1}),C.NODE_LINE_RIGHT=Object.freeze({type:3,data:"M1,.5 L.85,.5",strokeWidth:1}),C.NODE_LINE_LEFT=Object.freeze({type:3,data:"M0,.5 L.15,.5",strokeWidth:1}),C.NODE_LINE_DOWN=Object.freeze({type:3,data:"M.5,1 L.5,.7",strokeWidth:1}),C.NODE_LINE_UP=Object.freeze({type:3,data:"M.5,0 L.5,.3",strokeWidth:1})))(l||={});var Ve={"\u2500":{type:2,data:"M0,.5 L1,.5",strokeWidth:1},"\u2501":{type:2,data:"M0,.5 L1,.5",strokeWidth:3},"\u2502":{type:2,data:"M.5,0 L.5,1",strokeWidth:1},"\u2503":{type:2,data:"M.5,0 L.5,1",strokeWidth:3},"\u2504":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:1},"\u2505":{type:2,data:"M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",strokeWidth:3},"\u2506":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:1},"\u2507":{type:2,data:"M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",strokeWidth:3},"\u2508":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:1},"\u2509":{type:2,data:"M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",strokeWidth:3},"\u250A":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:1},"\u250B":{type:2,data:"M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",strokeWidth:3},"\u250C":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},"\u250D":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u250E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u250F":{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3},"\u2510":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},"\u2511":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2512":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2513":{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3},"\u2514":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},"\u2515":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2516":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2517":{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3},"\u2518":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},"\u2519":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u251A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251B":{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3},"\u251C":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},"\u251D":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u251E":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u251F":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2520":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2521":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2522":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2523":{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3},"\u2524":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},"\u2525":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2526":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2527":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2528":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2529":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u252A":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u252B":{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3},"\u252C":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},"\u252D":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u252E":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u252F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2530":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2531":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2532":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2533":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3},"\u2534":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:1},"\u2535":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u2536":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u2537":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2538":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2539":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u253A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u253B":{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,0",strokeWidth:3},"\u253C":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:1},"\u253D":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u253E":[{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u253F":[{type:2,data:"M.5,0 L.5,1",strokeWidth:1},{type:2,data:"M0,.5 L1,.5",strokeWidth:3}],"\u2540":[{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2541":[{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u2542":[{type:2,data:"M0,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1",strokeWidth:3}],"\u2543":[{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:3}],"\u2544":[{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:3}],"\u2545":[{type:2,data:"M.5,0 L.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M0,.5 L.5,.5 L.5,1",strokeWidth:3}],"\u2546":[{type:2,data:"M.5,0 L.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M0.5,1 L.5,.5 L1,.5",strokeWidth:3}],"\u2547":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0 M0,.5 L1,.5",strokeWidth:3}],"\u2548":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M0,.5 L1,.5 M.5,.5 L.5,1",strokeWidth:3}],"\u2549":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L0,.5",strokeWidth:3}],"\u254A":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,0 L.5,1 M.5,.5 L1,.5",strokeWidth:3}],"\u254B":{type:2,data:"M0,.5 L1,.5 M.5,0 L.5,1",strokeWidth:3},"\u254C":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:1},"\u254D":{type:2,data:"M.1,.5 L.4,.5 M.6,.5 L.9,.5",strokeWidth:3},"\u254E":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:1},"\u254F":{type:2,data:"M.5,.1 L.5,.4 M.5,.6 L.5,.9",strokeWidth:3},"\u2550":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2551":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2552":{type:2,data:(i,e)=>`M.5,1 L.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2553":{type:2,data:(i,e)=>`M${.5-i},1 L${.5-i},.5 L1,.5 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2554":{type:2,data:(i,e)=>`M1,${.5-e} L${.5-i},${.5-e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2555":{type:2,data:(i,e)=>`M0,${.5-e} L.5,${.5-e} L.5,1 M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2556":{type:2,data:(i,e)=>`M${.5+i},1 L${.5+i},.5 L0,.5 M${.5-i},.5 L${.5-i},1`,strokeWidth:1},"\u2557":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5+i},${.5-e} L${.5+i},1`,strokeWidth:1},"\u2558":{type:2,data:(i,e)=>`M.5,0 L.5,${.5+e} L1,${.5+e} M.5,${.5-e} L1,${.5-e}`,strokeWidth:1},"\u2559":{type:2,data:(i,e)=>`M1,.5 L${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u255A":{type:2,data:(i,e)=>`M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0 M1,${.5+e} L${.5-i},${.5+e} L${.5-i},0`,strokeWidth:1},"\u255B":{type:2,data:(i,e)=>`M0,${.5+e} L.5,${.5+e} L.5,0 M0,${.5-e} L.5,${.5-e}`,strokeWidth:1},"\u255C":{type:2,data:(i,e)=>`M0,.5 L${.5+i},.5 L${.5+i},0 M${.5-i},.5 L${.5-i},0`,strokeWidth:1},"\u255D":{type:2,data:(i,e)=>`M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M0,${.5+e} L${.5+i},${.5+e} L${.5+i},0`,strokeWidth:1},"\u255E":{type:2,data:(i,e)=>`M.5,0 L.5,1 M.5,${.5-e} L1,${.5-e} M.5,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u255F":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1 M${.5+i},.5 L1,.5`,strokeWidth:1},"\u2560":{type:2,data:(i,e)=>`M${.5-i},0 L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u2561":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L.5,${.5-e} M0,${.5+e} L.5,${.5+e}`,strokeWidth:1},"\u2562":{type:2,data:(i,e)=>`M0,.5 L${.5-i},.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u2563":{type:2,data:(i,e)=>`M${.5+i},0 L${.5+i},1 M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0`,strokeWidth:1},"\u2564":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e} M.5,${.5+e} L.5,1`,strokeWidth:1},"\u2565":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},1 M${.5+i},.5 L${.5+i},1`,strokeWidth:1},"\u2566":{type:2,data:(i,e)=>`M0,${.5-e} L1,${.5-e} M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1`,strokeWidth:1},"\u2567":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e} M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u2568":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},.5 L${.5-i},0 M${.5+i},.5 L${.5+i},0`,strokeWidth:1},"\u2569":{type:2,data:(i,e)=>`M0,${.5+e} L1,${.5+e} M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256A":{type:2,data:(i,e)=>`M.5,0 L.5,1 M0,${.5-e} L1,${.5-e} M0,${.5+e} L1,${.5+e}`,strokeWidth:1},"\u256B":{type:2,data:(i,e)=>`M0,.5 L1,.5 M${.5-i},0 L${.5-i},1 M${.5+i},0 L${.5+i},1`,strokeWidth:1},"\u256C":{type:2,data:(i,e)=>`M0,${.5+e} L${.5-i},${.5+e} L${.5-i},1 M1,${.5+e} L${.5+i},${.5+e} L${.5+i},1 M0,${.5-e} L${.5-i},${.5-e} L${.5-i},0 M1,${.5-e} L${.5+i},${.5-e} L${.5+i},0`,strokeWidth:1},"\u256D":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u256E":{type:2,data:(i,e)=>`M.5,1 L.5,${.5+e/.15*.5} C.5,${.5+e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u256F":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,0,.5`,strokeWidth:1},"\u2570":{type:2,data:(i,e)=>`M.5,0 L.5,${.5-e/.15*.5} C.5,${.5-e/.15*.5},.5,.5,1,.5`,strokeWidth:1},"\u2571":{type:2,data:"M1,0 L0,1",strokeWidth:1},"\u2572":{type:2,data:"M0,0 L1,1",strokeWidth:1},"\u2573":{type:2,data:"M1,0 L0,1 M0,0 L1,1",strokeWidth:1},"\u2574":{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},"\u2575":{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},"\u2576":{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},"\u2577":{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},"\u2578":{type:2,data:"M.5,.5 L0,.5",strokeWidth:3},"\u2579":{type:2,data:"M.5,.5 L.5,0",strokeWidth:3},"\u257A":{type:2,data:"M.5,.5 L1,.5",strokeWidth:3},"\u257B":{type:2,data:"M.5,.5 L.5,1",strokeWidth:3},"\u257C":[{type:2,data:"M.5,.5 L0,.5",strokeWidth:1},{type:2,data:"M.5,.5 L1,.5",strokeWidth:3}],"\u257D":[{type:2,data:"M.5,.5 L.5,0",strokeWidth:1},{type:2,data:"M.5,.5 L.5,1",strokeWidth:3}],"\u257E":[{type:2,data:"M.5,.5 L1,.5",strokeWidth:1},{type:2,data:"M.5,.5 L0,.5",strokeWidth:3}],"\u257F":[{type:2,data:"M.5,.5 L.5,1",strokeWidth:1},{type:2,data:"M.5,.5 L.5,0",strokeWidth:3}],"\u2580":{type:0,data:[{x:0,y:0,w:8,h:4}]},"\u2581":{type:0,data:[{x:0,y:7,w:8,h:1}]},"\u2582":{type:0,data:[{x:0,y:6,w:8,h:2}]},"\u2583":{type:0,data:[{x:0,y:5,w:8,h:3}]},"\u2584":{type:0,data:[{x:0,y:4,w:8,h:4}]},"\u2585":{type:0,data:[{x:0,y:3,w:8,h:5}]},"\u2586":{type:0,data:[{x:0,y:2,w:8,h:6}]},"\u2587":{type:0,data:[{x:0,y:1,w:8,h:7}]},"\u2588":{type:0,data:[{x:0,y:0,w:8,h:8}]},"\u2589":{type:0,data:[{x:0,y:0,w:7,h:8}]},"\u258A":{type:0,data:[{x:0,y:0,w:6,h:8}]},"\u258B":{type:0,data:[{x:0,y:0,w:5,h:8}]},"\u258C":{type:0,data:[{x:0,y:0,w:4,h:8}]},"\u258D":{type:0,data:[{x:0,y:0,w:3,h:8}]},"\u258E":{type:0,data:[{x:0,y:0,w:2,h:8}]},"\u258F":{type:0,data:[{x:0,y:0,w:1,h:8}]},"\u2590":{type:0,data:[{x:4,y:0,w:4,h:8}]},"\u2591":{type:1,data:[[1,0],[0,0]]},"\u2592":{type:1,data:[[1,0],[0,1]]},"\u2593":{type:1,data:[[1,1],[1,0]]},"\u2594":{type:0,data:[{x:0,y:0,w:8,h:1}]},"\u2595":{type:0,data:[{x:7,y:0,w:1,h:8}]},"\u2596":{type:0,data:[{x:0,y:4,w:4,h:4}]},"\u2597":{type:0,data:[{x:4,y:4,w:4,h:4}]},"\u2598":{type:0,data:[{x:0,y:0,w:4,h:4}]},"\u2599":{type:0,data:[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\u259A":{type:0,data:[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}]},"\u259B":{type:0,data:[{x:0,y:0,w:4,h:8},{x:4,y:0,w:4,h:4}]},"\u259C":{type:0,data:[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}]},"\u259D":{type:0,data:[{x:4,y:0,w:4,h:4}]},"\u259E":{type:0,data:[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}]},"\u259F":{type:0,data:[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}]},"\uE0A0":{type:5,data:{d:"M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655",type:0}},"\uE0A1":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0A2":{type:5,data:{d:"M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82",type:0}},"\uE0A3":{type:5,data:{d:"M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5",type:0}},"\uE0B0":{type:5,data:{d:"M0,0 L1,.5 L0,1",type:0,rightPadding:2}},"\uE0B1":{type:5,data:{d:"M-1,-.5 L1,.5 L-1,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B2":{type:5,data:{d:"M1,0 L0,.5 L1,1",type:0,leftPadding:2}},"\uE0B3":{type:5,data:{d:"M2,-.5 L0,.5 L2,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0B4":{type:5,data:{d:"M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0",type:0,rightPadding:1}},"\uE0B5":{type:5,data:{d:"M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0",type:1,rightPadding:1}},"\uE0B6":{type:5,data:{d:"M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0",type:0,leftPadding:1}},"\uE0B7":{type:5,data:{d:"M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0",type:1,leftPadding:1}},"\uE0B8":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L-.5,1.5",type:0}},"\uE0B9":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BA":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L1.5,1.5",type:0}},"\uE0BB":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BC":{type:5,data:{d:"M1.5,-.5 L-.5,1.5 L-.5,-.5",type:0}},"\uE0BD":{type:5,data:{d:"M1.5,-.5 L-.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0BE":{type:5,data:{d:"M-.5,-.5 L1.5,1.5 L1.5,-.5",type:0}},"\uE0BF":{type:5,data:{d:"M-.5,-.5 L1.5,1.5",type:1,leftPadding:1,rightPadding:1}},"\uE0C0":{type:5,data:{d:"M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z",type:0}},"\uE0C1":{type:5,data:{d:"M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z",type:0}},"\uE0C2":{type:5,data:{d:"M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z",type:0}},"\uE0C3":{type:5,data:{d:"M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z",type:0}},"\uE0C4":{type:5,data:{d:"M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z",type:0}},"\uE0C5":{type:5,data:{d:"M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z",type:0}},"\uE0C6":{type:5,data:{d:"M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z",type:0}},"\uE0C7":{type:5,data:{d:"M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z",type:0}},"\uE0C8":{type:5,data:{d:"M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z",type:0}},"\uE0CA":{type:5,data:{d:"M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z",type:0}},"\uE0CC":{type:5,data:{d:"M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z",type:0}},"\uE0CD":{type:5,data:{d:"M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z",type:0}},"\uE0CE":{type:5,data:{d:"M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z",type:0}},"\uE0CF":{type:5,data:{d:"M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z",type:0}},"\uE0D0":{type:5,data:{d:"M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z",type:0}},"\uE0D1":{type:5,data:{d:"M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z",type:0}},"\uE0D2":{type:5,data:{d:"M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z",type:0}},"\uE0D4":{type:5,data:{d:"M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z",type:0}},"\uEE00":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z"},"\uEE01":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z"},"\uEE02":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z"},"\uEE03":{type:3,data:"M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z"},"\uEE04":{type:3,data:"M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z"},"\uEE05":{type:3,data:"M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z"},"\uEE06":{type:5,data:{d:"M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z",type:0},scaleType:1},"\uEE07":{type:5,data:{d:"M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z",type:0},scaleType:1},"\uEE08":{type:5,data:{d:"M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE09":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0A":{type:5,data:{d:"M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z",type:0},scaleType:1},"\uEE0B":{type:5,data:{d:"M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z",type:0},scaleType:1},"\uF5D0":l.LINE_H,"\uF5D1":l.LINE_V,"\uF5D2":l.FADE_RIGHT,"\uF5D3":l.FADE_LEFT,"\uF5D4":l.FADE_DOWN,"\uF5D5":l.FADE_UP,"\uF5D6":l.CURVE_DOWN_RIGHT,"\uF5D7":l.CURVE_DOWN_LEFT,"\uF5D8":l.CURVE_UP_RIGHT,"\uF5D9":l.CURVE_UP_LEFT,"\uF5DA":[l.LINE_V,l.CURVE_UP_RIGHT],"\uF5DB":[l.LINE_V,l.CURVE_DOWN_RIGHT],"\uF5DC":[l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5DD":[l.LINE_V,l.CURVE_UP_LEFT],"\uF5DE":[l.LINE_V,l.CURVE_DOWN_LEFT],"\uF5DF":[l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E0":[l.LINE_H,l.CURVE_DOWN_LEFT],"\uF5E1":[l.LINE_H,l.CURVE_DOWN_RIGHT],"\uF5E2":[l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E3":[l.LINE_H,l.CURVE_UP_LEFT],"\uF5E4":[l.LINE_H,l.CURVE_UP_RIGHT],"\uF5E5":[l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E6":[l.LINE_V,l.CURVE_UP_LEFT,l.CURVE_UP_RIGHT],"\uF5E7":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_DOWN_RIGHT],"\uF5E8":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_LEFT],"\uF5E9":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_RIGHT],"\uF5EA":[l.LINE_V,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5EB":[l.LINE_V,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EC":[l.LINE_H,l.CURVE_DOWN_RIGHT,l.CURVE_UP_LEFT],"\uF5ED":[l.LINE_H,l.CURVE_DOWN_LEFT,l.CURVE_UP_RIGHT],"\uF5EE":[l.NODE_FILL,l.NODE_STROKE],"\uF5EF":l.NODE_STROKE,"\uF5F0":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F1":[l.NODE_STROKE,l.NODE_LINE_RIGHT],"\uF5F2":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F3":[l.NODE_STROKE,l.NODE_LINE_LEFT],"\uF5F4":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F5":[l.NODE_STROKE,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF5F6":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F7":[l.NODE_STROKE,l.NODE_LINE_DOWN],"\uF5F8":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP],"\uF5F9":[l.NODE_STROKE,l.NODE_LINE_UP],"\uF5FA":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FB":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_UP],"\uF5FC":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FD":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF5FE":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF5FF":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF600":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF601":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_RIGHT],"\uF602":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF603":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT],"\uF604":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF605":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_RIGHT],"\uF606":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF607":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT],"\uF608":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF609":[l.NODE_STROKE,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60A":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60B":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60C":[l.NODE_FILL,l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\uF60D":[l.NODE_STROKE,l.NODE_LINE_UP,l.NODE_LINE_DOWN,l.NODE_LINE_LEFT,l.NODE_LINE_RIGHT],"\u{1FB00}":f(1),"\u{1FB01}":f(2),"\u{1FB02}":f(3),"\u{1FB03}":f(4),"\u{1FB04}":f(5),"\u{1FB05}":f(6),"\u{1FB06}":f(7),"\u{1FB07}":f(8),"\u{1FB08}":f(9),"\u{1FB09}":f(10),"\u{1FB0A}":f(11),"\u{1FB0B}":f(12),"\u{1FB0C}":f(13),"\u{1FB0D}":f(14),"\u{1FB0E}":f(15),"\u{1FB0F}":f(16),"\u{1FB10}":f(17),"\u{1FB11}":f(18),"\u{1FB12}":f(19),"\u{1FB13}":f(20),"\u{1FB14}":f(22),"\u{1FB15}":f(23),"\u{1FB16}":f(24),"\u{1FB17}":f(25),"\u{1FB18}":f(26),"\u{1FB19}":f(27),"\u{1FB1A}":f(28),"\u{1FB1B}":f(29),"\u{1FB1C}":f(30),"\u{1FB1D}":f(31),"\u{1FB1E}":f(32),"\u{1FB1F}":f(33),"\u{1FB20}":f(34),"\u{1FB21}":f(35),"\u{1FB22}":f(36),"\u{1FB23}":f(37),"\u{1FB24}":f(38),"\u{1FB25}":f(39),"\u{1FB26}":f(40),"\u{1FB27}":f(41),"\u{1FB28}":f(43),"\u{1FB29}":f(44),"\u{1FB2A}":f(45),"\u{1FB2B}":f(46),"\u{1FB2C}":f(47),"\u{1FB2D}":f(48),"\u{1FB2E}":f(49),"\u{1FB2F}":f(50),"\u{1FB30}":f(51),"\u{1FB31}":f(52),"\u{1FB32}":f(53),"\u{1FB33}":f(54),"\u{1FB34}":f(55),"\u{1FB35}":f(56),"\u{1FB36}":f(57),"\u{1FB37}":f(58),"\u{1FB38}":f(59),"\u{1FB39}":f(60),"\u{1FB3A}":f(61),"\u{1FB3B}":f(62),"\u{1FB3C}":{type:3,data:"M0,0.6667 L0,1 L0.5,1 Z"},"\u{1FB3D}":{type:3,data:"M0,0.6667 L0,1 L1,1 Z"},"\u{1FB3E}":{type:3,data:"M0,0.3333 L0,1 L0.5,1 Z"},"\u{1FB3F}":{type:3,data:"M0,0.3333 L0,1 L1,1 Z"},"\u{1FB40}":{type:3,data:"M0,0 L0,1 L0.5,1 Z"},"\u{1FB41}":{type:3,data:"M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB42}":{type:3,data:"M0,0.3333 L1,0 L1,1 L0,1 Z"},"\u{1FB43}":{type:3,data:"M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z"},"\u{1FB44}":{type:3,data:"M0,0.6667 L1,0 L1,1 L0,1 Z"},"\u{1FB45}":{type:3,data:"M0,1 L0.5,0 L1,0 L1,1 Z"},"\u{1FB46}":{type:3,data:"M0,0.6667 L1,0.3333 L1,1 L0,1 Z"},"\u{1FB47}":{type:3,data:"M0.5,1 L1,0.6667 L1,1 Z"},"\u{1FB48}":{type:3,data:"M0,1 L1,0.6667 L1,1 Z"},"\u{1FB49}":{type:3,data:"M0.5,1 L1,0.3333 L1,1 Z"},"\u{1FB4A}":{type:3,data:"M0,1 L1,0.3333 L1,1 Z"},"\u{1FB4B}":{type:3,data:"M0.5,1 L1,0 L1,1 Z"},"\u{1FB4C}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4D}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.3333 Z"},"\u{1FB4E}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB4F}":{type:3,data:"M0,0 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB50}":{type:3,data:"M0.5,0 L0,0 L0,1 L1,1 Z"},"\u{1FB51}":{type:3,data:"M0,0.3333 L0,1 L1,1 L1,0.6667 Z"},"\u{1FB52}":{type:3,data:"M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB53}":{type:3,data:"M0,0.6667 L1,1 L1,0 L0,0 Z"},"\u{1FB54}":{type:3,data:"M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z"},"\u{1FB55}":{type:3,data:"M0,0.3333 L1,1 L1,0 L0,0 Z"},"\u{1FB56}":{type:3,data:"M0,0 L0.5,1 L1,1 L1,0 Z"},"\u{1FB57}":{type:3,data:"M0,0.3333 L0,0 L0.5,0 Z"},"\u{1FB58}":{type:3,data:"M0,0.3333 L0,0 L1,0 Z"},"\u{1FB59}":{type:3,data:"M0,0.6667 L0,0 L0.5,0 Z"},"\u{1FB5A}":{type:3,data:"M0,0.6667 L0,0 L1,0 Z"},"\u{1FB5B}":{type:3,data:"M0,1 L0,0 L0.5,0 Z"},"\u{1FB5C}":{type:3,data:"M0,0.6667 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB5D}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5E}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.6667 Z"},"\u{1FB5F}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB60}":{type:3,data:"M0,1 L0,0 L1,0 L1,0.3333 Z"},"\u{1FB61}":{type:3,data:"M0.5,1 L0,1 L0,0 L1,0 Z"},"\u{1FB62}":{type:3,data:"M0.5,0 L1,0 L1,0.3333 Z"},"\u{1FB63}":{type:3,data:"M0,0 L1,0 L1,0.3333 Z"},"\u{1FB64}":{type:3,data:"M0.5,0 L1,0 L1,0.6667 Z"},"\u{1FB65}":{type:3,data:"M0,0 L1,0 L1,0.6667 Z"},"\u{1FB66}":{type:3,data:"M0.5,0 L1,0 L1,1 Z"},"\u{1FB67}":{type:3,data:"M0,0.3333 L1,0.6667 L1,0 L0,0 Z"},"\u{1FB68}":{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z"},"\u{1FB69}":{type:3,data:"M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z"},"\u{1FB6A}":{type:3,data:"M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z"},"\u{1FB6B}":{type:3,data:"M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z"},"\u{1FB6C}":{type:3,data:"M0,0 L0.5,0.5 L0,1 Z"},"\u{1FB6D}":{type:3,data:"M0,0 L1,0 L0.5,0.5 Z"},"\u{1FB6E}":{type:3,data:"M1,0 L1,1 L0.5,0.5 Z"},"\u{1FB6F}":{type:3,data:"M0,1 L1,1 L0.5,0.5 Z"},"\u{1FB70}":{type:0,data:[{x:1,y:0,w:1,h:8}]},"\u{1FB71}":{type:0,data:[{x:2,y:0,w:1,h:8}]},"\u{1FB72}":{type:0,data:[{x:3,y:0,w:1,h:8}]},"\u{1FB73}":{type:0,data:[{x:4,y:0,w:1,h:8}]},"\u{1FB74}":{type:0,data:[{x:5,y:0,w:1,h:8}]},"\u{1FB75}":{type:0,data:[{x:6,y:0,w:1,h:8}]},"\u{1FB76}":{type:0,data:[{x:0,y:1,w:8,h:1}]},"\u{1FB77}":{type:0,data:[{x:0,y:2,w:8,h:1}]},"\u{1FB78}":{type:0,data:[{x:0,y:3,w:8,h:1}]},"\u{1FB79}":{type:0,data:[{x:0,y:4,w:8,h:1}]},"\u{1FB7A}":{type:0,data:[{x:0,y:5,w:8,h:1}]},"\u{1FB7B}":{type:0,data:[{x:0,y:6,w:8,h:1}]},"\u{1FB7C}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB7D}":{type:0,data:[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7E}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}]},"\u{1FB7F}":{type:0,data:[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}]},"\u{1FB80}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB81}":{type:0,data:[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}]},"\u{1FB82}":{type:0,data:[{x:0,y:0,w:8,h:2}]},"\u{1FB83}":{type:0,data:[{x:0,y:0,w:8,h:3}]},"\u{1FB84}":{type:0,data:[{x:0,y:0,w:8,h:5}]},"\u{1FB85}":{type:0,data:[{x:0,y:0,w:8,h:6}]},"\u{1FB86}":{type:0,data:[{x:0,y:0,w:8,h:7}]},"\u{1FB87}":{type:0,data:[{x:6,y:0,w:2,h:8}]},"\u{1FB88}":{type:0,data:[{x:5,y:0,w:3,h:8}]},"\u{1FB89}":{type:0,data:[{x:3,y:0,w:5,h:8}]},"\u{1FB8A}":{type:0,data:[{x:2,y:0,w:6,h:8}]},"\u{1FB8B}":{type:0,data:[{x:1,y:0,w:7,h:8}]},"\u{1FB8C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},"\u{1FB8D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0.5,0 L1,0 L1,1 L0.5,1 Z"},"\u{1FB8E}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},"\u{1FB8F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},"\u{1FB90}":{type:1,data:[[0,1],[1,0]]},"\u{1FB91}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0.5 L1,0.5 L1,1 L0,1 Z"},{type:0,data:[{x:0,y:0,w:8,h:4}]}],"\u{1FB92}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L1,0 L1,0.5 L0,0.5 Z"},{type:0,data:[{x:0,y:4,w:8,h:4}]}],"\u{1FB94}":[{type:1,data:[[0,1],[1,0]],clipPath:"M0,0 L0.5,0 L0.5,1 L0,1 Z"},{type:0,data:[{x:4,y:0,w:4,h:8}]}],"\u{1FB95}":{type:0,data:[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}]},"\u{1FB96}":{type:0,data:[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}]},"\u{1FB97}":{type:0,data:[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]},"\u{1FB98}":{type:2,data:"M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25",strokeWidth:1},"\u{1FB99}":{type:2,data:"M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75",strokeWidth:1},"\u{1FB9A}":{type:5,data:{d:"M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0",type:0}},"\u{1FB9B}":{type:5,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1",type:0}},"\u{1FB9C}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L0,1 Z"},"\u{1FB9D}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,0 L1,1 Z"},"\u{1FB9E}":{type:1,data:[[1,0],[0,1]],clipPath:"M1,0 L1,1 L0,1 Z"},"\u{1FB9F}":{type:1,data:[[1,0],[0,1]],clipPath:"M0,0 L1,1 L0,1 Z"},"\u{1FBA0}":{type:2,data:"M.5,0 L0,.5",strokeWidth:1},"\u{1FBA1}":{type:2,data:"M.5,0 L1,.5",strokeWidth:1},"\u{1FBA2}":{type:2,data:"M0,.5 L.5,1",strokeWidth:1},"\u{1FBA3}":{type:2,data:"M1,.5 L.5,1",strokeWidth:1},"\u{1FBA4}":{type:2,data:"M.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBA5}":{type:2,data:"M.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBA6}":{type:2,data:"M0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBA7}":{type:2,data:"M0,.5 L.5,0 L1,.5",strokeWidth:1},"\u{1FBA8}":{type:2,data:"M.5,0 L0,.5 M1,.5 L.5,1",strokeWidth:1},"\u{1FBA9}":{type:2,data:"M.5,0 L1,.5 M0,.5 L.5,1",strokeWidth:1},"\u{1FBAA}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5",strokeWidth:1},"\u{1FBAB}":{type:2,data:"M.5,0 L0,.5 L.5,1 L1,.5",strokeWidth:1},"\u{1FBAC}":{type:2,data:"M0,.5 L.5,0 L1,.5 L.5,1",strokeWidth:1},"\u{1FBAD}":{type:2,data:"M1,.5 L.5,0 L0,.5 L.5,1",strokeWidth:1},"\u{1FBAE}":{type:2,data:"M.5,0 L1,.5 L.5,1 L0,.5 Z",strokeWidth:1},"\u{1FBAF}":{type:2,data:"M0,.5 L1,.5 M.5,.35 L.5,.65",strokeWidth:1},"\u{1FBB0}":{type:3,data:"M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z",scaleType:1},"\u{1FBB1}":{type:4,data:{d:"M.1,.525 L.35,.675 L.9,.35",type:1},scaleType:1},"\u{1FBB2}":{type:3,data:"M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13"},"\u{1FBB3}":{type:3,data:"M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6"},"\u{1FBB4}":{type:4,data:{d:"M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z",type:0},scaleType:1},"\u{1FBB5}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB6}":[{type:5,data:{d:"M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z",type:0}},{type:5,data:{d:"M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z",type:0},scaleType:1}],"\u{1FBB7}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB8}":[{type:5,data:{d:"M.875,0 L1,0 L1,1 L.875,1 Z",type:0}},{type:5,data:{d:"M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z",type:0},scaleType:1}],"\u{1FBB9}":{type:5,data:{d:"M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z",type:0}},"\u{1FBBA}":{type:5,data:{d:"M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z",type:0}},"\u{1FBBB}":{type:5,data:{d:"M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z",type:0},scaleType:1},"\u{1FBBC}":[{type:3,data:"M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z"},{type:3,data:"M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5",scaleType:1}],"\u{1FBBD}":{type:4,data:{d:"M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z",type:1}},"\u{1FBBE}":{type:4,data:{d:"M1,.5 L.5,1",type:1}},"\u{1FBBF}":{type:4,data:{d:"M.5,0 L1,.5 L.5,1 L0,.5 Z",type:1}},"\u{1FBC0}":{type:3,data:"M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",scaleType:1},"\u{1FBC1}":{type:3,data:"M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z"},"\u{1FBC2}":{type:3,data:"M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z"},"\u{1FBC3}":{type:3,data:"M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z"},"\u{1FBC4}":{type:3,data:"M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z",scaleType:1},"\u{1FBC5}":{type:5,data:{d:"M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC6}":{type:5,data:{d:"M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC7}":{type:5,data:{d:"M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC8}":{type:5,data:{d:"M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBC9}":{type:5,data:{d:"M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z",type:0},scaleType:1},"\u{1FBCA}":{type:5,data:{d:"M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z",type:0},scaleType:1},"\u{1FBCB}":{type:5,data:{d:"M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z",type:0},scaleType:1},"\u{1FBCC}":{type:5,data:{d:"M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z",type:0},scaleType:1},"\u{1FBCD}":{type:5,data:{d:"M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z",type:0},scaleType:1},"\u{1FBCE}":{type:3,data:"M0,0 L0.6667,0 L0.6667,1 L0,1 Z"},"\u{1FBCF}":{type:3,data:"M0,0 L0.3333,0 L0.3333,1 L0,1 Z"},"\u{1FBD0}":{type:2,data:"M1,.5 L0,1",strokeWidth:1},"\u{1FBD1}":{type:2,data:"M1,0 L0,.5",strokeWidth:1},"\u{1FBD2}":{type:2,data:"M0,0 L1,.5",strokeWidth:1},"\u{1FBD3}":{type:2,data:"M0,.5 L1,1",strokeWidth:1},"\u{1FBD4}":{type:2,data:"M0,0 L.5,1",strokeWidth:1},"\u{1FBD5}":{type:2,data:"M.5,0 L1,1",strokeWidth:1},"\u{1FBD6}":{type:2,data:"M1,0 L.5,1",strokeWidth:1},"\u{1FBD7}":{type:2,data:"M.5,0 L0,1",strokeWidth:1},"\u{1FBD8}":{type:2,data:"M0,0 L.5,.5 L1,0",strokeWidth:1},"\u{1FBD9}":{type:2,data:"M1,0 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDA}":{type:2,data:"M0,1 L.5,.5 L1,1",strokeWidth:1},"\u{1FBDB}":{type:2,data:"M0,0 L.5,.5 L0,1",strokeWidth:1},"\u{1FBDC}":{type:2,data:"M0,0 L.5,1 L1,0",strokeWidth:1},"\u{1FBDD}":{type:2,data:"M1,0 L0,.5 L1,1",strokeWidth:1},"\u{1FBDE}":{type:2,data:"M0,1 L.5,0 L1,1",strokeWidth:1},"\u{1FBDF}":{type:2,data:"M0,0 L1,.5 L0,1",strokeWidth:1},"\u{1FBE0}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0",type:1}},"\u{1FBE1}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1",type:1}},"\u{1FBE2}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1",type:1}},"\u{1FBE3}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1",type:1}},"\u{1FBE4}":{type:0,data:[{x:2,y:0,w:4,h:4}]},"\u{1FBE5}":{type:0,data:[{x:2,y:4,w:4,h:4}]},"\u{1FBE6}":{type:0,data:[{x:0,y:2,w:4,h:4}]},"\u{1FBE7}":{type:0,data:[{x:4,y:2,w:4,h:4}]},"\u{1FBE8}":{type:5,data:{d:"M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z",type:0}},"\u{1FBE9}":{type:5,data:{d:"M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z",type:0}},"\u{1FBEA}":{type:5,data:{d:"M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z",type:0}},"\u{1FBEB}":{type:5,data:{d:"M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z",type:0}},"\u{1FBEC}":{type:5,data:{d:"M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z",type:0}},"\u{1FBED}":{type:5,data:{d:"M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z",type:0}},"\u{1FBEE}":{type:5,data:{d:"M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z",type:0}},"\u{1FBEF}":{type:5,data:{d:"M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z",type:0}},"\u{1FBF0}":{type:5,data:{d:o0(126),type:0},scaleType:1},"\u{1FBF1}":{type:5,data:{d:o0(48),type:0},scaleType:1},"\u{1FBF2}":{type:5,data:{d:o0(109),type:0},scaleType:1},"\u{1FBF3}":{type:5,data:{d:o0(121),type:0},scaleType:1},"\u{1FBF4}":{type:5,data:{d:o0(51),type:0},scaleType:1},"\u{1FBF5}":{type:5,data:{d:o0(91),type:0},scaleType:1},"\u{1FBF6}":{type:5,data:{d:o0(95),type:0},scaleType:1},"\u{1FBF7}":{type:5,data:{d:o0(114),type:0},scaleType:1},"\u{1FBF8}":{type:5,data:{d:o0(127),type:0},scaleType:1},"\u{1FBF9}":{type:5,data:{d:o0(123),type:0},scaleType:1},"\u{1FBFA}":{type:5,data:{d:"M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z",type:0},scaleType:1},...Object.fromEntries(Array.from({length:256},(i,e)=>[String.fromCodePoint(10240+e),{type:6,data:e}]))},$e=new Set([9617,9618,9619,129932,129933,129934,129935,129936,129937,129938,129940,129948,129949,129950,129951]);function f(i){return{type:2,data:()=>{let e=[],r=[.375,.25,.375],s=[0,3/8,5/8];for(let a=0;a<3;a++){let o=i>>a*2&1,n=i>>a*2+1&1;o&&n?e.push(`M0,${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L0,${s[a]+r[a]} Z`):o?e.push(`M0,${s[a]} L${.5},${s[a]} L${.5},${s[a]+r[a]} L0,${s[a]+r[a]} Z`):n&&e.push(`M${.5},${s[a]} L1,${s[a]} L1,${s[a]+r[a]} L${.5},${s[a]+r[a]} Z`)}return e.join(" ")}}}function o0(i){let e=[];if(i&64){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.2125} L${Q+.075},${.175} L${m-.075},${.175} L${m},${.2125} L${m-.075},${.25} L${Q+.075},${.25} Z`)}if(i&32){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.175+.075+.015,m=.5-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&16){let c=.7999999999999999,u=.95-.15/2,C=.95,Q=.5+.015,m=.825-.075-.015;e.push(`M${u},${Q} L${C},${Q+.0375} L${C},${m-.0375} L${u},${m} L${c},${m-.0375} L${c},${Q+.0375} Z`)}if(i&8){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.7875} L${Q+.075},${.75} L${m-.075},${.75} L${m},${.7875} L${m-.075},${.825} L${Q+.075},${.825} Z`)}if(i&4&&e.push(`M${.125},${.515} L${.2},${.515+.0375} L${.2},${.735-.0375} L${.125},${.735} L${.05},${.735-.0375} L${.05},${.515+.0375} Z`),i&2&&e.push(`M${.125},${.265} L${.2},${.265+.0375} L${.2},${.485-.0375} L${.125},${.485} L${.05},${.485-.0375} L${.05},${.265+.0375} Z`),i&1){let Q=.21500000000000002,m=.95-.15-.015;e.push(`M${Q},${.5} L${Q+.075},${.4625} L${m-.075},${.4625} L${m},${.5} L${m-.075},${.5375} L${Q+.075},${.5375} Z`)}return e.join(" ")}var k=0,H=0,T0=!1,_0=!1,$0=!1,z,x0=0,G0=class{constructor(e,t,r,s,a,o){this._terminal=e;this._optionService=t;this._selectionRenderModel=r;this._decorationService=s;this._coreBrowserService=a;this._themeService=o;this.result={fg:0,bg:0,ext:0}}resolve(e,t,r,s,a){this.result.bg=e.bg,this.result.fg=e.fg,this.result.ext=e.bg&268435456?e.extended.ext:0,H=0,k=0,_0=!1,T0=!1,$0=!1,z=this._themeService.colors,x0=0;let o=e.getCode();if(o!==0&&e.extended.underlineStyle===4){let n=Math.max(1,Math.floor(this._optionService.rawOptions.fontSize*this._coreBrowserService.dpr/15));x0=t*s%(Math.round(n)*2)}if(x0===0&&$e.has(o)&&(x0=t*s%2*2+r*a%2),this._decorationService.forEachDecorationAtCell(t,r,"bottom",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),$0=this._selectionRenderModel.isCellSelected(this._terminal,t,r),$0){if(this.result.fg&67108864||(this.result.bg&50331648)!==0){if(this.result.fg&67108864)switch(this.result.fg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:H=(this.result.fg&16777215)<<8|255;break;case 0:default:H=this._themeService.colors.foreground.rgba}else switch(this.result.bg&50331648){case 16777216:case 33554432:H=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:H=(this.result.bg&16777215)<<8|255;break}H=d0.blend(H,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}else H=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;if(_0=!0,z.selectionForeground&&(k=z.selectionForeground.rgba>>8&16777215,T0=!0),V0(e.getCode())){if(this.result.fg&67108864&&(this.result.bg&50331648)===0)k=(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba>>8&16777215;else{if(this.result.fg&67108864)switch(this.result.bg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.bg&255].rgba;break;case 50331648:k=(this.result.bg&16777215)<<8|255;break}else switch(this.result.fg&50331648){case 16777216:case 33554432:k=this._themeService.colors.ansi[this.result.fg&255].rgba;break;case 50331648:k=(this.result.fg&16777215)<<8|255;break;case 0:default:k=this._themeService.colors.foreground.rgba}k=d0.blend(k,(this._coreBrowserService.isFocused?z.selectionBackgroundOpaque:z.selectionInactiveBackgroundOpaque).rgba&4294967040|128)>>8&16777215}T0=!0}}this._decorationService.forEachDecorationAtCell(t,r,"top",n=>{n.backgroundColorRGB&&(H=n.backgroundColorRGB.rgba>>8&16777215,_0=!0),n.foregroundColorRGB&&(k=n.foregroundColorRGB.rgba>>8&16777215,T0=!0)}),_0&&($0?H=e.bg&-16777216&-134217729|H|50331648:H=e.bg&-16777216|H|50331648),T0&&(k=e.fg&-16777216&-67108865|k|50331648),this.result.fg&67108864&&(_0&&!T0&&((this.result.bg&50331648)===0?k=this.result.fg&-134217728|z.background.rgba>>8&16777215&16777215|50331648:k=this.result.fg&-134217728|this.result.bg&67108863,T0=!0),!_0&&T0&&((this.result.fg&50331648)===0?H=this.result.bg&-67108864|z.foreground.rgba>>8&16777215&16777215|50331648:H=this.result.bg&-67108864|this.result.fg&67108863,_0=!0)),z=void 0,this.result.bg=_0?H:this.result.bg,this.result.fg=T0?k:this.result.fg,this.result.ext&=536870911,this.result.ext|=x0<<29&3758096384}};var Ke=.5,K0=Be||we?"bottom":"ideographic";var Pt=typeof OffscreenCanvas>"u"?void 0:(i,e)=>new OffscreenCanvas(i,e),Bt=(i,e)=>{let t=document.createElement("canvas");return t.width=i,t.height=e,t};function wt(i,e,t=Pt,r=Bt){return t?.(i,e)??r(i,e)}function qe(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=Ve[e];if(p){let c=Array.isArray(p)?p:[p];for(let u of c)Ht(i,u,t,r,s,a,o,n,L,T,h,d,_);return!0}return!1}function Ht(i,e,t,r,s,a,o,n,L,T,h,d,_=0){let p=s,c=a,u=t,C=r;switch(e.scaleType===1&&(p=o,c=n,u=t+(s-o)/2,C=r+(a-n)/2),e.clipPath&&(i.save(),Kt(i,e.clipPath,u,C,p,c)),e.type){case 0:kt(i,e.data,u,C,p,c);break;case 1:$t(i,e.data,u,C,p,c,_);break;case 2:Gt(i,e.data,u,C,p,c,T,h,e.strokeWidth);break;case 3:Ut(i,e.data,u,C,p,c,T,e.strokeWidth);break;case 4:Vt(i,e.data,u,C,p,c,T,d);break;case 5:zt(i,e.data,u,C,p,c,L,T,h);break;case 6:Zt(i,e.data,u,C,p,c);break}e.clipPath&&i.restore()}function kt(i,e,t,r,s,a){for(let o=0;o{let F=parseFloat(m);return R%2===0?t+F*s:r+F*a});if(u==="M")i.moveTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="L")i.lineTo(Q[0],Q[1]),T=Q[0],h=Q[1],d=T,_=h;else if(u==="Q")i.quadraticCurveTo(Q[0],Q[1],Q[2],Q[3]),d=Q[0],_=Q[1],T=Q[2],h=Q[3];else if(u==="T"){let m,R;p==="Q"||p==="T"?(m=2*T-d,R=2*h-_):(m=T,R=h),i.quadraticCurveTo(m,R,Q[0],Q[1]),d=m,_=R,T=Q[0],h=Q[1]}else u==="C"&&(i.bezierCurveTo(Q[0],Q[1],Q[2],Q[3],Q[4],Q[5]),d=Q[2],_=Q[3],T=Q[4],h=Q[5]);p=u}n!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*n,i.stroke()):i.fill()}function Wt(i,e,t,r,s,a,o,n,L,T){if(r===0||s===0){i.lineTo(L,T);return}r=Math.abs(r),s=Math.abs(s);let h=Math.cos(a),d=Math.sin(a),_=(e-L)/2,p=(t-T)/2,c=h*_+d*p,u=-d*_+h*p,C=r*r,Q=s*s,m=c*c,R=u*u,F=m/C+R/Q;if(F>1){let I=Math.sqrt(F);r*=I,s*=I,C=r*r,Q=s*s}let E=(C*Q-C*R-Q*m)/(C*R+Q*m);E<0&&(E=0);let y=(o===n?-1:1)*Math.sqrt(E),X=y*(r*u/s),Y=y*-(s*c/r),M0=h*X-d*Y+(e+L)/2,t0=d*X+h*Y+(t+T)/2,L0=(c-X)/r,M=(u-Y)/s,n0=(-c-X)/r,a0=(-u-Y)/s,$=Math.atan2(M,L0),q=Math.atan2(a0,n0)-$;n===0&&q>0?q-=2*Math.PI:n===1&&q<0&&(q+=2*Math.PI);let A0=$+q;i.ellipse(M0,t0,r,s,a,$,A0,n===0)}function Vt(i,e,t,r,s,a,o,n){i.save(),i.fillRect(t,r,s,a),n&&(i.fillStyle=n,i.strokeStyle=n),i.lineWidth=o,i.lineCap="square",i.beginPath();for(let L of e.d.split(" ")){let T=L[0],h=L.substring(1).split(",");if(!h[0]||!h[1]){T==="Z"&&i.closePath();continue}let d=h.map((_,p)=>{let c=parseFloat(_);return p%2===0?t+c*s:r+c*a});T==="M"?i.moveTo(d[0],d[1]):T==="L"&&i.lineTo(d[0],d[1])}e.type===1?i.stroke():i.fill(),i.restore()}var Xe=new Map;function $t(i,e,t,r,s,a,o=0){let n=Xe.get(e);n||(n=new Map,Xe.set(e,n));let L=i.fillStyle;if(typeof L!="string")throw new Error(`Unexpected fillStyle type "${L}"`);let T=n.get(L);if(!T){let _=e[0].length,p=e.length,c=wt(_,p),u=A(c.getContext("2d")),C=new ImageData(_,p),Q,m,R,F;if(L.startsWith("#"))Q=parseInt(L.slice(1,3),16),m=parseInt(L.slice(3,5),16),R=parseInt(L.slice(5,7),16),F=L.length>7&&parseInt(L.slice(7,9),16)||1;else if(L.startsWith("rgba"))[Q,m,R,F]=L.substring(5,L.length-1).split(",").map(E=>parseFloat(E));else throw new Error(`Unexpected fillStyle color format "${L}" when drawing pattern glyph`);for(let E=0;E>1&1,d=o&1;h!==0||d!==0?T.setTransform(new DOMMatrix().translateSelf(-h,-d)):T.setTransform(new DOMMatrix),i.fillStyle=T,i.fillRect(t,r,s,a)}function Gt(i,e,t,r,s,a,o,n,L){i.save(),i.beginPath(),i.rect(t,r,s,a),i.clip(),i.beginPath();let T;if(typeof e=="function"){let _=.15/a*s;T=e(.15,_)}else T=e;let h={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let d of T.split(" ")){let _=d[0];if(_==="Z"){i.closePath(),h.lastCommand=_;continue}let p=je[_];if(!p){n.error(`Could not find drawing instructions for "${_}"`);continue}let c=d.substring(1).split(",");!c[0]||!c[1]||(p(i,Je(c,s,a,t,r,!0,o,0,0,!1),h),h.lastCommand=_)}L!==void 0?(i.strokeStyle=i.fillStyle,i.lineWidth=o*L,i.stroke()):i.fill(),i.closePath(),i.restore()}function Kt(i,e,t,r,s,a){i.beginPath();for(let o of e.split(" ")){let n=o[0];if(n==="Z"){i.closePath();continue}let L=o.substring(1).split(",");if(!L[0]||!L[1])continue;let T=t+parseFloat(L[0])*s,h=r+parseFloat(L[1])*a;n==="M"?i.moveTo(T,h):n==="L"&&i.lineTo(T,h)}i.clip()}function zt(i,e,t,r,s,a,o,n,L){let T=new Path2D;T.rect(t,r,s,a),i.clip(T),i.beginPath();let h=o/12;i.lineWidth=n*h;let d={currentX:0,currentY:0,lastControlX:0,lastControlY:0,lastCommand:""};for(let _ of e.d.split(" ")){let p=_[0];if(p==="Z"){i.closePath(),d.lastCommand=p;continue}let c=je[p];if(!c){L.error(`Could not find drawing instructions for "${p}"`);continue}let u=_.substring(1).split(",");!u[0]||!u[1]||(c(i,Je(u,s,a,t,r,!1,n,(e.leftPadding??0)*(h/2),(e.rightPadding??0)*(h/2)),d),d.lastCommand=p)}e.type===1?(i.strokeStyle=i.fillStyle,i.stroke()):i.fill(),i.closePath()}function Ye(i,e,t=0){return Math.max(Math.min(i,e),t)}var je={C:(i,e,t)=>{i.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]),t.lastControlX=e[2],t.lastControlY=e[3],t.currentX=e[4],t.currentY=e[5]},L:(i,e,t)=>{i.lineTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},M:(i,e,t)=>{i.moveTo(e[0],e[1]),t.lastControlX=t.currentX=e[0],t.lastControlY=t.currentY=e[1]},Q:(i,e,t)=>{i.quadraticCurveTo(e[0],e[1],e[2],e[3]),t.lastControlX=e[0],t.lastControlY=e[1],t.currentX=e[2],t.currentY=e[3]},T:(i,e,t)=>{let r,s;t.lastCommand==="Q"||t.lastCommand==="T"?(r=2*t.currentX-t.lastControlX,s=2*t.currentY-t.lastControlY):(r=t.currentX,s=t.currentY),i.quadraticCurveTo(r,s,e[0],e[1]),t.lastControlX=r,t.lastControlY=s,t.currentX=e[0],t.currentY=e[1]}};function Je(i,e,t,r,s,a,o,n=0,L=0,T=!0){let h=i.map(d=>parseFloat(d)||parseInt(d));if(h.length<2)throw new Error("Too few arguments for instruction");for(let d=0;da){s-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),this._start();return}s=a}this.clear()}},Ce=class extends X0{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){let t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}},Qe=class extends X0{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}},et="requestIdleCallback"in globalThis?Qe:Ce;var s0=class i{constructor(){this.fg=0;this.bg=0;this.extended=new P0}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},P0=class i{constructor(e=0,t=0){this._ext=0;this._urlId=0;this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new i(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.payload===void 0}};var U=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(e,t,r)=>{if(this._disposed)return g(()=>{});let s={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(s);let a=g(()=>{let o=this._listeners.indexOf(s);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return r&&(Array.isArray(r)?r.push(a):r.add(a)),a},this._event)}fire(e){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,e);return}let t=this._listeners;for(let r=0,s=t.length;r{function i(a,o){return a(n=>o.fire(n))}s.forward=i;function e(a,o){return(n,L,T)=>a(h=>n.call(L,o(h)),void 0,T)}s.map=e;function t(...a){return(o,n,L)=>{let T=new R0;for(let h of a)T.add(h(d=>o.call(n,d)));return L&&(Array.isArray(L)?L.push(T):L.add(T)),T}}s.any=t;function r(a,o,n){return o(n),a(L=>o(L))}s.runAndSubscribe=r})(c0||={});var tt={texturePage:0,texturePosition:{x:0,y:0},texturePositionClipSpace:{x:0,y:0},offset:{x:0,y:0},size:{x:0,y:0},sizeClipSpace:{x:0,y:0}},B0=2;var w0,J=class i{constructor(e,t,r,s){this._document=e;this._config=t;this._unicodeService=r;this._logService=s;this._didWarmUp=!1;this._cacheMap=new D0;this._cacheMapCombined=new D0;this._pages=[];this._activePages=[];this._workBoundingBox={top:0,left:0,bottom:0,right:0};this._workAttributeData=new s0;this._textureSize=512;this._onAddTextureAtlasCanvas=new U;this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event;this._onRemoveTextureAtlasCanvas=new U;this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event;this._pageLayoutVersion=0;this.fontProbeMismatchCount=0;this._createNewPage(),this._tmpCanvas=it(e,this._config.deviceCellWidth*4+B0*2,this._config.deviceCellHeight+B0*2),this._tmpCtx=A(this._tmpCanvas.getContext("2d",{alpha:this._config.allowTransparency,willReadFrequently:!0}))}get pages(){return this._pages}dispose(){this._tmpCanvas.remove();for(let e of this.pages)e.canvas.remove();this._onAddTextureAtlasCanvas.dispose(),this._onRemoveTextureAtlasCanvas.dispose()}warmUp(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)}_doWarmUp(){let e=new et(this._logService);for(let t=33;t<126;t++)e.enqueue(()=>{if(!this._cacheMap.get(t,0,0,0)){let r=this._drawToCache(t,0,0,0,!1,void 0);this._cacheMap.set(t,0,0,0,r)}})}get pageLayoutVersion(){return this._pageLayoutVersion}clearTexture(){this._pages.every(e=>e.glyphs.length===0&&e.currentRow.x===0&&e.currentRow.y===0)||(this._evictAllPages(),this._createNewPage())}_createNewPage(){if(i.maxAtlasPages&&this._pages.length>=Math.max(4,i.maxAtlasPages)){let t=this._pages.filter(T=>T.canvas.width*2<=(i.maxTextureSize||4096)).sort((T,h)=>h.canvas.width!==T.canvas.width?h.canvas.width-T.canvas.width:h.percentageUsed-T.percentageUsed),r=-1,s=0;for(let T=0;TT.canvas.width!==a[0].canvas.width)){this._evictAllPages();let T=new u0(this._document,this._textureSize);return this._pages.push(T),this._activePages.push(T),this._onAddTextureAtlasCanvas.fire(T.canvas),T}let o=a.map(T=>T.glyphs[0].texturePage).sort((T,h)=>T-h),n=this.pages.length-a.length,L=this._mergePages(a,n);L.version=++u0.nextVersion;for(let T=o.length-1;T>=0;T--)this._deletePage(o[T]);this.pages.push(L),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(L.canvas)}let e=new u0(this._document,this._textureSize);return this._pages.push(e),this._activePages.push(e),this._onAddTextureAtlasCanvas.fire(e.canvas),e}_mergePages(e,t){let r=e[0].canvas.width*2,s=new u0(this._document,r,e);for(let[a,o]of e.entries()){let n=a*o.canvas.width%r,L=Math.floor(a/2)*o.canvas.height;s.ctx.drawImage(o.canvas,n,L);for(let h of o.glyphs)h.texturePage=t,h.sizeClipSpace.x=h.size.x/r,h.sizeClipSpace.y=h.size.y/r,h.texturePosition.x+=n,h.texturePosition.y+=L,h.texturePositionClipSpace.x=h.texturePosition.x/r,h.texturePositionClipSpace.y=h.texturePosition.y/r;this._onRemoveTextureAtlasCanvas.fire(o.canvas);let T=this._activePages.indexOf(o);T!==-1&&this._activePages.splice(T,1)}return s}_deletePage(e){this._pages.splice(e,1);for(let t=e;t=this._config.colors.ansi.length)throw new Error("No color found for idx "+e);return this._config.colors.ansi[e]}_getBackgroundColor(e,t,r,s){if(this._config.allowTransparency)return K;let a;switch(e){case 16777216:case 33554432:a=this._getColorFromAnsiIndex(t);break;case 50331648:let o=s0.toColorRGB(t);a=Z.toColor(o[0],o[1],o[2]);break;case 0:default:r?a=I0.opaque(this._config.colors.foreground):a=this._config.colors.background;break}return this._config.allowTransparency||(a=I0.opaque(a)),a}_getForegroundColor(e,t,r,s,a,o,n,L,T,h){let d=this._getMinimumContrastColor(e,t,r,s,a,o,n,T,L,h);if(d)return d;let _;switch(a){case 16777216:case 33554432:this._config.drawBoldTextInBrightColors&&T&&o<8&&(o+=8),_=this._getColorFromAnsiIndex(o);break;case 50331648:let p=s0.toColorRGB(o);_=Z.toColor(p[0],p[1],p[2]);break;case 0:default:n?_=this._config.colors.background:_=this._config.colors.foreground}return this._config.allowTransparency&&(_=I0.opaque(_)),L&&(_=I0.multiplyOpacity(_,Ke)),_}_resolveBackgroundRgba(e,t,r){switch(e){case 16777216:case 33554432:return this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.foreground.rgba:this._config.colors.background.rgba}}_resolveForegroundRgba(e,t,r,s){switch(e){case 16777216:case 33554432:return this._config.drawBoldTextInBrightColors&&s&&t<8&&(t+=8),this._getColorFromAnsiIndex(t).rgba;case 50331648:return t<<8;case 0:default:return r?this._config.colors.background.rgba:this._config.colors.foreground.rgba}}_getMinimumContrastColor(e,t,r,s,a,o,n,L,T,h){if(this._config.minimumContrastRatio===1||h)return;let d=this._getContrastCache(T),_=d.getColor(e,s);if(_!==void 0)return _??void 0;let p=this._resolveBackgroundRgba(t,r,n),c=this._resolveForegroundRgba(a,o,n,L),u=d0.ensureContrastRatio(p,c,this._config.minimumContrastRatio/(T?2:1));if(!u){d.setColor(e,s,null);return}let C=Z.toColor(u>>24&255,u>>16&255,u>>8&255);return d.setColor(e,s,C),C}_getContrastCache(e){return e?this._config.colors.halfContrastCache:this._config.colors.contrastCache}_probeRasterizationFontWeight(e){let t=String(e);if(!/^(?:[1-8]\d{2}|900)$/.test(t))return;let r=this._tmpCtx.font.match(/(?:^|\s)(normal|bold|[1-9]\d{0,3})(?=\s+\d+(?:\.\d+)?px(?:\s|$))/)?.[1]??"400";if((r==="normal"?"400":r==="bold"?"700":r)!==t){this.fontProbeMismatchCount++,this.fontProbeLastMismatch={desired:t,actual:this._tmpCtx.font};try{globalThis.__orcaAtlasFontProbe?.(this.fontProbeLastMismatch)}catch{}}}_drawToCache(e,t,r,s,a,o){let n=typeof e=="number"?String.fromCharCode(e):e;o&&this._tmpCanvas.parentElement!==o&&(this._tmpCanvas.style.display="none",o.append(this._tmpCanvas));let L=Math.min(this._config.deviceCellWidth*Math.max(n.length,2)+B0*2,this._config.deviceMaxTextureSize);this._tmpCanvas.width=b?b*2-f0:b-f0;!(f0>=b)===!1||Z0===0?(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j+Z0,G),this._tmpCtx.lineTo(Q0,G)):(this._tmpCtx.setLineDash([Math.round(b),Math.round(b)]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(j+Z0,G),this._tmpCtx.moveTo(j+Z0+b,G),this._tmpCtx.lineTo(Q0,G)),f0=We(Q0-j,b,f0);break;case 5:let vt=.6,Ot=.3,de=Q0-j,Se=Math.floor(vt*de),Re=Math.floor(Ot*de),It=de-Se-Re;this._tmpCtx.setLineDash([Se,Re,It]),this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break;case 1:default:this._tmpCtx.moveTo(j,G),this._tmpCtx.lineTo(Q0,G);break}y0||this._tmpCtx.stroke(),this._tmpCtx.restore()}if(this._tmpCtx.restore(),!n0&&this._config.fontSize>=12&&!this._config.allowTransparency&&n!==" "){this._tmpCtx.save(),this._tmpCtx.textBaseline="alphabetic";let r0=this._tmpCtx.measureText(n);if(this._tmpCtx.restore(),"actualBoundingBoxDescent"in r0&&r0.actualBoundingBoxDescent>0){this._tmpCtx.save();let y0=new Path2D;y0.rect(i0,C0-Math.ceil(b/2),this._config.deviceCellWidth*$,v0-C0+Math.ceil(b/2)),this._tmpCtx.clip(y0),this._tmpCtx.lineWidth=this._config.devicePixelRatio*3,this._tmpCtx.strokeStyle=y.css,this._tmpCtx.strokeText(n,M,M+this._config.deviceCharHeight),this._tmpCtx.restore()}}}if(Q){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/15)),D=b%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+D),this._tmpCtx.stroke()}if(n0||this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight),n==="_"&&!this._config.allowTransparency){let b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0);if(b)for(let D=1;D<=5&&(this._tmpCtx.save(),this._tmpCtx.fillStyle=y.css,this._tmpCtx.fillRect(0,0,this._tmpCanvas.width,this._tmpCanvas.height),this._tmpCtx.restore(),this._tmpCtx.fillText(n,M,M+this._config.deviceCharHeight-D),b=fe(this._tmpCtx.getImageData(M,M,this._config.deviceCellWidth,this._config.deviceCellHeight),y,L0,a0),!!b);D++);}if(C){let b=Math.max(1,Math.floor(this._config.fontSize*this._config.devicePixelRatio/10)),D=this._tmpCtx.lineWidth%2===1?.5:0;this._tmpCtx.lineWidth=b,this._tmpCtx.strokeStyle=this._tmpCtx.fillStyle,this._tmpCtx.beginPath(),this._tmpCtx.moveTo(M,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.lineTo(M+this._config.deviceCharWidth*$,M+Math.floor(this._config.deviceCharHeight/2)-D),this._tmpCtx.stroke()}this._tmpCtx.restore();let q=this._tmpCtx.getImageData(0,0,this._tmpCanvas.width,this._tmpCanvas.height),A0;if(this._config.allowTransparency?A0=Xt(q):A0=fe(q,y,L0,a0),A0)return tt;let I=this._findGlyphBoundingBox(q,this._workBoundingBox,L,t0,n0,M),O,v;for(;;){if(this._activePages.length===0){let b=this._createNewPage();O=b,v=b.currentRow,v.height=I.size.y;break}O=this._activePages[this._activePages.length-1],v=O.currentRow;for(let b of this._activePages)I.size.y<=b.currentRow.height&&(O=b,v=b.currentRow);for(let b=this._activePages.length-1;b>=0;b--)for(let D of this._activePages[b].fixedRows)D.height<=v.height&&I.size.y<=D.height&&(O=this._activePages[b],v=D);if(I.size.x>this._textureSize){this._overflowSizePage||(i.maxAtlasPages&&this._pages.length>=i.maxAtlasPages&&this._evictAllPages(),this._overflowSizePage=new u0(this._document,this._config.deviceMaxTextureSize),this.pages.push(this._overflowSizePage),this._pageLayoutVersion++,this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas)),O=this._overflowSizePage,v=this._overflowSizePage.currentRow,v.x+I.size.x>=O.canvas.width&&(v.x=0,v.y+=v.height,v.height=0);break}if(v.y+I.size.y>=O.canvas.height||v.height>I.size.y+2){let b=!1;if(O.currentRow.y+O.currentRow.height+I.size.y>=O.canvas.height){let D;for(let i0 of this._activePages)if(i0.currentRow.y+i0.currentRow.height+I.size.y=i.maxAtlasPages&&v.y+I.size.y<=O.canvas.height&&v.height>=I.size.y&&v.x+I.size.x<=O.canvas.width)b=!0;else{let i0=this._createNewPage();O=i0,v=i0.currentRow,v.height=I.size.y,b=!0}}b||(O.currentRow.height>0&&O.fixedRows.push(O.currentRow),v={x:0,y:O.currentRow.y+O.currentRow.height,height:I.size.y},O.fixedRows.push(v),O.currentRow={x:0,y:v.y+v.height,height:0})}if(v.x+I.size.x<=O.canvas.width)break;v===O.currentRow?(v.x=0,v.y+=v.height,v.height=0):O.fixedRows.splice(O.fixedRows.indexOf(v),1)}return I.texturePage=this._pages.indexOf(O),I.texturePosition.x=v.x,I.texturePosition.y=v.y,I.texturePositionClipSpace.x=v.x/O.canvas.width,I.texturePositionClipSpace.y=v.y/O.canvas.height,I.sizeClipSpace.x/=O.canvas.width,I.sizeClipSpace.y/=O.canvas.height,v.height=Math.max(v.height,I.size.y),v.x+=I.size.x,O.ctx.putImageData(q,I.texturePosition.x-this._workBoundingBox.left,I.texturePosition.y-this._workBoundingBox.top,this._workBoundingBox.left,this._workBoundingBox.top,I.size.x,I.size.y),O.addGlyph(I),O.version=++u0.nextVersion,I}_findGlyphBoundingBox(e,t,r,s,a,o){t.top=0;let n=s?this._config.deviceCellHeight:this._tmpCanvas.height,L=s?this._config.deviceCellWidth:r,T=!1;for(let h=0;h=o;h--){for(let d=0;d=0;h--){for(let d=0;d>>24,a=e.rgba>>>16&255,o=e.rgba>>>8&255,n=t.rgba>>>24,L=t.rgba>>>16&255,T=t.rgba>>>8&255,h=Math.floor((Math.abs(s-n)+Math.abs(a-L)+Math.abs(o-T))/12),d=!0;for(let _=0;_0)return!1;return!0}function it(i,e,t){let r=i.createElement("canvas");return r.width=e,r.height=t,r}function rt(i,e,t,r,s,a,o,n,L=!0){let T={foreground:a.foreground,background:a.background,cursor:K,cursorAccent:K,selectionForeground:K,selectionBackgroundTransparent:K,selectionBackgroundOpaque:K,selectionInactiveBackgroundTransparent:K,selectionInactiveBackgroundOpaque:K,overviewRulerBorder:K,scrollbarSliderBackground:K,scrollbarSliderHoverBackground:K,scrollbarSliderActiveBackground:K,ansi:a.ansi.slice(),contrastCache:a.contrastCache,halfContrastCache:a.halfContrastCache};return{customGlyphs:L,devicePixelRatio:o,deviceMaxTextureSize:n,letterSpacing:s.letterSpacing,lineHeight:s.lineHeight,deviceCellWidth:i,deviceCellHeight:e,deviceCharWidth:t,deviceCharHeight:r,fontFamily:s.fontFamily,fontSize:s.fontSize,fontWeight:s.fontWeight,fontWeightBold:s.fontWeightBold,allowTransparency:s.allowTransparency,drawBoldTextInBrightColors:s.drawBoldTextInBrightColors,minimumContrastRatio:s.minimumContrastRatio,colors:T}}function Ee(i,e){for(let t=0;t=0){if(Ee(u.config,h))return u.atlas;u.ownedBy.length===1?(u.atlas.dispose(),e0.splice(c,1)):u.ownedBy.splice(C,1);break}}for(let c=0;c{this._renderCallback(),this._animationFrame=void 0})))}_restartInterval(e=600){this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=this._coreBrowserService.window.setTimeout(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);if(this._animationTimeRestarted=void 0,t>0){this._restartInterval(t);return}}this.isCursorVisible=!1,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0}),this._blinkInterval=this._coreBrowserService.window.setInterval(()=>{if(this._animationTimeRestarted){let t=600-(Date.now()-this._animationTimeRestarted);this._animationTimeRestarted=void 0,this._restartInterval(t);return}this.isCursorVisible=!this.isCursorVisible,this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._renderCallback(),this._animationFrame=void 0})},600)},e)}pause(){this.isCursorVisible=!0,this._isIdlePaused=!1,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}resume(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this._resetIdleTimer(),this.restartBlinkAnimation()}_resetIdleTimer(){this._isIdlePaused=!1,this._idleTimeout&&this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_stopBlinkingDueToIdle(){this.isCursorVisible=!0,this._isIdlePaused=!0,this._blinkInterval&&(this._coreBrowserService.window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0),this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0,this._renderCallback()}};function ve(i,e,t){let r=new e.ResizeObserver(s=>{let a=s.find(L=>L.target===i);if(!a)return;if(!("devicePixelContentBoxSize"in a)){r?.disconnect(),r=void 0;return}let o=a.devicePixelContentBoxSize[0].inlineSize,n=a.devicePixelContentBoxSize[0].blockSize;o>0&&n>0&&t(o,n)});try{r.observe(i,{box:["device-pixel-content-box"]})}catch{r.disconnect(),r=void 0}return g(()=>r?.disconnect())}function nt(i){return i>65535?(i-=65536,String.fromCharCode((i>>10)+55296)+String.fromCharCode(i%1024+56320)):String.fromCharCode(i)}var j0=class i extends s0{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new P0;this.combinedData=""}static fromCharData(t){let r=new i;return r.setFromCharData(t),r}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?nt(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(t){this.fg=t[0],this.bg=0;let r=!1;if(t[1].length>2)r=!0;else if(t[1].length===2){let s=t[1].charCodeAt(0);if(55296<=s&&s<=56319){let a=t[1].charCodeAt(1);56320<=a&&a<=57343?this.content=(s-55296)*1024+a-56320+65536|t[2]<<22:r=!0}else r=!0}else this.content=t[1].charCodeAt(0)|t[2]<<22;r&&(this.combinedData=t[1],this.content=2097152|t[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(t){if(this.getFgColorMode()!==t.getFgColorMode()||this.getFgColor()!==t.getFgColor()||this.getBgColorMode()!==t.getBgColorMode()||this.getBgColor()!==t.getBgColor()||this.isInverse()!==t.isInverse()||this.isBold()!==t.isBold()||this.isUnderline()!==t.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==t.getUnderlineStyle())return!1;let r=this.isUnderlineColorDefault(),s=t.isUnderlineColorDefault();if(!(r&&s)&&(r!==s||this.getUnderlineColor()!==t.getUnderlineColor()||this.getUnderlineColorMode()!==t.getUnderlineColorMode()))return!1}return!(this.isOverline()!==t.isOverline()||this.isBlink()!==t.isBlink()||this.isInvisible()!==t.isInvisible()||this.isItalic()!==t.isItalic()||this.isDim()!==t.isDim()||this.isStrikethrough()!==t.isStrikethrough())}};var J0=class extends W{constructor(t,r,s){super();this._renderCallback=t;this._coreBrowserService=r;this._optionsService=s;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",a=>{this.setIntervalDuration(a)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(g(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(t){this._needsBlinkInViewport!==t&&(this._needsBlinkInViewport=t,this._updateIntervalState())}setViewportVisible(t){this._isViewportVisible!==t&&(this._isViewportVisible=t,this._updateIntervalState())}setIntervalDuration(t){t!==this._intervalDuration&&(this._intervalDuration=t,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let r=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),r||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var te=new Float32Array([2,0,0,0,0,-2,0,0,0,0,1,0,-1,1,0,1]);function ie(i,e,t,r){let s=A(i.createProgram());if(i.attachShader(s,A(at(i,i.VERTEX_SHADER,e,r))),i.attachShader(s,A(at(i,i.FRAGMENT_SHADER,t,r))),i.linkProgram(s),i.getProgramParameter(s,i.LINK_STATUS))return s;r.error(i.getProgramInfoLog(s)),i.deleteProgram(s)}function at(i,e,t,r){let s=A(i.createShader(e));if(i.shaderSource(s,t),i.compileShader(s),i.getShaderParameter(s,i.COMPILE_STATUS))return s;r.error(i.getShaderInfoLog(s)),i.deleteShader(s)}function ot(i,e){let t=Math.min(i.length*2,e),r=new Float32Array(t);for(let s=0;sn.deleteProgram(this._program))),this._projectionLocation=A(n.getUniformLocation(this._program,"u_projection"));let L=this._vertexArrayObject=n.createVertexArray();this._register(g(()=>n.deleteVertexArray(L))),n.bindVertexArray(L);let T=new Float32Array([0,0,1,0,0,1,1,1]),h=n.createBuffer();this._register(g(()=>n.deleteBuffer(h))),n.bindBuffer(n.ARRAY_BUFFER,h),n.bufferData(n.ARRAY_BUFFER,T,n.STATIC_DRAW),n.enableVertexAttribArray(3),n.vertexAttribPointer(3,2,this._gl.FLOAT,!1,0,0);let d=new Uint8Array([0,1,2,3]),_=n.createBuffer();this._register(g(()=>n.deleteBuffer(_))),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,_),n.bufferData(n.ELEMENT_ARRAY_BUFFER,d,n.STATIC_DRAW),this._attributesBuffer=A(n.createBuffer()),this._register(g(()=>n.deleteBuffer(this._attributesBuffer))),n.bindBuffer(n.ARRAY_BUFFER,this._attributesBuffer),n.enableVertexAttribArray(0),n.vertexAttribPointer(0,2,n.FLOAT,!1,ge,0),n.vertexAttribDivisor(0,1),n.enableVertexAttribArray(1),n.vertexAttribPointer(1,2,n.FLOAT,!1,ge,2*Float32Array.BYTES_PER_ELEMENT),n.vertexAttribDivisor(1,1),n.enableVertexAttribArray(2),n.vertexAttribPointer(2,4,n.FLOAT,!1,ge,4*Float32Array.BYTES_PER_ELEMENT),n.vertexAttribDivisor(2,1),this._updateCachedColors(a.colors),this._register(this._themeService.onChangeColors(p=>{this._updateCachedColors(p),this._updateViewportRectangle()}))}renderBackgrounds(){this._renderVertices(this._vertices)}renderCursor(){this._renderVertices(this._verticesCursor)}_renderVertices(t){let r=this._gl;r.useProgram(this._program),r.bindVertexArray(this._vertexArrayObject),r.uniformMatrix4fv(this._projectionLocation,!1,te),r.bindBuffer(r.ARRAY_BUFFER,this._attributesBuffer),r.bufferData(r.ARRAY_BUFFER,t.attributes,r.DYNAMIC_DRAW),r.drawElementsInstanced(this._gl.TRIANGLE_STRIP,4,r.UNSIGNED_BYTE,0,t.count)}handleResize(){this._updateViewportRectangle()}setDimensions(t){this._dimensions=t}_updateCachedColors(t){this._bgFloat=this._colorToFloat32Array(t.background),this._cursorFloat=this._colorToFloat32Array(t.cursor)}_updateViewportRectangle(){this._addRectangleFloat(this._vertices.attributes,0,0,0,this._terminal.cols*this._dimensions.device.cell.width,this._terminal.rows*this._dimensions.device.cell.height,this._bgFloat)}updateBackgrounds(t){let r=this._terminal,s=this._vertices,a=1,o,n,L,T,h,d,_,p,c,u,C;for(o=0;o>24&255)/255,_t=(p0>>16&255)/255,ct=(p0>>8&255)/255,ut=1,this._addRectangle(t.attributes,r,Lt,ht,(n-o)*this._dimensions.device.cell.width,this._dimensions.device.cell.height,dt,_t,ct,ut)}_addRectangle(t,r,s,a,o,n,L,T,h,d){t[r]=s/this._dimensions.device.canvas.width,t[r+1]=a/this._dimensions.device.canvas.height,t[r+2]=o/this._dimensions.device.canvas.width,t[r+3]=n/this._dimensions.device.canvas.height,t[r+4]=L,t[r+5]=T,t[r+6]=h,t[r+7]=d}_addRectangleFloat(t,r,s,a,o,n,L){t[r]=s/this._dimensions.device.canvas.width,t[r+1]=a/this._dimensions.device.canvas.height,t[r+2]=o/this._dimensions.device.canvas.width,t[r+3]=n/this._dimensions.device.canvas.height,t[r+4]=L[0],t[r+5]=L[1],t[r+6]=L[2],t[r+7]=L[3]}_colorToFloat32Array(t){return new Float32Array([(t.rgba>>24&255)/255,(t.rgba>>16&255)/255,(t.rgba>>8&255)/255,(t.rgba&255)/255])}};var oe=class extends W{constructor(t,r,s,a,o,n,L,T){super();this._container=r;this._alpha=o;this._coreBrowserService=n;this._optionsService=L;this._themeService=T;this._deviceCharWidth=0;this._deviceCharHeight=0;this._deviceCellWidth=0;this._deviceCellHeight=0;this._deviceCharLeft=0;this._deviceCharTop=0;this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add(`xterm-${s}-layer`),this._canvas.style.zIndex=a.toString(),this._initCanvas(),this._container.appendChild(this._canvas),this._register(this._themeService.onChangeColors(h=>{this._refreshCharAtlas(t,h),this.reset(t)})),this._register(g(()=>{this._canvas.remove()}))}_initCanvas(){this._ctx=A(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()}handleBlur(t){}handleFocus(t){}handleCursorMove(t){}handleGridChanged(t,r,s){}handleSelectionChanged(t,r,s,a=!1){}_setTransparency(t,r){if(r===this._alpha)return;let s=this._canvas;this._alpha=r,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,s),this._refreshCharAtlas(t,this._themeService.colors),this.handleGridChanged(t,0,t.rows-1)}_refreshCharAtlas(t,r){this._deviceCharWidth<=0&&this._deviceCharHeight<=0||(this._charAtlas=Y0(t,this._optionsService.rawOptions,r,this._deviceCellWidth,this._deviceCellHeight,this._deviceCharWidth,this._deviceCharHeight,this._coreBrowserService.dpr,2048),this._charAtlas.warmUp())}resize(t,r){this._deviceCellWidth=r.device.cell.width,this._deviceCellHeight=r.device.cell.height,this._deviceCharWidth=r.device.char.width,this._deviceCharHeight=r.device.char.height,this._deviceCharLeft=r.device.char.left,this._deviceCharTop=r.device.char.top,this._canvas.width=r.device.canvas.width,this._canvas.height=r.device.canvas.height,this._canvas.style.width=`${r.css.canvas.width}px`,this._canvas.style.height=`${r.css.canvas.height}px`,this._alpha||this._clearAll(),this._refreshCharAtlas(t,this._themeService.colors)}_fillBottomLineAtCells(t,r,s=1){this._ctx.fillRect(t*this._deviceCellWidth,(r+1)*this._deviceCellHeight-this._coreBrowserService.dpr-1,s*this._deviceCellWidth,this._coreBrowserService.dpr)}_clearAll(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))}_clearCells(t,r,s,a){this._alpha?this._ctx.clearRect(t*this._deviceCellWidth,r*this._deviceCellHeight,s*this._deviceCellWidth,a*this._deviceCellHeight):(this._ctx.fillStyle=this._themeService.colors.background.css,this._ctx.fillRect(t*this._deviceCellWidth,r*this._deviceCellHeight,s*this._deviceCellWidth,a*this._deviceCellHeight))}_fillCharTrueColor(t,r,s,a){this._ctx.font=this._getFont(t,!1,!1),this._ctx.textBaseline=K0,this._clipCell(s,a,r.getWidth()),this._ctx.fillText(r.getChars(),s*this._deviceCellWidth+this._deviceCharLeft,a*this._deviceCellHeight+this._deviceCharTop+this._deviceCharHeight)}_clipCell(t,r,s){this._ctx.beginPath(),this._ctx.rect(t*this._deviceCellWidth,r*this._deviceCellHeight,s*this._deviceCellWidth,this._deviceCellHeight),this._ctx.clip()}_getFont(t,r,s){let a=r?t.options.fontWeightBold:t.options.fontWeight;return`${s?"italic":""} ${a} ${t.options.fontSize*this._coreBrowserService.dpr}px ${t.options.fontFamily}`}};var Te=class extends oe{constructor(e,t,r,s,a,o,n){super(r,e,"link",t,!0,a,o,n),this._register(s.onShowLinkUnderline(L=>this._handleShowLinkUnderline(L))),this._register(s.onHideLinkUnderline(L=>this._handleHideLinkUnderline(L)))}resize(e,t){super.resize(e,t),this._state=void 0}reset(e){this._clearCurrentLink()}_clearCurrentLink(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);let e=this._state.y2-this._state.y1-1;e>0&&this._clearCells(0,this._state.y1+1,this._state.cols,e),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}}_handleShowLinkUnderline(e){if(e.fg===257?this._ctx.fillStyle=this._themeService.colors.background.css:e.fg!==void 0&&st(e.fg)?this._ctx.fillStyle=this._themeService.colors.ansi[e.fg].css:this._ctx.fillStyle=this._themeService.colors.foreground.css,e.y1===e.y2)this._fillBottomLineAtCells(e.x1,e.y1,e.x2-e.x1);else{this._fillBottomLineAtCells(e.x1,e.y1,e.cols-e.x1);for(let t=e.y1+1;tthis._handleColorChange())),this._cellColorResolver=new G0(this._terminal,this._optionsService,this._model.selection,this._decorationService,this._coreBrowserService,this._themeService),this._core=this._terminal._core,this._renderLayers=[new Te(this._core.screenElement,2,this._terminal,this._core.linkifier,this._coreBrowserService,T,this._themeService)],this.dimensions=Ue(),this._devicePixelRatio=this._coreBrowserService.dpr,this._updateDimensions(),this._updateCursorBlink(),this._register(T.onOptionChange(()=>this._handleOptionsChanged())),this._textBlinkStateManager=this._register(new J0(()=>this._requestRedrawViewport(),this._coreBrowserService,this._optionsService)),this._resetBlinkingRowState(),this._deviceMaxTextureSize=this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE),this._register(le(this._canvas,"webglcontextlost",c=>{this._logService.debug("webglcontextlost event received"),c.preventDefault(),this._contextRestorationTimeout=setTimeout(()=>{this._contextRestorationTimeout=void 0,this._logService.warn("webgl context not restored; firing onContextLoss"),this._onContextLoss.fire(c)},3e3)})),this._register(le(this._canvas,"webglcontextrestored",c=>{this._logService.warn("webglcontextrestored event received"),clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0,be(this._terminal),this._initializeWebGLState(),this._requestRedrawViewport()})),this._observerDisposable.value=ve(this._canvas,this._coreBrowserService.window,(c,u)=>this._setCanvasDevicePixelDimensions(c,u)),this._register(this._coreBrowserService.onWindowChange(c=>{this._observerDisposable.value=ve(this._canvas,c,(u,C)=>this._setCanvasDevicePixelDimensions(u,C))})),this._register(le(this._coreBrowserService.mainDocument,"mousedown",()=>this._cursorBlinkStateManager.value?.restartBlinkAnimation())),this._core.screenElement.appendChild(this._canvas),[this._rectangleRenderer.value,this._glyphRenderer.value]=this._initializeWebGLState(),this._isAttached=this._core.screenElement.isConnected,this._register(g(()=>{clearTimeout(this._contextRestorationTimeout),this._contextRestorationTimeout=void 0;for(let c of this._renderLayers)c.dispose();this._canvas.parentElement?.removeChild(this._canvas),be(this._terminal)}))}get textureAtlas(){return this._charAtlas?.pages[0].canvas}_handleColorChange(){this._refreshCharAtlas(),this._clearModel(!0)}handleDevicePixelRatioChange(){this._devicePixelRatio!==this._coreBrowserService.dpr&&(this._devicePixelRatio=this._coreBrowserService.dpr,this.handleResize(this._terminal.cols,this._terminal.rows))}handleResize(t,r){this._updateDimensions(),this._model.resize(this._terminal.cols,this._terminal.rows),this._resetBlinkingRowState();for(let s of this._renderLayers)s.resize(this._terminal,this.dimensions);this._canvas.width=this.dimensions.device.canvas.width,this._canvas.height=this.dimensions.device.canvas.height,this._canvas.style.width=`${this.dimensions.css.canvas.width}px`,this._canvas.style.height=`${this.dimensions.css.canvas.height}px`,this._core.screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._core.screenElement.style.height=`${this.dimensions.css.canvas.height}px`,this._rectangleRenderer.value?.setDimensions(this.dimensions),this._rectangleRenderer.value?.handleResize(),this._glyphRenderer.value?.setDimensions(this.dimensions),this._glyphRenderer.value?.handleResize(),this._refreshCharAtlas(),this._clearModel(!1),this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0})}handleCharSizeChanged(){this.handleResize(this._terminal.cols,this._terminal.rows)}handleBlur(){for(let t of this._renderLayers)t.handleBlur(this._terminal);this._cursorBlinkStateManager.value?.pause(),this._requestRedrawViewport()}handleFocus(){for(let t of this._renderLayers)t.handleFocus(this._terminal);this._cursorBlinkStateManager.value?.resume(),this._requestRedrawViewport()}handleViewportVisibilityChange(t){this._textBlinkStateManager.setViewportVisible(t)}handleSelectionChanged(t,r,s){for(let a of this._renderLayers)a.handleSelectionChanged(this._terminal,t,r,s);this._model.selection.update(this._core,t,r,s),this._requestRedrawViewport()}handleCursorMove(){for(let t of this._renderLayers)t.handleCursorMove(this._terminal);this._cursorBlinkStateManager.value?.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._refreshCharAtlas(),this._updateCursorBlink()}_initializeWebGLState(){return this._rectangleRenderer.value=new ae(this._terminal,this._gl,this.dimensions,this._themeService,this._logService),this._glyphRenderer.value=new re(this._terminal,this._gl,this.dimensions,this._optionsService,this._logService),this.handleCharSizeChanged(),[this._rectangleRenderer.value,this._glyphRenderer.value]}_refreshCharAtlas(){if(this.dimensions.device.char.width<=0&&this.dimensions.device.char.height<=0){this._isAttached=!1;return}let t=Y0(this._terminal,this._optionsService.rawOptions,this._themeService.colors,this.dimensions.device.cell.width,this.dimensions.device.cell.height,this.dimensions.device.char.width,this.dimensions.device.char.height,this._coreBrowserService.dpr,this._deviceMaxTextureSize,this._customGlyphs);this._charAtlas!==t&&(this._onChangeTextureAtlas.fire(t.pages[0].canvas),this._charAtlasDisposable.value=De(c0.forward(t.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas),c0.forward(t.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas))),this._charAtlas=t,this._charAtlas.warmUp(),this._glyphRenderer.value?.setAtlas(this._charAtlas)}_clearModel(t){this._model.clear(),t&&this._glyphRenderer.value?.clear()}clearTextureAtlas(){this._charAtlas?.clearTexture(),this._clearModel(!0),this._requestRedrawViewport()}clear(){this._clearModel(!0);for(let t of this._renderLayers)t.reset(this._terminal);this._resetBlinkingRowState(),this._textBlinkStateManager.setNeedsBlinkInViewport(!1),this._cursorBlinkStateManager.value?.restartBlinkAnimation(),this._updateCursorBlink()}renderRows(t,r){if(!this._isAttached)if(this._core.screenElement?.isConnected&&this._charSizeService.width&&this._charSizeService.height)this._updateDimensions(),this._refreshCharAtlas(),this._isAttached=!0;else return;for(let o of this._renderLayers)o.handleGridChanged(this._terminal,t,r);if(!this._glyphRenderer.value||!this._rectangleRenderer.value)return;this._glyphRenderer.value.beginFrame()?(this._clearModel(!0),this._updateModel(0,this._terminal.rows-1)):this._updateModel(t,r);let s=!1,a=0;for(;this._charAtlas&&a++<32&&this._glyphRenderer.value.beginFrame();)s=!0,this._clearModel(!0),this._updateModel(0,this._terminal.rows-1);s&&this._glyphRenderer.value.invalidateAtlasTextures(),this._rectangleRenderer.value.renderBackgrounds(),this._glyphRenderer.value.render(this._model),(!this._cursorBlinkStateManager.value||this._cursorBlinkStateManager.value.isCursorVisible)&&this._rectangleRenderer.value.renderCursor()}_updateCursorBlink(){this._coreService.decPrivateModes.cursorBlink??this._terminal.options.cursorBlink?this._cursorBlinkStateManager.value=new q0(()=>{this._requestRedrawCursor()},this._coreBrowserService):this._cursorBlinkStateManager.clear(),this._requestRedrawCursor()}_updateModel(t,r){let s=this._core,a=this._workCell,o,n,L,T,h,d,_,p,c,u,C,Q,m,R,F,E,y;t=pt(t,s.rows-1,0),r=pt(r,s.rows-1,0);let X=this._coreService.decPrivateModes.cursorStyle??s.options.cursorStyle??"block",Y=this._terminal.buffer.active.baseY+this._terminal.buffer.active.cursorY,M0=Y-s.buffer.ydisp,t0=Math.min(this._terminal.buffer.active.cursorX,s.cols-1),L0=-1,M=this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden&&(!this._cursorBlinkStateManager.value||this._cursorBlinkStateManager.value.isCursorVisible);this._model.cursor=void 0;let n0=!1;for(n=t;n<=r;n++){L=n+s.buffer.ydisp;let a0=s.buffer.lines.get(L);if(!a0){for(this._model.lineLengths[n]=0,E=0;E=_,c=E,h.length>0&&E===h[0][0]&&p){u=h.shift();let q=this._model.selection.isCellSelected(this._terminal,u[0],L);for(F=u[0]+1;F=u[1],p?(d=!0,a=new Ae(a,T.translateToString(!0,u[0],u[1]),u[1]-u[0]),c=u[1]-1):_=u[1]}if(Q=a.getChars(),m=a.getCode(),F=(n*s.cols+E)*4,!$&&a.isBlink()&&($=!0),this._cellColorResolver.resolve(a,E,L,this.dimensions.device.cell.width,this.dimensions.device.cell.height),M&&L===Y&&(E===t0&&(this._model.cursor={x:t0,y:M0,width:a.getWidth(),style:this._coreBrowserService.isFocused?X:s.options.cursorInactiveStyle,cursorWidth:s.options.cursorWidth,dpr:this._devicePixelRatio},L0=t0+a.getWidth()-1),E>=t0&&E<=L0&&(this._coreBrowserService.isFocused&&X==="block"||this._coreBrowserService.isFocused===!1&&s.options.cursorInactiveStyle==="block")&&(this._cellColorResolver.result.fg=50331648|this._themeService.colors.cursorAccent.rgba>>8&16777215,this._cellColorResolver.result.bg=50331648|this._themeService.colors.cursor.rgba>>8&16777215)),this._textBlinkStateManager.isEnabled&&!this._textBlinkStateManager.isBlinkOn&&a.isBlink()&&(this._cellColorResolver.result.fg|=1073741824),m!==0&&(this._model.lineLengths[n]=E+1),!(this._model.cells[F]===m&&this._model.cells[F+1]===this._cellColorResolver.result.bg&&this._model.cells[F+2]===this._cellColorResolver.result.fg&&this._model.cells[F+3]===this._cellColorResolver.result.ext)&&(n0=!0,Q.length>1&&(m|=lt),this._model.cells[F]=m,this._model.cells[F+1]=this._cellColorResolver.result.bg,this._model.cells[F+2]=this._cellColorResolver.result.fg,this._model.cells[F+3]=this._cellColorResolver.result.ext,R=a.getWidth(),this._glyphRenderer.value.updateCell(E,n,m,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext,Q,R,o),d)){for(a=this._workCell,E++;E<=c;E++)y=(n*s.cols+E)*4,this._nullModelCell(E,n,y,this._cellColorResolver.result.bg,this._cellColorResolver.result.fg,this._cellColorResolver.result.ext);E--}}this._setRowBlinkState(n,$)}n0&&this._rectangleRenderer.value.updateBackgrounds(this._model),this._rectangleRenderer.value.updateCursor(this._model),this._updateTextBlinkState()}_nullModelCell(t,r,s,a,o,n){this._glyphRenderer.value.updateCell(t,r,0,a,o,n,"",0,0),this._model.cells[s]=0,this._model.cells[s+1]=a,this._model.cells[s+2]=o,this._model.cells[s+3]=n}_resetBlinkingRowState(){this._rowHasBlinkingCells=new Array(this._terminal.rows).fill(!1),this._rowHasBlinkingCellsCount=0}_setRowBlinkState(t,r){this._rowHasBlinkingCells[t]!==r&&(this._rowHasBlinkingCells[t]=r,this._rowHasBlinkingCellsCount+=r?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}_updateDimensions(){!this._charSizeService.width||!this._charSizeService.height||(this.dimensions.device.char.width=Math.floor(this._charSizeService.width*this._devicePixelRatio),this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*this._devicePixelRatio),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.top=this._optionsService.rawOptions.lineHeight===1?0:Math.round((this.dimensions.device.cell.height-this.dimensions.device.char.height)/2),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.char.left=Math.floor(this._optionsService.rawOptions.letterSpacing/2),this.dimensions.device.canvas.height=this._terminal.rows*this.dimensions.device.cell.height,this.dimensions.device.canvas.width=this._terminal.cols*this.dimensions.device.cell.width,this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/this._devicePixelRatio),this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/this._devicePixelRatio),this.dimensions.css.cell.height=this.dimensions.device.cell.height/this._devicePixelRatio,this.dimensions.css.cell.width=this.dimensions.device.cell.width/this._devicePixelRatio)}_setCanvasDevicePixelDimensions(t,r){this._canvas.width===t&&this._canvas.height===r||(this._canvas.width=t,this._canvas.height=r,this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1,sync:!0}))}_requestRedrawViewport(){this._onRequestRedraw.fire({start:0,end:this._terminal.rows-1})}_requestRedrawCursor(){let t=this._terminal.buffer.active.cursorY;this._onRequestRedraw.fire({start:t,end:t})}},Ae=class extends s0{constructor(t,r,s){super();this.content=0;this.combinedData="";this.fg=t.fg,this.bg=t.bg,this.combinedData=r,this._width=s}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(t){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}};function pt(i,e,t=0){return Math.max(Math.min(i,e),t)}var Ct=class extends W{constructor(t){if(ue&&He()<16){let r={antialias:!1,depth:!1,preserveDrawingBuffer:!0};if(!document.createElement("canvas").getContext("webgl2",r))throw new Error("WebGL2 is only supported on Safari 16 and above")}super();this._onChangeTextureAtlas=this._register(new U);this.onChangeTextureAtlas=this._onChangeTextureAtlas.event;this._onAddTextureAtlasCanvas=this._register(new U);this.onAddTextureAtlasCanvas=this._onAddTextureAtlasCanvas.event;this._onRemoveTextureAtlasCanvas=this._register(new U);this.onRemoveTextureAtlasCanvas=this._onRemoveTextureAtlasCanvas.event;this._onContextLoss=this._register(new U);this.onContextLoss=this._onContextLoss.event;this._customGlyphs=t?.customGlyphs??!0,this._preserveDrawingBuffer=t?.preserveDrawingBuffer}activate(t){let r=t._core;if(!t.element){this._register(r.onWillOpen(()=>this.activate(t)));return}this._terminal=t;let s=r.coreService,a=r.optionsService,o=r,n=o._renderService,L=o._characterJoinerService,T=o._charSizeService,h=o._coreBrowserService,d=o._decorationService,_=o._logService,p=o._themeService;this._renderer=this._register(new Le(t,L,T,h,s,d,_,a,p,this._customGlyphs,this._preserveDrawingBuffer)),this._register(c0.forward(this._renderer.onContextLoss,this._onContextLoss)),this._register(c0.forward(this._renderer.onChangeTextureAtlas,this._onChangeTextureAtlas)),this._register(c0.forward(this._renderer.onAddTextureAtlasCanvas,this._onAddTextureAtlasCanvas)),this._register(c0.forward(this._renderer.onRemoveTextureAtlasCanvas,this._onRemoveTextureAtlasCanvas)),n.setRenderer(this._renderer),this._register(g(()=>{if(this._terminal._core._store._isDisposed)return;let c=this._terminal._core._renderService;c.setRenderer(this._terminal._core._createRenderer()),c.handleResize(t.cols,t.rows)}))}get textureAtlas(){return this._renderer?.textureAtlas}clearTextureAtlas(){this._renderer?.clearTextureAtlas()}};export{Ct as WebglAddon}; //# sourceMappingURL=addon-webgl.mjs.map diff --git a/lib/addon-webgl.mjs.map b/lib/addon-webgl.mjs.map -index 03db5b52ad7972b7fa430748453da54eee9a100a..d96d115a1957e543c9c638d1be639aa840eb1aeb 100644 +index 78cae9caaae7acd3c364d2d6e01435dc343f4c14..d10a46a30fead33bc9f35bb69fce5ed439f53b8d 100644 --- a/lib/addon-webgl.mjs.map +++ b/lib/addon-webgl.mjs.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/common/Lifecycle.ts", "../../../src/common/Platform.ts", "../../../src/common/Color.ts", "../../../src/browser/renderer/shared/RendererUtils.ts", "../src/customGlyphs/CustomGlyphDefinitions.ts", "../src/CellColorResolver.ts", "../src/Constants.ts", "../src/customGlyphs/CustomGlyphRasterizer.ts", "../../../src/common/MultiKeyMap.ts", "../../../src/common/TaskQueue.ts", "../../../src/common/buffer/AttributeData.ts", "../../../src/common/Event.ts", "../src/TextureAtlas.ts", "../src/CharAtlasUtils.ts", "../src/CharAtlasCache.ts", "../src/CursorBlinkStateManager.ts", "../src/DevicePixelObserver.ts", "../../../src/common/input/TextDecoder.ts", "../../../src/common/buffer/CellData.ts", "../../../src/browser/renderer/shared/TextBlinkStateManager.ts", "../src/WebglUtils.ts", "../src/GlyphRenderer.ts", "../../../src/browser/renderer/shared/SelectionRenderModel.ts", "../src/RenderModel.ts", "../src/RectangleRenderer.ts", "../src/renderLayer/BaseRenderLayer.ts", "../src/renderLayer/LinkRenderLayer.ts", "../../../src/browser/Dom.ts", "../src/WebglRenderer.ts", "../src/WebglAddon.ts"], -- "sourcesContent": ["/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** \u2502 */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** \u2500 */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** \u2514 */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** \u2518 */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** \u2510 */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** \u250C */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** \u2575 */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** \u2574 */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** \u2576 */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** \u2577 */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** \u2534 */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** \u2524 */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** \u251C */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** \u252C */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** \u253C */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** \u254C */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** \u2504 */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** \u2509 */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** \u254E */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** \u2506 */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** \u250A */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '\u2500': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '\u2501': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '\u2502': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '\u2503': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '\u2504': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2505': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u2506': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '\u2507': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '\u2508': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2509': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u250A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '\u250B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '\u250C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '\u250D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u250E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u250F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '\u2510': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '\u2511': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2512': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2513': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '\u2514': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '\u2515': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2516': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2517': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '\u2518': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '\u2519': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u251A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '\u251C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '\u251D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u251E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2520': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2521': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2522': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2523': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '\u2524': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '\u2525': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2526': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2527': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2528': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2529': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u252A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u252B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '\u252C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '\u252D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u252E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u252F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2530': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2531': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2532': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2533': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '\u2534': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '\u2535': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2536': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2537': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2538': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2539': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u253A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u253B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '\u253C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '\u253D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u253E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u253F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2540': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2541': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2542': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2543': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u2544': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2545': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2546': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2547': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '\u2548': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '\u2549': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '\u254A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '\u254B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '\u254C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u254D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u254E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '\u254F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '\u2550': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2551': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '\u2552': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2553': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2554': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2555': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2556': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '\u2557': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2558': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '\u2559': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u255A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u255B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '\u255C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '\u255D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u255E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u255F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '\u2560': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u2561': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2562': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2563': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u2564': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '\u2565': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2566': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2567': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2568': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u2569': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u256A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u256B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u256C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '\u256D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '\u256E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u256F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u2570': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '\u2571': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '\u2572': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '\u2573': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '\u2574': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '\u2575': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '\u2576': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '\u2577': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '\u2578': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '\u2579': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '\u257A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '\u257B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '\u257C': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u257D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u257E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u257F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '\u2580': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '\u2581': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '\u2582': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '\u2583': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '\u2584': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '\u2585': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '\u2586': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '\u2587': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '\u2588': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '\u2589': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '\u258A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '\u258B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '\u258C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '\u258D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '\u258E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '\u258F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '\u2590': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '\u2591': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '\u2592': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '\u2593': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '\u2594': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '\u2595': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '\u2596': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '\u2597': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '\u2598': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '\u2599': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '\u259A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '\u259B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '\u259C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '\u259D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '\u259E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '\u259F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * \u2500a\u2500\n * \u2502 \u2502\n * f b\n * \u2500g\u2500\n * e c\n * \u2502 \u2502\n * \u2500d\u2500\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n", "import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n public clearTexture(): void {\n if (this._pages[0].currentRow.x === 0 && this._pages[0].currentRow.y === 0) {\n return;\n }\n for (const page of this._pages) {\n page.clear();\n }\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n\n // Invalidate renderer models so all texture pages are refreshed. The atlas may be shared, in\n // which case the clearing renderer has cleared only its own model and every other owner still\n // holds texture coords into the rows just wiped.\n this._pageLayoutVersion++;\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded \u2014 both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals}\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n while (this._charAtlas && this._glyphRenderer.value.beginFrame() && mergeRetries++ < Constants.MERGE_RETRY_LIMIT) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"], -- "mappings": "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", +- "sourcesContent": ["/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** \u2502 */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** \u2500 */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** \u2514 */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** \u2518 */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** \u2510 */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** \u250C */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** \u2575 */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** \u2574 */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** \u2576 */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** \u2577 */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** \u2534 */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** \u2524 */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** \u251C */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** \u252C */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** \u253C */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** \u254C */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** \u2504 */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** \u2509 */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** \u254E */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** \u2506 */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** \u250A */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '\u2500': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '\u2501': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '\u2502': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '\u2503': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '\u2504': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2505': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u2506': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '\u2507': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '\u2508': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2509': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u250A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '\u250B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '\u250C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '\u250D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u250E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u250F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '\u2510': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '\u2511': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2512': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2513': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '\u2514': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '\u2515': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2516': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2517': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '\u2518': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '\u2519': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u251A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '\u251C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '\u251D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u251E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2520': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2521': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2522': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2523': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '\u2524': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '\u2525': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2526': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2527': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2528': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2529': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u252A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u252B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '\u252C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '\u252D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u252E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u252F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2530': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2531': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2532': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2533': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '\u2534': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '\u2535': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2536': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2537': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2538': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2539': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u253A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u253B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '\u253C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '\u253D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u253E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u253F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2540': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2541': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2542': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2543': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u2544': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2545': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2546': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2547': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '\u2548': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '\u2549': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '\u254A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '\u254B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '\u254C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u254D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u254E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '\u254F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '\u2550': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2551': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '\u2552': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2553': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2554': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2555': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2556': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '\u2557': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2558': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '\u2559': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u255A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u255B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '\u255C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '\u255D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u255E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u255F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '\u2560': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u2561': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2562': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2563': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u2564': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '\u2565': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2566': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2567': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2568': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u2569': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u256A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u256B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u256C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '\u256D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '\u256E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u256F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u2570': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '\u2571': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '\u2572': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '\u2573': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '\u2574': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '\u2575': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '\u2576': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '\u2577': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '\u2578': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '\u2579': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '\u257A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '\u257B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '\u257C': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u257D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u257E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u257F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '\u2580': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '\u2581': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '\u2582': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '\u2583': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '\u2584': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '\u2585': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '\u2586': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '\u2587': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '\u2588': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '\u2589': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '\u258A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '\u258B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '\u258C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '\u258D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '\u258E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '\u258F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '\u2590': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '\u2591': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '\u2592': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '\u2593': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '\u2594': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '\u2595': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '\u2596': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '\u2597': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '\u2598': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '\u2599': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '\u259A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '\u259B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '\u259C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '\u259D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '\u259E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '\u259F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * \u2500a\u2500\n * \u2502 \u2502\n * f b\n * \u2500g\u2500\n * e c\n * \u2502 \u2502\n * \u2500d\u2500\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n", "import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n public clearTexture(): void {\n if (this._pages[0].currentRow.x === 0 && this._pages[0].currentRow.y === 0) {\n return;\n }\n for (const page of this._pages) {\n page.clear();\n }\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n\n // Invalidate renderer models so all texture pages are refreshed. The atlas may be shared, in\n // which case the clearing renderer has cleared only its own model and every other owner still\n // holds texture coords into the rows just wiped.\n this._pageLayoutVersion++;\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded \u2014 both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals}\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n while (this._charAtlas && this._glyphRenderer.value.beginFrame() && mergeRetries++ < Constants.MERGE_RETRY_LIMIT) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"], +- "mappings": "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", - "names": ["toDisposable", "fn", "dispose", "arg", "d", "combinedDisposable", "disposables", "DisposableStore", "o", "Disposable", "MutableDisposable", "value", "isNode", "userAgent", "platform", "isFirefox", "isChrome", "isLegacyEdge", "isSafari", "getSafariVersion", "isSafari", "majorVersion", "userAgent", "isMac", "platform", "isWindows", "isLinux", "isChromeOS", "$r", "$g", "$b", "$a", "NULL_COLOR", "channels", "toCss", "r", "g", "b", "a", "toPaddedHex", "toRgba", "toColor", "color", "blend", "bg", "fg", "fgR", "fgG", "fgB", "bgR", "bgG", "bgB", "css", "rgba", "isOpaque", "ensureContrastRatio", "ratio", "result", "opaque", "rgbaColor", "opacity", "multiplyOpacity", "factor", "toColorRGB", "$ctx", "$litmusColor", "canvas", "ctx", "rgbaMatch", "rgb", "relativeLuminance", "relativeLuminance2", "rs", "gs", "bs", "rr", "rg", "rb", "bgRgba", "fgRgba", "bgL", "fgL", "contrastRatio", "resultA", "reduceLuminance", "resultARatio", "resultB", "increaseLuminance", "resultBRatio", "cr", "toChannels", "value", "c", "s", "l1", "l2", "throwIfFalsy", "value", "isPowerlineGlyph", "codepoint", "isRestrictedPowerlineGlyph", "isNerdFontGlyph", "isBoxOrBlockGlyph", "isEmoji", "allowRescaling", "width", "glyphSizeX", "deviceCellWidth", "treatGlyphAsBackgroundColor", "createRenderDimensions", "createDimension", "computeNextVariantOffset", "cellWidth", "lineWidth", "currentOffset", "GitBranchSymbolsParts", "xp", "yp", "customGlyphDefinitions", "sextant", "segmentedDigit", "_", "i", "blockPatternCodepoints", "pattern", "rects", "rowH", "rowY", "row", "leftBit", "rightBit", "paths", "x1", "x2", "x3", "y1", "y2", "$fg", "$bg", "$hasFg", "$hasBg", "$isSelected", "$colors", "$variantOffset", "CellColorResolver", "_terminal", "_optionService", "_selectionRenderModel", "_decorationService", "_coreBrowserService", "_themeService", "cell", "x", "y", "deviceCellWidth", "deviceCellHeight", "code", "lineWidth", "blockPatternCodepoints", "d", "rgba", "treatGlyphAsBackgroundColor", "DIM_OPACITY", "TEXT_BASELINE", "isFirefox", "isLegacyEdge", "createOffscreenPatternCanvas", "width", "height", "createDomPatternCanvas", "canvas", "createPatternCanvas", "offscreenCanvasFactory", "domCanvasFactory", "tryDrawCustomGlyph", "ctx", "c", "xOffset", "yOffset", "deviceCellWidth", "deviceCellHeight", "deviceCharWidth", "deviceCharHeight", "fontSize", "devicePixelRatio", "logService", "backgroundColor", "variantOffset", "unifiedCharDefinition", "customGlyphDefinitions", "parts", "part", "drawDefinitionPart", "drawWidth", "drawHeight", "drawXOffset", "drawYOffset", "applyClipPath", "drawBlockVectorChar", "drawPatternChar", "drawPathFunctionCharacter", "drawPathDefinitionCharacter", "drawPathNegativeDefinitionCharacter", "drawVectorShape", "drawBrailleCharacter", "charDefinition", "i", "box", "xEighth", "yEighth", "brailleDotPositions", "pattern", "paddingY", "radius", "bit", "x", "y", "cx", "cy", "strokeWidth", "instructions", "currentX", "currentY", "lastControlX", "lastControlY", "lastCommand", "instruction", "type", "args", "rx", "ry", "xAxisRotation", "largeArcFlag", "sweepFlag", "drawSvgArc", "translatedArgs", "e", "val", "cpX", "cpY", "x1", "y1", "phi", "x2", "y2", "cosPhi", "sinPhi", "dx", "dy", "x1p", "y1p", "rxSq", "rySq", "x1pSq", "y1pSq", "lambda", "lambdaSqrt", "sq", "coef", "cxp", "cyp", "ux", "uy", "vx", "vy", "startAngle", "dTheta", "endAngle", "cachedPatterns", "patternSet", "fillStyle", "tmpCanvas", "tmpCtx", "throwIfFalsy", "imageData", "r", "g", "b", "a", "actualInstructions", "yp", "state", "f", "svgToCanvasInstructionMap", "translateArgs", "clipPath", "clipRegion", "cssLineWidth", "clamp", "value", "max", "min", "cellWidth", "cellHeight", "doClamp", "leftPadding", "rightPadding", "clampToCell", "result", "rounded", "TwoKeyMap", "first", "second", "value", "FourKeyMap", "third", "fourth", "TaskQueue", "logService", "task", "deadline", "taskDuration", "longestTask", "lastDeadlineRemaining", "deadlineRemaining", "PriorityTaskQueue", "callback", "identifier", "duration", "end", "IdleTaskQueueInternal", "IdleTaskQueue", "AttributeData", "_AttributeData", "ExtendedAttrs", "value", "newObj", "_ExtendedAttrs", "ext", "urlId", "val", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "i", "len", "EventUtils", "forward", "from", "to", "e", "map", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "NULL_RASTERIZED_GLYPH", "TMP_CANVAS_GLYPH_PADDING", "$glyph", "TextureAtlas", "_TextureAtlas", "_document", "_config", "_unicodeService", "_logService", "FourKeyMap", "AttributeData", "Emitter", "createCanvas", "TMP_CANVAS_GLYPH_PADDING", "throwIfFalsy", "page", "queue", "IdleTaskQueue", "i", "rasterizedGlyph", "pagesBySize", "e", "a", "b", "sameSizeI", "size", "mergingPages", "p", "newPage", "AtlasPage", "sortedMergingPagesIndexes", "mergedPageIndex", "mergedPage", "mergedSize", "xOffset", "yOffset", "g", "index", "pageIndex", "j", "adjustingPage", "startTime", "pageCount", "chars", "bg", "fg", "ext", "restrictToCellHeight", "domContainer", "code", "cacheMap", "key", "idx", "bgColorMode", "bgColor", "inverse", "dim", "NULL_COLOR", "result", "arr", "channels", "color", "fgColorMode", "fgColor", "bold", "excludeFromContrastRatioDemands", "minimumContrastColor", "DIM_OPACITY", "cache", "adjustedColor", "bgRgba", "fgRgba", "rgba", "codeOrChars", "allowedWidth", "allowedHeight", "NULL_RASTERIZED_GLYPH", "italic", "underline", "strikethrough", "overline", "temp", "temp2", "backgroundColor", "fontWeight", "fontStyle", "TEXT_BASELINE", "powerlineGlyph", "isPowerlineGlyph", "restrictedPowerlineGlyph", "isRestrictedPowerlineGlyph", "foregroundColor", "treatGlyphAsBackgroundColor", "padding", "customGlyph", "variantOffset", "tryDrawCustomGlyph", "enableClearThresholdCheck", "chWidth", "lineWidth", "xLeft", "yTopDefault", "yBotDefault", "nextOffset", "yTop", "yBot", "wasFilled", "xChLeft", "xChRight", "clipRegion", "cellW", "curlyH", "scaleX", "scaleY", "polygons", "polygon", "x", "y", "offsetWidth", "computeNextVariantOffset", "lineRatio", "gapRatio", "xChWidth", "line", "gap", "end", "metrics", "isBeyondCellBounds", "clearColor", "offset", "imageData", "isEmpty", "checkCompletelyTransparent", "activePage", "activeRow", "row", "wasPageAndRowFound", "candidatePage", "boundingBox", "restrictedGlyph", "height", "width", "found", "alphaOffset", "_AtlasPage", "document", "sourcePages", "glyph", "enableThresholdCheck", "r", "fgR", "fgG", "fgB", "threshold", "canvas", "generateConfig", "deviceCellWidth", "deviceCellHeight", "deviceCharWidth", "deviceCharHeight", "options", "colors", "devicePixelRatio", "deviceMaxTextureSize", "customGlyphs", "clonedColors", "NULL_COLOR", "configEquals", "a", "b", "i", "is256Color", "colorCode", "charAtlasCache", "acquireTextureAtlas", "terminal", "options", "colors", "deviceCellWidth", "deviceCellHeight", "deviceCharWidth", "deviceCharHeight", "devicePixelRatio", "deviceMaxTextureSize", "customGlyphs", "newConfig", "generateConfig", "i", "entry", "ownedByIndex", "configEquals", "core", "logService", "newEntry", "TextureAtlas", "removeTerminalFromCache", "index", "CursorBlinkStateManager", "_renderCallback", "_coreBrowserService", "timeToStart", "time", "observeDevicePixelDimensions", "element", "parentWindow", "callback", "observer", "entries", "entry", "width", "height", "toDisposable", "stringFromCodePoint", "codePoint", "CellData", "_CellData", "AttributeData", "ExtendedAttrs", "value", "obj", "stringFromCodePoint", "combined", "code", "second", "other", "thisDefault", "otherDefault", "TextBlinkStateManager", "Disposable", "_renderCallback", "_coreBrowserService", "_optionsService", "duration", "toDisposable", "needsBlinkInViewport", "isVisible", "wasBlinkOn", "PROJECTION_MATRIX", "createProgram", "gl", "vertexSource", "fragmentSource", "logService", "program", "throwIfFalsy", "createShader", "type", "source", "shader", "expandFloat32Array", "max", "newLength", "newArray", "i", "GLTexture", "texture", "vertexShaderSource", "createFragmentShaderSource", "maxFragmentShaderTextureUnits", "textureConditionals", "i", "$i", "$glyph", "$leftCellPadding", "$clippedPixels", "GlyphRenderer", "Disposable", "_terminal", "_gl", "_dimensions", "_optionsService", "_logService", "gl", "TextureAtlas", "throwIfFalsy", "createProgram", "vertexShaderSource", "createFragmentShaderSource", "toDisposable", "vertexArrayObject", "unitQuadVertices", "unitQuadVerticesBuffer", "unitQuadElementIndices", "elementIndicesBuffer", "textureUnits", "i", "PROJECTION_MATRIX", "glTexture", "GLTexture", "x", "y", "code", "bg", "fg", "ext", "chars", "width", "lastBg", "array", "allowRescaling", "terminal", "newCount", "renderModel", "activeBuffer", "bufferLength", "si", "sub", "pageCount", "atlas", "dimensions", "SelectionRenderModel", "terminal", "start", "end", "columnSelectMode", "viewportY", "viewportStartRow", "viewportEndRow", "viewportCappedStartRow", "viewportCappedEndRow", "x", "y", "createSelectionRenderModel", "COMBINED_CHAR_BIT_MASK", "RenderModel", "createSelectionRenderModel", "cols", "rows", "indexCount", "vertexShaderSource", "fragmentShaderSource", "INDICES_PER_RECTANGLE", "BYTES_PER_RECTANGLE", "INITIAL_BUFFER_RECTANGLE_CAPACITY", "Vertices", "$rgba", "$x1", "$y1", "$r", "$g", "$b", "$a", "RectangleRenderer", "Disposable", "_terminal", "_gl", "_dimensions", "_themeService", "_logService", "gl", "throwIfFalsy", "createProgram", "toDisposable", "vertexArrayObject", "unitQuadVertices", "unitQuadVerticesBuffer", "unitQuadElementIndices", "elementIndicesBuffer", "e", "vertices", "PROJECTION_MATRIX", "dimensions", "colors", "model", "terminal", "rectangleCount", "y", "x", "currentStartX", "currentBg", "currentFg", "currentInverse", "modelIndex", "bg", "fg", "inverse", "offset", "cursor", "startX", "endX", "expandFloat32Array", "array", "x1", "y1", "width", "height", "r", "g", "b", "a", "color", "BaseRenderLayer", "Disposable", "terminal", "_container", "id", "zIndex", "_alpha", "_coreBrowserService", "_optionsService", "_themeService", "e", "toDisposable", "throwIfFalsy", "startRow", "endRow", "start", "end", "columnSelectMode", "alpha", "oldCanvas", "colorSet", "acquireTextureAtlas", "dim", "x", "y", "width", "height", "cell", "TEXT_BASELINE", "isBold", "isItalic", "fontWeight", "LinkRenderLayer", "BaseRenderLayer", "container", "zIndex", "terminal", "linkifier2", "coreBrowserService", "optionsService", "themeService", "e", "dim", "middleRowCount", "is256Color", "y", "DomListener", "node", "type", "handler", "options", "addDisposableListener", "useCaptureOrOptions", "WebglRenderer", "Disposable", "_terminal", "_characterJoinerService", "_charSizeService", "_coreBrowserService", "_coreService", "_decorationService", "_logService", "_optionsService", "_themeService", "_customGlyphs", "preserveDrawingBuffer", "MutableDisposable", "RenderModel", "CellData", "Emitter", "contextAttributes", "CellColorResolver", "LinkRenderLayer", "createRenderDimensions", "TextBlinkStateManager", "addDisposableListener", "e", "removeTerminalFromCache", "observeDevicePixelDimensions", "w", "h", "toDisposable", "l", "cols", "rows", "isVisible", "start", "end", "columnSelectMode", "RectangleRenderer", "GlyphRenderer", "atlas", "acquireTextureAtlas", "combinedDisposable", "EventUtils", "clearGlyphRenderer", "merged", "mergeRetries", "CursorBlinkStateManager", "terminal", "cell", "lastBg", "y", "row", "line", "joinedRanges", "isJoined", "skipJoinedCheckUntilX", "isValidJoinRange", "lastCharX", "range", "isCursorRow", "chars", "code", "width", "i", "x", "j", "clamp", "cursorStyle", "cursorY", "viewportRelativeCursorY", "cursorX", "lastCursorX", "isCursorVisible", "modelUpdated", "bufferLine", "rowHasBlinkingCells", "firstSelectionState", "JoinedCellData", "COMBINED_CHAR_BIT_MASK", "cellIndex", "bg", "fg", "ext", "hasBlinkingCells", "height", "AttributeData", "firstCell", "value", "max", "min", "WebglAddon", "Disposable", "options", "isSafari", "getSafariVersion", "contextAttributes", "Emitter", "terminal", "core", "coreService", "optionsService", "unsafeCore", "renderService", "characterJoinerService", "charSizeService", "coreBrowserService", "decorationService", "logService", "themeService", "WebglRenderer", "EventUtils", "toDisposable"] -+ "sourcesContent": ["/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** \u2502 */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** \u2500 */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** \u2514 */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** \u2518 */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** \u2510 */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** \u250C */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** \u2575 */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** \u2574 */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** \u2576 */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** \u2577 */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** \u2534 */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** \u2524 */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** \u251C */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** \u252C */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** \u253C */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** \u254C */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** \u2504 */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** \u2509 */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** \u254E */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** \u2506 */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** \u250A */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '\u2500': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '\u2501': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '\u2502': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '\u2503': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '\u2504': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2505': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u2506': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '\u2507': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '\u2508': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2509': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u250A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '\u250B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '\u250C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '\u250D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u250E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u250F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '\u2510': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '\u2511': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2512': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2513': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '\u2514': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '\u2515': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2516': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2517': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '\u2518': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '\u2519': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u251A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '\u251C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '\u251D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u251E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2520': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2521': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2522': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2523': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '\u2524': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '\u2525': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2526': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2527': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2528': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2529': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u252A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u252B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '\u252C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '\u252D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u252E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u252F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2530': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2531': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2532': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2533': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '\u2534': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '\u2535': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2536': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2537': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2538': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2539': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u253A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u253B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '\u253C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '\u253D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u253E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u253F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2540': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2541': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2542': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2543': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u2544': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2545': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2546': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2547': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '\u2548': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '\u2549': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '\u254A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '\u254B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '\u254C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u254D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u254E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '\u254F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '\u2550': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2551': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '\u2552': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2553': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2554': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2555': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2556': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '\u2557': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2558': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '\u2559': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u255A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u255B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '\u255C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '\u255D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u255E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u255F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '\u2560': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u2561': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2562': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2563': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u2564': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '\u2565': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2566': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2567': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2568': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u2569': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u256A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u256B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u256C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '\u256D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '\u256E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u256F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u2570': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '\u2571': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '\u2572': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '\u2573': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '\u2574': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '\u2575': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '\u2576': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '\u2577': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '\u2578': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '\u2579': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '\u257A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '\u257B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '\u257C': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u257D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u257E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u257F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '\u2580': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '\u2581': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '\u2582': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '\u2583': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '\u2584': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '\u2585': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '\u2586': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '\u2587': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '\u2588': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '\u2589': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '\u258A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '\u258B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '\u258C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '\u258D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '\u258E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '\u258F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '\u2590': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '\u2591': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '\u2592': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '\u2593': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '\u2594': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '\u2595': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '\u2596': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '\u2597': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '\u2598': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '\u2599': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '\u259A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '\u259B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '\u259C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '\u259D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '\u259E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '\u259F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * \u2500a\u2500\n * \u2502 \u2502\n * f b\n * \u2500g\u2500\n * e c\n * \u2502 \u2502\n * \u2500d\u2500\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n", "import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { FontWeight } from '@xterm/xterm';\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n // Orca diagnostics: read by terminal-render-desync-weight-probe.ts to tell a real\n // bold-collapse from a repaint problem. Canvas silently keeps its previous font when an\n // assignment fails to parse, which rasterizes glyphs at a stale weight.\n public fontProbeMismatchCount = 0;\n public fontProbeLastMismatch: { desired: string, actual: string } | undefined;\n\n public clearTexture(): void {\n // Guard on every page rather than pages[0]: a merged page is never written through\n // currentRow, so once one lands at index 0 the old check made every later clear a no-op.\n if (this._pages.every(page => page.glyphs.length === 0 && page.currentRow.x === 0 && page.currentRow.y === 0)) {\n return;\n }\n // Return the atlas to its constructor state instead of clearing in place: page.clear() leaves\n // page.glyphs populated, which would keep the guard above from ever firing again. Eviction\n // also bumps _pageLayoutVersion, so every renderer sharing this atlas rebuilds its model.\n this._evictAllPages();\n this._createNewPage();\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n /**\n * Orca diagnostic. Canvas ignores a font assignment it cannot parse and silently keeps the\n * previous value, so a bad family or weight rasterizes every glyph at a stale weight. Record\n * the mismatch rather than correcting it: the goal is to tell that failure apart from a\n * repaint bug when a terminal renders bold-collapsed.\n */\n private _probeRasterizationFontWeight(fontWeight: FontWeight): void {\n const desired = String(fontWeight);\n // Only numeric weights are comparable; keywords round-trip through Canvas unchanged.\n if (!/^(?:[1-8]\\d{2}|900)$/.test(desired)) {\n return;\n }\n // Canvas normalizes font serialization: Chromium omits 400 and emits the keyword bold for 700.\n const token = this._tmpCtx.font.match(\n /(?:^|\\s)(normal|bold|[1-9]\\d{0,3})(?=\\s+\\d+(?:\\.\\d+)?px(?:\\s|$))/\n )?.[1] ?? '400';\n const actual = token === 'normal' ? '400' : token === 'bold' ? '700' : token;\n if (actual === desired) {\n return;\n }\n this.fontProbeMismatchCount++;\n this.fontProbeLastMismatch = { desired, actual: this._tmpCtx.font };\n try {\n (globalThis as { __orcaAtlasFontProbe?: (mismatch: { desired: string, actual: string }) => void })\n .__orcaAtlasFontProbe?.(this.fontProbeLastMismatch);\n } catch {\n // Diagnostics only; a throwing listener must never break rasterization.\n }\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._probeRasterizationFontWeight(fontWeight);\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded \u2014 both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n // A v_texpage beyond the sampler budget matches no branch above. Leaving outColor unwritten\n // is undefined behaviour in GLSL ES and paints garbage, so fall through to transparent.\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals} else { outColor = vec4(0.0, 0.0, 0.0, 0.0); }\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n // Test the retry budget before beginFrame: beginFrame latches the page layout version it\n // observed, so tripping the limit after consuming it would strand a stale model with no\n // later frame able to notice it needs rebuilding.\n while (this._charAtlas && mergeRetries++ < Constants.MERGE_RETRY_LIMIT && this._glyphRenderer.value.beginFrame()) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"], -+ "mappings": "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", ++ "sourcesContent": ["/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';\n\n/* oxlint-disable @stylistic/max-len -- generated glyph path data */\n\nconst enum Shapes {\n /** \u2502 */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',\n /** \u2500 */ LEFT_TO_RIGHT = 'M0,.5 L1,.5',\n\n /** \u2514 */ TOP_TO_RIGHT = 'M.5,0 L.5,.5 L1,.5',\n /** \u2518 */ TOP_TO_LEFT = 'M.5,0 L.5,.5 L0,.5',\n /** \u2510 */ LEFT_TO_BOTTOM = 'M0,.5 L.5,.5 L.5,1',\n /** \u250C */ RIGHT_TO_BOTTOM = 'M0.5,1 L.5,.5 L1,.5',\n\n /** \u2575 */ MIDDLE_TO_TOP = 'M.5,.5 L.5,0',\n /** \u2574 */ MIDDLE_TO_LEFT = 'M.5,.5 L0,.5',\n /** \u2576 */ MIDDLE_TO_RIGHT = 'M.5,.5 L1,.5',\n /** \u2577 */ MIDDLE_TO_BOTTOM = 'M.5,.5 L.5,1',\n\n /** \u2534 */ T_TOP = 'M0,.5 L1,.5 M.5,.5 L.5,0',\n /** \u2524 */ T_LEFT = 'M.5,0 L.5,1 M.5,.5 L0,.5',\n /** \u251C */ T_RIGHT = 'M.5,0 L.5,1 M.5,.5 L1,.5',\n /** \u252C */ T_BOTTOM = 'M0,.5 L1,.5 M.5,.5 L.5,1',\n\n /** \u253C */ CROSS = 'M0,.5 L1,.5 M.5,0 L.5,1',\n\n /** \u254C */ TWO_DASHES_HORIZONTAL = 'M.1,.5 L.4,.5 M.6,.5 L.9,.5', // .2 empty, .3 filled\n /** \u2504 */ THREE_DASHES_HORIZONTAL = 'M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5', // .1333 empty, .2 filled\n /** \u2509 */ FOUR_DASHES_HORIZONTAL = 'M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5', // .1 empty, .15 filled\n /** \u254E */ TWO_DASHES_VERTICAL = 'M.5,.1 L.5,.4 M.5,.6 L.5,.9',\n /** \u2506 */ THREE_DASHES_VERTICAL = 'M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333',\n /** \u250A */ FOUR_DASHES_VERTICAL = 'M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95',\n}\n\nnamespace GitBranchSymbolsParts {\n // Lines\n export const LINE_H: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 });\n export const LINE_V: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 });\n\n // Fading lines\n export const FADE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.28,.5 M.32,.5 L.52,.5 M.60,.5 L.72,.5 M.84,.5 L.90,.5', strokeWidth: 1 });\n export const FADE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.10,.5 L.16,.5 M.28,.5 L.40,.5 M.48,.5 L.68,.5 M.72,.5 L1,.5', strokeWidth: 1 });\n export const FADE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L.5,.28 M.5,.32 L.5,.52 M.5,.60 L.5,.72 M.5,.84 L.5,.90', strokeWidth: 1 });\n export const FADE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,.10 L.5,.16 M.5,.28 L.5,.40 M.5,.48 L.5,.68 M.5,.72 L.5,1', strokeWidth: 1 });\n\n // Curved corners\n export const CURVE_DOWN_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_DOWN_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n export const CURVE_UP_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 });\n export const CURVE_UP_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp: number, yp: number) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 });\n\n // Node parts\n export const NODE_FILL: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5' });\n export const NODE_STROKE: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.85,.5 A.35,.175,0,1,1,.15,.5 A.35,.175,0,1,1,.85,.5', strokeWidth: 1 });\n export const NODE_LINE_RIGHT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M1,.5 L.85,.5', strokeWidth: 1 });\n export const NODE_LINE_LEFT: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M0,.5 L.15,.5', strokeWidth: 1 });\n export const NODE_LINE_DOWN: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,1 L.5,.7', strokeWidth: 1 });\n export const NODE_LINE_UP: CustomGlyphDefinitionPart = Object.freeze({ type: CustomGlyphDefinitionType.PATH, data: 'M.5,0 L.5,.3', strokeWidth: 1 });\n}\n\nexport const customGlyphDefinitions: { [index: string]: CustomGlyphCharacterDefinition | undefined } = {\n // #region Box Drawing (2500-257F)\n\n // https://www.unicode.org/charts/PDF/U2500.pdf\n\n // Light and heavy solid lines (2500-2503)\n '\u2500': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 },\n '\u2501': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 },\n '\u2502': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 },\n '\u2503': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 },\n\n // Light and heavy dashed lines (2504-250B)\n '\u2504': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2505': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u2506': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 1 },\n '\u2507': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.THREE_DASHES_VERTICAL, strokeWidth: 3 },\n '\u2508': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u2509': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u250A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 1 },\n '\u250B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.FOUR_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Light and heavy line box components (250C-254B)\n '\u250C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 },\n '\u250D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u250E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u250F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 },\n '\u2510': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 },\n '\u2511': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2512': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2513': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 },\n '\u2514': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 },\n '\u2515': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2516': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2517': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 },\n '\u2518': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 },\n '\u2519': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u251A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 },\n '\u251C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 1 },\n '\u251D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u251E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u251F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2520': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2521': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2522': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2523': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_RIGHT, strokeWidth: 3 },\n '\u2524': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 1 },\n '\u2525': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2526': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2527': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2528': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2529': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u252A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u252B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_LEFT, strokeWidth: 3 },\n '\u252C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 1 },\n '\u252D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u252E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u252F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2530': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2531': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2532': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2533': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_BOTTOM, strokeWidth: 3 },\n '\u2534': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 1 },\n '\u2535': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u2536': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u2537': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2538': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2539': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u253A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u253B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.T_TOP, strokeWidth: 3 },\n '\u253C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 1 },\n '\u253D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u253E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u253F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 3 }],\n '\u2540': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n '\u2541': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u2542': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_BOTTOM, strokeWidth: 3 }],\n '\u2543': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 3 }],\n '\u2544': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 3 }],\n '\u2545': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.LEFT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2546': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TOP_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.RIGHT_TO_BOTTOM, strokeWidth: 3 }],\n '\u2547': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.MIDDLE_TO_TOP} ${Shapes.LEFT_TO_RIGHT}`, strokeWidth: 3 }],\n '\u2548': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} ${Shapes.MIDDLE_TO_BOTTOM}`, strokeWidth: 3 }],\n '\u2549': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_LEFT}`, strokeWidth: 3 }],\n '\u254A': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.TOP_TO_BOTTOM} ${Shapes.MIDDLE_TO_RIGHT}`, strokeWidth: 3 }],\n '\u254B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.CROSS, strokeWidth: 3 },\n\n // Light and heavy dashed lines (254C-254F)\n '\u254C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 1 },\n '\u254D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_HORIZONTAL, strokeWidth: 3 },\n '\u254E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 1 },\n '\u254F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.TWO_DASHES_VERTICAL, strokeWidth: 3 },\n\n // Double lines (2550-2551)\n '\u2550': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2551': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n\n // Light and double line box components (2552-256C)\n '\u2552': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2553': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},1 L${.5 - xp},.5 L1,.5 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2554': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2555': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L.5,${.5 - yp} L.5,1 M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2556': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},1 L${.5 + xp},.5 L0,.5 M${.5 - xp},.5 L${.5 - xp},1`, strokeWidth: 1 },\n '\u2557': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2558': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 + yp} L1,${.5 + yp} M.5,${.5 - yp} L1,${.5 - yp}`, strokeWidth: 1 },\n '\u2559': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,.5 L${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u255A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0 M1,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u255B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L.5,${.5 + yp} L.5,0 M0,${.5 - yp} L.5,${.5 - yp}`, strokeWidth: 1 },\n '\u255C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 + xp},.5 L${.5 + xp},0 M${.5 - xp},.5 L${.5 - xp},0`, strokeWidth: 1 },\n '\u255D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M0,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u255E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M.5,${.5 - yp} L1,${.5 - yp} M.5,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u255F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1 M${.5 + xp},.5 L1,.5`, strokeWidth: 1 },\n '\u2560': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 - xp},0 L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u2561': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L.5,${.5 - yp} M0,${.5 + yp} L.5,${.5 + yp}`, strokeWidth: 1 },\n '\u2562': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,.5 L${.5 - xp},.5 M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2563': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M${.5 + xp},0 L${.5 + xp},1 M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0`, strokeWidth: 1 },\n '\u2564': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp} M.5,${.5 + yp} L.5,1`, strokeWidth: 1 },\n '\u2565': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},1 M${.5 + xp},.5 L${.5 + xp},1`, strokeWidth: 1 },\n '\u2566': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1`, strokeWidth: 1 },\n '\u2567': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - yp} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u2568': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},.5 L${.5 - xp},0 M${.5 + xp},.5 L${.5 + xp},0`, strokeWidth: 1 },\n '\u2569': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L1,${.5 + yp} M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n '\u256A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.TOP_TO_BOTTOM} M0,${.5 - yp} L1,${.5 - yp} M0,${.5 + yp} L1,${.5 + yp}`, strokeWidth: 1 },\n '\u256B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `${Shapes.LEFT_TO_RIGHT} M${.5 - xp},0 L${.5 - xp},1 M${.5 + xp},0 L${.5 + xp},1`, strokeWidth: 1 },\n '\u256C': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M0,${.5 + yp} L${.5 - xp},${.5 + yp} L${.5 - xp},1 M1,${.5 + yp} L${.5 + xp},${.5 + yp} L${.5 + xp},1 M0,${.5 - yp} L${.5 - xp},${.5 - yp} L${.5 - xp},0 M1,${.5 - yp} L${.5 + xp},${.5 - yp} L${.5 + xp},0`, strokeWidth: 1 },\n\n // Character cell arcs (256D-2570)\n '\u256D': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n '\u256E': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,1 L.5,${.5 + (yp / .15 * .5)} C.5,${.5 + (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u256F': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,0,.5`, strokeWidth: 1 },\n '\u2570': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: (xp, yp) => `M.5,0 L.5,${.5 - (yp / .15 * .5)} C.5,${.5 - (yp / .15 * .5)},.5,.5,1,.5`, strokeWidth: 1 },\n\n // Character cell diagonals (2571-2573)\n '\u2571': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1', strokeWidth: 1 },\n '\u2572': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,1', strokeWidth: 1 },\n '\u2573': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,1 M0,0 L1,1', strokeWidth: 1 },\n\n // Light and heavy half lines (2574-257B)\n '\u2574': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 },\n '\u2575': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 },\n '\u2576': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 },\n '\u2577': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 },\n '\u2578': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 },\n '\u2579': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 },\n '\u257A': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 },\n '\u257B': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 },\n\n // Mixed light and heavy lines (257C-257F)\n '\u257C': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 3 }],\n '\u257D': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 3 }],\n '\u257E': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_RIGHT, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_LEFT, strokeWidth: 3 }],\n '\u257F': [{ type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_BOTTOM, strokeWidth: 1 }, { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: Shapes.MIDDLE_TO_TOP, strokeWidth: 3 }],\n\n // #endregion\n\n // #region Block elements (2580-259F)\n\n // https://www.unicode.org/charts/PDF/U2580.pdf\n\n // Block elements (2580-2590)\n '\u2580': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }, // UPPER HALF BLOCK\n '\u2581': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 7, w: 8, h: 1 }] }, // LOWER ONE EIGHTH BLOCK\n '\u2582': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 2 }] }, // LOWER ONE QUARTER BLOCK\n '\u2583': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 3 }] }, // LOWER THREE EIGHTHS BLOCK\n '\u2584': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }, // LOWER HALF BLOCK\n '\u2585': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 5 }] }, // LOWER FIVE EIGHTHS BLOCK\n '\u2586': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 6 }] }, // LOWER THREE QUARTERS BLOCK\n '\u2587': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 7 }] }, // LOWER SEVEN EIGHTHS BLOCK\n '\u2588': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 8 }] }, // FULL BLOCK (=solid -> 25A0=black square)\n '\u2589': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 7, h: 8 }] }, // LEFT SEVEN EIGHTHS BLOCK\n '\u258A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 6, h: 8 }] }, // LEFT THREE QUARTERS BLOCK\n '\u258B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 5, h: 8 }] }, // LEFT FIVE EIGHTHS BLOCK\n '\u258C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }] }, // LEFT HALF BLOCK\n '\u258D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 3, h: 8 }] }, // LEFT THREE EIGHTHS BLOCK\n '\u258E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 2, h: 8 }] }, // LEFT ONE QUARTER BLOCK\n '\u258F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }] }, // LEFT ONE EIGHTH BLOCK\n '\u2590': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }, // RIGHT HALF BLOCK\n\n // Shade characters (2591-2593)\n '\u2591': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LIGHT SHADE (25%)\n [1, 0],\n [0, 0]\n ] },\n '\u2592': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // MEDIUM SHADE (=speckles fill, dotted fill, 50%, used in mapping to cp949, -> 1FB90 inverse medium shade)\n [1, 0],\n [0, 1]\n ] },\n '\u2593': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // DARK SHADE (75%)\n [1, 1],\n [1, 0]\n ] },\n\n // Block elements (2594-2595)\n '\u2594': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }] }, // UPPER ONE EIGHTH BLOCK\n '\u2595': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }] }, // RIGHT ONE EIGHTH BLOCK\n\n // Terminal graphic characters (2596-259F)\n '\u2596': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER LEFT\n '\u2597': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT LOWER RIGHT\n '\u2598': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT\n '\u2599': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT (-> 1F67F reverse checker board, -> 1FB95 checker board fill)\n '\u259A': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 4 }, { x: 4, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND LOWER RIGHT\n '\u259B': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 4, h: 8 }, { x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT\n '\u259C': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }, { x: 4, y: 0, w: 4, h: 8 }] }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT\n '\u259D': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT\n '\u259E': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 4 }, { x: 0, y: 4, w: 4, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT (-> 1F67E checker board, 1FB96 inverse checker board fill)\n '\u259F': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }, { x: 0, y: 4, w: 8, h: 4 }] }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT\n\n // #endregion\n\n // #region Powerline Symbols (E0A0-E0BF)\n\n // This contains the definitions of the primarily used box drawing characters as vector shapes.\n // The reason these characters are defined specially is to avoid common problems if a user's font\n // has not been patched with powerline characters and also to get pixel perfect rendering as\n // rendering issues can occur around AA/SPAA.\n //\n // The line variants draw beyond the cell and get clipped to ensure the end of the line is not\n // visible.\n //\n // Original symbols defined in https://github.com/powerline/fontpatcher\n\n // Git branch\n '\\u{E0A0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.3,1 L.03,1 L.03,.88 C.03,.82,.06,.78,.11,.73 C.15,.7,.2,.68,.28,.65 L.43,.6 C.49,.58,.53,.56,.56,.53 C.59,.5,.6,.47,.6,.43 L.6,.27 L.4,.27 L.69,.1 L.98,.27 L.78,.27 L.78,.46 C.78,.52,.76,.56,.72,.61 C.68,.66,.63,.67,.56,.7 L.48,.72 C.42,.74,.38,.76,.35,.78 C.32,.8,.31,.84,.31,.88 L.31,1 M.3,.5 L.03,.59 L.03,.09 L.3,.09 L.3,.655', type: CustomGlyphVectorType.FILL } },\n // LN (Line Number)\n '\\u{E0A1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.355,.03 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Lock\n '\\u{E0A2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.25,.94 C.16,.94,.11,.92,.11,.87 L.11,.53 C.11,.48,.15,.455,.23,.45 L.23,.3 C.23,.25,.26,.22,.31,.19 C.36,.16,.43,.15,.51,.15 C.59,.15,.66,.16,.71,.19 C.77,.22,.79,.26,.79,.3 L.79,.45 C.87,.45,.91,.48,.91,.53 L.91,.87 C.91,.92,.86,.94,.77,.94 L.24,.94 M.53,.2 C.49,.2,.45,.21,.42,.23 C.39,.25,.38,.27,.38,.3 L.38,.45 L.68,.45 L.68,.3 C.68,.27,.67,.25,.64,.23 C.61,.21,.58,.2,.53,.2 M.58,.82 L.58,.66 C.63,.65,.65,.63,.65,.6 C.65,.58,.64,.57,.61,.56 C.58,.55,.56,.54,.52,.54 C.48,.54,.46,.55,.43,.56 C.4,.57,.39,.59,.39,.6 C.39,.63,.41,.64,.46,.66 L.46,.82 L.57,.82', type: CustomGlyphVectorType.FILL } },\n // CN (Column Number)\n '\\u{E0A3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.7,.4 L.7,.47 L.2,.47 L.2,.03 L.7,.03 L.7,.1 L.355,.1 L.355,.4 L.705,.4 M.7,.5 L.86,.5 L.86,.95 L.69,.95 L.44,.66 L.46,.86 L.46,.95 L.3,.95 L.3,.49 L.46,.49 L.71,.78 L.69,.565 L.69,.5', type: CustomGlyphVectorType.FILL } },\n // Right triangle solid\n '\\u{E0B0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,.5 L0,1', type: CustomGlyphVectorType.FILL, rightPadding: 2 } },\n // Right triangle line\n '\\u{E0B1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-1,-.5 L1,.5 L-1,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Left triangle solid\n '\\u{E0B2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L0,.5 L1,1', type: CustomGlyphVectorType.FILL, leftPadding: 2 } },\n // Left triangle line\n '\\u{E0B3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M2,-.5 L0,.5 L2,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n\n // Powerline Extra Symbols\n\n // Original symbols defined in https://github.com/ryanoasis/powerline-extra-symbols\n\n // Right semi-circle solid\n '\\u{E0B4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,1 C0.552,1,1,0.776,1,.5 C1,0.224,0.552,0,0,0', type: CustomGlyphVectorType.FILL, rightPadding: 1 } },\n // Right semi-circle line\n '\\u{E0B5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.2,1 C.422,1,.8,.826,.78,.5 C.8,.174,0.422,0,.2,0', type: CustomGlyphVectorType.STROKE, rightPadding: 1 } },\n // Left semi-circle solid\n '\\u{E0B6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L1,1 C0.448,1,0,0.776,0,.5 C0,0.224,0.448,0,1,0', type: CustomGlyphVectorType.FILL, leftPadding: 1 } },\n // Left semi-circle line\n '\\u{E0B7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.8,1 C0.578,1,0.2,.826,.22,.5 C0.2,0.174,0.578,0,0.8,0', type: CustomGlyphVectorType.STROKE, leftPadding: 1 } },\n // Lower left triangle\n '\\u{E0B8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L-.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator\n '\\u{E0B9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Lower right triangle\n '\\u{E0BA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L1.5,1.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator redundant (identical to E0BD)\n '\\u{E0BB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper left triangle\n '\\u{E0BC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5 L-.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Forward slash separator\n '\\u{E0BD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1.5,-.5 L-.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n // Upper right triangle\n '\\u{E0BE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5 L1.5,-.5', type: CustomGlyphVectorType.FILL } },\n // Backslash separator redundant (identical to E0B9)\n '\\u{E0BF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M-.5,-.5 L1.5,1.5', type: CustomGlyphVectorType.STROKE, leftPadding: 1, rightPadding: 1 } },\n '\\u{E0C0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8069,0.6075 Q0.7991,0.612,0.7815,0.6218 T0.7542,0.6369 T0.7282,0.6508 T0.7016,0.6644 T0.6778,0.6758 T0.6551,0.6854 T0.637,0.6911 T0.622,0.6936 Q0.6186,0.6936,0.6128,0.6942 T0.6018,0.6952 T0.5894,0.6956 T0.5757,0.6952 T0.561,0.693 T0.5451,0.6879 Q0.5342,0.6834,0.5193,0.6756 T0.4925,0.6614 T0.4673,0.6485 T0.4436,0.6389 T0.4239,0.6363 T0.4089,0.6422 Q0.4045,0.6467,0.3958,0.6554 T0.3843,0.6669 T0.3748,0.6746 T0.3613,0.683 T0.3442,0.6903 L0.3499,0.6956 Q0.3584,0.7042,0.3679,0.7177 T0.3836,0.7403 T0.4019,0.7583 T0.4295,0.7703 Q0.4688,0.7785,0.5203,0.7605 Q0.4902,0.7817,0.449,0.7911 T0.3696,0.8001 Q0.3567,0.7997,0.341,0.7942 T0.3111,0.7813 T0.2805,0.766 T0.2493,0.753 T0.218,0.7472 T0.187,0.754 Q0.1762,0.7589,0.1653,0.7681 T0.1453,0.7895 T0.1308,0.818 T0.1264,0.8507 L0.1264,0.858 Q0.1453,0.8462,0.1607,0.8433 T0.1899,0.8452 T0.2226,0.8625 Q0.2344,0.8707,0.2485,0.8752 T0.2813,0.8831 T0.3089,0.889 Q0.2981,0.8915,0.2846,0.8956 T0.2603,0.9037 T0.2368,0.9115 T0.2129,0.9174 T0.1894,0.9194 T0.1653,0.9155 Q0.1504,0.9115,0.1328,0.9196 T0.0986,0.9421 T0.0655,0.9708 T0.0317,0.9943 T0,1 Q0.001,0.94,0.0017,0.6508 T0.0024,0.2322 Q0.002,0.2109,0.0007,0.1379 T0,0.0249 Q0.0058,0.0253,0.009,0.0257 T0.0156,0.0288 T0.0203,0.0333 T0.0264,0.0422 T0.0349,0.0539 Q0.044,0.0657,0.0542,0.072 T0.0752,0.0789 T0.096,0.0775 T0.1175,0.0694 T0.1379,0.0573 T0.1579,0.0432 Q0.2141,0,0.2673,0.0318 Q0.2588,0.0318,0.2517,0.033 T0.239,0.0361 T0.2276,0.0424 T0.218,0.0504 T0.2085,0.0612 T0.1997,0.0732 T0.1899,0.0875 T0.1795,0.1028 Q0.1748,0.1093,0.1507,0.1234 T0.1186,0.1448 Q0.0999,0.1612,0.1108,0.1783 Q0.1162,0.1877,0.1238,0.1928 T0.1404,0.1979 T0.158,0.1967 T0.1775,0.1895 T0.1963,0.1791 T0.2151,0.1663 T0.2314,0.1534 T0.2458,0.141 T0.2561,0.1322 Q0.2815,0.1106,0.3017,0.101 T0.344,0.0926 T0.3919,0.1077 Q0.4099,0.1175,0.4265,0.1206 T0.4588,0.1202 T0.488,0.1098 T0.5176,0.0914 Q0.5071,0.1032,0.4963,0.1122 T0.4722,0.1285 T0.4497,0.1401 T0.4223,0.1518 T0.3943,0.1636 Q0.374,0.1726,0.3623,0.1863 T0.3482,0.2162 Q0.3445,0.2403,0.3608,0.2605 T0.4072,0.2876 Q0.4194,0.2909,0.4326,0.2899 T0.457,0.2856 T0.4805,0.2764 T0.5032,0.264 T0.5256,0.2497 T0.5478,0.2352 T0.5698,0.2222 T0.5921,0.2118 Q0.6982,0.173,0.81,0.2436 Q0.833,0.2583,0.8496,0.2674 T0.887,0.2846 T0.925,0.294 T0.9617,0.2911 T1,0.2746 Q0.9817,0.2946,0.96,0.3056 T0.9175,0.3191 T0.8731,0.3209 T0.8277,0.3164 T0.7818,0.3109 T0.7359,0.3101 T0.6907,0.3197 T0.647,0.3448 Q0.6443,0.3472,0.6333,0.3562 T0.6194,0.3674 T0.6076,0.3766 T0.594,0.386 T0.5815,0.3931 T0.5661,0.4007 T0.5501,0.4064 L0.5556,0.4121 Q0.5627,0.4198,0.5722,0.4251 T0.5926,0.4337 T0.6131,0.439 T0.6343,0.4431 T0.6521,0.4468 Q0.6762,0.4529,0.7056,0.4463 Q0.6772,0.4623,0.6543,0.471 T0.604,0.4814 Q0.5962,0.4818,0.5815,0.4825 T0.5591,0.4835 T0.5393,0.4857 T0.519,0.4908 T0.5007,0.4996 T0.4812,0.5141 T0.4627,0.5353 L0.4549,0.5451 L0.4661,0.543 Q0.4759,0.541,0.4909,0.55 T0.5315,0.5796 T0.5684,0.6083 Q0.5799,0.6161,0.5915,0.6212 T0.6181,0.6308 L0.6331,0.6353 Q0.6514,0.6418,0.7004,0.633 T0.8069,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.011,0.0469 Q0.0152,0.0412,0.02,0.0361 T0.0292,0.0281 T0.0365,0.0253 Q0.0426,0.0257,0.0461,0.0263 T0.0534,0.03 T0.0582,0.0345 T0.0645,0.0434 T0.0723,0.0546 Q0.0807,0.0653,0.0897,0.0712 T0.1081,0.0775 T0.1255,0.0765 T0.1438,0.0695 T0.1605,0.0593 T0.1772,0.0473 Q0.2388,0,0.2927,0.0326 L0.2614,0.0767 L0.2581,0.0767 Q0.2494,0.0767,0.2444,0.0773 T0.2359,0.0789 T0.2291,0.0842 T0.2233,0.0922 T0.2146,0.1054 T0.2026,0.1236 Q0.1943,0.1354,0.1843,0.1444 T0.1675,0.1574 T0.1526,0.1654 T0.1429,0.1701 Q0.1436,0.1717,0.1446,0.1733 Q0.1504,0.1823,0.1581,0.1866 T0.1733,0.1915 T0.1909,0.1884 T0.2085,0.1809 T0.2265,0.169 T0.2427,0.1564 T0.2575,0.1436 T0.2688,0.1338 Q0.2969,0.1101,0.3195,0.0995 T0.3643,0.0901 T0.4114,0.1048 Q0.4279,0.1138,0.4426,0.1168 T0.4705,0.117 T0.4945,0.1089 T0.5186,0.0942 L0.5211,0.0926 L0.5289,0.0922 Q0.5411,0.095,0.5189,0.1203 Q0.505,0.1358,0.4913,0.1474 T0.4634,0.167 T0.4389,0.1796 T0.4121,0.1909 T0.3866,0.2011 Q0.3782,0.2047,0.3727,0.2092 Q0.3717,0.2117,0.3714,0.2141 Q0.3695,0.2263,0.3751,0.2388 T0.394,0.2616 T0.4253,0.2761 Q0.4398,0.2785,0.4513,0.2779 T0.4756,0.2724 T0.4987,0.2616 T0.5216,0.2476 T0.5453,0.2321 T0.5703,0.217 T0.5976,0.2043 Q0.7015,0.166,0.8099,0.2345 Q0.8361,0.2512,0.8572,0.2616 T0.9006,0.2779 T0.9432,0.281 T0.9819,0.2663 L0.9887,0.2671 Q1,0.272,0.9768,0.2969 Q0.9558,0.3193,0.9319,0.333 T0.8858,0.3513 T0.8391,0.3569 T0.793,0.3546 T0.7485,0.3497 T0.7065,0.3473 T0.6681,0.3522 T0.6344,0.3699 Q0.5963,0.4005,0.5847,0.4082 Q0.595,0.4139,0.6079,0.4174 T0.6367,0.4237 T0.6586,0.4278 Q0.6793,0.4331,0.7044,0.4278 Q0.7057,0.4278,0.707,0.4274 Q0.7067,0.429,0.7062,0.4313 T0.7036,0.4398 T0.6993,0.4513 T0.6931,0.4619 T0.6851,0.4698 Q0.6573,0.4857,0.6336,0.4947 T0.5831,0.5053 Q0.577,0.5057,0.5615,0.5065 T0.5394,0.508 T0.5221,0.51 T0.5042,0.5139 T0.4905,0.5204 Q0.5008,0.5232,0.515,0.5328 T0.549,0.5585 T0.5799,0.5824 Q0.5905,0.5897,0.6013,0.5946 T0.6262,0.6036 T0.6409,0.6081 Q0.6567,0.6134,0.7035,0.605 T0.8028,0.5816 L0.7974,0.5922 T0.7867,0.6134 L0.7812,0.624 Q0.7799,0.6248,0.7786,0.6252 Q0.7709,0.6297,0.7573,0.6372 T0.7346,0.6499 T0.7123,0.6621 T0.6897,0.6741 T0.6686,0.6847 T0.648,0.6941 T0.6297,0.7013 T0.6129,0.7062 T0.5995,0.7076 Q0.5992,0.7076,0.5831,0.7092 T0.5529,0.7092 T0.525,0.7019 Q0.5105,0.6958,0.4824,0.6811 T0.4356,0.6586 T0.4079,0.6533 Q0.3872,0.6741,0.3827,0.6782 Q0.3872,0.6835,0.3934,0.6929 T0.4037,0.7078 T0.4142,0.7198 T0.4284,0.7304 T0.4466,0.7365 Q0.4824,0.7443,0.5292,0.728 L0.5292,0.7294 T0.529,0.7333 T0.5284,0.7392 T0.5266,0.7463 T0.5236,0.7539 T0.5186,0.7612 T0.5111,0.7679 Q0.5086,0.77,0.5056,0.7716 Q0.4466,0.8104,0.3591,0.8091 Q0.344,0.8091,0.3246,0.802 T0.2893,0.7863 T0.2543,0.77 T0.2206,0.76 T0.1894,0.7643 Q0.1804,0.7684,0.1733,0.7753 Q0.1591,0.7892,0.1601,0.8169 Q0.1784,0.8067,0.1938,0.8053 T0.2212,0.8087 T0.2507,0.825 Q0.2614,0.8324,0.2744,0.8365 T0.3053,0.844 T0.332,0.8499 L0.303,0.894 L0.2998,0.8948 Q0.2904,0.8968,0.278,0.9009 T0.2554,0.9086 T0.233,0.9158 T0.2099,0.9213 T0.1868,0.9229 T0.1633,0.9192 Q0.1517,0.916,0.1367,0.9241 T0.1065,0.9462 T0.0753,0.9737 T0.041,0.9955 T0.0061,1 Q0,0.9984,0.0068,0.9845 Q0.009,0.9804,0.0123,0.9755 Q0.0187,0.9666,0.0261,0.9606 T0.0374,0.9555 Q0.0481,0.958,0.0629,0.949 T0.0931,0.9262 T0.1247,0.8987 T0.1597,0.8777 T0.1949,0.8752 Q0.213,0.8805,0.2343,0.8772 Q0.2249,0.8736,0.2172,0.8683 Q0.1914,0.8511,0.1738,0.8497 T0.1349,0.8617 Q0.1304,0.865,0.1273,0.8646 T0.1242,0.8605 L0.1239,0.8536 Q0.1226,0.8295,0.1354,0.8016 T0.1723,0.7496 Q0.1914,0.7308,0.2104,0.7219 Q0.2259,0.7145,0.2425,0.7141 T0.273,0.7182 T0.3022,0.7296 T0.3301,0.7439 T0.3569,0.7571 T0.3821,0.7643 Q0.373,0.7561,0.3598,0.7367 T0.3382,0.7088 L0.3327,0.7035 Q0.3282,0.699,0.3353,0.6884 T0.3517,0.6692 L0.3611,0.6607 Q0.3711,0.657,0.3751,0.6554 T0.3837,0.6507 T0.3898,0.6458 T0.3979,0.637 T0.4111,0.6236 Q0.4172,0.6175,0.4234,0.6138 Q0.4327,0.6081,0.4439,0.6077 T0.4655,0.6105 T0.4884,0.6201 T0.5113,0.633 T0.5347,0.6468 T0.5573,0.6578 Q0.5705,0.6635,0.5833,0.665 T0.6112,0.665 T0.6286,0.6635 Q0.6421,0.6631,0.6718,0.6501 Q0.626,0.6578,0.6089,0.6517 Q0.6063,0.6509,0.6002,0.6491 T0.5884,0.6454 T0.5757,0.6409 T0.561,0.6344 T0.5466,0.6256 Q0.536,0.6183,0.5108,0.5989 T0.4722,0.5712 T0.4527,0.564 L0.4418,0.5661 Q0.4308,0.5681,0.4366,0.5563 Q0.4401,0.5485,0.4476,0.5392 L0.455,0.5298 Q0.4631,0.5188,0.4714,0.51 T0.4866,0.4947 T0.5021,0.4831 T0.516,0.4749 T0.53,0.4694 T0.5428,0.4657 T0.5558,0.4637 T0.5674,0.4629 T0.5795,0.4625 Q0.5489,0.4543,0.534,0.4384 L0.5286,0.4327 Q0.5244,0.4282,0.5318,0.4174 T0.5486,0.398 L0.5579,0.3899 Q0.567,0.387,0.5749,0.3834 T0.5878,0.3772 T0.6012,0.3687 T0.6126,0.3603 T0.6268,0.3487 T0.6421,0.3361 Q0.6567,0.3242,0.6712,0.3159 T0.7009,0.3034 T0.7277,0.2973 T0.7556,0.2961 T0.7809,0.2977 T0.8074,0.301 Q0.8096,0.3014,0.8109,0.3016 T0.8143,0.302 T0.818,0.3026 Q0.8012,0.2936,0.7767,0.2781 Q0.6718,0.2117,0.5744,0.2476 Q0.5637,0.2516,0.5492,0.2604 T0.5218,0.2779 T0.4923,0.2965 T0.461,0.3124 T0.4282,0.3216 T0.394,0.3206 Q0.3637,0.3136,0.3474,0.2936 T0.3353,0.2459 Q0.3385,0.2247,0.355,0.2023 Q0.3646,0.1892,0.3763,0.179 Q0.3898,0.1672,0.4063,0.1595 Q0.3927,0.1562,0.3785,0.1485 Q0.3604,0.1387,0.3453,0.1354 T0.3161,0.1354 T0.2899,0.1458 T0.2627,0.166 Q0.262,0.1664,0.254,0.1733 T0.2414,0.1841 T0.2267,0.196 T0.2094,0.2086 T0.1915,0.2196 T0.1725,0.2288 T0.1546,0.2337 T0.1373,0.2343 T0.1223,0.228 T0.1097,0.2145 Q0.0962,0.1929,0.1258,0.1582 Q0.131,0.1517,0.1371,0.1464 Q0.1462,0.1387,0.156,0.1321 T0.1752,0.1205 T0.1878,0.1134 Q0.1891,0.1117,0.1947,0.103 T0.2035,0.0899 T0.2125,0.0781 T0.2243,0.064 Q0.1949,0.0616,0.1672,0.0828 Q0.153,0.0934,0.1412,0.1009 T0.1146,0.1146 T0.0873,0.1213 T0.0616,0.116 T0.0374,0.0962 Q0.0339,0.0909,0.0295,0.0846 T0.024,0.0767 T0.0202,0.0728 T0.0148,0.0704 T0.0068,0.0697 Q0.0003,0.0693,0.0058,0.0567 Q0.0077,0.0522,0.011,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1934,0.6075 Q0.2012,0.612,0.2188,0.6218 T0.2459,0.6369 T0.2718,0.6508 T0.2983,0.6644 T0.322,0.6758 T0.3447,0.6854 T0.363,0.6911 T0.3783,0.6936 Q0.3796,0.6936,0.396,0.6952 T0.4265,0.6952 T0.4548,0.6879 Q0.4656,0.6834,0.4805,0.6756 T0.5073,0.6614 T0.5327,0.6485 T0.5564,0.6389 T0.5759,0.6363 T0.5909,0.6422 Q0.5953,0.6467,0.604,0.6554 T0.6155,0.6669 T0.6251,0.6746 T0.6387,0.683 T0.6556,0.6903 L0.6498,0.6956 Q0.6414,0.7042,0.6319,0.7177 T0.6162,0.7403 T0.5979,0.7583 T0.5703,0.7703 Q0.5313,0.7785,0.4799,0.7605 Q0.5097,0.7817,0.5508,0.7911 T0.6302,0.8001 Q0.6431,0.7997,0.659,0.7942 T0.6888,0.7813 T0.7194,0.766 T0.7506,0.753 T0.7819,0.7472 T0.8131,0.754 Q0.8239,0.7589,0.8346,0.7681 T0.8544,0.7895 T0.8689,0.818 T0.8737,0.8507 L0.8733,0.858 Q0.8591,0.849,0.8474,0.845 T0.8242,0.8421 T0.8021,0.8482 T0.7772,0.8625 Q0.7653,0.8707,0.7513,0.8752 T0.7184,0.8831 T0.6908,0.889 Q0.7017,0.8915,0.7152,0.8956 T0.7396,0.9037 T0.7633,0.9115 T0.7872,0.9174 T0.8107,0.9194 T0.8347,0.9155 Q0.8493,0.9115,0.8671,0.9196 T0.9015,0.9421 T0.9345,0.9708 T0.9682,0.9943 T0.9997,1 Q0.999,0.94,0.9983,0.6508 T0.9976,0.2322 Q0.9976,0.2109,0.9992,0.1379 T1,0.0249 Q0.9949,0.0249,0.9917,0.0257 T0.9863,0.0273 T0.9817,0.0308 T0.9776,0.0357 T0.9721,0.0437 T0.9651,0.0539 Q0.956,0.0657,0.9456,0.072 T0.9247,0.0789 T0.904,0.0775 T0.8823,0.0694 T0.862,0.0573 T0.8422,0.0432 Q0.7856,0,0.7328,0.0318 Q0.7392,0.0318,0.7452,0.0324 T0.756,0.0345 T0.7657,0.0386 T0.7741,0.0437 T0.7821,0.0506 T0.7894,0.0588 T0.7966,0.0683 T0.8039,0.0787 T0.8119,0.0904 T0.8202,0.1028 Q0.8249,0.1093,0.849,0.1234 T0.8811,0.1448 Q0.8998,0.1612,0.8893,0.1783 Q0.8835,0.1877,0.8759,0.1928 T0.8593,0.1979 T0.8417,0.1967 T0.8222,0.1895 T0.8034,0.1791 T0.7848,0.1663 T0.7687,0.1534 T0.7543,0.141 T0.744,0.1322 Q0.7186,0.1106,0.6984,0.101 T0.6559,0.0926 T0.6082,0.1077 Q0.5899,0.1175,0.5733,0.1206 T0.5411,0.1202 T0.5122,0.1098 T0.4822,0.0914 Q0.4927,0.1032,0.5036,0.1122 T0.5276,0.1285 T0.5503,0.1401 T0.5777,0.1518 T0.6055,0.1636 Q0.6258,0.1726,0.6375,0.1863 T0.6519,0.2162 Q0.6556,0.2403,0.6392,0.2605 T0.5926,0.2876 Q0.5804,0.2909,0.5672,0.2899 T0.5428,0.2856 T0.5193,0.2764 T0.4966,0.264 T0.4744,0.2497 T0.4523,0.2352 T0.4301,0.2222 T0.4077,0.2118 Q0.3021,0.173,0.1903,0.2436 Q0.1669,0.2583,0.1504,0.2674 T0.1129,0.2846 T0.075,0.294 T0.0384,0.2911 T0,0.2746 Q0.021,0.297,0.0459,0.3082 T0.0953,0.3207 T0.146,0.3193 T0.1988,0.3131 T0.2508,0.3095 T0.3029,0.3176 T0.3529,0.3448 Q0.3566,0.348,0.3652,0.355 T0.3771,0.3645 T0.3877,0.3731 T0.3993,0.3815 T0.4103,0.3884 T0.4226,0.3953 T0.4352,0.4009 T0.4497,0.4064 L0.4443,0.4121 Q0.4372,0.4198,0.4277,0.4251 T0.4072,0.4337 T0.3867,0.439 T0.3656,0.4431 T0.3481,0.4468 Q0.3241,0.4529,0.2943,0.4463 Q0.3227,0.4623,0.3458,0.471 T0.3959,0.4814 Q0.404,0.4818,0.4187,0.4825 T0.4409,0.4835 T0.4605,0.4857 T0.4809,0.4908 T0.4992,0.4996 T0.5186,0.5141 T0.5371,0.5353 L0.5449,0.5451 L0.5337,0.543 Q0.5242,0.541,0.5091,0.55 T0.4683,0.5796 T0.4314,0.6083 Q0.4203,0.6161,0.4086,0.6212 T0.382,0.6308 T0.3667,0.6353 Q0.3485,0.6418,0.2995,0.633 T0.1934,0.6075 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.989,0.0469 Q0.9829,0.0379,0.9753,0.0316 T0.9635,0.0253 Q0.9574,0.0257,0.9539,0.0263 T0.9466,0.03 T0.9418,0.0345 T0.9355,0.0434 T0.9277,0.0546 Q0.9193,0.0653,0.9103,0.0712 T0.8919,0.0775 T0.8745,0.0765 T0.8564,0.0695 T0.8396,0.0593 T0.8228,0.0473 Q0.7612,0,0.7073,0.0326 L0.7386,0.0767 L0.7419,0.0767 Q0.7506,0.0767,0.7556,0.0773 T0.7641,0.0789 T0.7709,0.0842 T0.7767,0.0922 T0.7854,0.1054 T0.7974,0.1236 Q0.8057,0.1354,0.8157,0.1444 T0.8325,0.1574 T0.8474,0.1654 T0.8571,0.1701 Q0.8564,0.1717,0.8554,0.1733 Q0.8503,0.1815,0.844,0.186 T0.8301,0.1909 T0.8153,0.1903 T0.7993,0.1845 T0.7836,0.1758 T0.768,0.1648 T0.754,0.1535 T0.741,0.1425 T0.7312,0.1338 Q0.7031,0.1101,0.6805,0.0995 T0.6357,0.0901 T0.5886,0.1048 Q0.5721,0.1138,0.5574,0.1168 T0.5295,0.117 T0.5055,0.1089 T0.4814,0.0942 L0.4789,0.0926 L0.4711,0.0922 Q0.4589,0.095,0.4811,0.1203 Q0.495,0.1358,0.5087,0.1474 T0.5366,0.167 T0.5611,0.1796 T0.5879,0.1909 T0.6134,0.2011 Q0.6218,0.2047,0.6273,0.2092 Q0.6283,0.2117,0.6286,0.2141 Q0.6305,0.2263,0.6249,0.2388 T0.606,0.2616 T0.5747,0.2761 Q0.5602,0.2785,0.5487,0.2779 T0.5245,0.2724 T0.5015,0.2616 T0.4784,0.2476 T0.4547,0.2321 T0.4297,0.217 T0.4024,0.2043 Q0.2985,0.166,0.1901,0.2345 Q0.1694,0.248,0.1523,0.2569 T0.1165,0.2726 T0.0818,0.2812 T0.0494,0.2796 T0.0181,0.2663 L0.0116,0.2671 Q0,0.272,0.0232,0.2969 Q0.0468,0.3222,0.0742,0.3365 T0.1278,0.3542 T0.1807,0.3564 T0.233,0.352 T0.2815,0.3473 T0.3269,0.3509 T0.3656,0.3699 Q0.4037,0.4005,0.4153,0.4082 Q0.405,0.4139,0.3921,0.4174 T0.3633,0.4237 T0.3414,0.4278 Q0.3207,0.4331,0.2956,0.4278 Q0.2943,0.4278,0.293,0.4274 Q0.2933,0.429,0.2938,0.4313 T0.2964,0.4398 T0.3007,0.4513 T0.3069,0.4619 T0.3149,0.4698 Q0.3427,0.4857,0.3664,0.4947 T0.4169,0.5053 Q0.423,0.5057,0.4385,0.5065 T0.4606,0.508 T0.4779,0.51 T0.4958,0.5139 T0.5095,0.5204 Q0.4992,0.5232,0.485,0.5328 T0.451,0.5585 T0.4201,0.5824 Q0.4095,0.5897,0.3987,0.5946 T0.3738,0.6036 T0.3591,0.6081 Q0.3433,0.6134,0.2965,0.605 T0.1972,0.5816 L0.2026,0.5922 T0.2133,0.6134 L0.2188,0.624 Q0.2201,0.6248,0.2214,0.6252 Q0.2291,0.6297,0.2486,0.6405 T0.2786,0.657 T0.3066,0.6721 T0.3353,0.6866 T0.3598,0.6972 T0.383,0.7051 T0.4005,0.7076 Q0.4008,0.7076,0.4169,0.7092 T0.4471,0.7092 T0.475,0.7019 Q0.4895,0.6958,0.5176,0.6811 T0.5644,0.6586 T0.5921,0.6533 Q0.6128,0.6741,0.6173,0.6782 Q0.6131,0.6835,0.6068,0.6929 T0.5963,0.7078 T0.5858,0.7198 T0.5716,0.7304 T0.5534,0.7365 Q0.5179,0.7443,0.4708,0.728 L0.4708,0.7294 T0.471,0.7333 T0.4716,0.7392 T0.4734,0.7463 T0.4764,0.7539 T0.4814,0.7612 T0.4889,0.7679 Q0.4914,0.77,0.4944,0.7716 Q0.5534,0.8104,0.6409,0.8091 Q0.6521,0.8091,0.6654,0.8053 T0.6907,0.7959 T0.7157,0.7838 T0.741,0.772 T0.7652,0.7631 T0.7888,0.7594 T0.8106,0.7643 Q0.8196,0.7684,0.8267,0.7753 Q0.8409,0.7892,0.8399,0.8169 Q0.8216,0.8067,0.8062,0.8053 T0.7788,0.8087 T0.7493,0.825 Q0.7386,0.8324,0.7256,0.8365 T0.6947,0.844 T0.668,0.8499 L0.697,0.894 L0.7002,0.8948 Q0.7099,0.8968,0.7222,0.9009 T0.7446,0.9086 T0.767,0.9158 T0.7901,0.9213 T0.8132,0.9229 T0.8367,0.9192 Q0.8483,0.916,0.8633,0.9241 T0.8937,0.9462 T0.9248,0.9737 T0.959,0.9955 T0.9939,1 Q1,0.9984,0.9932,0.9845 Q0.991,0.9804,0.9877,0.9755 Q0.9813,0.9666,0.9739,0.9606 T0.9626,0.9555 Q0.9519,0.958,0.9372,0.949 T0.9071,0.9262 T0.8753,0.8987 T0.8403,0.8777 T0.8051,0.8752 Q0.787,0.8805,0.7657,0.8772 Q0.7751,0.8736,0.7828,0.8683 Q0.8086,0.8511,0.8262,0.8497 T0.8651,0.8617 Q0.8696,0.865,0.8727,0.8646 T0.8758,0.8605 L0.8761,0.8536 Q0.8774,0.8295,0.8646,0.8016 T0.8277,0.7496 Q0.8086,0.7308,0.7896,0.7219 Q0.7741,0.7145,0.7575,0.7141 T0.727,0.7182 T0.6978,0.7296 T0.6699,0.7439 T0.6433,0.7571 T0.6179,0.7643 Q0.627,0.7561,0.6402,0.7367 T0.6618,0.7088 L0.6673,0.7035 Q0.6718,0.699,0.6647,0.6884 T0.6483,0.6692 L0.6389,0.6607 Q0.6289,0.657,0.6249,0.6554 T0.6163,0.6507 T0.6102,0.6458 T0.6021,0.637 T0.5889,0.6236 Q0.5828,0.6175,0.5766,0.6138 Q0.5673,0.6081,0.5561,0.6077 T0.5345,0.6105 T0.5116,0.6201 T0.4887,0.633 T0.4653,0.6468 T0.4427,0.6578 Q0.4295,0.6635,0.4167,0.665 T0.3888,0.665 T0.3714,0.6635 Q0.3579,0.6631,0.3282,0.6501 Q0.374,0.6578,0.3911,0.6517 Q0.3937,0.6509,0.4024,0.6482 T0.4179,0.6434 T0.4348,0.6364 T0.4534,0.6256 Q0.464,0.6183,0.4892,0.5989 T0.5278,0.5712 T0.5476,0.564 L0.5582,0.5661 Q0.5692,0.5681,0.5634,0.5563 Q0.5599,0.5485,0.5524,0.5392 L0.545,0.5298 Q0.5369,0.5188,0.5286,0.51 T0.5134,0.4947 T0.4979,0.4831 T0.484,0.4749 T0.47,0.4694 T0.4572,0.4657 T0.4442,0.4637 T0.4326,0.4629 T0.4205,0.4625 Q0.4511,0.4543,0.466,0.4384 L0.4714,0.4327 Q0.4795,0.4237,0.4469,0.394 L0.4421,0.3899 Q0.433,0.387,0.4251,0.3834 T0.4122,0.3772 T0.3988,0.3687 T0.3874,0.3603 T0.3732,0.3487 T0.3579,0.3361 Q0.3433,0.3242,0.3288,0.3159 T0.2993,0.3034 T0.2725,0.2973 T0.2446,0.2961 T0.2193,0.2977 T0.1926,0.301 Q0.1855,0.3022,0.182,0.3026 Q0.1991,0.2936,0.2233,0.2781 Q0.3282,0.2117,0.4256,0.2476 Q0.4363,0.2516,0.451,0.2604 T0.4784,0.2779 T0.5077,0.2965 T0.539,0.3124 T0.5718,0.3216 T0.606,0.3206 Q0.6363,0.3136,0.6526,0.2936 T0.6647,0.2459 Q0.6615,0.2247,0.645,0.2023 Q0.6354,0.1892,0.6237,0.179 Q0.6102,0.1672,0.5937,0.1595 Q0.6073,0.1562,0.6215,0.1485 Q0.6396,0.1387,0.6547,0.1354 T0.6839,0.1354 T0.7101,0.1458 T0.7373,0.166 Q0.738,0.1664,0.746,0.1733 T0.7586,0.1841 T0.7733,0.196 T0.7907,0.2086 T0.8086,0.2196 T0.8275,0.2288 T0.8454,0.2337 T0.8627,0.2343 T0.8777,0.228 T0.8903,0.2145 Q0.9038,0.1929,0.8742,0.1582 Q0.869,0.1517,0.8629,0.1464 Q0.8538,0.1387,0.844,0.1321 T0.8248,0.1205 T0.8122,0.1134 Q0.8109,0.1117,0.8053,0.103 T0.7965,0.0899 T0.7875,0.0781 T0.7757,0.064 Q0.8051,0.0616,0.8328,0.0828 Q0.847,0.0934,0.8588,0.1009 T0.8854,0.1146 T0.9127,0.1213 T0.9384,0.116 T0.9626,0.0962 Q0.9664,0.0909,0.9706,0.0846 T0.976,0.0767 T0.9798,0.0728 T0.9852,0.0704 T0.9932,0.0697 Q0.9997,0.0693,0.9942,0.0567 Q0.9923,0.0522,0.989,0.0469 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.4116,0.0126 L0.4116,0.0776 L0.4871,0.0776 L0.4871,0.0126 L0.4116,0.0126 Z M0.4043,0 L0.4944,0 Q0.4973,0,0.4995,0.0021 T0.5017,0.0063 L0.5017,0.0839 Q0.5017,0.0864,0.4993,0.0883 T0.4944,0.0902 L0.4043,0.0902 Q0.4014,0.0902,0.3992,0.0881 T0.397,0.0839 L0.397,0.0063 Q0.397,0.0038,0.3994,0.0019 T0.4043,0 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.9099,0.0084 L0.9099,0.0818 L0.9951,0.0818 L0.9951,0.0084 L0.9099,0.0084 Z M0.9075,0.0042 L0.9976,0.0042 Q1,0.0042,1,0.0063 L1,0.0839 Q1,0.086,0.9976,0.086 L0.9075,0.086 Q0.905,0.086,0.905,0.0839 L0.905,0.0063 Q0.905,0.0042,0.9075,0.0042 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.66,0.0063 L0.7501,0.0063 L0.7501,0.0839 L0.66,0.0839 L0.66,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.5309,0.0063 L0.621,0.0063 L0.621,0.0839 L0.5309,0.0839 L0.5309,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.2689,0.0063 L0.359,0.0063 L0.359,0.0839 L0.2689,0.0839 L0.2689,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0.1374,0.0063 L0.2275,0.0063 L0.2275,0.0839 L0.1374,0.0839 L0.1374,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0,0.0063 L0.0901,0.0063 L0.0901,0.0839 L0,0.0839 L0,0.0063 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.4087,0.9224 L0.4087,0.9958 L0.4939,0.9958 L0.4939,0.9224 L0.4087,0.9224 Z M0.4062,0.9182 L0.4963,0.9182 Q0.4988,0.9182,0.4988,0.9203 L0.4988,0.9979 Q0.4988,1,0.4963,1 L0.4062,1 Q0.4038,1,0.4038,0.9979 L0.4038,0.9203 Q0.4038,0.9182,0.4062,0.9182 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0.1374,0.9203 L0.2275,0.9203 L0.2275,0.9979 L0.1374,0.9979 L0.1374,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0,0.9203 L0.0901,0.9203 L0.0901,0.9979 L0,0.9979 L0,0.9203 Z M0.9099,0.1158 L0.9099,0.1888 L0.9951,0.1888 L0.9951,0.1158 L0.9099,0.1158 Z M0.9075,0.1116 L0.9976,0.1116 Q1,0.1116,1,0.1137 L1,0.1909 Q1,0.193,0.9976,0.193 L0.9075,0.193 Q0.905,0.193,0.905,0.1909 L0.905,0.1137 Q0.905,0.1116,0.9075,0.1116 Z M0.7852,0.6086 L0.7852,0.682 L0.8704,0.682 L0.8704,0.6086 L0.7852,0.6086 Z M0.7828,0.6044 L0.8729,0.6044 Q0.8753,0.6044,0.8753,0.6065 L0.8753,0.6841 Q0.8753,0.6862,0.8729,0.6862 L0.7828,0.6862 Q0.7803,0.6862,0.7803,0.6841 L0.7803,0.6065 Q0.7803,0.6044,0.7828,0.6044 Z M0.66,0.1137 L0.7501,0.1137 L0.7501,0.1909 L0.66,0.1909 L0.66,0.1137 Z M0.6624,0.4102 L0.6624,0.4836 L0.7477,0.4836 L0.7477,0.4102 L0.6624,0.4102 Z M0.66,0.406 L0.7501,0.406 Q0.7526,0.406,0.7526,0.4081 L0.7526,0.4857 Q0.7526,0.4878,0.7501,0.4878 L0.66,0.4878 Q0.6576,0.4878,0.6576,0.4857 L0.6576,0.4081 Q0.6576,0.406,0.66,0.406 Z M0.6624,0.7131 L0.6624,0.7865 L0.7477,0.7865 L0.7477,0.7131 L0.6624,0.7131 Z M0.66,0.7089 L0.7501,0.7089 Q0.7526,0.7089,0.7526,0.711 L0.7526,0.7886 Q0.7526,0.7907,0.7501,0.7907 L0.66,0.7907 Q0.6576,0.7907,0.6576,0.7886 L0.6576,0.711 Q0.6576,0.7089,0.66,0.7089 Z M0.5407,0.2227 L0.5407,0.2836 L0.6113,0.2836 L0.6113,0.2227 L0.5407,0.2227 Z M0.5309,0.206 L0.621,0.206 Q0.623,0.206,0.6249,0.2068 T0.6281,0.2089 T0.6301,0.2116 T0.6308,0.2143 L0.6308,0.2919 Q0.6308,0.2957,0.6276,0.298 T0.621,0.3003 L0.5309,0.3003 Q0.5265,0.3003,0.5239,0.2976 T0.5212,0.2919 L0.5212,0.2143 Q0.5212,0.211,0.5244,0.2085 T0.5309,0.206 Z M0.5407,0.3184 L0.5407,0.3792 L0.6113,0.3792 L0.6113,0.3184 L0.5407,0.3184 Z M0.5309,0.3016 L0.621,0.3016 Q0.6254,0.3016,0.6281,0.3043 T0.6308,0.31 L0.6308,0.3876 Q0.6308,0.3914,0.6276,0.3937 T0.621,0.396 L0.5309,0.396 Q0.5265,0.396,0.5239,0.3932 T0.5212,0.3876 L0.5212,0.31 Q0.5212,0.3062,0.5244,0.3039 T0.5309,0.3016 Z M0.5309,0.4081 L0.621,0.4081 L0.621,0.4857 L0.5309,0.4857 L0.5309,0.4081 Z M0.5309,0.5059 L0.621,0.5059 L0.621,0.5835 L0.5309,0.5835 L0.5309,0.5059 Z M0.5407,0.6149 L0.5407,0.6758 L0.6113,0.6758 L0.6113,0.6149 L0.5407,0.6149 Z M0.5309,0.5982 L0.621,0.5982 Q0.6254,0.5982,0.6281,0.6009 T0.6308,0.6065 L0.6308,0.6841 Q0.6308,0.6879,0.6276,0.6902 T0.621,0.6925 L0.5309,0.6925 Q0.5265,0.6925,0.5239,0.6898 T0.5212,0.6841 L0.5212,0.6065 Q0.5212,0.6028,0.5244,0.6005 T0.5309,0.5982 Z M0.4062,0.1137 L0.4963,0.1137 L0.4963,0.1909 L0.4062,0.1909 L0.4062,0.1137 Z M0.4062,0.2143 L0.4963,0.2143 L0.4963,0.2919 L0.4062,0.2919 L0.4062,0.2143 Z M0.4184,0.4186 L0.4184,0.4753 L0.4842,0.4753 L0.4842,0.4186 L0.4184,0.4186 Z M0.4062,0.3977 L0.4963,0.3977 Q0.5017,0.3977,0.5051,0.401 T0.5085,0.4081 L0.5085,0.4857 Q0.5085,0.4904,0.5046,0.4933 T0.4963,0.4962 L0.4062,0.4962 Q0.4009,0.4962,0.3975,0.4929 T0.3941,0.4857 L0.3941,0.4081 Q0.3941,0.4035,0.398,0.4006 T0.4062,0.3977 Z M0.4062,0.5059 L0.4963,0.5059 L0.4963,0.5835 L0.4062,0.5835 L0.4062,0.5059 Z M0.4087,0.7131 L0.4087,0.7865 L0.4939,0.7865 L0.4939,0.7131 L0.4087,0.7131 Z M0.4062,0.7089 L0.4963,0.7089 Q0.4988,0.7089,0.4988,0.711 L0.4988,0.7886 Q0.4988,0.7907,0.4963,0.7907 L0.4062,0.7907 Q0.4038,0.7907,0.4038,0.7886 L0.4038,0.711 Q0.4038,0.7089,0.4062,0.7089 Z M0.2689,0.1137 L0.359,0.1137 L0.359,0.1909 L0.2689,0.1909 L0.2689,0.1137 Z M0.2689,0.2143 L0.359,0.2143 L0.359,0.2919 L0.2689,0.2919 L0.2689,0.2143 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.31 L0.359,0.31 L0.359,0.3876 L0.2689,0.3876 L0.2689,0.31 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.2689,0.4081 L0.359,0.4081 L0.359,0.4857 L0.2689,0.4857 L0.2689,0.4081 Z M0.2689,0.5059 L0.359,0.5059 L0.359,0.5835 L0.2689,0.5835 L0.2689,0.5059 Z M0.2689,0.711 L0.359,0.711 L0.359,0.7886 L0.2689,0.7886 L0.2689,0.711 Z M0.2689,0.8154 L0.359,0.8154 L0.359,0.8926 L0.2689,0.8926 L0.2689,0.8154 Z M0.1374,0.1137 L0.2275,0.1137 L0.2275,0.1909 L0.1374,0.1909 L0.1374,0.1137 Z M0.1374,0.2143 L0.2275,0.2143 L0.2275,0.2919 L0.1374,0.2919 L0.1374,0.2143 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.31 L0.2275,0.31 L0.2275,0.3876 L0.1374,0.3876 L0.1374,0.31 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0.1374,0.4081 L0.2275,0.4081 L0.2275,0.4857 L0.1374,0.4857 L0.1374,0.4081 Z M0.1374,0.5059 L0.2275,0.5059 L0.2275,0.5835 L0.1374,0.5835 L0.1374,0.5059 Z M0.1374,0.6065 L0.2275,0.6065 L0.2275,0.6841 L0.1374,0.6841 L0.1374,0.6065 Z M0.1374,0.711 L0.2275,0.711 L0.2275,0.7886 L0.1374,0.7886 L0.1374,0.711 Z M0.1374,0.8154 L0.2275,0.8154 L0.2275,0.8926 L0.1374,0.8926 L0.1374,0.8154 Z M0,0.1137 L0.0901,0.1137 L0.0901,0.1909 L0,0.1909 L0,0.1137 Z M0,0.2143 L0.0901,0.2143 L0.0901,0.2919 L0,0.2919 L0,0.2143 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.31 L0.0901,0.31 L0.0901,0.3876 L0,0.3876 L0,0.31 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z M0,0.4081 L0.0901,0.4081 L0.0901,0.4857 L0,0.4857 L0,0.4081 Z M0,0.5059 L0.0901,0.5059 L0.0901,0.5835 L0,0.5835 L0,0.5059 Z M0,0.6065 L0.0901,0.6065 L0.0901,0.6841 L0,0.6841 L0,0.6065 Z M0,0.711 L0.0901,0.711 L0.0901,0.7886 L0,0.7886 L0,0.711 Z M0,0.8154 L0.0901,0.8154 L0.0901,0.8926 L0,0.8926 L0,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.5884,0.0126 L0.5884,0.0776 L0.5129,0.0776 L0.5129,0.0126 L0.5884,0.0126 Z M0.5957,0 L0.5056,0 Q0.5027,0,0.5005,0.0021 T0.4983,0.0063 L0.4983,0.0839 Q0.4983,0.0864,0.5007,0.0883 T0.5056,0.0902 L0.5957,0.0902 Q0.5986,0.0902,0.6008,0.0881 T0.603,0.0839 L0.603,0.0063 Q0.603,0.0038,0.6006,0.0019 T0.5957,0 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.0901,0.0084 L0.0901,0.0818 L0.0049,0.0818 L0.0049,0.0084 L0.0901,0.0084 Z M0.0925,0.0042 L0.0024,0.0042 Q0,0.0042,0,0.0063 L0,0.0839 Q0,0.086,0.0024,0.086 L0.0925,0.086 Q0.095,0.086,0.095,0.0839 L0.095,0.0063 Q0.095,0.0042,0.0925,0.0042 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.34,0.0063 L0.2499,0.0063 L0.2499,0.0839 L0.34,0.0839 L0.34,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.4691,0.0063 L0.379,0.0063 L0.379,0.0839 L0.4691,0.0839 L0.4691,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.7311,0.0063 L0.641,0.0063 L0.641,0.0839 L0.7311,0.0839 L0.7311,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M0.8626,0.0063 L0.7725,0.0063 L0.7725,0.0839 L0.8626,0.0839 L0.8626,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M1,0.0063 L0.9099,0.0063 L0.9099,0.0839 L1,0.0839 L1,0.0063 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.5913,0.9224 L0.5913,0.9958 L0.5061,0.9958 L0.5061,0.9224 L0.5913,0.9224 Z M0.5938,0.9182 L0.5037,0.9182 Q0.5012,0.9182,0.5012,0.9203 L0.5012,0.9979 Q0.5012,1,0.5037,1 L0.5938,1 Q0.5962,1,0.5962,0.9979 L0.5962,0.9203 Q0.5962,0.9182,0.5938,0.9182 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M0.8626,0.9203 L0.7725,0.9203 L0.7725,0.9979 L0.8626,0.9979 L0.8626,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M1,0.9203 L0.9099,0.9203 L0.9099,0.9979 L1,0.9979 L1,0.9203 Z M0.0901,0.1158 L0.0901,0.1888 L0.0049,0.1888 L0.0049,0.1158 L0.0901,0.1158 Z M0.0925,0.1116 L0.0024,0.1116 Q0,0.1116,0,0.1137 L0,0.1909 Q0,0.193,0.0024,0.193 L0.0925,0.193 Q0.095,0.193,0.095,0.1909 L0.095,0.1137 Q0.095,0.1116,0.0925,0.1116 Z M0.2148,0.6086 L0.2148,0.682 L0.1296,0.682 L0.1296,0.6086 L0.2148,0.6086 Z M0.2172,0.6044 L0.1271,0.6044 Q0.1247,0.6044,0.1247,0.6065 L0.1247,0.6841 Q0.1247,0.6862,0.1271,0.6862 L0.2172,0.6862 Q0.2197,0.6862,0.2197,0.6841 L0.2197,0.6065 Q0.2197,0.6044,0.2172,0.6044 Z M0.34,0.1137 L0.2499,0.1137 L0.2499,0.1909 L0.34,0.1909 L0.34,0.1137 Z M0.3376,0.4102 L0.3376,0.4836 L0.2523,0.4836 L0.2523,0.4102 L0.3376,0.4102 Z M0.34,0.406 L0.2499,0.406 Q0.2474,0.406,0.2474,0.4081 L0.2474,0.4857 Q0.2474,0.4878,0.2499,0.4878 L0.34,0.4878 Q0.3424,0.4878,0.3424,0.4857 L0.3424,0.4081 Q0.3424,0.406,0.34,0.406 Z M0.3376,0.7131 L0.3376,0.7865 L0.2523,0.7865 L0.2523,0.7131 L0.3376,0.7131 Z M0.34,0.7089 L0.2499,0.7089 Q0.2474,0.7089,0.2474,0.711 L0.2474,0.7886 Q0.2474,0.7907,0.2499,0.7907 L0.34,0.7907 Q0.3424,0.7907,0.3424,0.7886 L0.3424,0.711 Q0.3424,0.7089,0.34,0.7089 Z M0.4593,0.2227 L0.4593,0.2836 L0.3887,0.2836 L0.3887,0.2227 L0.4593,0.2227 Z M0.4691,0.206 L0.379,0.206 Q0.3746,0.206,0.3719,0.2087 T0.3692,0.2143 L0.3692,0.2919 Q0.3692,0.2957,0.3724,0.298 T0.379,0.3003 L0.4691,0.3003 Q0.4735,0.3003,0.4761,0.2976 T0.4788,0.2919 L0.4788,0.2143 Q0.4788,0.211,0.4756,0.2085 T0.4691,0.206 Z M0.4593,0.3184 L0.4593,0.3792 L0.3887,0.3792 L0.3887,0.3184 L0.4593,0.3184 Z M0.4691,0.3016 L0.379,0.3016 Q0.3746,0.3016,0.3719,0.3043 T0.3692,0.31 L0.3692,0.3876 Q0.3692,0.3914,0.3724,0.3937 T0.379,0.396 L0.4691,0.396 Q0.4735,0.396,0.4761,0.3932 T0.4788,0.3876 L0.4788,0.31 Q0.4788,0.3062,0.4756,0.3039 T0.4691,0.3016 Z M0.4691,0.4081 L0.379,0.4081 L0.379,0.4857 L0.4691,0.4857 L0.4691,0.4081 Z M0.4691,0.5059 L0.379,0.5059 L0.379,0.5835 L0.4691,0.5835 L0.4691,0.5059 Z M0.4593,0.6149 L0.4593,0.6758 L0.3887,0.6758 L0.3887,0.6149 L0.4593,0.6149 Z M0.4691,0.5982 L0.379,0.5982 Q0.3746,0.5982,0.3719,0.6009 T0.3692,0.6065 L0.3692,0.6841 Q0.3692,0.6879,0.3724,0.6902 T0.379,0.6925 L0.4691,0.6925 Q0.4735,0.6925,0.4761,0.6898 T0.4788,0.6841 L0.4788,0.6065 Q0.4788,0.6028,0.4756,0.6005 T0.4691,0.5982 Z M0.5938,0.1137 L0.5037,0.1137 L0.5037,0.1909 L0.5938,0.1909 L0.5938,0.1137 Z M0.5938,0.2143 L0.5037,0.2143 L0.5037,0.2919 L0.5938,0.2919 L0.5938,0.2143 Z M0.5816,0.4186 L0.5816,0.4753 L0.5158,0.4753 L0.5158,0.4186 L0.5816,0.4186 Z M0.5938,0.3977 L0.5037,0.3977 Q0.4983,0.3977,0.4949,0.401 T0.4915,0.4081 L0.4915,0.4857 Q0.4915,0.4904,0.4954,0.4933 T0.5037,0.4962 L0.5938,0.4962 Q0.5991,0.4962,0.6025,0.4929 T0.6059,0.4857 L0.6059,0.4081 Q0.6059,0.4035,0.602,0.4006 T0.5938,0.3977 Z M0.5938,0.5059 L0.5037,0.5059 L0.5037,0.5835 L0.5938,0.5835 L0.5938,0.5059 Z M0.5913,0.7131 L0.5913,0.7865 L0.5061,0.7865 L0.5061,0.7131 L0.5913,0.7131 Z M0.5938,0.7089 L0.5037,0.7089 Q0.5012,0.7089,0.5012,0.711 L0.5012,0.7886 Q0.5012,0.7907,0.5037,0.7907 L0.5938,0.7907 Q0.5962,0.7907,0.5962,0.7886 L0.5962,0.711 Q0.5962,0.7089,0.5938,0.7089 Z M0.7311,0.1137 L0.641,0.1137 L0.641,0.1909 L0.7311,0.1909 L0.7311,0.1137 Z M0.7311,0.2143 L0.641,0.2143 L0.641,0.2919 L0.7311,0.2919 L0.7311,0.2143 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.31 L0.641,0.31 L0.641,0.3876 L0.7311,0.3876 L0.7311,0.31 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.7311,0.4081 L0.641,0.4081 L0.641,0.4857 L0.7311,0.4857 L0.7311,0.4081 Z M0.7311,0.5059 L0.641,0.5059 L0.641,0.5835 L0.7311,0.5835 L0.7311,0.5059 Z M0.7311,0.711 L0.641,0.711 L0.641,0.7886 L0.7311,0.7886 L0.7311,0.711 Z M0.7311,0.8154 L0.641,0.8154 L0.641,0.8926 L0.7311,0.8926 L0.7311,0.8154 Z M0.8626,0.1137 L0.7725,0.1137 L0.7725,0.1909 L0.8626,0.1909 L0.8626,0.1137 Z M0.8626,0.2143 L0.7725,0.2143 L0.7725,0.2919 L0.8626,0.2919 L0.8626,0.2143 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.31 L0.7725,0.31 L0.7725,0.3876 L0.8626,0.3876 L0.8626,0.31 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M0.8626,0.4081 L0.7725,0.4081 L0.7725,0.4857 L0.8626,0.4857 L0.8626,0.4081 Z M0.8626,0.5059 L0.7725,0.5059 L0.7725,0.5835 L0.8626,0.5835 L0.8626,0.5059 Z M0.8626,0.6065 L0.7725,0.6065 L0.7725,0.6841 L0.8626,0.6841 L0.8626,0.6065 Z M0.8626,0.711 L0.7725,0.711 L0.7725,0.7886 L0.8626,0.7886 L0.8626,0.711 Z M0.8626,0.8154 L0.7725,0.8154 L0.7725,0.8926 L0.8626,0.8926 L0.8626,0.8154 Z M1,0.1137 L0.9099,0.1137 L0.9099,0.1909 L1,0.1909 L1,0.1137 Z M1,0.2143 L0.9099,0.2143 L0.9099,0.2919 L1,0.2919 L1,0.2143 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.31 L0.9099,0.31 L0.9099,0.3876 L1,0.3876 L1,0.31 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z M1,0.4081 L0.9099,0.4081 L0.9099,0.4857 L1,0.4857 L1,0.4081 Z M1,0.5059 L0.9099,0.5059 L0.9099,0.5835 L1,0.5835 L1,0.5059 Z M1,0.6065 L0.9099,0.6065 L0.9099,0.6841 L1,0.6841 L1,0.6065 Z M1,0.711 L0.9099,0.711 L0.9099,0.7886 L1,0.7886 L1,0.711 Z M1,0.8154 L0.9099,0.8154 L0.9099,0.8926 L1,0.8926 L1,0.8154 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.6529,0.018 L0.6529,0.112 L0.7724,0.112 L0.7724,0.018 L0.6529,0.018 Z M0.6411,0 L0.7837,0 Q0.7873,0,0.7902,0.0015 T0.7943,0.005 T0.7956,0.0092 L0.7956,0.1208 Q0.7956,0.125,0.7917,0.1275 T0.7837,0.13 L0.6411,0.13 Q0.6359,0.13,0.6326,0.1271 T0.6292,0.1208 L0.6292,0.0092 Q0.6292,0.005,0.6331,0.0025 T0.6411,0 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.4325,0.0143 L0.4325,0.1158 L0.5628,0.1158 L0.5628,0.0143 L0.4325,0.0143 Z M0.4264,0.0042 L0.5695,0.0042 Q0.5721,0.0042,0.5739,0.0057 T0.5757,0.0092 L0.5757,0.1208 Q0.5757,0.1221,0.5752,0.1231 T0.5736,0.1248 T0.5716,0.1256 T0.5695,0.1258 L0.4264,0.1258 Q0.4238,0.1258,0.422,0.1244 T0.4202,0.1208 L0.4202,0.0092 Q0.4202,0.008,0.4207,0.0069 T0.4222,0.0052 T0.4243,0.0044 T0.4264,0.0042 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0.2178,0.0092 L0.3605,0.0092 L0.3605,0.1208 L0.2178,0.1208 L0.2178,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0,0.0092 L0.1432,0.0092 L0.1432,0.1208 L0,0.1208 L0,0.0092 Z M0.8574,0.3217 L0.8574,0.4098 L0.9691,0.4098 L0.9691,0.3217 L0.8574,0.3217 Z M0.8419,0.2978 L0.9846,0.2978 Q0.9892,0.2978,0.9928,0.2997 T0.9982,0.3043 T1,0.31 L1,0.4216 Q1,0.427,0.9951,0.4304 T0.9846,0.4337 L0.8419,0.4337 Q0.8352,0.4337,0.8308,0.4299 T0.8265,0.4216 L0.8265,0.31 Q0.8265,0.3062,0.829,0.3035 T0.835,0.2993 T0.8419,0.2978 Z M0.8574,0.888 L0.8574,0.9757 L0.9691,0.9757 L0.9691,0.888 L0.8574,0.888 Z M0.8419,0.8637 L0.9846,0.8637 Q0.9892,0.8637,0.9928,0.8658 T0.9982,0.8706 T1,0.8758 L1,0.9878 Q1,0.9929,0.9951,0.9964 T0.9846,1 L0.8419,1 Q0.8352,1,0.8308,0.996 T0.8265,0.9878 L0.8265,0.8758 Q0.8265,0.8708,0.8314,0.8672 T0.8419,0.8637 Z M0.6509,0.169 L0.6509,0.2706 L0.7806,0.2706 L0.7806,0.169 L0.6509,0.169 Z M0.6442,0.159 L0.7868,0.159 Q0.7899,0.159,0.7917,0.1604 T0.7935,0.164 L0.7935,0.2756 Q0.7935,0.2781,0.7915,0.2796 T0.7868,0.281 L0.6442,0.281 Q0.6416,0.281,0.6395,0.2794 T0.6375,0.2756 L0.6375,0.164 Q0.6375,0.1619,0.6398,0.1604 T0.6442,0.159 Z M0.6632,0.6044 L0.6632,0.6858 L0.7678,0.6858 L0.7678,0.6044 L0.6632,0.6044 Z M0.6442,0.5742 L0.7868,0.5742 Q0.7951,0.5742,0.8007,0.5791 T0.8064,0.5893 L0.8064,0.7013 Q0.8064,0.7076,0.8002,0.712 T0.7868,0.7164 L0.6442,0.7164 Q0.6359,0.7164,0.6305,0.7114 T0.6251,0.7013 L0.6251,0.5893 Q0.6251,0.5847,0.6282,0.5812 T0.6357,0.5759 T0.6442,0.5742 Z M0.4264,0.164 L0.5695,0.164 L0.5695,0.2756 L0.4264,0.2756 L0.4264,0.164 Z M0.4325,0.315 L0.4325,0.4165 L0.5628,0.4165 L0.5628,0.315 L0.4325,0.315 Z M0.4264,0.3049 L0.5695,0.3049 Q0.5721,0.3049,0.5739,0.3064 T0.5757,0.31 L0.5757,0.4216 Q0.5757,0.4237,0.5736,0.4251 T0.5695,0.4266 L0.4264,0.4266 Q0.4238,0.4266,0.422,0.4251 T0.4202,0.4216 L0.4202,0.31 Q0.4202,0.3087,0.4207,0.3077 T0.4222,0.306 T0.4243,0.3052 T0.4264,0.3049 Z M0.4264,0.4476 L0.5695,0.4476 L0.5695,0.5596 L0.4264,0.5596 L0.4264,0.4476 Z M0.4392,0.7408 L0.4392,0.8326 L0.5561,0.8326 L0.5561,0.7408 L0.4392,0.7408 Z M0.4264,0.7206 L0.5695,0.7206 Q0.5747,0.7206,0.5783,0.724 T0.5819,0.7307 L0.5819,0.8427 Q0.5819,0.8469,0.5778,0.8498 T0.5695,0.8528 L0.4264,0.8528 Q0.4207,0.8528,0.4171,0.8496 T0.4135,0.8427 L0.4135,0.7307 Q0.4135,0.7265,0.4176,0.7236 T0.4264,0.7206 Z M0.2178,0.164 L0.3605,0.164 L0.3605,0.2756 L0.2178,0.2756 L0.2178,0.164 Z M0.2178,0.31 L0.3605,0.31 L0.3605,0.4216 L0.2178,0.4216 L0.2178,0.31 Z M0.2178,0.5893 L0.3605,0.5893 L0.3605,0.7013 L0.2178,0.7013 L0.2178,0.5893 Z M0.2178,0.7307 L0.3605,0.7307 L0.3605,0.8427 L0.2178,0.8427 L0.2178,0.7307 Z M0.2178,0.8758 L0.3605,0.8758 L0.3605,0.9878 L0.2178,0.9878 L0.2178,0.8758 Z M0,0.164 L0.1432,0.164 L0.1432,0.2756 L0,0.2756 L0,0.164 Z M0,0.31 L0.1432,0.31 L0.1432,0.4216 L0,0.4216 L0,0.31 Z M0,0.4476 L0.1432,0.4476 L0.1432,0.5596 L0,0.5596 L0,0.4476 Z M0,0.5893 L0.1432,0.5893 L0.1432,0.7013 L0,0.7013 L0,0.5893 Z M0,0.7307 L0.1432,0.7307 L0.1432,0.8427 L0,0.8427 L0,0.7307 Z M0,0.8758 L0.1432,0.8758 L0.1432,0.9878 L0,0.9878 L0,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.3476,0.018 L0.3476,0.112 L0.2276,0.112 L0.2276,0.018 L0.3476,0.018 Z M0.3594,0 L0.2163,0 Q0.2132,0,0.2104,0.0015 T0.2062,0.005 T0.2049,0.0092 L0.2049,0.1208 Q0.2049,0.1237,0.2067,0.1258 T0.2111,0.129 T0.2163,0.13 L0.3594,0.13 Q0.3641,0.13,0.3674,0.1271 T0.3708,0.1208 L0.3708,0.0092 Q0.3708,0.005,0.3669,0.0025 T0.3594,0 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.5675,0.0143 L0.5675,0.1158 L0.4377,0.1158 L0.4377,0.0143 L0.5675,0.0143 Z M0.5736,0.0042 L0.431,0.0042 Q0.4284,0.0042,0.4264,0.0057 T0.4243,0.0092 L0.4243,0.1208 Q0.4243,0.1221,0.4251,0.1231 T0.4269,0.1248 T0.4289,0.1256 T0.431,0.1258 L0.5736,0.1258 Q0.5767,0.1258,0.5785,0.1244 T0.5803,0.1208 L0.5803,0.0092 Q0.5803,0.008,0.5798,0.0069 T0.5783,0.0052 T0.5762,0.0044 T0.5736,0.0042 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M0.7827,0.0092 L0.6395,0.0092 L0.6395,0.1208 L0.7827,0.1208 L0.7827,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M1,0.0092 L0.8574,0.0092 L0.8574,0.1208 L1,0.1208 L1,0.0092 Z M0.1432,0.3217 L0.1432,0.4098 L0.0309,0.4098 L0.0309,0.3217 L0.1432,0.3217 Z M0.1586,0.2978 L0.0154,0.2978 Q0.0088,0.2978,0.0044,0.3016 T0,0.31 L0,0.4216 Q0,0.427,0.0049,0.4304 T0.0154,0.4337 L0.1586,0.4337 Q0.1648,0.4337,0.1694,0.4299 T0.174,0.4216 L0.174,0.31 Q0.174,0.3062,0.1715,0.3035 T0.1653,0.2993 T0.1586,0.2978 Z M0.1432,0.888 L0.1432,0.9757 L0.0309,0.9757 L0.0309,0.888 L0.1432,0.888 Z M0.1586,0.8637 L0.0154,0.8637 Q0.0108,0.8637,0.0072,0.8658 T0.0018,0.8706 T0,0.8758 L0,0.9878 Q0,0.9929,0.0049,0.9964 T0.0154,1 L0.1586,1 Q0.1648,1,0.1694,0.996 T0.174,0.9878 L0.174,0.8758 Q0.174,0.8725,0.1715,0.8695 T0.1653,0.8651 T0.1586,0.8637 Z M0.3496,0.169 L0.3496,0.2706 L0.2194,0.2706 L0.2194,0.169 L0.3496,0.169 Z M0.3563,0.159 L0.2132,0.159 Q0.2106,0.159,0.2088,0.1604 T0.207,0.164 L0.207,0.2756 Q0.207,0.2781,0.2091,0.2796 T0.2132,0.281 L0.3563,0.281 Q0.3589,0.281,0.3607,0.2794 T0.3625,0.2756 L0.3625,0.164 Q0.3625,0.1619,0.3605,0.1604 T0.3563,0.159 Z M0.3368,0.6044 L0.3368,0.6858 L0.2327,0.6858 L0.2327,0.6044 L0.3368,0.6044 Z M0.3563,0.5742 L0.2132,0.5742 Q0.2049,0.5742,0.1993,0.5791 T0.1936,0.5893 L0.1936,0.7013 Q0.1936,0.7076,0.2001,0.712 T0.2132,0.7164 L0.3563,0.7164 Q0.3641,0.7164,0.3697,0.7114 T0.3754,0.7013 L0.3754,0.5893 Q0.3754,0.5847,0.3723,0.5812 T0.3648,0.5759 T0.3563,0.5742 Z M0.5736,0.164 L0.431,0.164 L0.431,0.2756 L0.5736,0.2756 L0.5736,0.164 Z M0.5675,0.315 L0.5675,0.4165 L0.4377,0.4165 L0.4377,0.315 L0.5675,0.315 Z M0.5736,0.3049 L0.431,0.3049 Q0.4284,0.3049,0.4264,0.3064 T0.4243,0.31 L0.4243,0.4216 Q0.4243,0.4237,0.4266,0.4251 T0.431,0.4266 L0.5736,0.4266 Q0.5767,0.4266,0.5785,0.4251 T0.5803,0.4216 L0.5803,0.31 Q0.5803,0.3087,0.5798,0.3077 T0.5783,0.306 T0.5762,0.3052 T0.5736,0.3049 Z M0.5736,0.4476 L0.431,0.4476 L0.431,0.5596 L0.5736,0.5596 L0.5736,0.4476 Z M0.5613,0.7408 L0.5613,0.8326 L0.4439,0.8326 L0.4439,0.7408 L0.5613,0.7408 Z M0.5736,0.7206 L0.431,0.7206 Q0.4253,0.7206,0.4217,0.724 T0.4181,0.7307 L0.4181,0.8427 Q0.4181,0.8469,0.4222,0.8498 T0.431,0.8528 L0.5736,0.8528 Q0.5778,0.8528,0.5808,0.8511 T0.5855,0.8471 T0.587,0.8427 L0.587,0.7307 Q0.587,0.7265,0.5826,0.7236 T0.5736,0.7206 Z M0.7827,0.164 L0.6395,0.164 L0.6395,0.2756 L0.7827,0.2756 L0.7827,0.164 Z M0.7827,0.31 L0.6395,0.31 L0.6395,0.4216 L0.7827,0.4216 L0.7827,0.31 Z M0.7827,0.5893 L0.6395,0.5893 L0.6395,0.7013 L0.7827,0.7013 L0.7827,0.5893 Z M0.7827,0.7307 L0.6395,0.7307 L0.6395,0.8427 L0.7827,0.8427 L0.7827,0.7307 Z M0.7827,0.8758 L0.6395,0.8758 L0.6395,0.9878 L0.7827,0.9878 L0.7827,0.8758 Z M1,0.164 L0.8574,0.164 L0.8574,0.2756 L1,0.2756 L1,0.164 Z M1,0.31 L0.8574,0.31 L0.8574,0.4216 L1,0.4216 L1,0.31 Z M1,0.4476 L0.8574,0.4476 L0.8574,0.5596 L1,0.5596 L1,0.4476 Z M1,0.5893 L0.8574,0.5893 L0.8574,0.7013 L1,0.7013 L1,0.5893 Z M1,0.7307 L0.8574,0.7307 L0.8574,0.8427 L1,0.8427 L1,0.7307 Z M1,0.8758 L0.8574,0.8758 L0.8574,0.9878 L1,0.9878 L1,0.8758 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0C8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0008,0.9979 Q0.0008,1,0.0032,1 Q0.0482,1,0.0602,0.9975 Q0.0667,0.9963,0.0847,0.9917 T0.1084,0.9859 Q0.1124,0.9851,0.1221,0.9851 L0.1253,0.9851 L0.1285,0.9851 Q0.1518,0.9851,0.1655,0.9809 Q0.1695,0.9801,0.1731,0.9788 T0.1791,0.9766 T0.1839,0.9747 T0.1888,0.9732 L0.1936,0.972 T0.1988,0.9712 T0.2048,0.971 L0.2096,0.971 Q0.2201,0.9714,0.2233,0.9714 T0.2345,0.9693 Q0.2386,0.9685,0.2502,0.9674 T0.2715,0.966 L0.2811,0.9656 Q0.2916,0.9647,0.2916,0.9573 Q0.2916,0.954,0.2892,0.9515 T0.2819,0.9486 Q0.2755,0.9482,0.2683,0.9482 Q0.2643,0.9482,0.2582,0.9484 T0.2498,0.9486 Q0.2426,0.9486,0.2402,0.9473 Q0.2386,0.9469,0.2317,0.943 T0.2161,0.937 Q0.2104,0.9357,0.1992,0.933 T0.1831,0.9291 Q0.1807,0.9287,0.1783,0.9285 T0.1739,0.928 T0.1703,0.9276 T0.1675,0.9272 T0.1655,0.9266 T0.1639,0.9253 Q0.1598,0.9216,0.1462,0.9216 L0.143,0.9216 L0.1398,0.9216 L0.1365,0.9216 Q0.1197,0.9195,0.1197,0.9154 L0.1197,0.9154 Q0.1205,0.9121,0.1373,0.9088 T0.1703,0.9054 Q0.1791,0.9054,0.1863,0.904 T0.1984,0.9011 T0.2064,0.8992 Q0.2402,0.8967,0.2506,0.8934 Q0.2538,0.8926,0.2602,0.8899 T0.2707,0.8872 Q0.2715,0.8872,0.2731,0.8876 Q0.2795,0.8884,0.2884,0.8884 Q0.3068,0.8884,0.3092,0.8826 L0.3092,0.8797 Q0.3092,0.8772,0.3076,0.8747 T0.3044,0.8706 T0.3028,0.8681 Q0.3076,0.8656,0.3237,0.8656 Q0.3317,0.8656,0.3622,0.8623 Q0.3655,0.8623,0.3867,0.8617 T0.4217,0.8602 Q0.4241,0.8598,0.4289,0.8598 L0.4345,0.8598 L0.441,0.8598 Q0.4578,0.8598,0.4667,0.8586 Q0.4739,0.8573,0.4851,0.8567 T0.5004,0.8552 Q0.5012,0.8552,0.5108,0.855 T0.5269,0.853 T0.5333,0.8461 Q0.5333,0.8445,0.5325,0.8432 T0.5309,0.8409 T0.5289,0.8391 T0.5261,0.8378 L0.5229,0.837 T0.5185,0.8362 T0.5133,0.8355 T0.5076,0.8349 T0.502,0.8341 Q0.4932,0.8324,0.4859,0.8324 Q0.4827,0.8324,0.4787,0.8328 T0.4731,0.8333 Q0.4707,0.8333,0.4683,0.8324 Q0.4482,0.825,0.4394,0.825 Q0.4369,0.825,0.4345,0.8254 Q0.4225,0.827,0.4153,0.827 Q0.4088,0.827,0.4064,0.8258 Q0.3976,0.8204,0.3751,0.8204 Q0.3703,0.8204,0.3667,0.8214 T0.3622,0.8225 Q0.3598,0.8225,0.3558,0.82 Q0.351,0.8175,0.3402,0.8167 T0.3177,0.8156 T0.3028,0.8146 L0.2956,0.8121 T0.2871,0.8094 T0.2771,0.8073 T0.2635,0.8063 Q0.261,0.8063,0.2586,0.8067 Q0.2378,0.8071,0.2273,0.8071 Q0.2072,0.8071,0.2024,0.8051 Q0.1976,0.8034,0.1932,0.8026 T0.1867,0.8013 T0.1847,0.8001 L0.1847,0.7993 Q0.1855,0.7984,0.1855,0.7978 T0.1859,0.7966 T0.1867,0.7959 T0.188,0.7955 T0.1896,0.7951 T0.1916,0.7949 T0.1944,0.7945 T0.1984,0.7941 T0.2032,0.7939 Q0.212,0.7926,0.2325,0.7918 T0.2562,0.7905 Q0.2691,0.7893,0.2787,0.7847 Q0.2835,0.7827,0.2968,0.7791 T0.3149,0.7756 Q0.3189,0.7756,0.3305,0.7733 T0.3446,0.771 L0.3454,0.771 Q0.3462,0.771,0.3498,0.7721 T0.3574,0.774 T0.3655,0.7748 Q0.3703,0.7748,0.3743,0.7731 T0.3823,0.7708 T0.3916,0.77 T0.3992,0.7694 Q0.4008,0.7694,0.4076,0.7688 T0.4205,0.7675 L0.4305,0.7665 Q0.4345,0.7657,0.4402,0.7617 T0.4458,0.7545 Q0.4458,0.7503,0.4353,0.7487 Q0.4297,0.7478,0.4209,0.7462 T0.4044,0.7433 T0.3904,0.7416 L0.3847,0.7416 Q0.3807,0.7416,0.3747,0.7422 T0.3663,0.7428 T0.3606,0.7424 Q0.3582,0.742,0.3562,0.7418 T0.3522,0.7412 T0.3482,0.7406 T0.3446,0.7401 T0.341,0.7397 T0.3373,0.7393 T0.3341,0.7391 L0.3293,0.7391 Q0.3277,0.7395,0.3253,0.7395 Q0.3205,0.7395,0.3052,0.7387 T0.2835,0.7379 Q0.2755,0.7379,0.253,0.7325 Q0.2506,0.7316,0.2462,0.731 T0.2382,0.7296 T0.2305,0.7271 T0.2181,0.7234 T0.2048,0.7196 T0.2,0.7155 Q0.2,0.7142,0.2016,0.713 Q0.208,0.7059,0.2285,0.6978 T0.2618,0.6898 Q0.2739,0.6898,0.2831,0.6848 T0.2956,0.6794 Q0.3028,0.6786,0.3289,0.6765 T0.3566,0.674 Q0.3582,0.674,0.3855,0.6723 T0.4406,0.6688 T0.4755,0.6653 Q0.5004,0.6607,0.5124,0.6599 L0.5165,0.6599 Q0.5213,0.6599,0.5277,0.6605 T0.5373,0.6611 Q0.543,0.6611,0.5494,0.6599 Q0.592,0.6524,0.6,0.6524 Q0.6064,0.6524,0.61,0.6499 T0.6161,0.6474 Q0.6177,0.6474,0.6261,0.6495 T0.6418,0.6516 L0.6482,0.6516 Q0.653,0.6512,0.6651,0.6506 T0.6876,0.6493 T0.7084,0.6477 T0.7229,0.645 Q0.7269,0.6437,0.7333,0.6437 Q0.7373,0.6437,0.7458,0.6443 T0.7574,0.645 Q0.7614,0.645,0.7631,0.6445 T0.7655,0.6441 Q0.7671,0.6441,0.7723,0.6448 T0.7823,0.6454 Q0.788,0.6454,0.7952,0.6445 Q0.8233,0.6408,0.8723,0.6367 Q0.9012,0.6342,0.9092,0.6342 L0.9165,0.6342 L0.9205,0.6342 Q0.9277,0.6342,0.9382,0.6323 T0.9526,0.6304 Q0.9534,0.6304,0.9594,0.6307 T0.9695,0.6309 Q0.9976,0.6309,0.9992,0.6234 Q1,0.6201,1,0.618 Q1,0.6089,0.9775,0.608 Q0.9703,0.6076,0.9582,0.6076 Q0.9518,0.6076,0.9394,0.6078 T0.9213,0.608 Q0.9036,0.608,0.8972,0.6072 Q0.894,0.6068,0.8871,0.6058 T0.8751,0.6039 T0.8627,0.6024 T0.8506,0.6018 L0.8474,0.6018 Q0.841,0.6022,0.8281,0.6041 T0.8112,0.606 Q0.8096,0.606,0.808,0.6056 Q0.7783,0.6002,0.7647,0.6002 Q0.7598,0.6002,0.7454,0.6006 T0.7261,0.601 Q0.7221,0.601,0.7145,0.6022 T0.7036,0.6035 Q0.6996,0.6035,0.6964,0.6022 Q0.6723,0.5902,0.6442,0.5902 Q0.6426,0.5902,0.6386,0.5904 T0.6337,0.5906 Q0.6273,0.5906,0.6249,0.5894 L0.6177,0.5856 T0.6116,0.5838 T0.6016,0.5825 T0.5855,0.5823 Q0.5719,0.5823,0.5574,0.5798 T0.5373,0.5774 L0.5341,0.5774 Q0.5293,0.5778,0.5213,0.5786 T0.51,0.5794 Q0.5036,0.5794,0.4988,0.5769 Q0.4932,0.574,0.4771,0.574 Q0.4723,0.574,0.4631,0.5745 T0.4498,0.5749 Q0.4418,0.5749,0.4394,0.5736 Q0.4353,0.5724,0.4305,0.5715 T0.4225,0.5707 T0.4145,0.5705 T0.4056,0.5699 Q0.4008,0.5691,0.398,0.5689 T0.394,0.5689 T0.3908,0.5686 T0.3855,0.5674 Q0.3831,0.567,0.3811,0.5662 T0.3779,0.5645 T0.3743,0.563 T0.3695,0.5624 Q0.3655,0.5624,0.3594,0.5635 T0.3494,0.5645 T0.3406,0.5635 T0.3325,0.5624 Q0.3309,0.5624,0.3301,0.5628 L0.3141,0.5628 Q0.2635,0.5628,0.2506,0.5612 Q0.2474,0.5608,0.2434,0.5608 Q0.2402,0.5608,0.2349,0.561 T0.2273,0.5612 Q0.2209,0.5612,0.2177,0.5595 Q0.2145,0.557,0.2145,0.5558 Q0.2169,0.5537,0.2345,0.5521 Q0.2876,0.5475,0.3028,0.5425 Q0.3068,0.5413,0.3149,0.5396 T0.3309,0.5367 T0.3478,0.5338 T0.3606,0.5309 Q0.3631,0.5305,0.3755,0.5259 T0.3968,0.5214 Q0.3992,0.5214,0.4024,0.5218 T0.4096,0.5222 Q0.4161,0.5222,0.4213,0.5209 T0.4313,0.5185 T0.4402,0.5172 Q0.4418,0.5168,0.447,0.5168 L0.4558,0.5168 T0.4639,0.5162 T0.4707,0.5141 T0.4731,0.5102 Q0.4731,0.5089,0.4723,0.5081 Q0.4699,0.5019,0.4627,0.4994 T0.4369,0.4965 Q0.4273,0.4961,0.4193,0.4946 T0.4048,0.4915 T0.3952,0.4894 Q0.392,0.4886,0.388,0.4886 Q0.3847,0.4886,0.3775,0.4892 T0.3647,0.4898 Q0.3598,0.4898,0.355,0.4894 Q0.3165,0.4861,0.3141,0.4853 Q0.2779,0.4774,0.2715,0.4774 Q0.2699,0.4774,0.2683,0.4776 T0.2627,0.4778 Q0.2498,0.4778,0.2281,0.4762 Q0.2241,0.4749,0.2233,0.4737 Q0.2249,0.472,0.2321,0.4708 Q0.2402,0.4695,0.2554,0.4695 L0.2675,0.4695 L0.2795,0.4695 Q0.294,0.4695,0.2996,0.4679 Q0.3141,0.4629,0.3373,0.4616 Q0.3414,0.4612,0.3466,0.4606 T0.3582,0.4589 T0.3687,0.4562 T0.3727,0.4525 Q0.3727,0.4509,0.3703,0.4492 Q0.3639,0.4455,0.3474,0.4419 T0.3213,0.4384 L0.3157,0.4384 L0.31,0.4384 Q0.294,0.4384,0.2859,0.4363 Q0.2795,0.4347,0.2691,0.4347 L0.2618,0.4347 L0.2546,0.4347 Q0.2458,0.4347,0.2394,0.4338 Q0.2257,0.4318,0.2193,0.4303 T0.2092,0.4266 T0.2052,0.4224 T0.2024,0.4154 T0.196,0.4052 Q0.1912,0.3994,0.1867,0.3949 T0.1807,0.3884 T0.1791,0.3849 Q0.1791,0.3824,0.1839,0.3745 Q0.1871,0.3687,0.1944,0.3637 T0.2072,0.3561 T0.2221,0.3501 T0.2321,0.3463 Q0.2353,0.3455,0.241,0.3445 T0.2522,0.3428 T0.2639,0.3411 T0.2731,0.3384 T0.2956,0.3351 T0.3197,0.3326 Q0.3213,0.3322,0.3237,0.3322 T0.3325,0.3331 T0.3414,0.3339 Q0.3478,0.3339,0.3518,0.3314 Q0.3606,0.3264,0.3703,0.3264 Q0.3775,0.3264,0.3847,0.3293 Q0.3888,0.331,0.396,0.331 Q0.4024,0.331,0.4116,0.3295 T0.4265,0.3266 T0.4414,0.3227 T0.4514,0.3202 Q0.4578,0.3181,0.4839,0.3152 T0.5112,0.3123 T0.5177,0.3119 T0.5285,0.3111 T0.5398,0.3096 T0.549,0.3065 T0.5526,0.3015 Q0.5526,0.2999,0.5518,0.2982 Q0.547,0.2903,0.5386,0.2883 T0.5165,0.2862 Q0.5116,0.2862,0.5056,0.2866 T0.4972,0.287 Q0.4884,0.287,0.4787,0.2833 Q0.4594,0.2758,0.4265,0.2758 Q0.4169,0.2758,0.4129,0.2766 Q0.4112,0.2771,0.4104,0.2771 Q0.4088,0.2771,0.4056,0.2748 T0.3968,0.2721 Q0.3695,0.2696,0.359,0.2659 Q0.355,0.2646,0.351,0.2646 T0.3426,0.2661 T0.3365,0.2675 T0.3333,0.2659 Q0.3277,0.2605,0.3116,0.2553 T0.2859,0.2501 L0.2843,0.2501 L0.2819,0.2501 Q0.2779,0.2501,0.2723,0.2493 T0.2586,0.2472 T0.2474,0.2455 Q0.1799,0.236,0.1719,0.236 Q0.1663,0.236,0.1606,0.235 T0.1502,0.2316 T0.1454,0.2265 Q0.1454,0.2223,0.1558,0.2173 Q0.1679,0.2115,0.1859,0.2092 T0.2185,0.207 T0.2353,0.2057 Q0.2369,0.2049,0.2502,0.2041 T0.2799,0.2022 T0.302,0.2007 Q0.3084,0.1999,0.3245,0.1954 T0.347,0.1908 Q0.3502,0.1908,0.3534,0.1916 Q0.3663,0.197,0.388,0.197 Q0.404,0.197,0.4088,0.1929 Q0.4096,0.192,0.4108,0.192 T0.4177,0.1945 T0.4277,0.197 T0.4369,0.1949 Q0.4442,0.1908,0.4843,0.1875 Q0.4892,0.1871,0.4968,0.1839 T0.5084,0.1808 L0.5108,0.1808 Q0.5213,0.1825,0.5454,0.1825 Q0.5823,0.1825,0.5992,0.1779 Q0.6096,0.1746,0.6217,0.1746 Q0.6249,0.1746,0.6309,0.1748 T0.6394,0.175 Q0.6434,0.175,0.6466,0.1746 Q0.6474,0.1746,0.6594,0.1738 T0.6787,0.1713 T0.6892,0.1659 Q0.6924,0.1634,0.6924,0.1593 Q0.6924,0.1547,0.6888,0.151 T0.6795,0.1472 Q0.6779,0.1472,0.6763,0.1477 Q0.6699,0.1493,0.6667,0.1493 Q0.661,0.1493,0.6506,0.1456 Q0.6329,0.1394,0.6129,0.1394 Q0.6048,0.1394,0.5992,0.1377 T0.5888,0.136 T0.5803,0.1377 T0.5751,0.1394 Q0.5711,0.1394,0.5639,0.1369 Q0.5365,0.1273,0.5116,0.1273 Q0.4876,0.1273,0.4667,0.1253 Q0.4627,0.1248,0.4542,0.1211 T0.4337,0.1174 L0.4305,0.1174 Q0.4217,0.1178,0.4153,0.119 T0.408,0.1203 Q0.4056,0.1203,0.4,0.117 Q0.3976,0.1153,0.396,0.1136 T0.3932,0.1112 T0.39,0.1099 T0.3847,0.1095 Q0.3799,0.1095,0.3687,0.1103 Q0.355,0.1112,0.3434,0.1141 T0.3301,0.117 Q0.3261,0.117,0.3229,0.1145 Q0.3181,0.1116,0.3052,0.1087 T0.2787,0.1043 T0.2546,0.1029 Q0.2506,0.1029,0.2474,0.1033 Q0.2418,0.1037,0.2349,0.1054 T0.2249,0.107 Q0.2225,0.107,0.2193,0.1066 Q0.2024,0.1024,0.1863,0.1024 Q0.1823,0.1024,0.1562,0.0971 T0.1269,0.0917 T0.1161,0.0896 T0.106,0.0854 Q0.1076,0.0846,0.11,0.0842 Q0.1173,0.0821,0.1261,0.0821 Q0.1301,0.0821,0.1369,0.0825 T0.1462,0.083 Q0.1494,0.083,0.151,0.0825 T0.1831,0.0813 T0.2201,0.0784 T0.243,0.074 T0.2667,0.0718 Q0.2707,0.0718,0.2755,0.0724 T0.2843,0.073 T0.2936,0.0724 T0.3024,0.0705 T0.3072,0.068 T0.3092,0.0657 T0.3108,0.0647 Q0.3116,0.0643,0.3133,0.0643 L0.3157,0.0643 L0.3181,0.0643 Q0.3446,0.0643,0.3446,0.0556 T0.3205,0.0469 L0.3189,0.0469 Q0.3157,0.0469,0.3157,0.0465 Q0.3084,0.0427,0.2835,0.0386 Q0.2739,0.0369,0.2675,0.0342 T0.2538,0.0299 Q0.249,0.029,0.245,0.029 T0.2378,0.0303 T0.2321,0.0315 Q0.2305,0.0315,0.2273,0.0307 Q0.2201,0.0286,0.2004,0.0272 T0.1775,0.0245 Q0.1735,0.0228,0.1663,0.0226 T0.1522,0.0197 T0.1345,0.0145 T0.1124,0.0079 Q0.0996,0.0033,0.0671,0.0044 T0.0297,0.0041 Q0.0169,0,0.0024,0.0017 Q0,0.0021,0,0.0037 Z M0.0064,0.9954 L0.0056,0.0058 Q0.0177,0.005,0.0281,0.0083 Q0.0345,0.01,0.0675,0.0089 T0.1108,0.012 Q0.1221,0.0162,0.1329,0.0187 T0.1498,0.0236 T0.1606,0.0268 T0.1691,0.0274 T0.1759,0.0286 Q0.1807,0.0303,0.2,0.0315 T0.2257,0.0348 Q0.2305,0.0361,0.2337,0.0361 Q0.2361,0.0361,0.2398,0.0348 T0.2466,0.0336 Q0.249,0.0336,0.2522,0.034 Q0.2586,0.0353,0.2655,0.0382 T0.2827,0.0427 Q0.3068,0.0469,0.3124,0.0502 Q0.3157,0.0523,0.3237,0.0523 L0.3277,0.0523 L0.3309,0.0523 Q0.3398,0.0523,0.3398,0.0556 Q0.3398,0.0581,0.3341,0.0587 T0.3205,0.0593 T0.3092,0.0603 T0.3036,0.0643 T0.2932,0.068 Q0.2884,0.0684,0.2843,0.0684 Q0.2811,0.0684,0.2763,0.0678 T0.2667,0.0672 Q0.2586,0.0672,0.2422,0.0697 T0.2177,0.0747 Q0.2137,0.0759,0.1831,0.0767 T0.1494,0.0784 L0.1474,0.0784 T0.1398,0.078 T0.1285,0.0776 Q0.1173,0.0776,0.1084,0.08 Q0.1004,0.0817,0.1004,0.0846 Q0.1004,0.0867,0.104,0.0888 T0.1124,0.0923 T0.1213,0.0948 T0.1269,0.0958 T0.155,0.1014 T0.1863,0.107 Q0.2016,0.107,0.2185,0.1107 Q0.2217,0.1116,0.2257,0.1116 Q0.2289,0.1116,0.2365,0.1099 T0.2482,0.1074 L0.2538,0.1074 Q0.2683,0.1074,0.2912,0.1107 T0.3197,0.1182 Q0.3245,0.1215,0.3301,0.1215 Q0.3333,0.1215,0.3454,0.1184 T0.3687,0.1145 Q0.3735,0.1141,0.3779,0.1139 T0.3843,0.1134 T0.3871,0.1132 Q0.3896,0.1132,0.39,0.1136 T0.392,0.1161 T0.3968,0.1203 Q0.404,0.1248,0.408,0.1248 Q0.4096,0.1248,0.4165,0.1234 T0.4305,0.1215 L0.4337,0.1215 Q0.4442,0.1215,0.4518,0.1251 T0.4659,0.1294 Q0.4876,0.1319,0.5116,0.1319 T0.5622,0.141 Q0.5703,0.1439,0.5751,0.1439 Q0.5791,0.1439,0.5831,0.1423 T0.5888,0.1406 Q0.592,0.1406,0.5944,0.1412 T0.6012,0.1427 T0.6129,0.1435 Q0.6313,0.1435,0.649,0.1497 Q0.6602,0.1535,0.6667,0.1535 Q0.6715,0.1535,0.6779,0.1522 Q0.6787,0.1518,0.6795,0.1518 Q0.6827,0.1518,0.6847,0.1541 T0.6867,0.1593 Q0.6867,0.1618,0.6851,0.1634 Q0.6835,0.1655,0.6775,0.1667 T0.6598,0.169 T0.6458,0.1705 T0.6402,0.1709 Q0.6378,0.1709,0.6321,0.1705 T0.6225,0.1701 Q0.6096,0.1701,0.5968,0.1738 Q0.5823,0.1779,0.5446,0.1779 Q0.5205,0.1779,0.5116,0.1767 Q0.51,0.1763,0.5084,0.1763 Q0.5028,0.1763,0.4944,0.1796 T0.4835,0.1829 L0.4771,0.1833 T0.4659,0.1844 L0.4546,0.1858 T0.443,0.1881 T0.4337,0.1912 Q0.4321,0.1916,0.4305,0.1916 Q0.4273,0.1916,0.4209,0.1895 T0.412,0.1875 Q0.408,0.1875,0.4056,0.19 Q0.4024,0.1925,0.388,0.1925 Q0.3663,0.1925,0.3558,0.1879 Q0.3518,0.1862,0.3462,0.1862 Q0.3373,0.1862,0.3213,0.191 T0.3012,0.1962 Q0.2964,0.1966,0.2799,0.1976 T0.2494,0.1997 T0.2313,0.2024 L0.2313,0.2024 L0.2293,0.2024 L0.2261,0.2024 L0.2217,0.2024 Q0.204,0.2024,0.1851,0.2047 T0.1526,0.2136 Q0.1406,0.2198,0.1406,0.226 Q0.1406,0.2319,0.1518,0.2362 T0.1719,0.2406 Q0.1791,0.2406,0.2466,0.2497 Q0.2498,0.2501,0.2574,0.2516 T0.2711,0.2538 T0.2819,0.2547 L0.2851,0.2547 Q0.2851,0.2543,0.2859,0.2543 Q0.294,0.2543,0.3096,0.2592 T0.3285,0.2684 Q0.3317,0.2721,0.3373,0.2721 Q0.3406,0.2721,0.3462,0.2708 T0.3542,0.2696 Q0.3558,0.2696,0.3574,0.27 Q0.3679,0.2737,0.3968,0.2762 Q0.3984,0.2766,0.4004,0.2779 L0.4044,0.2804 T0.4096,0.2816 Q0.412,0.2816,0.4145,0.2808 Q0.4177,0.2804,0.4249,0.2804 Q0.4586,0.2804,0.4763,0.287 Q0.4867,0.2912,0.4972,0.2912 Q0.5004,0.2912,0.5064,0.2908 T0.5165,0.2903 Q0.5293,0.2903,0.5361,0.2922 T0.547,0.3003 L0.547,0.3011 Q0.547,0.3036,0.5414,0.3049 T0.5249,0.3067 T0.51,0.3082 Q0.5092,0.3082,0.4831,0.3111 T0.4498,0.3161 Q0.408,0.3264,0.3952,0.3264 Q0.3896,0.3264,0.3863,0.3252 Q0.3783,0.3223,0.3703,0.3223 Q0.359,0.3223,0.3494,0.3277 Q0.347,0.3293,0.343,0.3293 Q0.3414,0.3293,0.3353,0.3285 T0.3253,0.3277 T0.3181,0.3285 Q0.3149,0.3289,0.2952,0.3306 T0.2699,0.3347 Q0.2675,0.3364,0.2598,0.3372 T0.2434,0.3395 T0.2297,0.3426 L0.2205,0.3461 T0.2048,0.3523 T0.1908,0.3606 T0.1791,0.3725 Q0.1743,0.3803,0.1743,0.3845 Q0.1743,0.3874,0.1763,0.3901 T0.1827,0.3976 T0.1912,0.4073 T0.198,0.4189 T0.2032,0.4276 T0.2137,0.4326 T0.2386,0.438 Q0.2458,0.4392,0.2562,0.4392 L0.2639,0.4392 L0.2699,0.4392 Q0.2795,0.4392,0.2843,0.4405 Q0.2932,0.443,0.3092,0.443 L0.3157,0.443 L0.3213,0.443 Q0.3293,0.443,0.3458,0.4463 T0.3671,0.4525 Q0.3598,0.4558,0.3373,0.4571 Q0.3124,0.4587,0.298,0.4637 Q0.294,0.465,0.2811,0.465 L0.2703,0.465 L0.2586,0.465 Q0.241,0.465,0.2305,0.4666 Q0.2185,0.4687,0.2185,0.4728 Q0.2185,0.4745,0.2205,0.4764 T0.2241,0.4791 L0.2265,0.4803 L0.2273,0.4803 Q0.2506,0.4824,0.261,0.4824 Q0.2675,0.4824,0.2699,0.482 Q0.2699,0.4815,0.2707,0.4815 Q0.2771,0.4815,0.3124,0.4898 Q0.3173,0.4907,0.3229,0.4913 T0.3386,0.4925 T0.3542,0.4936 T0.3663,0.494 Q0.3711,0.494,0.3787,0.4936 T0.3888,0.4932 Q0.392,0.4932,0.3944,0.4936 T0.4032,0.4959 T0.4181,0.499 T0.4369,0.5006 Q0.449,0.501,0.455,0.5021 T0.4639,0.5048 T0.4675,0.5093 L0.4675,0.5097 Q0.4675,0.5106,0.4663,0.511 T0.4622,0.5116 L0.4566,0.512 T0.4486,0.5124 T0.4402,0.5127 Q0.4345,0.5131,0.4257,0.5153 T0.4096,0.5176 Q0.4064,0.5176,0.4024,0.5172 L0.3968,0.5172 Q0.3863,0.5172,0.3731,0.522 T0.359,0.5268 Q0.355,0.528,0.3317,0.5321 T0.3004,0.5388 Q0.2867,0.5433,0.2337,0.5479 Q0.2096,0.55,0.2096,0.5562 Q0.2096,0.5591,0.2145,0.5628 Q0.2193,0.5662,0.2289,0.5662 Q0.2313,0.5662,0.2373,0.5657 T0.2458,0.5653 L0.2498,0.5653 Q0.2635,0.5674,0.3124,0.5674 Q0.3261,0.5674,0.3301,0.567 L0.3317,0.567 Q0.3341,0.567,0.3394,0.568 T0.3486,0.5691 Q0.3542,0.5691,0.3606,0.5678 T0.3699,0.5666 T0.3759,0.5686 T0.3839,0.5718 T0.3908,0.573 T0.3964,0.5734 T0.4048,0.5742 T0.4165,0.5751 T0.4277,0.5757 T0.4369,0.5778 Q0.4426,0.5794,0.4538,0.5794 Q0.4586,0.5794,0.4679,0.5792 T0.4811,0.579 Q0.4924,0.579,0.4956,0.5807 Q0.502,0.584,0.5108,0.584 L0.5137,0.584 T0.5173,0.5838 L0.5205,0.5834 L0.5237,0.583 L0.5269,0.5825 T0.5305,0.5821 T0.5341,0.5819 L0.5365,0.5819 Q0.5414,0.5819,0.5562,0.5842 T0.5855,0.5865 Q0.5912,0.5865,0.5948,0.5867 T0.6012,0.5869 T0.6064,0.5873 T0.61,0.5877 T0.6133,0.5886 T0.6157,0.5896 L0.6185,0.591 T0.6217,0.5931 Q0.6265,0.5952,0.6369,0.5952 L0.6418,0.5952 L0.6466,0.5952 Q0.6723,0.5952,0.6932,0.606 Q0.698,0.608,0.7044,0.608 Q0.7084,0.608,0.7161,0.6068 T0.7261,0.6056 Q0.7309,0.6056,0.7454,0.6051 T0.7647,0.6047 Q0.7775,0.6047,0.8072,0.6101 Q0.8096,0.6105,0.812,0.6105 Q0.8177,0.6105,0.8297,0.6085 T0.8474,0.606 L0.8506,0.606 Q0.8562,0.606,0.8647,0.607 T0.8831,0.6095 T0.8964,0.6118 Q0.9036,0.6122,0.9221,0.6122 L0.9406,0.6122 L0.959,0.6122 L0.9767,0.6122 Q0.9952,0.613,0.9952,0.6172 Q0.9952,0.6176,0.9944,0.6221 Q0.9936,0.6259,0.9574,0.6259 L0.955,0.6259 L0.9526,0.6259 Q0.9478,0.6259,0.9373,0.628 T0.9205,0.63 L0.9173,0.63 Q0.9133,0.6296,0.9084,0.6296 Q0.9004,0.6296,0.8715,0.6321 Q0.8233,0.6367,0.7944,0.64 Q0.7888,0.6408,0.7839,0.6408 T0.7739,0.6402 T0.7671,0.6396 Q0.7639,0.6396,0.7622,0.64 Q0.7614,0.6404,0.759,0.6404 Q0.7574,0.6404,0.749,0.6398 T0.7357,0.6392 Q0.7261,0.6392,0.7213,0.6412 Q0.7173,0.6425,0.7032,0.6437 T0.6711,0.6458 T0.6474,0.647 Q0.645,0.6474,0.6418,0.6474 Q0.6353,0.6474,0.6277,0.6454 T0.6161,0.6433 Q0.6104,0.6433,0.6072,0.6456 T0.6,0.6479 Q0.5912,0.6479,0.5486,0.6557 Q0.5422,0.657,0.5373,0.657 Q0.5349,0.657,0.5289,0.6564 T0.5173,0.6557 L0.5124,0.6557 Q0.4996,0.6562,0.4739,0.6611 Q0.4675,0.6624,0.4398,0.6645 T0.3851,0.668 T0.3558,0.6698 Q0.355,0.6698,0.3285,0.6721 T0.2948,0.6752 Q0.2892,0.6761,0.2843,0.6786 T0.2747,0.6831 T0.2618,0.6852 Q0.253,0.6852,0.2394,0.6893 T0.2141,0.6993 T0.1968,0.7105 Q0.1944,0.713,0.1944,0.7155 Q0.1944,0.7196,0.2012,0.7229 T0.2177,0.7285 T0.2281,0.7308 Q0.2321,0.7329,0.2365,0.7339 T0.245,0.7356 T0.2514,0.7366 Q0.2522,0.737,0.2554,0.7379 T0.2614,0.7393 T0.2679,0.7406 T0.2755,0.7416 T0.2835,0.742 Q0.29,0.742,0.3048,0.7428 T0.3253,0.7437 L0.3301,0.7437 L0.3333,0.7437 Q0.3341,0.7437,0.3598,0.7466 Q0.3639,0.7474,0.3671,0.7474 T0.3759,0.7466 T0.3855,0.7457 Q0.388,0.7457,0.3904,0.7462 Q0.3984,0.7466,0.4137,0.7495 T0.4349,0.7532 T0.441,0.7557 Q0.441,0.7599,0.4289,0.7619 Q0.4257,0.7628,0.4197,0.7634 T0.4072,0.7644 T0.3984,0.7652 Q0.3968,0.7652,0.3912,0.7655 T0.3811,0.7665 T0.3719,0.7694 Q0.3695,0.7702,0.3655,0.7702 T0.3546,0.7686 T0.3462,0.7665 L0.3446,0.7665 Q0.3406,0.7665,0.3293,0.769 T0.3149,0.7715 Q0.3084,0.7715,0.2952,0.7748 T0.2763,0.781 Q0.2675,0.7847,0.2554,0.7864 Q0.253,0.7864,0.2325,0.7874 T0.2024,0.7893 Q0.2008,0.7893,0.1984,0.7897 T0.1948,0.7901 T0.1916,0.7903 T0.1888,0.7908 T0.1867,0.7914 T0.1847,0.7922 L0.1831,0.793 T0.1819,0.7943 L0.1811,0.7959 T0.1799,0.7976 Q0.1791,0.7993,0.1791,0.8001 Q0.1791,0.8034,0.1831,0.8051 T0.1932,0.8078 T0.2,0.8092 Q0.2072,0.8117,0.2257,0.8117 Q0.2337,0.8117,0.2586,0.8109 L0.2635,0.8109 Q0.2707,0.8109,0.2767,0.8117 T0.2859,0.8136 T0.2936,0.8163 T0.3012,0.8187 Q0.3068,0.82,0.3277,0.8206 T0.3526,0.8237 Q0.3582,0.8266,0.3622,0.8266 Q0.3647,0.8266,0.3687,0.8258 T0.3751,0.825 Q0.396,0.825,0.404,0.8291 Q0.408,0.8316,0.4161,0.8316 Q0.4217,0.8316,0.4353,0.8295 L0.4394,0.8295 Q0.4466,0.8295,0.4659,0.8366 Q0.4699,0.8378,0.4747,0.8378 Q0.4763,0.8378,0.4807,0.8374 T0.4884,0.837 Q0.494,0.837,0.5004,0.8382 Q0.5052,0.8391,0.5124,0.8399 Q0.5221,0.8411,0.5249,0.8422 T0.5277,0.8461 Q0.5277,0.8482,0.5233,0.849 T0.5112,0.8501 T0.4996,0.8511 Q0.4964,0.8519,0.4851,0.8523 T0.4659,0.8544 Q0.4578,0.8557,0.4402,0.8557 L0.4349,0.8557 L0.4297,0.8557 L0.4209,0.8557 Q0.408,0.8565,0.3867,0.8571 T0.3614,0.8582 Q0.3317,0.8611,0.3237,0.8611 L0.3225,0.8611 L0.3213,0.8611 Q0.2972,0.8611,0.2972,0.8681 Q0.2972,0.8714,0.3008,0.8747 T0.3044,0.8805 Q0.3044,0.881,0.3036,0.8814 Q0.3012,0.8839,0.2851,0.8839 Q0.2779,0.8839,0.2739,0.883 Q0.2723,0.8826,0.2699,0.8826 T0.2643,0.8835 T0.259,0.8853 T0.2542,0.8876 T0.249,0.8893 Q0.2386,0.8922,0.2056,0.8946 Q0.2016,0.8951,0.1916,0.898 T0.1703,0.9009 Q0.1518,0.9009,0.1337,0.9044 T0.1149,0.9146 L0.1149,0.9158 Q0.1149,0.9175,0.1157,0.9187 T0.1173,0.921 T0.1201,0.9226 T0.1233,0.9237 T0.1269,0.9245 L0.1305,0.9251 T0.1337,0.9255 L0.1357,0.9258 Q0.139,0.9262,0.1446,0.9262 T0.1542,0.9266 T0.1598,0.9282 Q0.1614,0.9303,0.1647,0.9314 T0.1739,0.9328 T0.1815,0.9336 Q0.1863,0.9345,0.1976,0.9372 T0.2145,0.9415 Q0.2225,0.9432,0.2285,0.9467 T0.2378,0.9515 Q0.2426,0.9531,0.2514,0.9531 Q0.2538,0.9531,0.2602,0.9529 T0.2707,0.9527 Q0.2763,0.9527,0.2815,0.9531 T0.2867,0.9569 T0.2811,0.9614 Q0.2434,0.9627,0.2329,0.9652 Q0.2249,0.9672,0.2241,0.9672 L0.2096,0.9668 L0.2056,0.9668 Q0.2,0.9668,0.196,0.9672 T0.1884,0.9687 T0.1815,0.9708 T0.1731,0.9737 T0.1639,0.9772 Q0.1518,0.9805,0.1285,0.9805 L0.1253,0.9805 Q0.1124,0.9805,0.1076,0.9818 Q0.1012,0.983,0.0831,0.9876 T0.0594,0.9934 Q0.049,0.9954,0.0064,0.9954 Z M0.0032,0.9979 L0.0024,0.0037 Q0.0161,0.0021,0.0289,0.0062 Q0.0337,0.0075,0.0671,0.0066 T0.1116,0.01 T0.1337,0.0166 T0.151,0.022 Q0.1582,0.0249,0.1659,0.0251 T0.1767,0.0265 Q0.1807,0.0278,0.2,0.0292 T0.2265,0.0328 Q0.2305,0.034,0.2329,0.034 T0.239,0.0326 T0.2458,0.0311 T0.253,0.0319 Q0.2578,0.0332,0.2614,0.0342 T0.2667,0.0363 T0.2723,0.0384 T0.2827,0.0406 Q0.3084,0.0448,0.3141,0.0485 Q0.3149,0.0494,0.3225,0.0494 T0.3361,0.0504 T0.3422,0.0554 T0.3357,0.0606 T0.3205,0.0618 T0.31,0.0626 Q0.3092,0.0626,0.3056,0.0659 T0.2932,0.0701 Q0.2884,0.0709,0.2843,0.0709 Q0.2811,0.0709,0.2759,0.0701 T0.2667,0.0693 Q0.2586,0.0693,0.2422,0.0718 T0.2193,0.0763 Q0.2137,0.0784,0.1831,0.079 T0.1502,0.0805 Q0.1494,0.0809,0.147,0.0809 Q0.1454,0.0809,0.1386,0.0803 T0.1277,0.0796 Q0.1173,0.0796,0.1092,0.0821 Q0.1036,0.0834,0.1036,0.0854 Q0.1036,0.0879,0.1129,0.0908 T0.1269,0.0937 Q0.1293,0.0937,0.1558,0.0991 T0.1863,0.1045 Q0.2016,0.1045,0.2193,0.1087 Q0.2225,0.1091,0.2249,0.1091 Q0.2289,0.1091,0.2357,0.1076 T0.2482,0.1054 Q0.2506,0.1049,0.2546,0.1049 Q0.2699,0.1049,0.2924,0.1085 T0.3213,0.1165 Q0.3253,0.119,0.3301,0.119 Q0.3325,0.119,0.3446,0.1161 T0.3687,0.1124 Q0.3831,0.1112,0.3863,0.1112 T0.3908,0.1118 T0.3936,0.1145 T0.3984,0.1186 Q0.4048,0.1228,0.408,0.1228 Q0.4096,0.1228,0.4161,0.1213 T0.4305,0.1195 L0.4337,0.1195 Q0.4426,0.1195,0.4474,0.1211 T0.4566,0.1246 T0.4667,0.1273 Q0.4876,0.1298,0.5116,0.1298 Q0.5365,0.1298,0.5631,0.1389 Q0.5703,0.1414,0.5751,0.1414 Q0.5783,0.1414,0.5819,0.1398 T0.5888,0.1381 Q0.5928,0.1381,0.5984,0.1398 T0.6129,0.1414 Q0.6321,0.1414,0.6498,0.1477 Q0.661,0.1514,0.6667,0.1514 Q0.6707,0.1514,0.6771,0.1501 Q0.6787,0.1497,0.6795,0.1497 Q0.6835,0.1497,0.6863,0.1526 T0.6892,0.1593 Q0.6892,0.1626,0.6876,0.1647 Q0.6851,0.1672,0.6799,0.1686 T0.6695,0.1705 T0.6566,0.1715 T0.6458,0.1725 Q0.6434,0.173,0.6402,0.173 Q0.6378,0.173,0.6317,0.1727 T0.6225,0.1725 Q0.6096,0.1725,0.5984,0.1759 Q0.5823,0.1804,0.5454,0.1804 Q0.5205,0.1804,0.5116,0.1788 L0.5084,0.1788 Q0.5036,0.1788,0.4956,0.1819 T0.4843,0.185 Q0.4434,0.1887,0.4353,0.1929 Q0.4321,0.1945,0.4289,0.1945 T0.4197,0.1922 T0.4112,0.19 T0.4072,0.1912 Q0.4032,0.1949,0.388,0.1949 Q0.3663,0.1949,0.3542,0.19 Q0.351,0.1883,0.3462,0.1883 Q0.3406,0.1883,0.3321,0.1906 T0.3153,0.1954 T0.302,0.1983 Q0.2972,0.1991,0.2859,0.1997 T0.2643,0.201 T0.245,0.2024 T0.2337,0.2041 Q0.2321,0.2045,0.2181,0.2045 T0.1851,0.207 T0.1542,0.2157 Q0.143,0.2211,0.143,0.226 Q0.143,0.2314,0.153,0.2348 T0.1719,0.2381 Q0.1791,0.2381,0.2474,0.2476 Q0.2506,0.248,0.2558,0.2489 T0.2651,0.2505 T0.2739,0.252 T0.2819,0.2526 Q0.2835,0.2526,0.2851,0.2522 L0.2859,0.2522 Q0.2948,0.2522,0.3104,0.2574 T0.3309,0.2671 Q0.3333,0.2696,0.3365,0.2696 Q0.339,0.2696,0.3442,0.2684 T0.3526,0.2671 T0.3582,0.2679 Q0.3687,0.2717,0.3968,0.2742 Q0.4,0.2746,0.4036,0.2771 T0.4096,0.2796 Q0.4112,0.2796,0.4137,0.2787 Q0.4169,0.2779,0.4257,0.2779 Q0.4594,0.2779,0.4779,0.2849 Q0.4876,0.2891,0.4972,0.2891 Q0.4996,0.2891,0.506,0.2887 T0.5165,0.2883 Q0.5253,0.2883,0.5305,0.2889 T0.541,0.292 T0.5494,0.299 L0.5494,0.3015 Q0.5494,0.3036,0.5466,0.3051 T0.5386,0.3073 T0.5285,0.3086 T0.5181,0.3094 T0.5108,0.3102 Q0.5068,0.3107,0.494,0.3121 L0.4683,0.315 T0.4506,0.3181 Q0.449,0.3181,0.4426,0.32 T0.4313,0.3229 T0.4197,0.3256 T0.4064,0.3281 T0.3952,0.3289 Q0.3888,0.3289,0.3855,0.3273 Q0.3783,0.3243,0.3703,0.3243 Q0.3598,0.3243,0.351,0.3297 Q0.3478,0.3314,0.3422,0.3314 Q0.3398,0.3314,0.3337,0.3306 T0.3245,0.3297 T0.3189,0.3306 Q0.3149,0.3314,0.2956,0.3328 T0.2715,0.3368 Q0.2691,0.338,0.2635,0.3391 T0.2522,0.3407 T0.2406,0.3424 T0.2313,0.3447 Q0.2305,0.3447,0.2213,0.348 T0.206,0.354 T0.1924,0.3621 T0.1815,0.3733 Q0.1767,0.3816,0.1767,0.3849 Q0.1767,0.387,0.1783,0.3893 T0.1847,0.3961 T0.1936,0.4063 T0.2004,0.4181 T0.2052,0.4264 T0.2145,0.4309 T0.2386,0.4359 Q0.2458,0.4372,0.2554,0.4372 Q0.2578,0.4372,0.2627,0.437 T0.2699,0.4367 Q0.2795,0.4367,0.2851,0.4384 Q0.294,0.4409,0.3092,0.4409 Q0.3116,0.4409,0.3157,0.4407 T0.3213,0.4405 Q0.3301,0.4405,0.3466,0.444 T0.3687,0.4509 Q0.3703,0.4517,0.3703,0.4525 Q0.3703,0.4575,0.3373,0.4596 Q0.3133,0.4608,0.2988,0.4658 Q0.294,0.4674,0.2803,0.4674 Q0.2763,0.4674,0.2687,0.4672 T0.257,0.467 Q0.2402,0.467,0.2313,0.4687 Q0.2209,0.4708,0.2209,0.4737 Q0.2209,0.4741,0.2213,0.4749 T0.2229,0.4764 L0.2249,0.4774 T0.2265,0.4778 L0.2273,0.4782 Q0.2498,0.4803,0.2618,0.4803 Q0.2667,0.4803,0.2691,0.4799 Q0.2699,0.4795,0.2715,0.4795 Q0.2779,0.4795,0.3133,0.4873 Q0.3181,0.4886,0.3233,0.4892 T0.3386,0.4905 T0.3542,0.4915 T0.3655,0.4919 Q0.3703,0.4919,0.3779,0.4915 T0.3888,0.4911 T0.3952,0.4915 Q0.3976,0.4919,0.4008,0.4927 L0.4072,0.4944 T0.4149,0.4961 T0.4249,0.4975 T0.4369,0.4985 Q0.449,0.499,0.4554,0.5 T0.4651,0.5031 T0.4699,0.5085 Q0.4707,0.5093,0.4707,0.5097 Q0.4707,0.5114,0.4687,0.5124 T0.4631,0.5139 T0.4562,0.5145 T0.4478,0.5147 L0.4402,0.5147 Q0.4353,0.5151,0.4265,0.5174 T0.4096,0.5197 L0.4024,0.5197 Q0.4,0.5193,0.3968,0.5193 Q0.3896,0.5193,0.3831,0.5209 T0.3703,0.5253 T0.3598,0.5288 Q0.3558,0.5301,0.3321,0.5342 T0.302,0.5409 Q0.2876,0.5454,0.2337,0.55 Q0.2112,0.5521,0.2112,0.5558 Q0.2112,0.5574,0.2161,0.5612 Q0.2201,0.5637,0.2281,0.5637 Q0.2305,0.5637,0.2361,0.5633 T0.2442,0.5628 Q0.2474,0.5628,0.2498,0.5633 Q0.2635,0.5653,0.3133,0.5653 Q0.3261,0.5653,0.3301,0.5649 L0.3325,0.5649 Q0.3349,0.5649,0.3402,0.5657 T0.3494,0.5666 Q0.3542,0.5666,0.3598,0.5657 Q0.3663,0.5645,0.3695,0.5645 Q0.3735,0.5645,0.3775,0.5666 T0.3847,0.5695 Q0.3888,0.5707,0.3912,0.5709 T0.3968,0.5711 T0.4048,0.572 Q0.4096,0.5724,0.4165,0.5726 T0.4281,0.5734 T0.4378,0.5757 Q0.4418,0.5774,0.4522,0.5774 Q0.4562,0.5774,0.4655,0.5769 T0.4795,0.5765 Q0.4932,0.5765,0.4972,0.579 Q0.5028,0.5819,0.51,0.5819 Q0.5141,0.5819,0.5221,0.5809 T0.5341,0.5798 L0.5373,0.5798 Q0.5422,0.5798,0.557,0.5821 T0.5855,0.5844 L0.5936,0.5844 L0.5992,0.5844 T0.604,0.5848 T0.6076,0.5852 T0.6108,0.5859 T0.6137,0.5865 T0.6161,0.5873 T0.6181,0.5881 T0.6209,0.5896 L0.6233,0.591 Q0.6265,0.5927,0.6353,0.5927 L0.6402,0.5927 L0.645,0.5927 Q0.6723,0.5927,0.6948,0.6039 Q0.6988,0.606,0.7036,0.606 Q0.7076,0.606,0.7153,0.6045 T0.7261,0.6031 Q0.7309,0.6031,0.7454,0.6027 T0.7647,0.6022 Q0.7783,0.6022,0.808,0.608 L0.812,0.608 Q0.8169,0.608,0.8293,0.6062 T0.8474,0.6039 L0.8506,0.6039 Q0.857,0.6039,0.8655,0.6049 T0.8835,0.6074 T0.8972,0.6093 Q0.9036,0.6101,0.9213,0.6101 L0.9398,0.6101 L0.959,0.6101 L0.9767,0.6101 Q0.9976,0.6109,0.9976,0.6176 Q0.9976,0.6188,0.9968,0.6226 Q0.9952,0.6284,0.9671,0.6284 L0.959,0.6284 L0.9526,0.6284 Q0.9486,0.6284,0.9382,0.6302 T0.9205,0.6321 L0.9173,0.6321 Q0.9133,0.6317,0.9092,0.6317 Q0.9012,0.6317,0.8715,0.6346 Q0.8233,0.6387,0.7944,0.6421 Q0.7888,0.6429,0.7831,0.6429 Q0.7783,0.6429,0.7731,0.6425 T0.7663,0.6421 L0.7622,0.6421 Q0.7614,0.6425,0.7586,0.6425 T0.7474,0.6421 T0.7349,0.6416 Q0.7261,0.6416,0.7221,0.6429 Q0.7173,0.645,0.7032,0.646 T0.6711,0.6479 T0.6482,0.6491 Q0.645,0.6495,0.6418,0.6495 Q0.6353,0.6495,0.6273,0.6474 T0.6161,0.6454 Q0.612,0.6454,0.6088,0.6477 T0.6,0.6499 Q0.5912,0.6499,0.5494,0.6578 Q0.5422,0.6591,0.5373,0.6591 Q0.5341,0.6591,0.5281,0.6584 T0.5173,0.6578 L0.5124,0.6578 Q0.5004,0.6582,0.4747,0.6632 Q0.4675,0.6649,0.4398,0.6667 T0.3851,0.6703 T0.3566,0.6719 Q0.3534,0.6723,0.3406,0.6734 T0.3141,0.6757 T0.2948,0.6773 Q0.2908,0.6781,0.2819,0.6829 T0.2618,0.6877 Q0.2482,0.6877,0.2273,0.6958 T0.1992,0.7117 Q0.1976,0.7138,0.1976,0.7155 Q0.1976,0.7188,0.2032,0.7213 T0.2181,0.7258 T0.2289,0.7292 Q0.2337,0.7308,0.2378,0.7316 L0.2458,0.7333 T0.2522,0.7345 Q0.2747,0.7399,0.2835,0.7399 Q0.29,0.7399,0.3048,0.7408 T0.3253,0.7416 Q0.3277,0.7416,0.3297,0.7414 T0.3341,0.7412 L0.3598,0.7445 Q0.3639,0.7449,0.3663,0.7449 Q0.3695,0.7449,0.3751,0.7443 T0.3855,0.7437 L0.3904,0.7437 Q0.3984,0.7441,0.4141,0.7472 T0.4353,0.7507 Q0.4434,0.752,0.4434,0.7553 Q0.4434,0.7578,0.439,0.7605 T0.4297,0.764 Q0.4257,0.7648,0.4201,0.7655 T0.4076,0.7665 T0.3984,0.7673 Q0.3968,0.7673,0.3912,0.7677 T0.3815,0.7688 T0.3735,0.771 T0.3655,0.7727 Q0.3606,0.7727,0.3534,0.7708 T0.3458,0.769 L0.3446,0.769 Q0.3414,0.769,0.3297,0.7713 T0.3149,0.7735 Q0.3092,0.7735,0.296,0.7771 T0.2771,0.7831 Q0.2683,0.7872,0.2554,0.7885 Q0.253,0.7889,0.2325,0.7897 T0.2032,0.7914 Q0.2008,0.7918,0.198,0.792 T0.194,0.7924 T0.1912,0.7928 T0.1888,0.793 T0.1867,0.7934 T0.1851,0.7943 T0.1843,0.7953 T0.1835,0.7968 T0.1823,0.7984 T0.1815,0.8001 Q0.1815,0.8022,0.1847,0.8032 T0.1932,0.8053 T0.2008,0.8071 Q0.2072,0.8092,0.2265,0.8092 Q0.2361,0.8092,0.2586,0.8088 L0.2635,0.8088 Q0.2731,0.8088,0.2795,0.8098 T0.2928,0.8134 T0.302,0.8167 Q0.306,0.8179,0.3277,0.8183 T0.3542,0.8221 Q0.359,0.8246,0.3622,0.8246 Q0.3639,0.8246,0.3675,0.8237 T0.3751,0.8229 Q0.3968,0.8229,0.4048,0.8275 Q0.4088,0.8291,0.4161,0.8291 Q0.4225,0.8291,0.4353,0.8275 Q0.4369,0.827,0.4394,0.827 Q0.4474,0.827,0.4675,0.8345 Q0.4707,0.8358,0.4739,0.8358 Q0.4755,0.8358,0.4799,0.8353 T0.4876,0.8349 Q0.494,0.8349,0.5012,0.8362 L0.5076,0.837 T0.5133,0.8376 T0.5181,0.8382 T0.5221,0.8391 L0.5253,0.8399 T0.5277,0.8409 L0.5293,0.8422 T0.5301,0.8438 L0.5301,0.8461 Q0.5301,0.8499,0.5249,0.8511 T0.5112,0.8526 T0.5004,0.8532 Q0.4964,0.854,0.4851,0.8546 T0.4667,0.8565 Q0.4578,0.8577,0.441,0.8577 L0.4345,0.8577 L0.4289,0.8577 L0.4209,0.8577 Q0.4153,0.8582,0.4088,0.8586 T0.3968,0.8592 T0.3855,0.8594 T0.3755,0.8596 T0.3675,0.86 T0.3622,0.8602 Q0.3317,0.8635,0.3237,0.8635 Q0.2996,0.8635,0.2996,0.8681 Q0.2996,0.8698,0.3032,0.8733 T0.3068,0.8797 L0.3068,0.8822 Q0.3052,0.8859,0.2859,0.8859 Q0.2787,0.8859,0.2739,0.8851 L0.2699,0.8851 Q0.2659,0.8851,0.259,0.888 T0.2498,0.8913 Q0.2394,0.8946,0.2056,0.8971 Q0.2032,0.8971,0.1928,0.9002 T0.1703,0.9034 Q0.1526,0.9034,0.1353,0.9067 T0.1173,0.915 L0.1173,0.9158 Q0.1173,0.9166,0.1177,0.9175 T0.1189,0.9191 T0.1205,0.9204 T0.1229,0.9212 T0.1257,0.922 T0.1285,0.9226 T0.1309,0.9231 T0.1337,0.9235 T0.1365,0.9237 L0.1446,0.9237 T0.1554,0.9243 T0.1614,0.9268 T0.1659,0.9293 T0.1743,0.9303 T0.1823,0.9316 Q0.1863,0.932,0.1912,0.9332 T0.2028,0.9361 T0.2153,0.939 Q0.2233,0.9411,0.2297,0.9448 T0.2386,0.9494 Q0.2426,0.9506,0.2506,0.9506 Q0.253,0.9506,0.2594,0.9504 T0.2699,0.9502 Q0.2763,0.9502,0.2819,0.9511 Q0.2851,0.9511,0.2871,0.9529 T0.2892,0.9573 Q0.2892,0.9627,0.2811,0.9635 Q0.2434,0.9652,0.2337,0.9672 Q0.2257,0.9693,0.2241,0.9693 Q0.2217,0.9693,0.2096,0.9689 L0.2056,0.9689 Q0.1976,0.9689,0.1924,0.9699 T0.1787,0.9741 L0.1647,0.9793 Q0.1518,0.983,0.1285,0.983 L0.1261,0.983 L0.1237,0.983 Q0.1124,0.983,0.1076,0.9838 Q0.102,0.9851,0.0839,0.9896 T0.0602,0.9954 T0.0406,0.9971 T0.0153,0.9979 L0.0032,0.9979 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C8}' is unused\n '\\u{E0CA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9992,0.998 Q0.9992,1,0.9968,1 Q0.9521,1,0.9392,0.998 Q0.9335,0.997,0.9152,0.9921 T0.8913,0.9862 Q0.8873,0.9852,0.8783,0.9852 L0.8747,0.9852 L0.871,0.9852 Q0.8483,0.9852,0.8345,0.9812 Q0.8289,0.9792,0.8228,0.9773 T0.8135,0.9743 T0.8054,0.9723 T0.7948,0.9713 L0.7908,0.9713 L0.777,0.9713 T0.7656,0.9693 Q0.7616,0.9683,0.7498,0.9674 T0.7283,0.9664 L0.7186,0.9654 Q0.708,0.9644,0.708,0.9575 Q0.708,0.9545,0.7109,0.952 T0.7178,0.9486 L0.7315,0.9486 L0.7417,0.9486 L0.7502,0.9486 Q0.7575,0.9486,0.7599,0.9476 Q0.7616,0.9466,0.7685,0.9426 T0.7843,0.9377 Q0.7899,0.9357,0.8009,0.9332 T0.8175,0.9298 Q0.82,0.9288,0.8228,0.9283 T0.8277,0.9278 T0.8313,0.9273 T0.8341,0.9263 T0.8362,0.9258 Q0.8402,0.9219,0.854,0.9219 L0.8569,0.9219 L0.8597,0.9219 L0.8637,0.9219 Q0.88,0.9199,0.88,0.9159 L0.88,0.9149 Q0.88,0.913,0.8719,0.911 T0.852,0.9075 T0.8297,0.906 Q0.8224,0.906,0.8167,0.905 T0.8074,0.9031 T0.8001,0.9006 T0.794,0.8991 Q0.7599,0.8971,0.7494,0.8942 Q0.7461,0.8932,0.7397,0.8902 T0.7299,0.8872 L0.7267,0.8872 Q0.721,0.8882,0.7121,0.8882 Q0.6926,0.8882,0.691,0.8833 L0.691,0.8803 Q0.691,0.8773,0.6922,0.8749 T0.6955,0.8704 L0.6975,0.8684 Q0.6926,0.8655,0.6764,0.8655 Q0.6683,0.8655,0.6375,0.8625 Q0.6358,0.8625,0.629,0.862 T0.6148,0.8615 T0.5973,0.861 T0.5791,0.8605 L0.5718,0.8605 L0.5661,0.8605 L0.5596,0.8605 Q0.5426,0.8605,0.5337,0.8586 Q0.5264,0.8576,0.515,0.8571 T0.4996,0.8556 Q0.498,0.8556,0.4947,0.8551 T0.4882,0.8546 T0.4809,0.8541 T0.474,0.8531 T0.4692,0.8506 T0.4672,0.8467 Q0.4672,0.8437,0.468,0.8422 T0.4704,0.8398 T0.4736,0.8383 T0.4781,0.8368 T0.4838,0.8358 T0.4911,0.8353 T0.4988,0.8338 Q0.5069,0.8328,0.5142,0.8328 Q0.5174,0.8328,0.5215,0.8333 T0.5264,0.8338 Q0.5296,0.8338,0.532,0.8328 Q0.5523,0.8249,0.5604,0.8249 L0.5653,0.8249 Q0.5775,0.8269,0.5848,0.8269 Q0.5912,0.8269,0.5937,0.8259 Q0.6026,0.821,0.6253,0.821 Q0.6294,0.821,0.6334,0.822 T0.6383,0.8229 Q0.6399,0.8229,0.644,0.82 Q0.6504,0.817,0.6723,0.816 T0.6975,0.814 Q0.6999,0.814,0.7048,0.8121 T0.7129,0.8091 T0.7226,0.8071 T0.7372,0.8061 L0.7421,0.8061 Q0.7624,0.8071,0.7721,0.8071 Q0.7924,0.8071,0.7981,0.8051 Q0.8021,0.8032,0.807,0.8027 T0.8135,0.8017 T0.8151,0.8002 L0.8151,0.7992 Q0.8143,0.7962,0.8127,0.7957 T0.8045,0.7943 Q0.7997,0.7943,0.7964,0.7933 Q0.7883,0.7933,0.7676,0.7923 T0.7437,0.7903 Q0.7307,0.7893,0.7218,0.7844 Q0.7194,0.7834,0.7141,0.7819 L0.7036,0.7789 T0.693,0.7765 T0.6853,0.7755 Q0.6805,0.7755,0.6691,0.773 T0.6553,0.7705 Q0.6545,0.7705,0.6545,0.7715 Q0.6537,0.7715,0.65,0.7725 T0.6423,0.774 T0.635,0.7745 Q0.6294,0.7745,0.6257,0.773 T0.618,0.771 T0.6083,0.77 T0.601,0.7695 Q0.5985,0.7695,0.5921,0.769 T0.5795,0.7676 T0.5702,0.7666 Q0.5653,0.7656,0.5596,0.7616 T0.5539,0.7547 Q0.5539,0.7498,0.5645,0.7488 Q0.5693,0.7478,0.5852,0.7448 T0.6099,0.7418 L0.6148,0.7418 Q0.6196,0.7418,0.6253,0.7423 T0.6338,0.7428 L0.6399,0.7428 Q0.6431,0.7418,0.6488,0.7409 T0.6586,0.7394 T0.6659,0.7389 L0.6707,0.7389 Q0.6723,0.7399,0.6748,0.7399 Q0.6796,0.7399,0.6946,0.7389 T0.7161,0.7379 Q0.7251,0.7379,0.7478,0.7319 Q0.7494,0.7319,0.7539,0.7315 T0.762,0.73 T0.7697,0.727 T0.7818,0.723 T0.7948,0.7196 T0.7997,0.7151 Q0.7997,0.7141,0.7989,0.7132 Q0.7924,0.7062,0.7717,0.6978 T0.738,0.6894 Q0.7267,0.6894,0.717,0.6845 T0.7048,0.6795 Q0.6975,0.6785,0.6711,0.6766 T0.6431,0.6746 Q0.6415,0.6736,0.6144,0.6721 T0.5596,0.6686 T0.5247,0.6657 Q0.4996,0.6607,0.4874,0.6597 L0.4834,0.6597 Q0.4785,0.6597,0.4724,0.6607 T0.4631,0.6617 Q0.4574,0.6617,0.4501,0.6597 Q0.4088,0.6518,0.4006,0.6518 Q0.3933,0.6518,0.3901,0.6499 T0.3844,0.6479 T0.3739,0.6499 T0.3585,0.6518 L0.352,0.6518 Q0.3471,0.6508,0.335,0.6503 T0.3122,0.6494 T0.2912,0.6479 T0.2766,0.6449 Q0.2733,0.6439,0.2668,0.6439 Q0.2628,0.6439,0.2543,0.6444 T0.2425,0.6449 T0.2368,0.6439 L0.2344,0.6439 Q0.2336,0.6439,0.2283,0.6444 T0.2182,0.6449 Q0.2117,0.6449,0.2052,0.6439 Q0.1768,0.6409,0.1281,0.637 Q0.0989,0.634,0.0916,0.634 L0.0835,0.634 L0.0795,0.634 Q0.0722,0.634,0.0616,0.632 T0.0479,0.6301 Q0.0462,0.6301,0.0406,0.6306 T0.0308,0.6311 Q0.0032,0.6311,0.0008,0.6231 Q0,0.6202,0,0.6182 Q0,0.6083,0.0227,0.6083 Q0.03,0.6073,0.0422,0.6073 Q0.0487,0.6073,0.0608,0.6078 T0.0787,0.6083 Q0.0973,0.6083,0.103,0.6073 Q0.1062,0.6063,0.1131,0.6053 T0.1253,0.6039 T0.1375,0.6024 T0.1492,0.6014 L0.1533,0.6014 Q0.1598,0.6024,0.1723,0.6044 T0.189,0.6063 Q0.1906,0.6063,0.1922,0.6053 Q0.2214,0.6004,0.236,0.6004 Q0.2409,0.6004,0.2551,0.6009 T0.2741,0.6014 Q0.2782,0.6014,0.2859,0.6024 T0.2968,0.6034 Q0.3009,0.6034,0.3041,0.6024 Q0.3277,0.5905,0.356,0.5905 L0.3613,0.5905 L0.3666,0.5905 Q0.3731,0.5905,0.3755,0.5895 Q0.382,0.5856,0.3844,0.5846 T0.3938,0.5831 T0.4144,0.5826 T0.4428,0.5801 T0.4631,0.5776 L0.4663,0.5776 Q0.4704,0.5776,0.4785,0.5786 T0.4899,0.5796 Q0.4964,0.5796,0.5012,0.5767 Q0.5069,0.5737,0.5223,0.5737 Q0.5272,0.5737,0.5369,0.5742 T0.5499,0.5747 Q0.558,0.5747,0.5612,0.5737 Q0.5661,0.5717,0.5714,0.5712 T0.5835,0.5702 T0.5945,0.5692 T0.6018,0.5687 L0.6062,0.5687 T0.6095,0.5682 T0.6148,0.5678 Q0.6172,0.5668,0.6196,0.5653 T0.6245,0.5633 T0.631,0.5628 T0.6407,0.5638 T0.6504,0.5648 T0.6594,0.5638 T0.6675,0.5628 L0.6707,0.5628 L0.6861,0.5628 Q0.7364,0.5628,0.7494,0.5608 L0.7567,0.5608 L0.7652,0.5608 L0.7729,0.5608 Q0.7794,0.5608,0.7818,0.5589 Q0.7851,0.5569,0.7859,0.5559 Q0.7835,0.5539,0.7656,0.5519 Q0.7121,0.547,0.6975,0.543 Q0.6934,0.541,0.6853,0.5396 L0.6691,0.5366 T0.6525,0.5336 T0.6391,0.5312 Q0.6367,0.5302,0.6245,0.5257 T0.6034,0.5213 L0.5977,0.5213 Q0.5945,0.5223,0.5904,0.5223 Q0.5839,0.5223,0.5787,0.5208 T0.5685,0.5183 T0.5596,0.5173 Q0.558,0.5173,0.5552,0.5168 T0.5495,0.5163 L0.5434,0.5163 T0.5373,0.5158 T0.532,0.5148 T0.5284,0.5129 T0.5272,0.5104 L0.5272,0.5074 Q0.5304,0.5015,0.5377,0.499 T0.5629,0.4965 Q0.5734,0.4955,0.5811,0.4946 T0.5953,0.4916 T0.605,0.4896 Q0.6083,0.4886,0.6123,0.4886 Q0.6148,0.4886,0.6225,0.4891 T0.635,0.4896 L0.6456,0.4896 Q0.6837,0.4857,0.6861,0.4857 Q0.7226,0.4768,0.7283,0.4768 Q0.7307,0.4768,0.732,0.4773 T0.7372,0.4777 Q0.7502,0.4777,0.7721,0.4758 Q0.7753,0.4748,0.777,0.4738 Q0.7745,0.4718,0.768,0.4708 Q0.7599,0.4688,0.7445,0.4688 Q0.7405,0.4688,0.7324,0.4693 T0.721,0.4698 Q0.7056,0.4698,0.6999,0.4679 Q0.6861,0.4629,0.6626,0.4619 Q0.6586,0.4609,0.6533,0.4604 T0.6419,0.459 T0.6314,0.456 T0.6269,0.452 Q0.6269,0.451,0.6302,0.4491 Q0.6358,0.4451,0.6525,0.4416 T0.6788,0.4382 L0.6845,0.4382 L0.6902,0.4382 Q0.7064,0.4382,0.7145,0.4362 Q0.7202,0.4342,0.7307,0.4342 L0.7356,0.4342 L0.7409,0.4342 L0.7453,0.4342 Q0.7543,0.4342,0.7607,0.4332 Q0.7778,0.4313,0.7847,0.4288 T0.7932,0.4248 T0.7972,0.4169 T0.8045,0.4045 L0.8094,0.3986 T0.8135,0.3942 L0.8167,0.3912 T0.8191,0.3887 T0.8204,0.3867 T0.8208,0.3848 Q0.8208,0.3818,0.8167,0.3739 Q0.8127,0.3689,0.8054,0.3635 T0.7924,0.3556 T0.7778,0.3497 T0.768,0.3462 Q0.764,0.3442,0.7478,0.3427 T0.7267,0.3383 Q0.7234,0.3363,0.7044,0.3348 T0.6805,0.3323 L0.6764,0.3323 T0.6679,0.3328 T0.6586,0.3333 Q0.6521,0.3333,0.648,0.3314 Q0.6391,0.3264,0.6294,0.3264 Q0.6229,0.3264,0.6156,0.3294 Q0.6115,0.3304,0.6042,0.3304 Q0.5977,0.3304,0.5888,0.3289 T0.5738,0.3264 T0.5584,0.3225 L0.5491,0.3195 Q0.5418,0.3185,0.5162,0.3155 T0.4895,0.3121 T0.4826,0.3116 T0.4716,0.3111 T0.4607,0.3096 T0.4513,0.3066 T0.4477,0.3017 Q0.4477,0.2997,0.4485,0.2977 Q0.4526,0.2898,0.4611,0.2878 T0.4842,0.2859 Q0.4882,0.2859,0.4943,0.2864 T0.5028,0.2868 Q0.5118,0.2868,0.5215,0.2829 Q0.5401,0.276,0.5734,0.276 Q0.5831,0.276,0.5872,0.277 L0.5904,0.277 T0.5949,0.2745 T0.6034,0.272 Q0.631,0.269,0.6407,0.2661 Q0.6448,0.2641,0.6488,0.2641 T0.6573,0.2656 T0.6634,0.2671 Q0.6659,0.2671,0.6675,0.2651 Q0.6723,0.2601,0.6886,0.2552 T0.7137,0.2502 L0.7153,0.2502 L0.7178,0.2502 Q0.7218,0.2502,0.7279,0.2493 T0.7417,0.2468 T0.7526,0.2453 Q0.8208,0.2354,0.8281,0.2354 Q0.8337,0.2354,0.8394,0.2344 T0.8496,0.2315 T0.854,0.2265 Q0.854,0.2216,0.8443,0.2176 Q0.8354,0.2127,0.8216,0.2102 T0.7972,0.2072 T0.777,0.2067 T0.7648,0.2057 Q0.7632,0.2047,0.7498,0.2038 T0.7202,0.2018 T0.6983,0.1998 Q0.6918,0.1998,0.676,0.1949 T0.6537,0.1899 Q0.6496,0.1899,0.6472,0.1919 Q0.6342,0.1968,0.6123,0.1968 Q0.5961,0.1968,0.5912,0.1929 Q0.5904,0.1919,0.5892,0.1919 T0.5823,0.1944 T0.5722,0.1968 T0.5637,0.1949 Q0.5556,0.1909,0.5158,0.1869 Q0.5109,0.1869,0.5032,0.1835 T0.4915,0.18 Q0.4907,0.18,0.4891,0.181 Q0.4793,0.182,0.455,0.182 Q0.4177,0.182,0.4015,0.1771 Q0.3901,0.1741,0.3779,0.1741 Q0.3747,0.1741,0.369,0.1746 T0.3609,0.1751 Q0.3569,0.1751,0.3536,0.1741 Q0.3512,0.1741,0.3459,0.1736 T0.3358,0.1726 T0.3256,0.1716 T0.3167,0.1696 T0.3106,0.1662 Q0.3082,0.1632,0.3082,0.1592 Q0.3082,0.1543,0.3114,0.1508 T0.3204,0.1474 L0.3236,0.1474 Q0.3301,0.1494,0.3333,0.1494 Q0.339,0.1494,0.3496,0.1454 Q0.3674,0.1385,0.3869,0.1385 Q0.395,0.1385,0.4011,0.137 T0.4116,0.1355 T0.4197,0.1375 T0.425,0.1395 Q0.429,0.1395,0.4355,0.1365 Q0.4631,0.1266,0.4882,0.1266 Q0.5126,0.1266,0.5337,0.1246 Q0.5369,0.1246,0.5458,0.1207 T0.5661,0.1167 L0.5693,0.1167 Q0.5791,0.1177,0.5852,0.1187 T0.5921,0.1197 Q0.5945,0.1197,0.6002,0.1167 Q0.6026,0.1147,0.605,0.1123 T0.6091,0.1093 T0.6156,0.1088 T0.6318,0.1098 Q0.6456,0.1108,0.6569,0.1137 T0.6707,0.1167 Q0.674,0.1167,0.6772,0.1147 Q0.6821,0.1108,0.6946,0.1083 T0.721,0.1044 T0.7453,0.1029 L0.7526,0.1029 Q0.7583,0.1039,0.7652,0.1053 T0.7753,0.1068 Q0.7778,0.1068,0.7802,0.1058 Q0.7981,0.1019,0.8143,0.1019 Q0.8175,0.1019,0.8439,0.0964 T0.8735,0.091 Q0.8759,0.091,0.8836,0.089 T0.8938,0.0851 Q0.8929,0.0841,0.8905,0.0841 Q0.8832,0.0821,0.8735,0.0821 Q0.8694,0.0821,0.8629,0.0826 T0.854,0.0831 Q0.8508,0.0831,0.8491,0.0821 Q0.8475,0.0821,0.8171,0.0811 T0.7802,0.0781 T0.7571,0.0737 T0.7332,0.0712 Q0.7299,0.0712,0.7247,0.0717 T0.7161,0.0722 L0.7064,0.0722 Q0.7032,0.0712,0.7003,0.0707 T0.6959,0.0692 T0.693,0.0678 T0.6914,0.0663 T0.6902,0.0648 T0.689,0.0643 L0.6869,0.0643 L0.6845,0.0643 L0.6821,0.0643 Q0.6553,0.0643,0.6553,0.0554 T0.6796,0.0465 L0.6813,0.0465 L0.6845,0.0465 Q0.6918,0.0425,0.717,0.0376 Q0.7226,0.0366,0.7267,0.0356 T0.7324,0.0336 T0.7376,0.0317 T0.747,0.0297 Q0.7518,0.0287,0.7551,0.0287 T0.762,0.0297 T0.768,0.0307 L0.7729,0.0307 Q0.7802,0.0277,0.7997,0.0267 T0.8224,0.0237 Q0.8273,0.0227,0.8341,0.0223 T0.8475,0.0193 T0.8654,0.0143 T0.8873,0.0079 Q0.9002,0.003,0.9331,0.004 T0.97,0.004 Q0.9838,0,0.9976,0.001 Q1,0.001,1,0.003 Z M0.9935,0.996 L0.9951,0.0049 Q0.9822,0.0049,0.9716,0.0079 Q0.9659,0.0099,0.9327,0.0089 T0.8897,0.0119 Q0.8775,0.0158,0.8666,0.0183 T0.85,0.0237 Q0.8418,0.0267,0.8341,0.0272 T0.8248,0.0277 Q0.82,0.0297,0.8001,0.0312 T0.7745,0.0346 Q0.7697,0.0356,0.7664,0.0356 Q0.764,0.0356,0.7603,0.0341 T0.7534,0.0326 Q0.751,0.0326,0.7478,0.0336 Q0.7429,0.0346,0.7397,0.0356 T0.7344,0.0376 T0.7283,0.0401 T0.7178,0.0425 Q0.6926,0.0465,0.6878,0.0495 Q0.6845,0.0514,0.6764,0.0514 L0.6723,0.0514 L0.6691,0.0514 Q0.6602,0.0514,0.6602,0.0554 Q0.6602,0.0574,0.6659,0.0579 T0.6796,0.0589 T0.691,0.0603 T0.6967,0.0643 T0.7072,0.0673 Q0.7121,0.0682,0.7153,0.0682 T0.7238,0.0678 T0.7332,0.0673 Q0.7413,0.0673,0.7579,0.0692 T0.7818,0.0742 Q0.7867,0.0752,0.8171,0.0762 T0.8508,0.0781 L0.852,0.0781 T0.8601,0.0776 T0.8719,0.0772 Q0.8832,0.0772,0.8921,0.0791 Q0.8994,0.0811,0.8994,0.0841 T0.8933,0.0895 T0.8812,0.094 T0.8735,0.0959 T0.8451,0.1014 T0.8143,0.1068 Q0.7989,0.1068,0.7818,0.1098 Q0.7778,0.1108,0.7745,0.1108 T0.768,0.1103 T0.7603,0.1088 T0.7518,0.1068 L0.7461,0.1068 Q0.7315,0.1068,0.7088,0.1103 T0.6805,0.1177 Q0.6756,0.1207,0.6699,0.1207 Q0.6667,0.1207,0.6545,0.1177 T0.631,0.1147 Q0.6269,0.1137,0.6225,0.1133 T0.616,0.1128 L0.6123,0.1128 T0.6103,0.1133 L0.6083,0.1157 T0.6034,0.1197 Q0.5961,0.1246,0.5921,0.1246 Q0.5904,0.1246,0.5835,0.1231 T0.5693,0.1217 L0.5661,0.1217 Q0.558,0.1217,0.5535,0.1231 T0.5446,0.1266 T0.5345,0.1296 Q0.5126,0.1316,0.4882,0.1316 T0.438,0.1405 Q0.4298,0.1434,0.425,0.1434 Q0.4209,0.1434,0.4173,0.1419 T0.4112,0.1405 T0.4027,0.1419 T0.3869,0.1434 Q0.3682,0.1434,0.3512,0.1494 Q0.3398,0.1533,0.3333,0.1533 Q0.3285,0.1533,0.3228,0.1513 L0.3212,0.1513 Q0.3179,0.1513,0.3155,0.1538 T0.3131,0.1592 Q0.3131,0.1612,0.3147,0.1632 Q0.3171,0.1652,0.3232,0.1667 T0.3406,0.1691 T0.3544,0.1701 L0.3601,0.1701 L0.3678,0.1701 L0.3771,0.1701 Q0.3909,0.1701,0.4031,0.1731 Q0.4177,0.178,0.4558,0.178 Q0.4793,0.178,0.4882,0.1761 L0.4915,0.1761 Q0.498,0.1761,0.5061,0.179 T0.5158,0.183 Q0.5166,0.183,0.5231,0.1835 T0.5341,0.1845 T0.545,0.1855 T0.5572,0.1874 T0.5661,0.1909 Q0.5677,0.1919,0.5702,0.1919 T0.5791,0.1894 T0.588,0.1869 Q0.5921,0.1869,0.5945,0.1899 Q0.5977,0.1919,0.6123,0.1919 Q0.6334,0.1919,0.6448,0.1879 Q0.6488,0.186,0.6537,0.186 Q0.6626,0.186,0.6784,0.1909 T0.6983,0.1958 Q0.704,0.1968,0.7206,0.1973 T0.7506,0.1993 T0.7689,0.2018 L0.7705,0.2018 L0.7741,0.2018 L0.7786,0.2018 Q0.8248,0.2018,0.8475,0.2136 Q0.8597,0.2196,0.8597,0.2255 T0.8483,0.2359 T0.8281,0.2404 Q0.8208,0.2404,0.7534,0.2493 Q0.7502,0.2502,0.7425,0.2512 T0.7287,0.2532 T0.7178,0.2542 L0.7153,0.2542 L0.7137,0.2542 Q0.7064,0.2542,0.6906,0.2591 T0.6715,0.2681 T0.6626,0.272 Q0.6594,0.272,0.6541,0.2705 T0.6464,0.269 T0.6431,0.27 Q0.6318,0.273,0.6034,0.276 Q0.6018,0.276,0.5998,0.2774 T0.5957,0.2799 T0.5904,0.2809 L0.5856,0.2809 Q0.5823,0.2799,0.575,0.2799 Q0.541,0.2799,0.5239,0.2868 Q0.5134,0.2908,0.5028,0.2908 Q0.4996,0.2908,0.4935,0.2903 T0.4842,0.2898 Q0.4704,0.2898,0.4635,0.2918 T0.4534,0.2997 L0.4534,0.3007 Q0.4534,0.3037,0.459,0.3046 T0.4753,0.3066 T0.4899,0.3076 Q0.4907,0.3076,0.5166,0.3106 T0.5507,0.3155 Q0.5921,0.3264,0.605,0.3264 Q0.6107,0.3264,0.6131,0.3254 Q0.6212,0.3225,0.6294,0.3225 Q0.6407,0.3225,0.6513,0.3274 Q0.6529,0.3294,0.6569,0.3294 Q0.6594,0.3294,0.665,0.3284 T0.6748,0.3274 T0.6821,0.3284 Q0.6861,0.3294,0.6967,0.3299 T0.7165,0.3314 T0.7299,0.3343 Q0.7324,0.3363,0.7486,0.3383 T0.7697,0.3422 Q0.7713,0.3432,0.7774,0.3452 T0.7887,0.3492 T0.8005,0.3546 T0.8127,0.3625 T0.8208,0.3719 Q0.8256,0.3798,0.8256,0.3848 Q0.8256,0.3877,0.8236,0.3902 T0.8171,0.3976 T0.809,0.4075 T0.8021,0.4189 T0.7968,0.4273 T0.7867,0.4322 T0.7616,0.4382 Q0.7543,0.4392,0.7437,0.4392 L0.7364,0.4392 L0.7299,0.4392 Q0.7202,0.4392,0.7161,0.4402 Q0.7072,0.4431,0.691,0.4431 L0.6845,0.4431 L0.6788,0.4431 Q0.6707,0.4431,0.6545,0.4461 T0.6334,0.452 Q0.6399,0.456,0.6626,0.457 Q0.6878,0.458,0.7024,0.4639 Q0.7064,0.4649,0.7186,0.4649 L0.7295,0.4649 L0.7413,0.4649 Q0.7591,0.4649,0.7697,0.4669 Q0.7818,0.4688,0.7818,0.4728 Q0.7818,0.4748,0.7798,0.4763 T0.7753,0.4787 L0.7737,0.4797 L0.7729,0.4797 Q0.7494,0.4827,0.7388,0.4827 Q0.7332,0.4827,0.7307,0.4817 L0.7291,0.4817 Q0.7226,0.4817,0.6878,0.4896 Q0.6829,0.4906,0.6772,0.4911 T0.6618,0.4921 T0.646,0.4931 T0.6342,0.4936 T0.6212,0.4931 T0.6115,0.4926 Q0.6083,0.4926,0.6058,0.4931 T0.5969,0.4955 T0.5819,0.499 T0.5629,0.5005 Q0.5572,0.5005,0.5527,0.501 T0.545,0.502 T0.5397,0.503 T0.5361,0.5045 T0.5337,0.5064 T0.5328,0.5094 L0.532,0.5094 Q0.532,0.5104,0.5337,0.5109 T0.5381,0.5114 T0.5438,0.5119 T0.5515,0.5124 L0.5604,0.5124 Q0.5661,0.5134,0.5746,0.5153 T0.5912,0.5173 L0.5977,0.5173 L0.6026,0.5173 Q0.6139,0.5173,0.6273,0.5218 T0.6407,0.5272 Q0.6448,0.5282,0.6683,0.5321 T0.6991,0.5381 Q0.7137,0.543,0.7664,0.548 Q0.7908,0.55,0.7908,0.5559 Q0.7908,0.5589,0.7859,0.5628 Q0.781,0.5658,0.7713,0.5658 Q0.7689,0.5658,0.7628,0.5653 T0.7543,0.5648 T0.7502,0.5658 Q0.7364,0.5678,0.6878,0.5678 Q0.674,0.5678,0.6699,0.5668 L0.6683,0.5668 Q0.6659,0.5668,0.6606,0.5678 T0.6513,0.5687 Q0.6464,0.5687,0.6391,0.5678 Q0.6334,0.5668,0.6302,0.5668 T0.6241,0.5687 T0.6164,0.5717 Q0.6123,0.5727,0.6099,0.5727 L0.6062,0.5727 T0.6022,0.5732 T0.5953,0.5737 Q0.5904,0.5747,0.5839,0.5747 T0.5726,0.5752 T0.5629,0.5776 T0.5458,0.5796 Q0.5418,0.5796,0.5324,0.5791 T0.5191,0.5786 Q0.5077,0.5786,0.5045,0.5806 Q0.498,0.5836,0.4899,0.5836 Q0.4858,0.5836,0.4777,0.5826 T0.4655,0.5816 L0.4631,0.5816 Q0.4582,0.5816,0.4436,0.5841 T0.4144,0.5865 L0.4051,0.5865 L0.3986,0.5865 T0.3933,0.587 T0.3897,0.5875 T0.3869,0.5885 T0.3844,0.5895 T0.3812,0.591 T0.3779,0.5925 Q0.3739,0.5955,0.3633,0.5955 L0.3585,0.5955 L0.3536,0.5955 Q0.3277,0.5955,0.3066,0.6053 Q0.3017,0.6083,0.296,0.6083 Q0.2912,0.6083,0.2839,0.6068 T0.2741,0.6053 Q0.2693,0.6053,0.2547,0.6048 T0.236,0.6044 Q0.2222,0.6044,0.193,0.6103 L0.1882,0.6103 Q0.1825,0.6103,0.1703,0.6083 T0.1525,0.6063 L0.15,0.6063 Q0.1436,0.6063,0.135,0.6073 T0.1168,0.6098 T0.1038,0.6113 Q0.0973,0.6123,0.0787,0.6123 L0.06,0.6123 L0.0414,0.6123 L0.0235,0.6123 Q0.0049,0.6133,0.0049,0.6172 L0.0057,0.6222 Q0.0073,0.6261,0.043,0.6261 L0.0454,0.6261 L0.0479,0.6261 Q0.0527,0.6261,0.0633,0.6281 T0.0803,0.6301 L0.0835,0.6301 L0.0916,0.6301 Q0.0998,0.6301,0.129,0.632 Q0.1768,0.636,0.206,0.64 Q0.2117,0.6409,0.2165,0.6409 Q0.2206,0.6409,0.2263,0.6405 T0.2336,0.64 L0.2384,0.64 L0.2409,0.64 T0.251,0.6395 T0.2644,0.639 Q0.2741,0.639,0.279,0.6409 Q0.283,0.6429,0.2972,0.6439 T0.3293,0.6459 T0.3528,0.6469 L0.3577,0.6469 Q0.3642,0.6469,0.3723,0.6449 T0.3844,0.6429 Q0.3901,0.6429,0.3933,0.6454 T0.4006,0.6479 Q0.4088,0.6479,0.4517,0.6558 Q0.4582,0.6568,0.4623,0.6568 Q0.4655,0.6568,0.4716,0.6563 T0.4826,0.6558 L0.4882,0.6558 Q0.5004,0.6558,0.5255,0.6607 Q0.5328,0.6627,0.5604,0.6647 T0.6152,0.6682 T0.644,0.6696 T0.6719,0.6721 T0.7056,0.6756 Q0.7113,0.6756,0.7198,0.6805 T0.738,0.6855 Q0.7453,0.6855,0.7551,0.6879 T0.7741,0.6939 T0.7912,0.7018 T0.8029,0.7102 Q0.8054,0.7132,0.8054,0.7151 Q0.8054,0.7191,0.8009,0.7216 T0.7908,0.7255 T0.779,0.7285 T0.7721,0.731 Q0.7672,0.7329,0.7632,0.7339 T0.7551,0.7354 T0.7486,0.7369 Q0.7478,0.7369,0.7445,0.7379 T0.7388,0.7394 T0.7324,0.7404 L0.7242,0.7413 T0.7161,0.7418 Q0.7105,0.7418,0.6955,0.7428 T0.6748,0.7438 L0.6699,0.7438 L0.6667,0.7438 Q0.6659,0.7438,0.6407,0.7468 Q0.6367,0.7478,0.6334,0.7478 T0.6245,0.7468 T0.6148,0.7458 L0.6099,0.7458 Q0.6018,0.7468,0.5864,0.7498 T0.5653,0.7532 T0.5596,0.7557 Q0.5596,0.7596,0.571,0.7616 Q0.5742,0.7626,0.5803,0.7631 T0.5929,0.7641 T0.6018,0.7656 L0.6087,0.7656 T0.6192,0.7666 T0.6277,0.7695 Q0.631,0.7705,0.6342,0.7705 Q0.6383,0.7705,0.6452,0.7685 T0.6537,0.7666 L0.6553,0.7666 Q0.6602,0.7666,0.6711,0.769 T0.6853,0.7715 Q0.691,0.7715,0.7048,0.775 T0.7242,0.7814 Q0.7324,0.7854,0.7445,0.7864 Q0.7478,0.7864,0.768,0.7873 T0.7972,0.7893 Q0.7989,0.7893,0.8017,0.7898 T0.8054,0.7903 L0.8082,0.7903 T0.811,0.7908 T0.8131,0.7913 T0.8151,0.7918 L0.8167,0.7928 T0.8179,0.7943 T0.8191,0.7957 T0.8204,0.7977 T0.8208,0.8002 Q0.8208,0.8032,0.8171,0.8051 T0.8074,0.8081 T0.7997,0.8091 Q0.7932,0.8121,0.7737,0.8121 Q0.7664,0.8121,0.7413,0.8111 L0.7364,0.8111 Q0.7275,0.8111,0.7214,0.8121 T0.7084,0.8155 T0.6991,0.819 Q0.6934,0.82,0.6723,0.8205 T0.6472,0.8239 Q0.6423,0.8269,0.6375,0.8269 Q0.6358,0.8269,0.6338,0.8264 T0.6294,0.8254 T0.6253,0.8249 Q0.6042,0.8249,0.5961,0.8289 Q0.5921,0.8318,0.5839,0.8318 Q0.5783,0.8318,0.5645,0.8299 L0.5604,0.8299 Q0.5531,0.8299,0.5337,0.8368 Q0.5296,0.8378,0.5255,0.8378 Q0.5239,0.8378,0.5195,0.8373 T0.5118,0.8368 Q0.5061,0.8368,0.4996,0.8388 Q0.4947,0.8388,0.4882,0.8398 Q0.4777,0.8417,0.4753,0.8427 T0.4728,0.8467 Q0.4728,0.8487,0.4769,0.8492 T0.4886,0.8501 T0.5004,0.8516 Q0.5036,0.8516,0.515,0.8521 T0.5345,0.8546 Q0.5426,0.8556,0.5596,0.8556 L0.5649,0.8556 L0.5702,0.8556 L0.5791,0.8556 Q0.5921,0.8566,0.6135,0.8571 T0.6383,0.8586 Q0.6683,0.8615,0.6764,0.8615 L0.6776,0.8615 L0.6788,0.8615 Q0.7032,0.8615,0.7032,0.8684 Q0.7032,0.8714,0.6995,0.8749 T0.6959,0.8803 L0.6959,0.8813 Q0.6991,0.8843,0.7153,0.8843 Q0.7218,0.8843,0.7259,0.8833 L0.7299,0.8833 Q0.7324,0.8833,0.7348,0.8838 T0.7393,0.8848 T0.7433,0.8863 L0.7474,0.8882 T0.751,0.8892 Q0.7616,0.8922,0.7948,0.8952 Q0.7981,0.8952,0.8082,0.8981 T0.8297,0.9011 T0.8528,0.9026 T0.8747,0.907 T0.8856,0.9149 L0.8856,0.9159 Q0.8856,0.9179,0.8848,0.9189 T0.8828,0.9209 T0.88,0.9228 T0.8767,0.9243 T0.8731,0.9248 T0.8698,0.9253 T0.8666,0.9258 L0.8646,0.9258 Q0.8621,0.9258,0.8577,0.9263 T0.85,0.9268 T0.8439,0.9273 T0.8402,0.9278 Q0.8386,0.9298,0.8358,0.9308 T0.8305,0.9322 T0.8244,0.9332 T0.8183,0.9337 Q0.8135,0.9347,0.8025,0.9372 T0.7859,0.9416 Q0.7778,0.9436,0.7717,0.9471 T0.7624,0.9515 Q0.7575,0.9535,0.7486,0.9535 Q0.7461,0.9535,0.7397,0.953 T0.7291,0.9525 Q0.7234,0.9525,0.7186,0.953 T0.7137,0.957 T0.7194,0.9614 Q0.7567,0.9634,0.7664,0.9654 Q0.7745,0.9674,0.7762,0.9674 L0.7908,0.9674 Q0.7924,0.9664,0.7948,0.9664 Q0.8029,0.9664,0.8082,0.9679 T0.8224,0.9723 T0.8362,0.9773 Q0.8483,0.9812,0.871,0.9812 L0.8751,0.9812 Q0.8873,0.9812,0.8929,0.9822 T0.9165,0.9876 T0.9408,0.9931 Q0.9513,0.996,0.9935,0.996 Z M0.9968,0.998 L0.9976,0.003 Q0.9838,0.002,0.9708,0.0059 Q0.9659,0.0069,0.9327,0.0059 T0.8881,0.0099 Q0.8767,0.0138,0.8658,0.0163 T0.8491,0.0218 Q0.8418,0.0247,0.8341,0.0247 T0.8232,0.0257 Q0.8191,0.0277,0.7997,0.0292 T0.7737,0.0326 Q0.7697,0.0336,0.7672,0.0336 T0.7612,0.0321 T0.7543,0.0307 T0.747,0.0317 Q0.7397,0.0326,0.7336,0.0356 T0.717,0.0406 Q0.6918,0.0445,0.6861,0.0475 Q0.6845,0.0485,0.6772,0.0485 T0.6638,0.05 T0.6577,0.0549 T0.6642,0.0598 T0.6796,0.0613 T0.6902,0.0623 Q0.691,0.0623,0.6946,0.0658 T0.7064,0.0702 L0.7161,0.0702 Q0.7194,0.0702,0.7242,0.0697 T0.7332,0.0692 Q0.7413,0.0692,0.7579,0.0717 T0.781,0.0762 Q0.7867,0.0781,0.8171,0.0786 T0.85,0.0801 L0.8532,0.0801 Q0.8548,0.0801,0.8613,0.0796 T0.8727,0.0791 Q0.8832,0.0791,0.8913,0.0811 Q0.897,0.0831,0.897,0.0851 Q0.897,0.088,0.8873,0.0905 T0.8735,0.093 Q0.871,0.093,0.8447,0.0984 T0.8143,0.1039 Q0.7981,0.1039,0.781,0.1078 Q0.7778,0.1088,0.7745,0.1088 T0.7644,0.1073 T0.7518,0.1048 L0.7453,0.1048 Q0.7299,0.1048,0.7076,0.1083 T0.6788,0.1157 Q0.6748,0.1187,0.6699,0.1187 Q0.6675,0.1187,0.6557,0.1157 T0.6318,0.1118 Q0.6164,0.1108,0.6135,0.1108 T0.6095,0.1113 T0.6067,0.1142 T0.6018,0.1187 Q0.5953,0.1227,0.5921,0.1227 Q0.5904,0.1227,0.5839,0.1212 T0.5693,0.1187 L0.5661,0.1187 Q0.558,0.1187,0.5527,0.1207 T0.5434,0.1246 T0.5337,0.1266 Q0.5126,0.1296,0.4882,0.1296 T0.4371,0.1385 Q0.4298,0.1414,0.425,0.1414 Q0.4225,0.1414,0.4189,0.1395 T0.4112,0.1375 Q0.4079,0.1375,0.4019,0.1395 T0.3869,0.1414 Q0.3682,0.1414,0.3504,0.1474 Q0.3398,0.1513,0.3333,0.1513 Q0.3293,0.1513,0.3228,0.1494 L0.3204,0.1494 Q0.3179,0.1494,0.3155,0.1508 T0.3118,0.1543 T0.3106,0.1592 T0.3127,0.1642 T0.32,0.1677 T0.3305,0.1701 T0.3435,0.1716 T0.3544,0.1721 Q0.3569,0.1731,0.3601,0.1731 Q0.3625,0.1731,0.3686,0.1726 T0.3779,0.1721 Q0.3901,0.1721,0.4023,0.1751 Q0.4177,0.18,0.455,0.18 Q0.4793,0.18,0.4882,0.178 L0.4915,0.178 Q0.4964,0.178,0.5045,0.1815 T0.5158,0.185 Q0.5564,0.1889,0.5645,0.1929 Q0.5677,0.1939,0.571,0.1939 Q0.575,0.1939,0.5807,0.1919 T0.5888,0.1899 T0.5929,0.1909 Q0.5969,0.1949,0.6123,0.1949 Q0.6334,0.1949,0.6456,0.1899 Q0.6488,0.1879,0.6537,0.1879 Q0.661,0.1879,0.6772,0.1929 T0.6983,0.1978 Q0.704,0.1988,0.7206,0.1998 T0.7502,0.2018 T0.7664,0.2038 Q0.7672,0.2038,0.7818,0.2043 T0.8151,0.2067 T0.8459,0.2156 Q0.8573,0.2206,0.8573,0.2255 Q0.8573,0.2295,0.8516,0.2324 T0.8394,0.2369 T0.8281,0.2384 Q0.8208,0.2384,0.7526,0.2473 Q0.7494,0.2483,0.7421,0.2493 T0.7287,0.2512 T0.7178,0.2522 L0.7153,0.2522 L0.7137,0.2522 Q0.7056,0.2522,0.6898,0.2572 T0.6691,0.2671 Q0.6667,0.269,0.6634,0.269 Q0.661,0.269,0.6557,0.2681 T0.6472,0.2671 Q0.6448,0.2671,0.6415,0.2681 Q0.631,0.271,0.6034,0.274 Q0.5994,0.274,0.5961,0.2765 T0.5904,0.2789 L0.5864,0.2789 Q0.5831,0.2779,0.5742,0.2779 Q0.541,0.2779,0.5223,0.2849 Q0.5126,0.2888,0.5028,0.2888 Q0.5004,0.2888,0.4943,0.2883 T0.4842,0.2878 Q0.4704,0.2878,0.4627,0.2898 T0.4509,0.2987 Q0.4501,0.2997,0.4501,0.3007 Q0.4501,0.3046,0.4574,0.3066 T0.4765,0.3091 T0.4899,0.3096 Q0.4931,0.3106,0.5061,0.3121 T0.5316,0.315 T0.5499,0.3175 Q0.5507,0.3175,0.5572,0.3195 T0.5685,0.3225 T0.5803,0.3254 T0.5933,0.3279 T0.605,0.3284 T0.6148,0.3274 Q0.6221,0.3244,0.6294,0.3244 Q0.6399,0.3244,0.6496,0.3294 Q0.6529,0.3314,0.6577,0.3314 Q0.6602,0.3314,0.6663,0.3304 T0.6756,0.3294 T0.6813,0.3304 Q0.6837,0.3304,0.6873,0.3309 L0.6946,0.3318 T0.7024,0.3323 T0.7105,0.3328 T0.7178,0.3338 T0.7238,0.3348 T0.7283,0.3363 Q0.7324,0.3383,0.7482,0.3403 T0.7689,0.3442 Q0.7697,0.3442,0.779,0.3477 T0.794,0.3536 T0.8074,0.3615 T0.8183,0.3729 Q0.8232,0.3808,0.8232,0.3848 Q0.8232,0.3867,0.8216,0.3892 T0.8151,0.3961 T0.8062,0.406 T0.7997,0.4179 T0.7952,0.4263 T0.7855,0.4308 T0.7616,0.4362 Q0.7543,0.4372,0.7445,0.4372 L0.7372,0.4372 L0.7307,0.4372 Q0.7202,0.4372,0.7153,0.4382 Q0.7064,0.4402,0.691,0.4402 L0.6845,0.4402 L0.6788,0.4402 Q0.6699,0.4402,0.6533,0.4436 T0.6318,0.451 Q0.6302,0.451,0.6302,0.452 Q0.6302,0.457,0.6626,0.459 Q0.6869,0.4609,0.7015,0.4659 Q0.7064,0.4669,0.7202,0.4669 L0.7311,0.4669 L0.7429,0.4669 Q0.7599,0.4669,0.7689,0.4688 Q0.7794,0.4708,0.7794,0.4738 L0.7786,0.4748 T0.777,0.4763 T0.7749,0.4773 L0.7737,0.4777 L0.7729,0.4777 Q0.7502,0.4797,0.738,0.4797 L0.7315,0.4797 L0.7291,0.4797 Q0.7226,0.4797,0.6869,0.4876 Q0.6821,0.4886,0.6768,0.4891 T0.6614,0.4901 T0.6456,0.4916 L0.6342,0.4916 Q0.6294,0.4916,0.6217,0.4911 T0.6115,0.4906 Q0.6083,0.4906,0.6054,0.4911 T0.5961,0.4936 T0.5815,0.4965 T0.5629,0.4985 Q0.5507,0.4985,0.5442,0.4995 T0.5345,0.5025 T0.5304,0.5084 L0.5296,0.5094 Q0.5296,0.5114,0.5316,0.5124 T0.5373,0.5138 T0.5442,0.5143 L0.5523,0.5143 L0.5604,0.5143 Q0.5637,0.5153,0.5677,0.5158 T0.5742,0.5173 T0.5811,0.5188 T0.5904,0.5193 L0.5977,0.5193 L0.6026,0.5193 Q0.6107,0.5193,0.6168,0.5208 T0.6294,0.5252 T0.6399,0.5292 Q0.6448,0.5302,0.6679,0.5341 T0.6983,0.541 Q0.7129,0.545,0.7664,0.55 Q0.7883,0.5519,0.7883,0.5559 Q0.7883,0.5579,0.7843,0.5608 T0.7721,0.5638 Q0.7697,0.5638,0.764,0.5633 T0.7559,0.5628 L0.7502,0.5628 Q0.7364,0.5648,0.6869,0.5648 L0.6699,0.5648 L0.6675,0.5648 Q0.665,0.5648,0.6602,0.5658 T0.6513,0.5668 Q0.6464,0.5668,0.6399,0.5658 Q0.6342,0.5648,0.6302,0.5648 T0.6225,0.5668 T0.6156,0.5697 Q0.6107,0.5707,0.6087,0.5707 T0.6034,0.5712 T0.5953,0.5717 Q0.5904,0.5727,0.5835,0.5727 T0.5718,0.5732 T0.562,0.5757 Q0.558,0.5767,0.5483,0.5767 L0.5349,0.5767 L0.5207,0.5767 Q0.5069,0.5767,0.5028,0.5786 Q0.4972,0.5816,0.4899,0.5816 Q0.4858,0.5816,0.4781,0.5806 T0.4663,0.5796 L0.4631,0.5796 Q0.4582,0.5796,0.4432,0.5821 T0.4144,0.5846 L0.4071,0.5846 L0.4011,0.5846 T0.3958,0.5851 T0.3921,0.5856 T0.3889,0.5861 T0.3865,0.5865 T0.384,0.5875 L0.382,0.5885 L0.3796,0.5895 L0.3771,0.5905 Q0.3731,0.5925,0.365,0.5925 L0.3601,0.5925 L0.3552,0.5925 Q0.3277,0.5925,0.3049,0.6044 Q0.3017,0.6053,0.296,0.6053 Q0.292,0.6053,0.2847,0.6044 T0.2741,0.6034 Q0.2693,0.6034,0.2547,0.6029 T0.236,0.6024 Q0.2222,0.6024,0.1922,0.6073 Q0.1906,0.6083,0.1882,0.6083 Q0.1833,0.6083,0.1711,0.6063 T0.1533,0.6044 Q0.1517,0.6034,0.1492,0.6034 Q0.1436,0.6034,0.135,0.6048 T0.1168,0.6078 T0.103,0.6093 Q0.0973,0.6103,0.0787,0.6103 L0.0604,0.6103 L0.0414,0.6103 L0.0235,0.6103 Q0.0024,0.6113,0.0024,0.6172 Q0.0024,0.6192,0.0032,0.6231 Q0.0049,0.6281,0.0333,0.6281 L0.0414,0.6281 L0.0479,0.6281 Q0.0519,0.6281,0.0624,0.6301 T0.0803,0.632 L0.0835,0.632 L0.0916,0.632 Q0.0989,0.632,0.1281,0.634 L0.206,0.6419 Q0.2117,0.6429,0.2174,0.6429 Q0.2214,0.6429,0.2271,0.6424 T0.2344,0.6419 L0.2376,0.6419 Q0.2393,0.6429,0.2417,0.6429 T0.2526,0.6419 T0.2652,0.6409 Q0.2741,0.6409,0.2782,0.6429 T0.2968,0.6459 T0.3293,0.6479 T0.352,0.6489 Q0.3552,0.6499,0.3585,0.6499 Q0.365,0.6499,0.3731,0.6474 T0.3844,0.6449 Q0.3885,0.6449,0.3917,0.6474 T0.4006,0.6499 Q0.4088,0.6499,0.4509,0.6578 Q0.4574,0.6588,0.4631,0.6588 Q0.4655,0.6588,0.4716,0.6583 T0.4834,0.6578 L0.4874,0.6578 Q0.5004,0.6588,0.5255,0.6637 Q0.532,0.6647,0.56,0.6667 T0.6148,0.6701 T0.644,0.6716 Q0.6464,0.6726,0.6594,0.6736 T0.6861,0.6756 T0.7048,0.6775 Q0.7097,0.6775,0.7186,0.6825 T0.738,0.6874 Q0.7518,0.6874,0.7729,0.6958 T0.8005,0.7122 Q0.8029,0.7141,0.8029,0.7151 Q0.8029,0.7191,0.7968,0.7216 T0.7818,0.726 T0.7705,0.729 L0.764,0.731 T0.7583,0.7324 T0.753,0.7334 T0.7486,0.7349 Q0.7251,0.7399,0.7161,0.7399 Q0.7097,0.7399,0.6951,0.7409 T0.6748,0.7418 L0.6703,0.7418 L0.6667,0.7418 Q0.6659,0.7418,0.6399,0.7448 L0.6334,0.7448 Q0.631,0.7448,0.6249,0.7443 T0.6148,0.7438 L0.6099,0.7438 Q0.601,0.7448,0.5856,0.7473 T0.5645,0.7507 Q0.5572,0.7517,0.5572,0.7547 T0.5616,0.7606 T0.5702,0.7646 Q0.5734,0.7646,0.5779,0.7651 T0.5864,0.7661 T0.5949,0.7671 T0.6018,0.7676 L0.6071,0.7676 T0.6135,0.7681 T0.62,0.769 T0.6269,0.771 T0.6342,0.7725 Q0.6391,0.7725,0.6464,0.7705 T0.6541,0.7685 L0.6553,0.7685 Q0.6586,0.7685,0.6699,0.771 T0.6853,0.7735 Q0.6902,0.7735,0.704,0.777 T0.7226,0.7834 Q0.7315,0.7873,0.7445,0.7883 Q0.747,0.7883,0.7676,0.7893 T0.7972,0.7913 Q0.7989,0.7913,0.8017,0.7918 T0.8058,0.7923 T0.809,0.7928 T0.8114,0.7933 T0.8131,0.7938 T0.8147,0.7943 T0.8159,0.7953 L0.8171,0.7967 T0.8175,0.7982 Q0.8183,0.7992,0.8183,0.8002 Q0.8183,0.8022,0.8155,0.8032 T0.807,0.8051 T0.7989,0.8071 Q0.7932,0.8091,0.7737,0.8091 L0.7413,0.8091 L0.7372,0.8091 Q0.7275,0.8091,0.721,0.8101 T0.7072,0.8136 T0.6983,0.817 Q0.6942,0.818,0.6825,0.818 T0.6602,0.819 T0.6456,0.822 Q0.6415,0.8249,0.6375,0.8249 Q0.6367,0.8249,0.6326,0.8239 T0.6253,0.8229 Q0.6034,0.8229,0.5953,0.8279 Q0.5912,0.8289,0.5848,0.8289 Q0.5775,0.8289,0.5645,0.8279 Q0.5629,0.8269,0.5604,0.8269 Q0.5523,0.8269,0.5328,0.8348 Q0.5296,0.8358,0.5264,0.8358 Q0.5247,0.8358,0.5203,0.8353 T0.5126,0.8348 Q0.5061,0.8348,0.4988,0.8358 Q0.4947,0.8368,0.4882,0.8378 Q0.4826,0.8388,0.4797,0.8388 T0.474,0.8398 T0.4704,0.8422 T0.4696,0.8462 T0.472,0.8501 T0.4781,0.8521 T0.4854,0.8526 L0.4935,0.8526 T0.4996,0.8536 Q0.5036,0.8536,0.515,0.8546 T0.5337,0.8566 Q0.5426,0.8576,0.5596,0.8576 L0.5657,0.8576 L0.571,0.8576 L0.5791,0.8576 Q0.5921,0.8586,0.6135,0.8591 T0.6383,0.8605 Q0.6683,0.8635,0.6764,0.8635 Q0.6999,0.8635,0.6999,0.8684 Q0.6999,0.8694,0.6967,0.8734 T0.6934,0.8803 L0.6934,0.8823 Q0.6951,0.8863,0.7137,0.8863 Q0.7218,0.8863,0.7267,0.8853 L0.7299,0.8853 Q0.734,0.8853,0.7409,0.8882 T0.7502,0.8912 Q0.7607,0.8942,0.794,0.8971 Q0.7972,0.8971,0.8078,0.9001 T0.8297,0.9031 Q0.8475,0.9031,0.8646,0.9065 T0.8824,0.9149 L0.8824,0.9159 Q0.8824,0.9169,0.882,0.9179 T0.8808,0.9194 L0.8792,0.9204 T0.8767,0.9214 T0.8743,0.9224 T0.8715,0.9228 L0.8686,0.9228 T0.8662,0.9233 T0.8637,0.9238 L0.8556,0.9238 T0.8447,0.9243 T0.8386,0.9268 Q0.837,0.9278,0.835,0.9288 T0.8305,0.9303 T0.8244,0.9308 T0.8175,0.9318 Q0.8127,0.9327,0.8017,0.9352 T0.7851,0.9397 Q0.777,0.9416,0.7705,0.9451 T0.7616,0.9496 Q0.7575,0.9505,0.7494,0.9505 L0.7405,0.9505 L0.7307,0.9505 Q0.7234,0.9505,0.7178,0.9515 Q0.7145,0.9515,0.7125,0.9535 T0.7105,0.9575 Q0.7105,0.9624,0.7194,0.9634 Q0.7567,0.9654,0.7664,0.9674 Q0.7745,0.9693,0.7762,0.9693 L0.7908,0.9693 L0.7948,0.9693 Q0.8005,0.9693,0.8058,0.9698 T0.8143,0.9718 T0.824,0.9753 T0.8354,0.9792 Q0.8483,0.9832,0.871,0.9832 L0.8739,0.9832 L0.8767,0.9832 Q0.8873,0.9832,0.8921,0.9842 Q0.8978,0.9852,0.9157,0.9896 T0.94,0.996 Q0.9424,0.996,0.9469,0.9965 T0.9566,0.997 T0.9676,0.9975 T0.9781,0.998 L0.9874,0.998 L0.9943,0.998 L0.9968,0.998 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0CB}' is unused\n '\\u{E0CC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.5071 L0.8623,0.7102 L0.5865,0.7102 L0.4489,0.5071 L0.5865,0.3045 L0.8623,0.3045 Z M0.4135,0.7974 L0.2758,1 L0,1 L0,0.5944 L0.2758,0.5944 Z M0.4135,0.2026 L0.2758,0.4056 L0,0.4056 L0,0 L0.2758,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9726,0.5071 L0.8451,0.3184 L0.59,0.3184 L0.4624,0.5071 L0.59,0.6955 L0.8451,0.6955 Z M1,0.5071 L0.8588,0.716 L0.5768,0.716 L0.4355,0.5071 L0.5768,0.2982 L0.8588,0.2982 Z M0.401,0.7911 L0.2735,0.6028 L0.0236,0.6028 L0.0236,0.9799 L0.2735,0.9799 Z M0.4284,0.7911 L0.2872,1 L0,1 L0,0.5826 L0.2872,0.5826 Z M0.401,0.2089 L0.2735,0.0201 L0.0236,0.0201 L0.0236,0.3972 L0.2735,0.3972 Z M0.4284,0.2089 L0.2872,0.4174 L0,0.4174 L0,0 L0.2872,0 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0.4996 Q1,0.5365,0.9924,0.568 T0.9718,0.6177 T0.9433,0.6363 L0.9425,0.6367 Q0.9355,0.6367,0.9285,0.6326 L0.9308,0.6326 Q0.9129,0.6195,0.9013,0.587 T0.8871,0.5164 T0.8943,0.4373 T0.9254,0.3687 L0.9254,0.3691 Q0.9339,0.3628,0.9425,0.3628 Q0.9584,0.3628,0.9716,0.3811 T0.9924,0.431 T1,0.4996 Z M0.9234,0.6321 L0.8776,0.7169 Q0.8791,0.732,0.8791,0.7441 Q0.8791,0.781,0.8716,0.8123 T0.8508,0.862 T0.8224,0.8809 L0.8216,0.8809 Q0.8154,0.8809,0.8092,0.8775 L0.8088,0.8775 Q0.7905,0.8633,0.7792,0.8297 T0.766,0.7571 T0.775,0.6768 T0.8088,0.6086 L0.7431,0.6065 Q0.719,0.6313,0.7072,0.6705 T0.6965,0.7487 T0.7097,0.823 T0.7423,0.8763 L0.7913,0.8775 L0.7314,0.9895 L0.4648,0.5038 L0.7299,0.0176 L0.7882,0.1229 L0.7404,0.1212 Q0.7244,0.138,0.7136,0.1617 T0.6982,0.2108 T0.6943,0.2632 T0.7003,0.3144 T0.7159,0.3586 T0.7396,0.3909 L0.8072,0.3926 Q0.7894,0.3796,0.7777,0.3479 T0.7635,0.2789 T0.7697,0.2011 T0.7987,0.1326 Q0.8092,0.1225,0.8204,0.1225 Q0.8321,0.1225,0.8426,0.1332 T0.8609,0.1623 T0.8731,0.2062 T0.8776,0.2592 Q0.8776,0.268,0.8768,0.2815 L0.9219,0.3628 L0.8644,0.3612 Q0.8403,0.3855,0.8284,0.4247 T0.8177,0.5029 T0.8309,0.5772 T0.8632,0.6305 Z M0.6759,0.6384 Q0.6576,0.625,0.6457,0.5914 T0.6319,0.5185 T0.6407,0.4375 T0.6751,0.3691 L0.609,0.367 Q0.5849,0.3918,0.5731,0.431 T0.5626,0.509 T0.5758,0.5833 T0.6082,0.6367 Z M0.6459,0.0025 L0.391,0.4551 L0.0035,0.4551 L0.246,0 Z M0.6553,1 L0.2421,1 L0,0.5449 L0.3875,0.5449 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0CF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.4996,0 Q0.5562,0,0.5961,0.0166 T0.6364,0.0566 L0.6368,0.0575 Q0.6368,0.0646,0.6324,0.0713 L0.6324,0.0692 Q0.6196,0.0868,0.5872,0.0986 T0.5166,0.1128 T0.4373,0.1057 T0.3689,0.0747 L0.3694,0.0747 Q0.3627,0.0663,0.3627,0.0575 Q0.3627,0.0336,0.4028,0.0168 T0.4996,0 Z M0.6324,0.0768 L0.717,0.1225 Q0.7321,0.1212,0.744,0.1212 Q0.8007,0.1212,0.8406,0.1378 T0.8809,0.1779 L0.8813,0.1783 Q0.8813,0.1846,0.8778,0.1909 Q0.8636,0.2093,0.8299,0.2208 T0.7573,0.2343 T0.6769,0.2253 T0.6089,0.1913 L0.6067,0.2567 Q0.6315,0.281,0.6707,0.2928 T0.7489,0.3035 T0.8231,0.2903 T0.8764,0.258 L0.8778,0.2085 L0.9898,0.2685 L0.504,0.5352 L0.0177,0.2701 L0.1227,0.2118 L0.1213,0.2596 Q0.1457,0.2836,0.1851,0.2955 T0.2635,0.3062 T0.3377,0.293 T0.3911,0.2605 L0.3928,0.193 Q0.38,0.2106,0.3483,0.2221 T0.2792,0.2364 T0.2013,0.2303 T0.1324,0.2013 Q0.1222,0.1909,0.1222,0.1795 Q0.1222,0.156,0.1623,0.1393 T0.2591,0.1225 Q0.2679,0.1225,0.2817,0.1233 L0.3627,0.078 L0.3609,0.1359 Q0.3857,0.1598,0.4249,0.1718 T0.5031,0.1825 T0.5773,0.1693 T0.6306,0.1367 Z M0.6386,0.3242 Q0.6253,0.3427,0.5917,0.3544 T0.5186,0.3683 T0.4376,0.3595 T0.3689,0.3251 L0.3671,0.3909 Q0.3915,0.4148,0.4309,0.4268 T0.5093,0.4375 T0.5835,0.4243 T0.6368,0.3918 Z M0.0027,0.354 L0.4553,0.6091 L0.4553,0.9962 L0,0.7542 Z M1,0.3448 L1,0.7576 L0.5447,1 L0.5447,0.6128 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0.7699 Q0,0.7172,0.0277,0.6731 T0.103,0.6032 T0.2066,0.5774 Q0.2487,0.5774,0.2865,0.5922 T0.3526,0.6339 L0.3935,0.6715 Q0.4218,0.6984,0.438,0.7336 T0.4541,0.8075 Q0.4541,0.8602,0.4264,0.9046 T0.3511,0.9745 T0.2475,1 Q0.2054,1,0.1676,0.9852 T0.1016,0.9435 L0.0606,0.9059 Q0.0317,0.879,0.0159,0.8438 T0,0.7699 Z M0.5459,0.7699 Q0.5459,0.7172,0.5736,0.6731 T0.6489,0.6032 T0.7525,0.5774 Q0.7946,0.5774,0.8324,0.5922 T0.8984,0.6339 L0.9394,0.6715 Q0.9579,0.6892,0.9714,0.7105 T0.9925,0.7567 T1,0.8075 Q1,0.8602,0.9723,0.9046 T0.897,0.9745 T0.7934,1 Q0.7513,1,0.7135,0.9852 T0.6474,0.9435 L0.6065,0.9059 Q0.5776,0.879,0.5617,0.8438 T0.5459,0.7699 Z M0,0.1925 Q0,0.1398,0.0277,0.0957 T0.103,0.0258 T0.2066,0 Q0.2487,0,0.2865,0.0148 T0.3526,0.0565 L0.3935,0.0941 Q0.4218,0.121,0.438,0.1562 T0.4541,0.2301 Q0.4541,0.2828,0.4264,0.3269 T0.3511,0.3968 T0.2475,0.4226 Q0.2054,0.4226,0.1676,0.4078 T0.1016,0.3661 L0.0606,0.3285 Q0.0317,0.3016,0.0159,0.2664 T0,0.1925 Z M0.5459,0.1925 Q0.5459,0.1398,0.5736,0.0957 T0.6489,0.0258 T0.7525,0 Q0.7946,0,0.8324,0.0148 T0.8984,0.0565 L0.9394,0.0941 Q0.9677,0.121,0.9838,0.1562 T1,0.2301 Q1,0.2828,0.9723,0.3269 T0.897,0.3968 T0.7934,0.4226 Q0.7513,0.4226,0.7135,0.4078 T0.6474,0.3661 L0.6065,0.3285 Q0.5874,0.3108,0.5741,0.2895 T0.5534,0.2433 T0.5459,0.1925 Z M0.3301,0.6403 Q0.3306,0.6403,0.3312,0.6409 L0.3272,0.6371 L0.3272,0.6371 Z M0.8759,0.6403 Q0.8765,0.6403,0.8771,0.6409 Q0.8748,0.6387,0.8725,0.6371 L0.8731,0.6371 Z M0.3301,0.0629 Q0.3306,0.0629,0.3312,0.0634 L0.3272,0.0597 L0.3272,0.0602 Z M0.8759,0.0629 Q0.8765,0.0629,0.8771,0.0634 Q0.8748,0.0613,0.8725,0.0597 Q0.8731,0.0597,0.8731,0.0602 Z M0.779,0.4113 L0.7501,0.3849 Q0.7046,0.3844,0.6636,0.3661 Q0.7132,0.407,0.779,0.4113 Z M0.7957,0.4118 Q0.8477,0.4113,0.8918,0.3874 T0.9619,0.3223 T0.9885,0.2323 L0.9585,0.2048 Q0.9538,0.2769,0.8987,0.3282 T0.7657,0.3844 Z M0.9879,0.2167 Q0.9827,0.1554,0.9388,0.1097 Q0.9585,0.1478,0.959,0.1898 Z M0.2331,0.4113 L0.2043,0.3849 Q0.1587,0.3844,0.1177,0.3661 Q0.1673,0.407,0.2331,0.4113 Z M0.2499,0.4118 Q0.2885,0.4118,0.324,0.3973 T0.3852,0.3589 T0.4264,0.3019 T0.4426,0.2323 L0.4126,0.2048 Q0.408,0.2769,0.3529,0.3282 T0.2198,0.3844 Z M0.442,0.2167 Q0.4368,0.1554,0.393,0.1097 Q0.4126,0.1478,0.4132,0.1903 Z M0.779,0.9887 L0.7501,0.9624 Q0.7046,0.9618,0.6636,0.9435 Q0.7132,0.9844,0.779,0.9887 Z M0.7957,0.9892 Q0.8477,0.9887,0.8918,0.9648 T0.9619,0.8997 T0.9885,0.8097 L0.9585,0.7823 Q0.9538,0.8543,0.8987,0.9056 T0.7657,0.9618 Z M0.9879,0.7941 Q0.9827,0.7328,0.9388,0.6871 Q0.9585,0.7253,0.959,0.7672 Z M0.2331,0.9887 L0.2043,0.9624 Q0.1587,0.9618,0.1177,0.9435 Q0.1673,0.9844,0.2331,0.9887 Z M0.2499,0.9892 Q0.3018,0.9887,0.3459,0.9648 T0.416,0.8997 T0.4426,0.8102 L0.4126,0.7823 Q0.408,0.8543,0.3529,0.9056 T0.2198,0.9618 Z M0.442,0.7941 Q0.4368,0.7328,0.393,0.6871 Q0.4126,0.7253,0.4132,0.7672 Z M0.3191,0.6452 Q0.2943,0.622,0.2643,0.6091 T0.2066,0.5962 Q0.1795,0.5962,0.1497,0.6091 T0.0949,0.6441 T0.0537,0.6995 T0.0375,0.7699 Q0.0375,0.8419,0.0941,0.8941 Q0.1189,0.9172,0.1489,0.9304 T0.2066,0.9435 Q0.2337,0.9435,0.2634,0.9304 T0.3182,0.8952 T0.3595,0.8398 T0.3756,0.7699 Q0.3756,0.6978,0.3191,0.6452 Z M0.026,0.7731 L0.026,0.7699 Q0.026,0.6935,0.0854,0.6376 Q0.0658,0.6538,0.0514,0.6739 T0.0289,0.718 T0.0202,0.7677 Z M0.0271,0.7892 L0.0208,0.7833 Q0.0254,0.8419,0.0681,0.886 Q0.0664,0.8828,0.0646,0.879 Q0.0329,0.8382,0.0271,0.7892 Z M0.3866,0.7823 Q0.382,0.8511,0.3278,0.9016 Q0.3843,0.8565,0.3918,0.7871 Z M0.3872,0.7677 L0.393,0.7726 L0.393,0.7699 Q0.393,0.7349,0.3791,0.7038 Q0.3739,0.6973,0.3681,0.6914 Q0.3866,0.7274,0.3872,0.7677 Z M0.865,0.6452 Q0.8402,0.622,0.8102,0.6091 T0.7525,0.5962 Q0.7305,0.5962,0.7072,0.6043 T0.6619,0.628 T0.6223,0.6642 T0.5941,0.7124 T0.5834,0.7699 Q0.5834,0.8419,0.6399,0.8941 Q0.6561,0.9097,0.6757,0.9207 T0.7149,0.9376 T0.7525,0.9435 Q0.7796,0.9435,0.8093,0.9304 T0.8641,0.8952 T0.9054,0.8398 T0.9215,0.7699 Q0.9215,0.6978,0.865,0.6452 Z M0.5718,0.7731 L0.5718,0.7699 Q0.5718,0.6935,0.6313,0.6376 Q0.6013,0.6618,0.584,0.6954 T0.5661,0.7677 Z M0.573,0.7892 L0.5666,0.7833 Q0.5713,0.8419,0.614,0.886 Q0.6122,0.8828,0.6105,0.879 Q0.5788,0.8382,0.573,0.7892 Z M0.9325,0.7823 Q0.9279,0.8511,0.8736,0.9016 Q0.9308,0.8565,0.9377,0.7871 Z M0.9331,0.7672 L0.9388,0.7726 L0.9388,0.7699 Q0.9388,0.7349,0.925,0.7038 Q0.9198,0.6973,0.914,0.6914 Q0.9325,0.7274,0.9331,0.7672 Z M0.3191,0.0677 Q0.2943,0.0446,0.2643,0.0317 T0.2066,0.0188 Q0.1795,0.0188,0.1497,0.0317 T0.0949,0.0667 T0.0537,0.122 T0.0375,0.1925 Q0.0375,0.2645,0.0941,0.3167 Q0.1189,0.3398,0.1489,0.353 T0.2066,0.3661 Q0.2337,0.3661,0.2634,0.353 T0.3182,0.3177 T0.3595,0.2624 T0.3756,0.1925 Q0.3756,0.1204,0.3191,0.0677 Z M0.026,0.1957 L0.026,0.1925 Q0.026,0.1161,0.0854,0.0602 Q0.0554,0.0844,0.0381,0.118 T0.0202,0.1903 Z M0.0271,0.2118 L0.0208,0.2059 Q0.0254,0.2645,0.0681,0.3086 Q0.0664,0.3054,0.0646,0.3016 Q0.0329,0.2608,0.0271,0.2118 Z M0.3866,0.2048 Q0.382,0.2737,0.3278,0.3242 Q0.3849,0.279,0.3918,0.2097 Z M0.3872,0.1903 L0.393,0.1952 L0.393,0.1925 Q0.393,0.1581,0.3791,0.1263 Q0.3739,0.1199,0.3681,0.114 Q0.3866,0.15,0.3872,0.1903 Z M0.865,0.0677 Q0.8402,0.0446,0.8102,0.0317 T0.7525,0.0188 Q0.7253,0.0188,0.6956,0.0317 T0.6408,0.0667 T0.5995,0.122 T0.5834,0.1925 Q0.5834,0.2645,0.6399,0.3167 Q0.6647,0.3398,0.6947,0.353 T0.7525,0.3661 Q0.7796,0.3661,0.8093,0.353 T0.8641,0.3177 T0.9054,0.2624 T0.9215,0.1925 Q0.9215,0.1204,0.865,0.0677 Z M0.5718,0.1957 L0.5718,0.1925 Q0.5718,0.1161,0.6313,0.0602 Q0.6013,0.0844,0.584,0.118 T0.5661,0.1903 Z M0.573,0.2118 L0.5666,0.2059 Q0.5713,0.2645,0.614,0.3086 Q0.6122,0.3054,0.6105,0.3016 Q0.5788,0.2608,0.573,0.2118 Z M0.9325,0.2048 Q0.9279,0.2737,0.8736,0.3242 Q0.9308,0.279,0.9377,0.2097 Z M0.9331,0.1898 L0.9388,0.1952 L0.9388,0.1925 Q0.9388,0.1575,0.925,0.1263 Q0.9198,0.1199,0.914,0.114 Q0.9325,0.15,0.9331,0.1898 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.7639,0.1974 L0.9593,0.1974 L0.9593,0.1443 L0.7639,0.1443 L0.7639,0.1974 Z M0.7586,0.109 L0.9727,0.109 Q0.9839,0.109,0.992,0.1153 T1,0.1291 L1,0.382 Q1,0.3906,0.9912,0.3964 T0.9727,0.4021 L0.7586,0.4021 Q0.7468,0.4021,0.739,0.3956 T0.7313,0.382 L0.7313,0.1291 Q0.7313,0.1246,0.7339,0.1207 T0.7406,0.1143 T0.7495,0.1104 T0.7586,0.109 Z M0.7639,0.6575 L0.9593,0.6575 L0.9593,0.6044 L0.7639,0.6044 L0.7639,0.6575 Z M0.7313,0.8347 L0.7313,0.5843 Q0.7313,0.5757,0.7401,0.5699 T0.7586,0.5641 L0.9706,0.5641 Q0.9818,0.5641,0.9898,0.5705 T0.9979,0.5843 L0.9979,0.8347 Q0.9979,0.8433,0.989,0.8491 T0.9706,0.8549 L0.7586,0.8549 Q0.7468,0.8549,0.739,0.8483 T0.7313,0.8347 Z M0,1 L0,0 L0.7607,0 L0.7607,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n '\\u{E0D2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.9764,0.0029 L0.3179,0.4552 L0,0.4552 L0,0 Z M1,1 L0,1 L0,0.5448 L0.3091,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n // '\\u{E0C3}' is unused\n '\\u{E0D4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.0236,0.0029 L0.6824,0.4552 L1,0.4552 L1,0 Z M0,1 L1,1 L1,0.5448 L0.6912,0.5448 Z', type: CustomGlyphVectorType.FILL } },\n\n // #endregion\n\n // #region Progress Indicators (EE00-EE0B)\n\n // initially added in Fira Code and later Nerd Fonts\n // https://github.com/ryanoasis/nerd-fonts/pull/1733\n\n // Progress bars (EE00-EE05)\n '\\u{EE00}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY START\n '\\u{EE01}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z' }, // PROGRESS BAR EMPTY MIDDLE\n '\\u{EE02}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z' }, // PROGRESS BAR EMPTY END\n '\\u{EE03}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L.1,.05 L.1,.95 L1,.95 L1,1 L0,1 Z M.25,.15 L1,.15 L1,.85 L.25,.85 Z' }, // PROGRESS BAR FILLED START\n '\\u{EE04}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,.05 L0,.05 Z M0,.95 L1,.95 L1,1 L0,1 Z M0,.15 L1,.15 L1,.85 L0,.85 Z' }, // PROGRESS BAR FILLED MIDDLE\n '\\u{EE05}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L0,0 L0,.05 L.9,.05 L.9,.95 L0,.95 L0,1 L1,1 Z M0,.15 L.75,.15 L.75,.85 L0,.85 Z' }, // PROGRESS BAR FILLED END\n\n // Progress spinners (EE06-EE0B) - 6-frame spinner animation using stroked arcs\n '\\u{EE06}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.6574,0.303 Q0.623,0.291,0.5852,0.285 T0.5082,0.279 T0.4311,0.285 T0.359,0.303 L0.3082,0.248 Q0.3525,0.232,0.4041,0.2235 T0.5082,0.215 T0.6123,0.2235 T0.7082,0.248 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 1 (12 o'clock)\n '\\u{EE07}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.8557,0.582 L0.7656,0.551 Q0.7852,0.53,0.7951,0.507 T0.8049,0.46 Q0.8049,0.424,0.782,0.3905 T0.718,0.332 T0.6221,0.293 T0.5082,0.279 L0.5082,0.215 Q0.5607,0.215,0.6123,0.2235 T0.709,0.248 T0.7918,0.287 T0.8557,0.3375 T0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.582 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 2 (2 o'clock)\n '\\u{EE08}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.482,0.705,0.4557,0.703 T0.4049,0.697 L0.4311,0.635 Q0.4508,0.638,0.4697,0.6395 T0.5082,0.641 Q0.5672,0.641,0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 Q0.8049,0.436,0.7951,0.413 T0.7656,0.369 L0.8557,0.338 Q0.882,0.365,0.8959,0.3965 T0.9098,0.46 T0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 3 (4 o'clock)\n '\\u{EE09}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 L0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 T0.6221,0.627 T0.718,0.588 T0.782,0.5295 T0.8049,0.46 L0.9098,0.46 Q0.9098,0.492,0.8959,0.5235 T0.8557,0.5825 T0.7918,0.633 T0.709,0.672 T0.6123,0.6965 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 4 (6 o'clock)\n '\\u{EE0A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.5082,0.705 Q0.4557,0.705,0.4041,0.6965 T0.3074,0.672 T0.2246,0.633 T0.1607,0.5825 T0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.338 L0.2508,0.369 Q0.2311,0.39,0.2213,0.413 T0.2115,0.46 Q0.2115,0.496,0.2344,0.5295 T0.2984,0.588 T0.3943,0.627 T0.5082,0.641 Q0.5279,0.641,0.5467,0.6395 T0.5852,0.635 L0.6115,0.697 Q0.5869,0.701,0.5607,0.703 T0.5082,0.705 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 5 (8 o'clock)\n '\\u{EE0B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0.1607,0.582 Q0.1344,0.555,0.1205,0.5235 T0.1066,0.46 T0.1205,0.3965 T0.1607,0.3375 T0.2246,0.287 T0.3074,0.248 T0.4041,0.2235 T0.5082,0.215 L0.5082,0.279 Q0.4492,0.279,0.3943,0.293 T0.2984,0.332 T0.2344,0.3905 T0.2115,0.46 Q0.2115,0.484,0.2213,0.507 T0.2508,0.551 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SPINNER FRAME 6 (10 o'clock)\n\n // #endregion\n\n // #region Git Branch Symbols (F5D0-F60D)\n\n // Initially added in Kitty (https://github.com/kovidgoyal/kitty/pull/7681)\n // then in Wezterm (https://github.com/wezterm/wezterm/issues/6328).\n\n // Straight lines (F5D0-F5D9)\n '\\u{F5D0}': GitBranchSymbolsParts.LINE_H, // Same as 2500\n '\\u{F5D1}': GitBranchSymbolsParts.LINE_V, // Same as 2502\n '\\u{F5D2}': GitBranchSymbolsParts.FADE_RIGHT,\n '\\u{F5D3}': GitBranchSymbolsParts.FADE_LEFT,\n '\\u{F5D4}': GitBranchSymbolsParts.FADE_DOWN,\n '\\u{F5D5}': GitBranchSymbolsParts.FADE_UP,\n\n // Curved lines (F5D6-F5D9)\n '\\u{F5D6}': GitBranchSymbolsParts.CURVE_DOWN_RIGHT, // Same as 256D)\n '\\u{F5D7}': GitBranchSymbolsParts.CURVE_DOWN_LEFT, // Same as 256E)\n '\\u{F5D8}': GitBranchSymbolsParts.CURVE_UP_RIGHT, // Same as 2570)\n '\\u{F5D9}': GitBranchSymbolsParts.CURVE_UP_LEFT, // Same as 256F)\n\n // Branching lines (F5DA-F5ED)\n '\\u{F5DA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5DC}': [GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5DD}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5DE}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5DF}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E0}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT],\n '\\u{F5E1}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E2}': [GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E3}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E4}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E5}': [GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E6}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_UP_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5E7}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_DOWN_RIGHT],\n '\\u{F5E8}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5E9}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EA}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5EB}': [GitBranchSymbolsParts.LINE_V, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n '\\u{F5EC}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_RIGHT, GitBranchSymbolsParts.CURVE_UP_LEFT],\n '\\u{F5ED}': [GitBranchSymbolsParts.LINE_H, GitBranchSymbolsParts.CURVE_DOWN_LEFT, GitBranchSymbolsParts.CURVE_UP_RIGHT],\n\n // Nodes (F5EE-F5FB)\n '\\u{F5EE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE],\n '\\u{F5EF}': GitBranchSymbolsParts.NODE_STROKE,\n '\\u{F5F0}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F1}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F2}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F3}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5F4}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F5}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5F6}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F7}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN],\n '\\u{F5F8}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5F9}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FA}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n '\\u{F5FB}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_UP],\n\n // Extended Nodes (F5FC-F60D)\n // These were added a little later https://github.com/kovidgoyal/kitty/pull/7805\n '\\u{F5FC}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FD}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F5FE}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F5FF}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F600}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F601}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F602}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F603}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F604}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F605}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F606}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F607}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT],\n '\\u{F608}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F609}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60A}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60B}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60C}': [GitBranchSymbolsParts.NODE_FILL, GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n '\\u{F60D}': [GitBranchSymbolsParts.NODE_STROKE, GitBranchSymbolsParts.NODE_LINE_UP, GitBranchSymbolsParts.NODE_LINE_DOWN, GitBranchSymbolsParts.NODE_LINE_LEFT, GitBranchSymbolsParts.NODE_LINE_RIGHT],\n\n // #endregion\n\n // #region Symbols for Legacy Computing (1FB00-1FB3B)\n\n // https://www.unicode.org/charts/PDF/U1FB00.pdf\n\n // Block mosaic terminal graphic characters (1FB00-1FB3B)\n // The term \"sextant\" refers to block mosaics divided into six parts.\n '\\u{1FB00}': sextant(0b000001), // BLOCK SEXTANT-1\n '\\u{1FB01}': sextant(0b000010), // BLOCK SEXTANT-2\n '\\u{1FB02}': sextant(0b000011), // BLOCK SEXTANT-12 (upper one third block)\n '\\u{1FB03}': sextant(0b000100), // BLOCK SEXTANT-3\n '\\u{1FB04}': sextant(0b000101), // BLOCK SEXTANT-13\n '\\u{1FB05}': sextant(0b000110), // BLOCK SEXTANT-23\n '\\u{1FB06}': sextant(0b000111), // BLOCK SEXTANT-123\n '\\u{1FB07}': sextant(0b001000), // BLOCK SEXTANT-4\n '\\u{1FB08}': sextant(0b001001), // BLOCK SEXTANT-14\n '\\u{1FB09}': sextant(0b001010), // BLOCK SEXTANT-24\n '\\u{1FB0A}': sextant(0b001011), // BLOCK SEXTANT-124\n '\\u{1FB0B}': sextant(0b001100), // BLOCK SEXTANT-34 (middle one third block)\n '\\u{1FB0C}': sextant(0b001101), // BLOCK SEXTANT-134\n '\\u{1FB0D}': sextant(0b001110), // BLOCK SEXTANT-234\n '\\u{1FB0E}': sextant(0b001111), // BLOCK SEXTANT-1234 (upper two thirds block)\n '\\u{1FB0F}': sextant(0b010000), // BLOCK SEXTANT-5\n '\\u{1FB10}': sextant(0b010001), // BLOCK SEXTANT-15\n '\\u{1FB11}': sextant(0b010010), // BLOCK SEXTANT-25\n '\\u{1FB12}': sextant(0b010011), // BLOCK SEXTANT-125\n '\\u{1FB13}': sextant(0b010100), // BLOCK SEXTANT-35\n '\\u{1FB14}': sextant(0b010110), // BLOCK SEXTANT-235\n '\\u{1FB15}': sextant(0b010111), // BLOCK SEXTANT-1235\n '\\u{1FB16}': sextant(0b011000), // BLOCK SEXTANT-45\n '\\u{1FB17}': sextant(0b011001), // BLOCK SEXTANT-145\n '\\u{1FB18}': sextant(0b011010), // BLOCK SEXTANT-245\n '\\u{1FB19}': sextant(0b011011), // BLOCK SEXTANT-1245\n '\\u{1FB1A}': sextant(0b011100), // BLOCK SEXTANT-345\n '\\u{1FB1B}': sextant(0b011101), // BLOCK SEXTANT-1345\n '\\u{1FB1C}': sextant(0b011110), // BLOCK SEXTANT-2345\n '\\u{1FB1D}': sextant(0b011111), // BLOCK SEXTANT-12345\n '\\u{1FB1E}': sextant(0b100000), // BLOCK SEXTANT-6\n '\\u{1FB1F}': sextant(0b100001), // BLOCK SEXTANT-16\n '\\u{1FB20}': sextant(0b100010), // BLOCK SEXTANT-26\n '\\u{1FB21}': sextant(0b100011), // BLOCK SEXTANT-126\n '\\u{1FB22}': sextant(0b100100), // BLOCK SEXTANT-36\n '\\u{1FB23}': sextant(0b100101), // BLOCK SEXTANT-136\n '\\u{1FB24}': sextant(0b100110), // BLOCK SEXTANT-236\n '\\u{1FB25}': sextant(0b100111), // BLOCK SEXTANT-1236\n '\\u{1FB26}': sextant(0b101000), // BLOCK SEXTANT-46\n '\\u{1FB27}': sextant(0b101001), // BLOCK SEXTANT-146\n '\\u{1FB28}': sextant(0b101011), // BLOCK SEXTANT-1246\n '\\u{1FB29}': sextant(0b101100), // BLOCK SEXTANT-346\n '\\u{1FB2A}': sextant(0b101101), // BLOCK SEXTANT-1346\n '\\u{1FB2B}': sextant(0b101110), // BLOCK SEXTANT-2346\n '\\u{1FB2C}': sextant(0b101111), // BLOCK SEXTANT-12346\n '\\u{1FB2D}': sextant(0b110000), // BLOCK SEXTANT-56 (lower one third block)\n '\\u{1FB2E}': sextant(0b110001), // BLOCK SEXTANT-156\n '\\u{1FB2F}': sextant(0b110010), // BLOCK SEXTANT-256\n '\\u{1FB30}': sextant(0b110011), // BLOCK SEXTANT-1256 (upper and lower one third block)\n '\\u{1FB31}': sextant(0b110100), // BLOCK SEXTANT-356\n '\\u{1FB32}': sextant(0b110101), // BLOCK SEXTANT-1356\n '\\u{1FB33}': sextant(0b110110), // BLOCK SEXTANT-2356\n '\\u{1FB34}': sextant(0b110111), // BLOCK SEXTANT-12356\n '\\u{1FB35}': sextant(0b111000), // BLOCK SEXTANT-456\n '\\u{1FB36}': sextant(0b111001), // BLOCK SEXTANT-1456\n '\\u{1FB37}': sextant(0b111010), // BLOCK SEXTANT-2456\n '\\u{1FB38}': sextant(0b111011), // BLOCK SEXTANT-12456\n '\\u{1FB39}': sextant(0b111100), // BLOCK SEXTANT-3456 (lower two thirds block)\n '\\u{1FB3A}': sextant(0b111101), // BLOCK SEXTANT-13456\n '\\u{1FB3B}': sextant(0b111110), // BLOCK SEXTANT-23456\n\n // Smooth mosaic terminal graphic characters (1FB3C-1FB6F)\n '\\u{1FB3C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB3E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB3F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB40}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L0.5,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB41}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB42}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB43}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,0 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB44}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB45}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0.5,0 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB46}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,0.3333 L1,1 L0,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB47}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB48}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.6667 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB49}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,0.3333 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L1,0 L1,1 Z' }, // LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB4C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB4D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.3333 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB4E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB4F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB50}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L0,0 L0,1 L1,1 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB51}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,1 L1,1 L1,0.6667 Z' }, // LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB52}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB53}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB54}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0.5,1 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FB55}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,1 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FB56}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,1 L1,1 L1,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FB57}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB58}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB59}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE\n '\\u{1FB5A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT\n '\\u{1FB5B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L0.5,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE\n '\\u{1FB5C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.6667 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB5D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB5E}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.6667 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB5F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB60}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L0,0 L1,0 L1,0.3333 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB61}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,1 L0,1 L0,0 L1,0 Z' }, // UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT\n '\\u{1FB62}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT\n '\\u{1FB63}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.3333 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT\n '\\u{1FB64}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT\n '\\u{1FB65}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,0.6667 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB66}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.5,0 L1,0 L1,1 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FB67}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.3333 L1,0.6667 L1,0 L0,0 Z' }, // UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT\n '\\u{1FB68}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0.5,0.5 Z' }, // UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing left)\n '\\u{1FB69}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L1,0 L1,1 L0,1 Z' }, // LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing upper)\n '\\u{1FB6A}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 L1,1 L0,1 Z' }, // UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK (missing right)\n '\\u{1FB6B}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0.5,0.5 L0,1 Z' }, // LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK (missing lower)\n '\\u{1FB6C}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.5,0.5 L0,1 Z' }, // LEFT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6D}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L0.5,0.5 Z' }, // UPPER TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6E}': { type: CustomGlyphDefinitionType.PATH, data: 'M1,0 L1,1 L0.5,0.5 Z' }, // RIGHT TRIANGULAR ONE QUARTER BLOCK\n '\\u{1FB6F}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,1 L1,1 L0.5,0.5 Z' }, // LOWER TRIANGULAR ONE QUARTER BLOCK\n\n // Block elements (1FB70-1FB80)\n '\\u{1FB70}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-2\n '\\u{1FB71}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-3\n '\\u{1FB72}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-4\n '\\u{1FB73}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-5\n '\\u{1FB74}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-6\n '\\u{1FB75}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 1, h: 8 }] }, // VERTICAL ONE EIGHTH BLOCK-7\n '\\u{1FB76}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 1, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-2\n '\\u{1FB77}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-3\n '\\u{1FB78}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 3, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-4\n '\\u{1FB79}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-5\n '\\u{1FB7A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 5, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-6\n '\\u{1FB7B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 6, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-7\n '\\u{1FB7C}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // LEFT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB7D}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // LEFT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7E}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 0, w: 8, h: 1 }] }, // RIGHT AND UPPER ONE EIGHTH BLOCK\n '\\u{1FB7F}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 7, y: 0, w: 1, h: 8 }, { x: 0, y: 7, w: 8, h: 1 }] }, // RIGHT AND LOWER ONE EIGHTH BLOCK\n '\\u{1FB80}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // UPPER AND LOWER ONE EIGHTH BLOCK\n\n // Window title bar (1FB81-1FB81)\n '\\u{1FB81}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 1 }, { x: 0, y: 2, w: 8, h: 1 }, { x: 0, y: 4, w: 8, h: 1 }, { x: 0, y: 7, w: 8, h: 1 }] }, // HORIZONTAL ONE EIGHTH BLOCK-1358\n\n // Block elements (1FB82-1FB8B)\n '\\u{1FB82}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 2 }] }, // UPPER ONE QUARTER BLOCK\n '\\u{1FB83}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 3 }] }, // UPPER THREE EIGHTHS BLOCK\n '\\u{1FB84}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 5 }] }, // UPPER FIVE EIGHTHS BLOCK\n '\\u{1FB85}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 6 }] }, // UPPER THREE QUARTERS BLOCK\n '\\u{1FB86}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 7 }] }, // UPPER SEVEN EIGHTHS BLOCK\n '\\u{1FB87}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 6, y: 0, w: 2, h: 8 }] }, // RIGHT ONE QUARTER BLOCK\n '\\u{1FB88}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 5, y: 0, w: 3, h: 8 }] }, // RIGHT THREE EIGHTHS B0OCK\n '\\u{1FB89}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 3, y: 0, w: 5, h: 8 }] }, // RIGHT FIVE EIGHTHS BL0CK\n '\\u{1FB8A}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 6, h: 8 }] }, // RIGHT THREE QUARTERS 0LOCK\n '\\u{1FB8B}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 1, y: 0, w: 7, h: 8 }] }, // RIGHT SEVEN EIGHTHS B0OCK\n\n // Rectangular shade characters (1FB8C-1FB94)\n '\\u{1FB8C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LEFT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n '\\u{1FB8D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // RIGHT HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0.5,0 L1,0 L1,1 L0.5,1 Z' },\n '\\u{1FB8E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n '\\u{1FB8F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER HALF MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n '\\u{1FB90}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // INVERSE MEDIUM SHADE\n [0, 1],\n [1, 0]\n ] },\n '\\u{1FB91}': [ // UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0.5 L1,0.5 L1,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 0, w: 8, h: 4 }] }\n ],\n '\\u{1FB92}': [ // UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L1,0 L1,0.5 L0,0.5 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 4, w: 8, h: 4 }] }\n ],\n // 1FB93 is \n '\\u{1FB94}': [ // LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK\n { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [\n [0, 1],\n [1, 0]\n ], clipPath: 'M0,0 L0.5,0 L0.5,1 L0,1 Z' },\n { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 0, w: 4, h: 8 }] }\n ],\n\n // Fill characters (1FB95-1FB97)\n '\\u{1FB95}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // CHECKER BOARD FILL\n { x: 0, y: 0, w: 2, h: 2 }, { x: 4, y: 0, w: 2, h: 2 },\n { x: 2, y: 2, w: 2, h: 2 }, { x: 6, y: 2, w: 2, h: 2 },\n { x: 0, y: 4, w: 2, h: 2 }, { x: 4, y: 4, w: 2, h: 2 },\n { x: 2, y: 6, w: 2, h: 2 }, { x: 6, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB96}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // INVERSE CHECKER BOARD FILL\n { x: 2, y: 0, w: 2, h: 2 }, { x: 6, y: 0, w: 2, h: 2 },\n { x: 0, y: 2, w: 2, h: 2 }, { x: 4, y: 2, w: 2, h: 2 },\n { x: 2, y: 4, w: 2, h: 2 }, { x: 6, y: 4, w: 2, h: 2 },\n { x: 0, y: 6, w: 2, h: 2 }, { x: 4, y: 6, w: 2, h: 2 }\n ] },\n '\\u{1FB97}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [ // HEAVY HORIZONTAL FILL (upper middle and lower one quarter block)\n { x: 0, y: 2, w: 8, h: 2 }, { x: 0, y: 6, w: 8, h: 2 }\n ] },\n\n // Diagonal fill characters (1FB98-1FB99)\n '\\u{1FB98}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,-0.25 L1.25,1.25 M-0.25,0 L1,1.25 M-0.25,0.25 L0.75,1.25 M-0.25,0.5 L0.5,1.25 M0,-0.25 L1.25,1 M0.25,-0.25 L1.25,0.75 M0.5,-0.25 L1.25,0.5 M-0.25,0.75 L0.25,1.25 M0.75,-0.25 L1.25,0.25', strokeWidth: 1 }, // UPPER LEFT TO LOWER RIGHT FILL\n '\\u{1FB99}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M-0.25,0.5 L0.5,-0.25 M-0.25,0.75 L0.75,-0.25 M-0.25,1 L1,-0.25 M-0.25,1.25 L1.25,-0.25 M0,1.25 L1.25,0 M0.25,1.25 L1.25,0.25 M0.5,1.25 L1.25,0.5 M-0.25,0.25 L0.25,-0.25 M0.75,1.25 L1.25,0.75', strokeWidth: 1 }, // UPPER RIGHT TO LOWER LEFT FILL\n\n // Smooth mosaic terminal graphic characters (1FB9A-1FB9B)\n '\\u{1FB9A}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L0,1 L1,1 L.5,.5 L1,0', type: CustomGlyphVectorType.FILL } }, // UPPER AND LOWER TRIANGULAR HALF BLOCK\n '\\u{1FB9B}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1', type: CustomGlyphVectorType.FILL } }, // LEFT AND RIGHT TRIANGULAR HALF BLOCK\n\n // Triangular shade characters (1FB9C-1FB9F)\n '\\u{1FB9C}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L0,1 Z' },\n '\\u{1FB9D}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // UPPER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,0 L1,1 Z' },\n '\\u{1FB9E}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER RIGHT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M1,0 L1,1 L0,1 Z' },\n '\\u{1FB9F}': { type: CustomGlyphDefinitionType.BLOCK_PATTERN, data: [ // LOWER LEFT TRIANGULAR MEDIUM SHADE\n [1, 0],\n [0, 1]\n ], clipPath: 'M0,0 L1,1 L0,1 Z' },\n\n // Character cell diagonals (1FBA0-1FBAE)\n '\\u{1FBA0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT\n '\\u{1FBA1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBA5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT\n '\\u{1FBA8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 M1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBA9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 M0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT\n '\\u{1FBAB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,.5 L.5,1 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT\n '\\u{1FBAC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L.5,0 L1,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBAD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L.5,0 L0,.5 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE\n '\\u{1FBAE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL DIAMOND\n\n // Light solid line with stroke (1FBAF-1FBAF)\n '\\u{1FBAF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: `${Shapes.LEFT_TO_RIGHT} M.5,.35 L.5,.65`, strokeWidth: 1 }, // BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE\n\n // Terminal graphic characters (1FBB0-1FBB3)\n '\\u{1FBB0}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.1,0.2 L0.1,.8 L.4,.6 L.9,0.6 Z', scaleType: CustomGlyphScaleType.CHAR }, // ARROWHEAD-SHAPED POINTER\n '\\u{1FBB1}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.1,.525 L.35,.675 L.9,.35', type: CustomGlyphVectorType.STROKE }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE CHECK MARK\n '\\u{1FBB2}': { type: CustomGlyphDefinitionType.PATH, data: 'M.29,.27 L0.13,.56 L.22,.59 L.35,0.35 L.67,.35 L.57,.57 L.71,.76 L.22,.76 L.42,1 L.53,.98 L.43,.86 L.9,.86 L.71,.6 L1,.6 L1,.52 L.83,.52 L.92,.36 L1,.36 L1,.27Z M.99,.13 A.12,.12,0,1,1,.75,.13 A.12,.12,0,1,1,.99,.13' }, // LEFT HALF RUNNING MAN\n '\\u{1FBB3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,.27 L.3,.27 L.55,.12 L.63,.18 L.33,.36 L0,.36 M0,.52 L.33,.52 L.59,.89 L.73,.89 L.73,.98 L.53,.98 L.28,.6 L0,.6' }, // RIGHT HALF RUNNING MAN\n\n // Arrows (1FBB4-1FBB8)\n // TODO: Improve all arrows, use hybrid approach\n '\\u{1FBB4}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.15,.55 L.5,.4 L.5,.45 L.65,.45 L.65,.35 L.85,.35 L.85,.625 L.5,.625 L.5,.7 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS\n '\\u{1FBB5}': [ // LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.15,.5 L.5,.35 L.5,.425 L.85,.425 L.85,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB6}': [ // RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L1,0 L1,.0625 L0,.0625 Z M0,.9375 L1,.9375 L1,1 L0,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.85,.5 L.5,.35 L.5,.425 L.15,.425 L.15,.575 L.5,.575 L.5,.65 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB7}': [ // DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.675 L.2,.5 L.35,.5 L.35,.325 L.65,.325 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n '\\u{1FBB8}': [ // UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.875,0 L1,0 L1,1 L.875,1 Z', type: CustomGlyphVectorType.FILL } },\n { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.325 L.2,.5 L.35,.5 L.35,.675 L.65,.675 L.65,.5 L.8,.5 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Terminal graphic characters (1FBB9-1FBBC)\n '\\u{1FBB9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,.89 L.11,.89 L.11,.37 L.36,.12 L.74,.12 L.96,.34 L1,.34 L1,.405 L.92,.405 L.69,.185 L.41,.185 L.21,.42 L.21,.825 L1,.825 Z', type: CustomGlyphVectorType.FILL } }, // LEFT HALF FOLDER\n '\\u{1FBBA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,.89 L0,.825 L.78,.825 L.78,.53 L.7,.415 L0,.415 L0,.35 L.75,.35 L.88,.48 L.88,.89 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT HALF FOLDER\n '\\u{1FBBB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.31,.275 L.44,.275 L.44,.47 L.05,.47 L.05,.405 L.31,.405 Z M.56,.275 L.69,.275 L.69,.405 L.95,.405 L.95,.47 L.56,.47 Z M.05,.53 L.44,.53 L.44,.725 L.31,.725 L.31,.595 L.05,.595 Z M.56,.53 L.95,.53 L.95,.595 L.69,.595 L.69,.725 L.56,.725 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // VOIDED GREEK CROSS\n '\\u{1FBBC}': [ // RIGHT OPEN SQUARED DOT\n { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L1,0 L1,1 L0,1 L0,.935 L.885,.935 L.885,.065 L0,.065 Z' },\n { type: CustomGlyphDefinitionType.PATH, data: 'M.67,.5 A.17,.085,0,1,1,.33,.5 A.17,.085,0,1,1,.67,.5', scaleType: CustomGlyphScaleType.CHAR }\n ],\n\n // Negative terminal graphic characters (1FBBD-1FBBF)\n '\\u{1FBBD}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M0,0 L.5,.5 L1,0 L1,1 L.5,.5 L0,1 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL CROSS\n '\\u{1FBBE}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M1,.5 L.5,1', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE\n '\\u{1FBBF}': { type: CustomGlyphDefinitionType.PATH_NEGATIVE, data: { d: 'M.5,0 L1,.5 L.5,1 L0,.5 Z', type: CustomGlyphVectorType.STROKE } }, // NEGATIVE DIAGONAL DIAMOND\n\n // Terminal graphic characters (1FBC0-1FBCA)\n '\\u{1FBC0}': { type: CustomGlyphDefinitionType.PATH, data: 'M.16,.445 A.02,.01,0,0,1,.39,.33 L.5,.375 L.61,.33 A.02,.01,0,0,1,.84,.445 L.75,.5 L.84,.555 A.02,.01,0,0,1,.61,.67 L.5,.625 L.39,.67 A.02,.01,0,0,1,.16,.555 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', scaleType: CustomGlyphScaleType.CHAR }, // WHITE HEAVY SALTIRE WITH ROUNDED CORNERS\n // 1FBC1-1FBC4 is dervied from the Iosevka font (SIL OFL v1.1) https://github.com/be5invis/Iosevka\n '\\u{1FBC1}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.142308,0.924 Q0.130770,0.924,0.120193,0.922 T0.101924,0.916 T0.089424,0.9065 T0.084616,0.895 V0.025 Q0.084616,0.019,0.089424,0.0135 T0.101924,0.004 T0.120193,-0.002 T0.142308,-0.004 Q0.150000,-0.004,0.157693,-0.003 T0.173078,0.000 L0.430770,0.085 Q0.451924,0.059,0.494232,0.041 T0.587501,0.013 T0.692309,-0.0005 T0.800001,-0.004 H1 V0.055 H0.800001 Q0.771155,0.055,0.742309,0.056 T0.685578,0.060 T0.630770,0.0685 T0.580770,0.0825 T0.543270,0.1045 T0.528847,0.133 V0.647 H0.530770 Q0.596155,0.645,0.659616,0.638 T0.782693,0.6165 T0.893270,0.5805 T1,0.531 V0.623 Q0.934616,0.644,0.880770,0.6595 T0.769232,0.685 T0.650963,0.700 T0.528847,0.707 V0.787 Q0.528847,0.802,0.543270,0.8155 T0.580770,0.8375 T0.630770,0.8515 T0.685578,0.860 T0.742309,0.864 T0.800001,0.865 H1 V0.924 H0.800001 Q0.746155,0.924,0.692309,0.9205 T0.587501,0.907 T0.494232,0.879 T0.430770,0.835 L0.173078,0.920 Q0.165386,0.922,0.157693,0.923 T0.142308,0.924 Z M0.2,0.841 L0.415385,0.770 V0.150 L0.2,0.079 V0.841 Z M1,0.698 Q0.973077,0.694,0.969231,0.6885 T0.965385,0.677 Q0.965385,0.672,0.969231,0.6665 T1,0.657 V0.698 Z' }, // LEFT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC2}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.623 V0.531 Q0.044231,0.512,0.0625,0.4905 T0.092308,0.4465 T0.108654,0.4005 T0.113462,0.354 V0.351 Q0.113462,0.345,0.117308,0.3395 T0.129808,0.3305 T0.148846,0.3245 T0.171154,0.323 H0.501923 Q0.532692,0.323,0.563462,0.3185 T0.617308,0.303 T0.651923,0.2765 T0.663462,0.2435 V0.241 Q0.663462,0.219,0.657692,0.197 T0.639423,0.1545 T0.604808,0.115 T0.549615,0.082 T0.475577,0.0615 T0.392308,0.055 H0 V-0.004 H1 V0.055 H0.667308 Q0.694231,0.071,0.713462,0.09 T0.746154,0.129 T0.766346,0.1705 T0.775,0.213 H1 V0.316 Q0.971154,0.305,0.955769,0.2965 T0.920192,0.2825 T0.876923,0.2745 T0.830769,0.272 H0.773077 Q0.767308,0.297,0.743269,0.319 T0.680769,0.355 T0.595192,0.375 T0.501923,0.381 H0.227308 Q0.223462,0.415,0.211,0.4485 T0.172692,0.5135 T0.108269,0.573 T0,0.623 Z M0.611538,0.924 H0 V0.865 H0.611538 Q0.642308,0.865,0.673077,0.8605 T0.727885,0.845 T0.762308,0.8185 T0.773077,0.787 V0.785 Q0.773077,0.769,0.762308,0.7535 T0.727885,0.727 T0.673077,0.7115 T0.611538,0.707 H0.059615 Q0.048077,0.707,0.037115,0.7045 T0,0.694 V0.653 Q0.026923,0.648,0.037115,0.646 T0.059615,0.644 H0.722692 Q0.753462,0.644,0.784231,0.6395 T0.839038,0.624 T0.873846,0.5975 T0.884615,0.566 V0.564 Q0.884615,0.548,0.873846,0.532 T0.839038,0.5055 T0.784231,0.49 T0.722692,0.4855 H0.392308 Q0.380769,0.4855,0.370192,0.483 T0.351923,0.4765 T0.339423,0.467 T0.334615,0.4555 T0.339423,0.444 T0.351923,0.4345 T0.370192,0.428 T0.392308,0.4255 H0.832692 Q0.855769,0.4255,0.878846,0.4235 T0.922115,0.416 T0.957692,0.4015 T1,0.3815 V0.4685 Q0.975,0.4705,0.966346,0.4725 T0.95,0.4765 Q0.961538,0.4835,0.969231,0.4915 T1,0.5075 V0.6205 Q0.965385,0.6455,0.926923,0.665 T0.84,0.6935 Q0.866923,0.7115,0.877596,0.7345 T0.894231,0.7855 V0.787 Q0.894231,0.815,0.876923,0.8425 T0.820192,0.8895 T0.726923,0.916 T0.611538,0.924 Z' }, // MIDDLE THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC3}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0.473 V0.386 Q0.025490,0.378,0.028431,0.3695 T0.031373,0.352 V0.35 Q0.031373,0.342,0.028431,0.333 T0,0.316 V0.213 H0.652941 Q0.684314,0.213,0.715686,0.2085 T0.770588,0.193 T0.804902,0.1665 T0.815686,0.135 V0.133 Q0.815686,0.117,0.804902,0.101 T0.770588,0.0745 T0.715686,0.0595 T0.652941,0.055 H0 V-0.004 H0.652941 Q0.707843,-0.004,0.761765,0.004 T0.856863,0.031 T0.915686,0.0775 T0.933333,0.133 V0.135 Q0.933333,0.163,0.915686,0.1905 T0.856863,0.237 T0.761765,0.264 T0.652941,0.272 H0.109804 Q0.131373,0.29,0.140196,0.31 T0.149020,0.35 V0.352 Q0.149020,0.37,0.142157,0.388 T0.118627,0.4225 T0.076471,0.452 T0,0.473 Z M0,0.625 V0.513 Q0.029412,0.526,0.032353,0.54 T0.035294,0.568 V0.57 Q0.035294,0.584,0.032353,0.598 T0,0.625 Z' }, // RIGHT THIRD WHITE RIGHT POINTING INDEX\n '\\u{1FBC4}': { type: CustomGlyphDefinitionType.PATH, data: 'M0.019231,1.085 V-0.165 H0.980769 V1.085 H0.019231 Z M0.446154,0.527 H0.553846 Q0.553846,0.511,0.5625,0.495 T0.591346,0.466 T0.631731,0.4405 T0.666346,0.4135 T0.688462,0.3825 T0.696154,0.35 Q0.696154,0.33,0.682692,0.311 T0.641346,0.2785 T0.575,0.259 T0.498077,0.253 T0.421154,0.259 T0.356731,0.279 T0.315385,0.3125 T0.301923,0.352 V0.357 H0.409615 V0.354 Q0.409615,0.345,0.414423,0.335 T0.431731,0.318 T0.4625,0.3075 T0.498077,0.304 Q0.517308,0.304,0.534615,0.307 T0.564423,0.3165 T0.582692,0.332 T0.588462,0.35 Q0.588462,0.366,0.572115,0.3805 T0.535577,0.4075 T0.496154,0.4335 T0.465385,0.4625 T0.45,0.4945 T0.446154,0.527 Z M0.5,0.667 Q0.519231,0.667,0.5375,0.664 T0.569231,0.654 T0.588462,0.637 T0.594231,0.617 T0.588462,0.5975 T0.569231,0.581 T0.5375,0.571 T0.5,0.568 T0.4625,0.571 T0.430769,0.581 T0.411538,0.5975 T0.405769,0.617 T0.411538,0.637 T0.430769,0.654 T0.4625,0.664 T0.5,0.667 Z', scaleType: CustomGlyphScaleType.CHAR }, // NEGATIVE SQUARED QUESTION MARK\n '\\u{1FBC5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.51 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.51 L.56,.425 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE\n '\\u{1FBC6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.46 L.23,.385 L.19,.43 L.44,.51 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.61,.735 L.7,.71 L.56,.56 L.56,.51 L.81,.43 L.77,.385 L.56,.46 L.56,.425 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH ARMS RAISED\n '\\u{1FBC7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.29,.71 L.38,.735 L.5,.605 L.74,.72 L.81,.685 L.56,.56 L.56,.425 Z M.18,.53 L.23,.575 L.81,.43 L.77,.385 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING LEFT\n '\\u{1FBC8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.44,.56 L.19,.685 L.26,.72 L.5,.605 L.62,.735 L.71,.71 L.56,.56 L.56,.425 Z M.23,.385 L.18,.43 L.77,.575 L.81,.53 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE LEANING RIGHT\n '\\u{1FBC9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.44,.425 L.45,.495 L.15,.645 L.34,.645 L.34,.7 L.44,.7 L.44,.645 L.56,.645 L.56,.7 L.66,.7 L.66,.645 L.84,.645 L.54,.495 L.56,.425 Z M.39,.6 L.5,.55 L.60,.6 Z M.17,.46 L.17,.51 L.83,.51 L.83,.46 Z M.67,.35 C.67,.303,.594,.265,.5,.265 C.406,.265,.33,.303,.33,.35 C.33,.397,.406,.435,.5,.435 C.594,.435,.67,.397,.67,.35 Z M.56,.35 C.56,.3665,.533,.38,.5,.38 C.467,.38,.44,.3665,.44,.35 C.44,.3335,.467,.32,.5,.32 C.533,.32,.56,.3335,.56,.35 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // STICK FIGURE WITH DRESS\n '\\u{1FBCA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.26,.375 L.5,.255 L.74,.375 L.74,.665 L.5,.55 L.26,.665 Z M.37,.395 L.37,.54 L.5,.475 L.63,.54 L.63,.395 L.5,.33 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE UP-POINTING CHEVRON\n\n // Terminal graphic characters (1FBCB-1FBCD)\n '\\u{1FBCB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.09,.41 L.32,.295 L.5,.375 L.68,.295 L.91,.41 L.75,.5 L.91,.59 L.68,.705 L.5,.625 L.32,.705 L.09,.59 L.25,.5 Z M.24,.41 L.39,.5 L.24,.59 L.32,.63 L.5,.555 L.68,.63 L.76,.59 L.61,.5 L.76,.41 L.68,.37 L.5,.445 L.32,.37 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // WHITE CROSS MARK\n '\\u{1FBCC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.55,.305 L.88,.305 L.88,.355 L.65,.355 L.65,.47 L.88,.47 L.88,.52 L.55,.52 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // RAISED SMALL LEFT SQUARE BRACKET\n '\\u{1FBCD}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.38,.39 L.5,.33 L.62,.39 L.62,.53 L.5,.47 L.38,.53 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // BLACK SMALL UP-POINTING CHEVRON\n\n // Block elements (1FBCE-1FBCF)\n '\\u{1FBCE}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.6667,0 L0.6667,1 L0,1 Z' }, // LEFT TWO THIRDS BLOCK\n '\\u{1FBCF}': { type: CustomGlyphDefinitionType.PATH, data: 'M0,0 L0.3333,0 L0.3333,1 L0,1 Z' }, // LEFT ONE THIRD BLOCK\n\n // Character cell diagonals (1FBD0-1FBDF)\n '\\u{1FBD0}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT\n '\\u{1FBD1}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT\n '\\u{1FBD2}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT\n '\\u{1FBD3}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBD4}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE\n '\\u{1FBD5}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBD6}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE\n '\\u{1FBD7}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M.5,0 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT\n '\\u{1FBD8}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT\n '\\u{1FBD9}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDA}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT\n '\\u{1FBDB}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT\n '\\u{1FBDC}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L.5,1 L1,0', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT\n '\\u{1FBDD}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M1,0 L0,.5 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT\n '\\u{1FBDE}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,1 L.5,0 L1,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT\n '\\u{1FBDF}': { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: 'M0,0 L1,.5 L0,1', strokeWidth: 1 }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT\n\n // Geometric shapes (1FBE0-1FBEF)\n '\\u{1FBE0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0', type: CustomGlyphVectorType.STROKE } }, // TOP JUSTIFIED LOWER HALF WHITE CIRCLE\n '\\u{1FBE1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1', type: CustomGlyphVectorType.STROKE } }, // RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE\n '\\u{1FBE2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1', type: CustomGlyphVectorType.STROKE } }, // BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE\n '\\u{1FBE3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1', type: CustomGlyphVectorType.STROKE } }, // LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE\n '\\u{1FBE4}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 0, w: 4, h: 4 }] }, // UPPER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE5}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 2, y: 4, w: 4, h: 4 }] }, // LOWER CENTRE ONE QUARTER BLOCK\n '\\u{1FBE6}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 0, y: 2, w: 4, h: 4 }] }, // MIDDLE LEFT ONE QUARTER BLOCK\n '\\u{1FBE7}': { type: CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR, data: [{ x: 4, y: 2, w: 4, h: 4 }] }, // MIDDLE RIGHT ONE QUARTER BLOCK\n '\\u{1FBE8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C0,.276,.224,.5,.5,.5 C.776,.5,1,.276,1,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP JUSTIFIED LOWER HALF BLACK CIRCLE\n '\\u{1FBE9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 C.724,0,.5,.224,.5,.5 C.5,.776,.724,1,1,1 Z', type: CustomGlyphVectorType.FILL } }, // RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE\n '\\u{1FBEA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 C0,.724,.224,.5,.5,.5 C.776,.5,1,.724,1,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE\n '\\u{1FBEB}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 C.276,0,.5,.224,.5,.5 C.5,.776,.276,1,0,1 Z', type: CustomGlyphVectorType.FILL } }, // LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE\n '\\u{1FBEC}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,0 L.5,0 C.5,.276,.724,.5,1,.5 Z', type: CustomGlyphVectorType.FILL } }, // TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBED}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,1 L.5,1 C.5,.724,.276,.5,0,.5 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE\n '\\u{1FBEE}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M1,1 L1,.5 C.724,.5,.5,.724,.5,1 Z', type: CustomGlyphVectorType.FILL } }, // BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE\n '\\u{1FBEF}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M0,0 L0,.5 C.276,.5,.5,.276,.5,0 Z', type: CustomGlyphVectorType.FILL } }, // TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n\n // Segmented digits (1FBF0-1FBF9)\n '\\u{1FBF0}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111110), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ZERO (abcdef)\n '\\u{1FBF1}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110000), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT ONE (bc)\n '\\u{1FBF2}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1101101), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT TWO (abdeg)\n '\\u{1FBF3}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111001), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT THREE (abcdg)\n '\\u{1FBF4}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b0110011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FOUR (bcfg)\n '\\u{1FBF5}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT FIVE (acdfg)\n '\\u{1FBF6}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1011111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SIX (acdefg)\n '\\u{1FBF7}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1110010), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT SEVEN (abcf)\n '\\u{1FBF8}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111111), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT EIGHT (abcdefg)\n '\\u{1FBF9}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: segmentedDigit(0b1111011), type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // SEGMENTED DIGIT NINE (abcdfg)\n\n // Terminal graphic character (1FBFA-1FBFA)\n '\\u{1FBFA}': { type: CustomGlyphDefinitionType.VECTOR_SHAPE, data: { d: 'M.5,.175 C.2,.175,.15,.305,.15,.435 L.05,.63 L.35,.63 C.35,.682,.42,.76,.5,.76 C.58,.76,.65,.682,.65,.63 L.95,.63 L.85,.435 C.85,.305,.8,.175,.5,.175 Z', type: CustomGlyphVectorType.FILL }, scaleType: CustomGlyphScaleType.CHAR }, // ALARM BELL SYMBOL\n\n // #endregion\n\n // #region Braille Patterns (2800-28FF)\n\n // https://www.unicode.org/charts/PDF/U2800.pdf\n\n // Braille patterns (2800-28FF)\n ...Object.fromEntries(\n Array.from({ length: 256 }, (_, i) => [\n String.fromCodePoint(0x2800 + i),\n { type: CustomGlyphDefinitionType.BRAILLE, data: i }\n ])\n ),\n\n // #endregion\n};\n\nexport const blockPatternCodepoints = new Set([\n // Shade characters (2591-2593)\n 0x2591,\n 0x2592,\n 0x2593,\n // Rectangular shade characters (1FB8C-1FB94)\n 0x1FB8C,\n 0x1FB8D,\n 0x1FB8E,\n 0x1FB8F,\n 0x1FB90,\n 0x1FB91,\n 0x1FB92,\n 0x1FB94,\n // Triangular shade characters (1FB9C-1FB9F)\n 0x1FB9C,\n 0x1FB9D,\n 0x1FB9E,\n 0x1FB9F\n]);\n\n/**\n * Generates a drawing function for sextant characters. Sextants are a 2x3 grid where each cell\n * can be on or off.\n * @param pattern A 6-bit pattern where bit 0 = top-left, bit 1 = top-right, bit 2 = middle-left,\n * bit 3 = middle-right, bit 4 = bottom-left, bit 5 = bottom-right\n */\nfunction sextant(pattern: number): { type: CustomGlyphDefinitionType.PATH_FUNCTION, data: CustomGlyphPathDrawFunctionDefinition } {\n return {\n type: CustomGlyphDefinitionType.PATH_FUNCTION,\n data: () => {\n // Sextant grid: 2 columns, 3 rows\n // Row heights in 8ths: top=3, middle=2, bottom=3\n // Column widths: left=4, right=4\n const rects: string[] = [];\n const colW = 0.5; // Each column is half width\n const rowH = [3 / 8, 2 / 8, 3 / 8]; // Row heights as fractions\n const rowY = [0, 3 / 8, 5 / 8]; // Row Y positions\n\n for (let row = 0; row < 3; row++) {\n const leftBit = (pattern >> (row * 2)) & 1;\n const rightBit = (pattern >> (row * 2 + 1)) & 1;\n\n if (leftBit && rightBit) {\n // Full row\n rects.push(`M0,${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (leftBit) {\n rects.push(`M0,${rowY[row]} L${colW},${rowY[row]} L${colW},${rowY[row] + rowH[row]} L0,${rowY[row] + rowH[row]} Z`);\n } else if (rightBit) {\n rects.push(`M${colW},${rowY[row]} L1,${rowY[row]} L1,${rowY[row] + rowH[row]} L${colW},${rowY[row] + rowH[row]} Z`);\n }\n }\n return rects.join(' ');\n }\n };\n}\n\n/**\n * Generates SVG path data for a 7-segment display digit.\n *\n * Segment mapping (bit positions):\n *\n * - bit 6: a (top)\n * - bit 5: b (upper right)\n * - bit 4: c (lower right)\n * - bit 3: d (bottom)\n * - bit 2: e (lower left)\n * - bit 1: f (upper left)\n * - bit 0: g (middle)\n *\n * ```\n * \u2500a\u2500\n * \u2502 \u2502\n * f b\n * \u2500g\u2500\n * e c\n * \u2502 \u2502\n * \u2500d\u2500\n * ```\n */\nfunction segmentedDigit(pattern: number): string {\n const paths: string[] = [];\n\n // Each segment should have approximately the same stroke width, this is somewhat difficult to be\n // precise since coordinates are 0-1 of the whole cell (percentage-based). To handle this, the\n // fact that terminal cells are typically sized at ~2:1 (height:width) is leveraged.\n // for horizontal vs vertical to make segments appear the same thickness\n const segW = 0.15; // Width of vertical segments (fraction of cell width)\n const segH = 0.075; // Height of horizontal segments (fraction of cell height, ~half of segW for 2:1 cells)\n const padX = 0.05; // Horizontal padding from edge\n const padY = 0.175; // Vertical padding from edge (35% total = 65% height)\n const gap = 0.015; // Gap between segments\n const taperX = segW / 2; // Horizontal taper for vertical segments\n const taperY = segH / 2; // Vertical taper for horizontal segments\n\n const left = padX;\n const right = 1 - padX;\n const top = padY;\n const bottom = 1 - padY;\n const midY = 0.5;\n\n // Segment a (top horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b1000000) {\n const y1 = top;\n const y2 = top + segH / 2;\n const y3 = top + segH;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment b (upper right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0100000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment c (lower right vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0010000) {\n const x1 = right - segW;\n const x2 = right - segW / 2;\n const x3 = right;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment d (bottom horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0001000) {\n const y1 = bottom - segH;\n const y2 = bottom - segH / 2;\n const y3 = bottom;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n // Segment e (lower left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000100) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = midY + gap;\n const y2 = bottom - segH - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment f (upper left vertical) - hexagonal with pointed top/bottom ends\n if (pattern & 0b0000010) {\n const x1 = left;\n const x2 = left + segW / 2;\n const x3 = left + segW;\n const y1 = top + segH + gap;\n const y2 = midY - gap;\n paths.push(`M${x2},${y1} L${x3},${y1 + taperY} L${x3},${y2 - taperY} L${x2},${y2} L${x1},${y2 - taperY} L${x1},${y1 + taperY} Z`);\n }\n // Segment g (middle horizontal) - hexagonal with pointed left/right ends\n if (pattern & 0b0000001) {\n const y1 = midY - segH / 2;\n const y2 = midY;\n const y3 = midY + segH / 2;\n const x1 = left + segW + gap;\n const x2 = right - segW - gap;\n paths.push(`M${x1},${y2} L${x1 + taperX},${y1} L${x2 - taperX},${y1} L${x2},${y2} L${x2 - taperX},${y3} L${x1 + taperX},${y3} Z`);\n }\n\n return paths.join(' ');\n}\n\n", "import { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';\nimport { IDecorationService, IOptionsService } from 'common/services/Services';\nimport { ICellData } from 'common/buffer/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { rgba } from 'common/Color';\nimport { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';\nimport { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';\n\n// Work variables to avoid garbage collection\nlet $fg = 0;\nlet $bg = 0;\nlet $hasFg = false;\nlet $hasBg = false;\nlet $isSelected = false;\nlet $colors: ReadonlyColorSet | undefined;\nlet $variantOffset = 0;\n\nexport class CellColorResolver {\n /**\n * The shared result of the {@link resolve} call. This is only safe to use immediately after as\n * any other calls will share object.\n */\n public readonly result: { fg: number, bg: number, ext: number } = {\n fg: 0,\n bg: 0,\n ext: 0\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _optionService: IOptionsService,\n private readonly _selectionRenderModel: ISelectionRenderModel,\n private readonly _decorationService: IDecorationService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _themeService: IThemeService\n ) {\n }\n\n /**\n * Resolves colors for the cell, putting the result into the shared {@link result}. This resolves\n * overrides, inverse and selection for the cell which can then be used to feed into the renderer.\n */\n public resolve(cell: ICellData, x: number, y: number, deviceCellWidth: number, deviceCellHeight: number): void {\n this.result.bg = cell.bg;\n this.result.fg = cell.fg;\n this.result.ext = cell.bg & BgFlags.HAS_EXTENDED ? cell.extended.ext : 0;\n // Get any foreground/background overrides, this happens on the model to avoid spreading\n // override logic throughout the different sub-renderers\n\n // Reset overrides work variables\n $bg = 0;\n $fg = 0;\n $hasBg = false;\n $hasFg = false;\n $isSelected = false;\n $colors = this._themeService.colors;\n $variantOffset = 0;\n\n const code = cell.getCode();\n if (code !== NULL_CELL_CODE && cell.extended.underlineStyle === UnderlineStyle.DOTTED) {\n const lineWidth = Math.max(1, Math.floor(this._optionService.rawOptions.fontSize * this._coreBrowserService.dpr / 15));\n $variantOffset = x * deviceCellWidth % (Math.round(lineWidth) * 2);\n }\n if ($variantOffset === 0 && blockPatternCodepoints.has(code)) {\n $variantOffset = ((x * deviceCellWidth) % 2) * 2 + ((y * deviceCellHeight) % 2);\n }\n // Apply decorations on the bottom layer\n this._decorationService.forEachDecorationAtCell(x, y, 'bottom', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Apply the selection color if needed\n $isSelected = this._selectionRenderModel.isCellSelected(this._terminal, x, y);\n if ($isSelected) {\n // If the cell has a bg color, retain the color by blending it with the selection color\n if (\n (this.result.fg & FgFlags.INVERSE) ||\n (this.result.bg & Attributes.CM_MASK) !== Attributes.CM_DEFAULT\n ) {\n // Resolve the standard bg color\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $bg = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $bg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $bg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n }\n // Blend with selection bg color\n $bg = rgba.blend(\n $bg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n } else {\n $bg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n }\n $hasBg = true;\n\n // Apply explicit selection foreground if present\n if ($colors.selectionForeground) {\n $fg = $colors.selectionForeground.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n\n // Overwrite fg as bg if it's a special decorative glyph (eg. powerline)\n if (treatGlyphAsBackgroundColor(cell.getCode())) {\n // Inverse default background should be treated as transparent\n if (\n (this.result.fg & FgFlags.INVERSE) &&\n (this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT\n ) {\n $fg = (this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba >> 8 & Attributes.RGB_MASK;\n } else {\n\n if (this.result.fg & FgFlags.INVERSE) {\n switch (this.result.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.bg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n // No need to consider default bg color here as it's not possible\n }\n } else {\n switch (this.result.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $fg = this._themeService.colors.ansi[this.result.fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $fg = ((this.result.fg & Attributes.RGB_MASK) << 8) | 0xFF;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $fg = this._themeService.colors.foreground.rgba;\n }\n }\n\n $fg = rgba.blend(\n $fg,\n ((this._coreBrowserService.isFocused ? $colors.selectionBackgroundOpaque : $colors.selectionInactiveBackgroundOpaque).rgba & 0xFFFFFF00) | 0x80\n ) >> 8 & Attributes.RGB_MASK;\n }\n $hasFg = true;\n }\n }\n\n // Apply decorations on the top layer\n this._decorationService.forEachDecorationAtCell(x, y, 'top', d => {\n if (d.backgroundColorRGB) {\n $bg = d.backgroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasBg = true;\n }\n if (d.foregroundColorRGB) {\n $fg = d.foregroundColorRGB.rgba >> 8 & Attributes.RGB_MASK;\n $hasFg = true;\n }\n });\n\n // Convert any overrides from rgba to the fg/bg packed format. This resolves the inverse flag\n // ahead of time in order to use the correct cache key\n if ($hasBg) {\n if ($isSelected) {\n // Non-RGB attributes from model + force non-dim + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK & ~BgFlags.DIM) | $bg | Attributes.CM_RGB;\n } else {\n // Non-RGB attributes from model + override + force RGB color mode\n $bg = (cell.bg & ~Attributes.RGB_MASK) | $bg | Attributes.CM_RGB;\n }\n }\n if ($hasFg) {\n // Non-RGB attributes from model + force disable inverse + override + force RGB color mode\n $fg = (cell.fg & ~Attributes.RGB_MASK & ~FgFlags.INVERSE) | $fg | Attributes.CM_RGB;\n }\n\n // Handle case where inverse was specified by only one of bg override or fg override was set,\n // resolving the other inverse color and setting the inverse flag if needed.\n if (this.result.fg & FgFlags.INVERSE) {\n if ($hasBg && !$hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.bg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | (($colors.background.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $fg = (this.result.fg & ~(Attributes.RGB_MASK | FgFlags.INVERSE | Attributes.CM_MASK)) | this.result.bg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasFg = true;\n }\n if (!$hasBg && $hasFg) {\n // Resolve bg color type (default color has a different meaning in fg vs bg)\n if ((this.result.fg & Attributes.CM_MASK) === Attributes.CM_DEFAULT) {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | (($colors.foreground.rgba >> 8 & Attributes.RGB_MASK) & Attributes.RGB_MASK) | Attributes.CM_RGB;\n } else {\n $bg = (this.result.bg & ~(Attributes.RGB_MASK | Attributes.CM_MASK)) | this.result.fg & (Attributes.RGB_MASK | Attributes.CM_MASK);\n }\n $hasBg = true;\n }\n }\n\n // Release object\n $colors = undefined;\n\n // Use the override if it exists\n this.result.bg = $hasBg ? $bg : this.result.bg;\n this.result.fg = $hasFg ? $fg : this.result.fg;\n\n // Reset overrides variantOffset\n this.result.ext &= ~ExtFlags.VARIANT_OFFSET;\n this.result.ext |= ($variantOffset << 29) & ExtFlags.VARIANT_OFFSET;\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { isFirefox, isLegacyEdge } from 'common/Platform';\n\nexport const DIM_OPACITY = 0.5;\n// The text baseline is set conditionally by browser. Using 'ideographic' for Firefox or Legacy Edge\n// would result in truncated text (Issue 3353). Using 'bottom' for Chrome would result in slightly\n// unaligned Powerline fonts (PR 3356#issuecomment-850928179).\nexport const TEXT_BASELINE: CanvasTextBaseline = isFirefox || isLegacyEdge ? 'bottom' : 'ideographic';\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\nimport { customGlyphDefinitions } from './CustomGlyphDefinitions';\nimport { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';\n\ntype PatternCanvas = HTMLCanvasElement | OffscreenCanvas;\ntype PatternCanvasFactory = (width: number, height: number) => PatternCanvas;\n\nconst createOffscreenPatternCanvas: PatternCanvasFactory | undefined = typeof OffscreenCanvas === 'undefined'\n ? undefined\n : (width, height) => new OffscreenCanvas(width, height);\n\nconst createDomPatternCanvas: PatternCanvasFactory = (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n};\n\nexport function createPatternCanvas(\n width: number,\n height: number,\n offscreenCanvasFactory: PatternCanvasFactory | undefined = createOffscreenPatternCanvas,\n domCanvasFactory: PatternCanvasFactory = createDomPatternCanvas\n): PatternCanvas {\n return offscreenCanvasFactory?.(width, height) ?? domCanvasFactory(width, height);\n}\n\n/**\n * Try drawing a custom block element or box drawing character, returning whether it was\n * successfully drawn.\n */\nexport function tryDrawCustomGlyph(\n ctx: CanvasRenderingContext2D,\n c: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): boolean {\n const unifiedCharDefinition = customGlyphDefinitions[c];\n if (unifiedCharDefinition) {\n // Normalize to array for uniform handling\n const parts = Array.isArray(unifiedCharDefinition) ? unifiedCharDefinition : [unifiedCharDefinition];\n for (const part of parts) {\n drawDefinitionPart(ctx, part, xOffset, yOffset, deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, fontSize, devicePixelRatio, logService, backgroundColor, variantOffset);\n }\n return true;\n }\n\n return false;\n}\n\nfunction drawDefinitionPart(\n ctx: CanvasRenderingContext2D,\n part: CustomGlyphDefinitionPart,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService,\n backgroundColor?: string,\n variantOffset: number = 0\n): void {\n // Handle scaleType - adjust dimensions and offset when scaling to character area\n let drawWidth = deviceCellWidth;\n let drawHeight = deviceCellHeight;\n let drawXOffset = xOffset;\n let drawYOffset = yOffset;\n if (part.scaleType === CustomGlyphScaleType.CHAR) {\n drawWidth = deviceCharWidth;\n drawHeight = deviceCharHeight;\n // Center the character within the cell\n drawXOffset = xOffset + (deviceCellWidth - deviceCharWidth) / 2;\n drawYOffset = yOffset + (deviceCellHeight - deviceCharHeight) / 2;\n }\n\n // Handle clipPath generically for any definition type\n if (part.clipPath) {\n ctx.save();\n applyClipPath(ctx, part.clipPath, drawXOffset, drawYOffset, drawWidth, drawHeight);\n }\n\n switch (part.type) {\n case CustomGlyphDefinitionType.SOLID_OCTANT_BLOCK_VECTOR:\n drawBlockVectorChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n case CustomGlyphDefinitionType.BLOCK_PATTERN:\n drawPatternChar(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, variantOffset);\n break;\n case CustomGlyphDefinitionType.PATH_FUNCTION:\n drawPathFunctionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, logService, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH:\n drawPathDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, part.strokeWidth);\n break;\n case CustomGlyphDefinitionType.PATH_NEGATIVE:\n drawPathNegativeDefinitionCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, devicePixelRatio, backgroundColor);\n break;\n case CustomGlyphDefinitionType.VECTOR_SHAPE:\n drawVectorShape(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight, fontSize, devicePixelRatio, logService);\n break;\n case CustomGlyphDefinitionType.BRAILLE:\n drawBrailleCharacter(ctx, part.data, drawXOffset, drawYOffset, drawWidth, drawHeight);\n break;\n }\n\n if (part.clipPath) {\n ctx.restore();\n }\n}\n\nfunction drawBlockVectorChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphSolidOctantBlockVector[],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n for (let i = 0; i < charDefinition.length; i++) {\n const box = charDefinition[i];\n const xEighth = deviceCellWidth / 8;\n const yEighth = deviceCellHeight / 8;\n ctx.fillRect(\n xOffset + box.x * xEighth,\n yOffset + box.y * yEighth,\n box.w * xEighth,\n box.h * yEighth\n );\n }\n}\n\n/**\n * Braille dot positions in octant coordinates (x, y for center of each dot area)\n * Columns: left=1-2, right=5-6 (leaving 0 and 7 as margins, 3-4 as gap)\n * Rows: 0-1, 2-3, 4-5, 6-7 for the 4 rows\n */\nconst brailleDotPositions = new Uint8Array([\n 1, 0, // dot 1 - bit 0\n 1, 2, // dot 2 - bit 1\n 1, 4, // dot 3 - bit 2\n 5, 0, // dot 4 - bit 3\n 5, 2, // dot 5 - bit 4\n 5, 4, // dot 6 - bit 5\n 1, 6, // dot 7 - bit 6\n 5, 6, // dot 8 - bit 7\n]);\n\n/**\n * Draws a braille pattern\n */\nfunction drawBrailleCharacter(\n ctx: CanvasRenderingContext2D,\n pattern: number,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n const xEighth = deviceCellWidth / 8;\n const paddingY = deviceCellHeight * 0.1;\n const usableHeight = deviceCellHeight * 0.8;\n const yEighth = usableHeight / 8;\n const radius = Math.min(xEighth, yEighth);\n\n for (let bit = 0; bit < 8; bit++) {\n if (pattern & (1 << bit)) {\n const x = brailleDotPositions[bit * 2];\n const y = brailleDotPositions[bit * 2 + 1];\n const cx = xOffset + (x + 1) * xEighth;\n const cy = yOffset + paddingY + (y + 1) * yEighth;\n ctx.beginPath();\n ctx.arc(cx, cy, radius, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n}\n\nfunction drawPathDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: CustomGlyphPathDrawFunctionDefinition | string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n strokeWidth?: number\n): void {\n const instructions = typeof charDefinition === 'string' ? charDefinition : charDefinition(0, 0);\n ctx.beginPath();\n let currentX = 0;\n let currentY = 0;\n let lastControlX = 0;\n let lastControlY = 0;\n let lastCommand = '';\n for (const instruction of instructions.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (type === 'Z') {\n ctx.closePath();\n lastCommand = type;\n continue;\n }\n if (type === 'V') {\n const y = yOffset + parseFloat(args[0]) * deviceCellHeight;\n ctx.lineTo(currentX, y);\n currentY = y;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (type === 'H') {\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n ctx.lineTo(x, currentY);\n currentX = x;\n lastControlX = currentX;\n lastControlY = currentY;\n lastCommand = type;\n continue;\n }\n if (!args[0] || !args[1]) {\n continue;\n }\n if (type === 'A') {\n // SVG arc: A rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y\n const rx = parseFloat(args[0]) * deviceCellWidth;\n const ry = parseFloat(args[1]) * deviceCellHeight;\n const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;\n const largeArcFlag = parseInt(args[3], 10);\n const sweepFlag = parseInt(args[4], 10);\n const x = xOffset + parseFloat(args[5]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[6]) * deviceCellHeight;\n drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);\n currentX = x;\n currentY = y;\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n lastControlX = currentX;\n lastControlY = currentY;\n } else if (type === 'Q') {\n ctx.quadraticCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3]);\n lastControlX = translatedArgs[0];\n lastControlY = translatedArgs[1];\n currentX = translatedArgs[2];\n currentY = translatedArgs[3];\n } else if (type === 'T') {\n // T uses reflection of last control point if previous command was Q or T\n let cpX: number;\n let cpY: number;\n if (lastCommand === 'Q' || lastCommand === 'T') {\n cpX = 2 * currentX - lastControlX;\n cpY = 2 * currentY - lastControlY;\n } else {\n cpX = currentX;\n cpY = currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, translatedArgs[0], translatedArgs[1]);\n lastControlX = cpX;\n lastControlY = cpY;\n currentX = translatedArgs[0];\n currentY = translatedArgs[1];\n } else if (type === 'C') {\n ctx.bezierCurveTo(translatedArgs[0], translatedArgs[1], translatedArgs[2], translatedArgs[3], translatedArgs[4], translatedArgs[5]);\n lastControlX = translatedArgs[2];\n lastControlY = translatedArgs[3];\n currentX = translatedArgs[4];\n currentY = translatedArgs[5];\n }\n lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n}\n\n/**\n * Converts SVG arc parameters to canvas arc/ellipse calls.\n * Based on the SVG spec's endpoint to center parameterization conversion.\n */\nfunction drawSvgArc(\n ctx: CanvasRenderingContext2D,\n x1: number, y1: number,\n rx: number, ry: number,\n phi: number,\n largeArcFlag: number,\n sweepFlag: number,\n x2: number, y2: number\n): void {\n // Handle degenerate cases\n if (rx === 0 || ry === 0) {\n ctx.lineTo(x2, y2);\n return;\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n\n // Step 1: Compute (x1', y1')\n const dx = (x1 - x2) / 2;\n const dy = (y1 - y2) / 2;\n const x1p = cosPhi * dx + sinPhi * dy;\n const y1p = -sinPhi * dx + cosPhi * dy;\n\n // Step 2: Compute (cx', cy')\n let rxSq = rx * rx;\n let rySq = ry * ry;\n const x1pSq = x1p * x1p;\n const y1pSq = y1p * y1p;\n\n // Correct radii if necessary\n const lambda = x1pSq / rxSq + y1pSq / rySq;\n if (lambda > 1) {\n const lambdaSqrt = Math.sqrt(lambda);\n rx *= lambdaSqrt;\n ry *= lambdaSqrt;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n\n let sq = (rxSq * rySq - rxSq * y1pSq - rySq * x1pSq) / (rxSq * y1pSq + rySq * x1pSq);\n if (sq < 0) sq = 0;\n const coef = (largeArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(sq);\n const cxp = coef * (rx * y1p / ry);\n const cyp = coef * -(ry * x1p / rx);\n\n // Step 3: Compute (cx, cy) from (cx', cy')\n const cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n const cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n\n // Step 4: Compute angles\n const ux = (x1p - cxp) / rx;\n const uy = (y1p - cyp) / ry;\n const vx = (-x1p - cxp) / rx;\n const vy = (-y1p - cyp) / ry;\n\n const startAngle = Math.atan2(uy, ux);\n let dTheta = Math.atan2(vy, vx) - startAngle;\n\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n } else if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n\n const endAngle = startAngle + dTheta;\n\n ctx.ellipse(cx, cy, rx, ry, phi, startAngle, endAngle, sweepFlag === 0);\n}\n\n/**\n * Draws a \"negative\" path where the background color is used to draw the shape on top of a\n * foreground-filled cell. This creates the appearance of a cutout without using actual\n * transparency, which allows SPAA (subpixel anti-aliasing) to work correctly.\n *\n * @param ctx The canvas rendering context (fillStyle should be set to foreground color)\n * @param charDefinition The vector shape definition for the negative shape\n * @param xOffset The x offset to draw at\n * @param yOffset The y offset to draw at\n * @param deviceCellWidth The width of the cell in device pixels\n * @param deviceCellHeight The height of the cell in device pixels\n * @param devicePixelRatio The device pixel ratio\n * @param backgroundColor The background color to use for the \"cutout\" portion\n */\nfunction drawPathNegativeDefinitionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n backgroundColor?: string\n): void {\n ctx.save();\n\n // First, fill the entire cell with foreground color\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n\n // Then draw the \"negative\" shape with the background color\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.strokeStyle = backgroundColor;\n }\n\n ctx.lineWidth = devicePixelRatio;\n ctx.lineCap = 'square';\n ctx.beginPath();\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n if (type === 'Z') {\n ctx.closePath();\n }\n continue;\n }\n const translatedArgs = args.map((e, i) => {\n const val = parseFloat(e);\n return i % 2 === 0\n ? xOffset + val * deviceCellWidth\n : yOffset + val * deviceCellHeight;\n });\n if (type === 'M') {\n ctx.moveTo(translatedArgs[0], translatedArgs[1]);\n } else if (type === 'L') {\n ctx.lineTo(translatedArgs[0], translatedArgs[1]);\n }\n }\n\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.stroke();\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n}\n\nconst cachedPatterns: Map> = new Map();\n\nfunction drawPatternChar(\n ctx: CanvasRenderingContext2D,\n charDefinition: number[][],\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n variantOffset: number = 0\n): void {\n let patternSet = cachedPatterns.get(charDefinition);\n if (!patternSet) {\n patternSet = new Map();\n cachedPatterns.set(charDefinition, patternSet);\n }\n const fillStyle = ctx.fillStyle;\n if (typeof fillStyle !== 'string') {\n throw new Error(`Unexpected fillStyle type \"${fillStyle}\"`);\n }\n let pattern = patternSet.get(fillStyle);\n if (!pattern) {\n const width = charDefinition[0].length;\n const height = charDefinition.length;\n // The atlas canvas can be adopted into another document, so temporary resources must not use\n // its mutable ownerDocument.\n const tmpCanvas = createPatternCanvas(width, height);\n const tmpCtx = throwIfFalsy(tmpCanvas.getContext('2d'));\n const imageData = new ImageData(width, height);\n\n // Extract rgba from fillStyle\n let r: number;\n let g: number;\n let b: number;\n let a: number;\n if (fillStyle.startsWith('#')) {\n r = parseInt(fillStyle.slice(1, 3), 16);\n g = parseInt(fillStyle.slice(3, 5), 16);\n b = parseInt(fillStyle.slice(5, 7), 16);\n a = fillStyle.length > 7 && parseInt(fillStyle.slice(7, 9), 16) || 1;\n } else if (fillStyle.startsWith('rgba')) {\n ([r, g, b, a] = fillStyle.substring(5, fillStyle.length - 1).split(',').map(e => parseFloat(e)));\n } else {\n throw new Error(`Unexpected fillStyle color format \"${fillStyle}\" when drawing pattern glyph`);\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n imageData.data[(y * width + x) * 4 ] = r;\n imageData.data[(y * width + x) * 4 + 1] = g;\n imageData.data[(y * width + x) * 4 + 2] = b;\n imageData.data[(y * width + x) * 4 + 3] = charDefinition[y][x] * (a * 255);\n }\n }\n tmpCtx.putImageData(imageData, 0, 0);\n pattern = throwIfFalsy(ctx.createPattern(tmpCanvas, null));\n patternSet.set(fillStyle, pattern);\n }\n // Apply pattern offset to ensure seamless tiling across cells when cell dimensions are odd.\n // variantOffset encodes: bit 1 = x pixel shift, bit 0 = y pixel shift.\n const dx = (variantOffset >> 1) & 1;\n const dy = variantOffset & 1;\n if (dx !== 0 || dy !== 0) {\n pattern.setTransform(new DOMMatrix().translateSelf(-dx, -dy));\n } else {\n pattern.setTransform(new DOMMatrix());\n }\n ctx.fillStyle = pattern;\n ctx.fillRect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n}\n\nfunction drawPathFunctionCharacter(\n ctx: CanvasRenderingContext2D,\n charDefinition: string | ((xp: number, yp: number) => string),\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n devicePixelRatio: number,\n logService: ILogService,\n strokeWidth?: number\n): void {\n ctx.save();\n ctx.beginPath();\n ctx.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip();\n\n ctx.beginPath();\n let actualInstructions: string;\n if (typeof charDefinition === 'function') {\n const xp = .15;\n const yp = .15 / deviceCellHeight * deviceCellWidth;\n actualInstructions = charDefinition(xp, yp);\n } else {\n actualInstructions = charDefinition;\n }\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of actualInstructions.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(args, deviceCellWidth, deviceCellHeight, xOffset, yOffset, true, devicePixelRatio, 0, 0, false), state);\n state.lastCommand = type;\n }\n if (strokeWidth !== undefined) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.lineWidth = devicePixelRatio * strokeWidth;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n ctx.restore();\n}\n\n/**\n * Applies a clip path to the canvas context from SVG-like path instructions.\n */\nfunction applyClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: string,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number\n): void {\n ctx.beginPath();\n for (const instruction of clipPath.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n const x = xOffset + parseFloat(args[0]) * deviceCellWidth;\n const y = yOffset + parseFloat(args[1]) * deviceCellHeight;\n if (type === 'M') {\n ctx.moveTo(x, y);\n } else if (type === 'L') {\n ctx.lineTo(x, y);\n }\n }\n ctx.clip();\n}\n\nfunction drawVectorShape(\n ctx: CanvasRenderingContext2D,\n charDefinition: ICustomGlyphVectorShape,\n xOffset: number,\n yOffset: number,\n deviceCellWidth: number,\n deviceCellHeight: number,\n fontSize: number,\n devicePixelRatio: number,\n logService: ILogService\n): void {\n // Clip the cell to make sure drawing doesn't occur beyond bounds\n const clipRegion = new Path2D();\n clipRegion.rect(xOffset, yOffset, deviceCellWidth, deviceCellHeight);\n ctx.clip(clipRegion);\n\n ctx.beginPath();\n // Scale the stroke with DPR and font size\n const cssLineWidth = fontSize / 12;\n ctx.lineWidth = devicePixelRatio * cssLineWidth;\n const state: ISvgPathState = { currentX: 0, currentY: 0, lastControlX: 0, lastControlY: 0, lastCommand: '' };\n for (const instruction of charDefinition.d.split(' ')) {\n const type = instruction[0];\n if (type === 'Z') {\n ctx.closePath();\n state.lastCommand = type;\n continue;\n }\n const f = svgToCanvasInstructionMap[type];\n if (!f) {\n logService.error(`Could not find drawing instructions for \"${type}\"`);\n continue;\n }\n const args: string[] = instruction.substring(1).split(',');\n if (!args[0] || !args[1]) {\n continue;\n }\n f(ctx, translateArgs(\n args,\n deviceCellWidth,\n deviceCellHeight,\n xOffset,\n yOffset,\n false,\n devicePixelRatio,\n (charDefinition.leftPadding ?? 0) * (cssLineWidth / 2),\n (charDefinition.rightPadding ?? 0) * (cssLineWidth / 2)\n ), state);\n state.lastCommand = type;\n }\n if (charDefinition.type === CustomGlyphVectorType.STROKE) {\n ctx.strokeStyle = ctx.fillStyle;\n ctx.stroke();\n } else {\n ctx.fill();\n }\n ctx.closePath();\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n\ninterface ISvgPathState {\n currentX: number;\n currentY: number;\n lastControlX: number;\n lastControlY: number;\n lastCommand: string;\n}\n\nconst svgToCanvasInstructionMap: { [index: string]: (ctx: CanvasRenderingContext2D, args: number[], state: ISvgPathState) => void } = {\n 'C': (ctx, args, state) => {\n ctx.bezierCurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n state.lastControlX = args[2];\n state.lastControlY = args[3];\n state.currentX = args[4];\n state.currentY = args[5];\n },\n 'L': (ctx, args, state) => {\n ctx.lineTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'M': (ctx, args, state) => {\n ctx.moveTo(args[0], args[1]);\n state.lastControlX = state.currentX = args[0];\n state.lastControlY = state.currentY = args[1];\n },\n 'Q': (ctx, args, state) => {\n ctx.quadraticCurveTo(args[0], args[1], args[2], args[3]);\n state.lastControlX = args[0];\n state.lastControlY = args[1];\n state.currentX = args[2];\n state.currentY = args[3];\n },\n 'T': (ctx, args, state) => {\n let cpX: number;\n let cpY: number;\n if (state.lastCommand === 'Q' || state.lastCommand === 'T') {\n cpX = 2 * state.currentX - state.lastControlX;\n cpY = 2 * state.currentY - state.lastControlY;\n } else {\n cpX = state.currentX;\n cpY = state.currentY;\n }\n ctx.quadraticCurveTo(cpX, cpY, args[0], args[1]);\n state.lastControlX = cpX;\n state.lastControlY = cpY;\n state.currentX = args[0];\n state.currentY = args[1];\n }\n};\n\nfunction translateArgs(args: string[], cellWidth: number, cellHeight: number, xOffset: number, yOffset: number, doClamp: boolean, devicePixelRatio: number, leftPadding: number = 0, rightPadding: number = 0, clampToCell: boolean = true): number[] {\n const result = args.map(e => parseFloat(e) || parseInt(e));\n\n if (result.length < 2) {\n throw new Error('Too few arguments for instruction');\n }\n\n for (let x = 0; x < result.length; x += 2) {\n // Translate from 0-1 to 0-cellWidth\n result[x] *= cellWidth - (leftPadding * devicePixelRatio) - (rightPadding * devicePixelRatio);\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[x] !== 0) {\n const rounded = Math.round(result[x] + 0.5) - 0.5;\n result[x] = clampToCell ? clamp(rounded, cellWidth, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellWidth)\n result[x] += xOffset + (leftPadding * devicePixelRatio);\n }\n\n for (let y = 1; y < result.length; y += 2) {\n // Translate from 0-1 to 0-cellHeight\n result[y] *= cellHeight;\n // Round to the nearest 0.5 to ensure a crisp line at 100% devicePixelRatio, and optionally\n // clamp to the cell bounds.\n if (doClamp && result[y] !== 0) {\n const rounded = Math.round(result[y] + 0.5) - 0.5;\n result[y] = clampToCell ? clamp(rounded, cellHeight, 0) : rounded;\n }\n // Apply the cell's offset (ie. x*cellHeight)\n result[y] += yOffset;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { FontWeight } from '@xterm/xterm';\nimport { IColorContrastCache } from 'browser/Types';\nimport { DIM_OPACITY, TEXT_BASELINE } from './Constants';\nimport { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';\nimport { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';\nimport { NULL_COLOR, channels, color, rgba } from 'common/Color';\nimport { FourKeyMap } from 'common/MultiKeyMap';\nimport { IdleTaskQueue } from 'common/TaskQueue';\nimport { IColor } from 'common/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants';\nimport { ILogService, IUnicodeService } from 'common/services/Services';\nimport { Emitter } from 'common/Event';\n\n/**\n * A shared object which is used to draw nothing for a particular cell.\n */\nconst NULL_RASTERIZED_GLYPH: IRasterizedGlyph = {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n offset: { x: 0, y: 0 },\n size: { x: 0, y: 0 },\n sizeClipSpace: { x: 0, y: 0 }\n};\n\nconst TMP_CANVAS_GLYPH_PADDING = 2;\n\nconst enum Constants {\n /**\n * The amount of pixel padding to allow in each row. Setting this to zero would make the atlas\n * page pack as tightly as possible, but more pages would end up being created as a result.\n */\n ROW_PIXEL_THRESHOLD = 2,\n /**\n * The maximum texture size regardless of what the actual hardware maximum turns out to be. This\n * is enforced to ensure uploading the texture still finishes in a reasonable amount of time. A\n * 4096 squared image takes up 16MB of GPU memory.\n */\n FORCED_MAX_TEXTURE_SIZE = 4096\n}\n\ninterface ICharAtlasActiveRow {\n x: number;\n y: number;\n height: number;\n}\n\n// Work variables to avoid garbage collection\nlet $glyph = undefined;\n\nexport class TextureAtlas implements ITextureAtlas {\n private _didWarmUp: boolean = false;\n\n private _cacheMap: FourKeyMap = new FourKeyMap();\n private _cacheMapCombined: FourKeyMap = new FourKeyMap();\n\n // The texture that the atlas is drawn to\n private _pages: AtlasPage[] = [];\n public get pages(): { canvas: HTMLCanvasElement, version: number }[] { return this._pages; }\n\n // The set of atlas pages that can be written to\n private _activePages: AtlasPage[] = [];\n private _overflowSizePage: AtlasPage | undefined;\n\n private _tmpCanvas: HTMLCanvasElement;\n // A temporary context that glyphs are drawn to before being transferred to the atlas.\n private _tmpCtx: CanvasRenderingContext2D;\n\n private _workBoundingBox: IBoundingBox = { top: 0, left: 0, bottom: 0, right: 0 };\n private _workAttributeData: AttributeData = new AttributeData();\n\n private _textureSize: number = 512;\n\n public static maxAtlasPages: number | undefined;\n public static maxTextureSize: number | undefined;\n\n private readonly _onAddTextureAtlasCanvas = new Emitter();\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = new Emitter();\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n\n constructor(\n private readonly _document: Document,\n private readonly _config: ICharAtlasConfig,\n private readonly _unicodeService: IUnicodeService,\n private readonly _logService: ILogService\n ) {\n this._createNewPage();\n this._tmpCanvas = createCanvas(\n _document,\n this._config.deviceCellWidth * 4 + TMP_CANVAS_GLYPH_PADDING * 2,\n this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 2\n );\n this._tmpCtx = throwIfFalsy(this._tmpCanvas.getContext('2d', {\n alpha: this._config.allowTransparency,\n willReadFrequently: true\n }));\n }\n\n public dispose(): void {\n this._tmpCanvas.remove();\n for (const page of this.pages) {\n page.canvas.remove();\n }\n this._onAddTextureAtlasCanvas.dispose();\n this._onRemoveTextureAtlasCanvas.dispose();\n }\n\n public warmUp(): void {\n if (!this._didWarmUp) {\n this._doWarmUp();\n this._didWarmUp = true;\n }\n }\n\n private _doWarmUp(): void {\n // Pre-fill with ASCII 33-126, this is not urgent and done in idle callbacks\n const queue = new IdleTaskQueue(this._logService);\n for (let i = 33; i < 126; i++) {\n queue.enqueue(() => {\n if (!this._cacheMap.get(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT)) {\n const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, false, undefined);\n this._cacheMap.set(i, DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_EXT, rasterizedGlyph);\n }\n });\n }\n }\n\n private _pageLayoutVersion = 0;\n public get pageLayoutVersion(): number { return this._pageLayoutVersion; }\n\n // Orca diagnostics: read by terminal-render-desync-weight-probe.ts to tell a real\n // bold-collapse from a repaint problem. Canvas silently keeps its previous font when an\n // assignment fails to parse, which rasterizes glyphs at a stale weight.\n public fontProbeMismatchCount = 0;\n public fontProbeLastMismatch: { desired: string, actual: string } | undefined;\n\n public clearTexture(): void {\n // Guard on every page rather than pages[0]: a merged page is never written through\n // currentRow, so once one lands at index 0 the old check made every later clear a no-op.\n if (this._pages.every(page => page.glyphs.length === 0 && page.currentRow.x === 0 && page.currentRow.y === 0)) {\n return;\n }\n // Return the atlas to its constructor state instead of clearing in place: page.clear() leaves\n // page.glyphs populated, which would keep the guard above from ever firing again. Eviction\n // also bumps _pageLayoutVersion, so every renderer sharing this atlas rebuilds its model.\n this._evictAllPages();\n this._createNewPage();\n }\n\n private _createNewPage(): AtlasPage {\n // Try merge the set of the 4 most used pages of the largest size. This is deferred to a\n // microtask to ensure it does not interrupt textures that will be rendered in the current\n // animation frame which would result in blank rendered areas. This is actually not that\n // expensive relative to drawing the glyphs, so there is no need to wait for an idle callback.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= Math.max(4, TextureAtlas.maxAtlasPages)) {\n // Find the set of the largest 4 images, below the maximum size, with the highest\n // percentages used\n const pagesBySize = this._pages.filter(e => {\n return e.canvas.width * 2 <= (TextureAtlas.maxTextureSize || Constants.FORCED_MAX_TEXTURE_SIZE);\n }).sort((a, b) => {\n if (b.canvas.width !== a.canvas.width) {\n return b.canvas.width - a.canvas.width;\n }\n return b.percentageUsed - a.percentageUsed;\n });\n let sameSizeI = -1;\n let size = 0;\n for (let i = 0; i < pagesBySize.length; i++) {\n if (pagesBySize[i].canvas.width !== size) {\n sameSizeI = i;\n size = pagesBySize[i].canvas.width;\n } else if (i - sameSizeI === 3) {\n break;\n }\n }\n\n // Gather details of the merge\n const mergingPages = pagesBySize.slice(sameSizeI, sameSizeI + 4);\n\n // Only proceed with merge if we have exactly 4 same-sized pages. If not, we cannot\n // effectively reduce page count and merging would cause issues.\n if (mergingPages.length < 4 || mergingPages.some(p => p.canvas.width !== mergingPages[0].canvas.width)) {\n // Evict instead of adding a page beyond the renderer's texture capacity.\n this._evictAllPages();\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n const sortedMergingPagesIndexes = mergingPages.map(e => e.glyphs[0].texturePage).sort((a, b) => a - b);\n const mergedPageIndex = this.pages.length - mergingPages.length;\n\n // Merge into the new page\n const mergedPage = this._mergePages(mergingPages, mergedPageIndex);\n mergedPage.version = ++AtlasPage.nextVersion;\n\n // Delete the pages, shifting glyph texture pages as needed\n for (let i = sortedMergingPagesIndexes.length - 1; i >= 0; i--) {\n this._deletePage(sortedMergingPagesIndexes[i]);\n }\n\n // Add the new merged page to the end\n this.pages.push(mergedPage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(mergedPage.canvas);\n }\n\n // All new atlas pages are created small as they are highly dynamic\n const newPage = new AtlasPage(this._document, this._textureSize);\n this._pages.push(newPage);\n this._activePages.push(newPage);\n this._onAddTextureAtlasCanvas.fire(newPage.canvas);\n return newPage;\n }\n\n private _mergePages(mergingPages: AtlasPage[], mergedPageIndex: number): AtlasPage {\n const mergedSize = mergingPages[0].canvas.width * 2;\n const mergedPage = new AtlasPage(this._document, mergedSize, mergingPages);\n for (const [i, p] of mergingPages.entries()) {\n const xOffset = i * p.canvas.width % mergedSize;\n const yOffset = Math.floor(i / 2) * p.canvas.height;\n mergedPage.ctx.drawImage(p.canvas, xOffset, yOffset);\n for (const g of p.glyphs) {\n g.texturePage = mergedPageIndex;\n g.sizeClipSpace.x = g.size.x / mergedSize;\n g.sizeClipSpace.y = g.size.y / mergedSize;\n g.texturePosition.x += xOffset;\n g.texturePosition.y += yOffset;\n g.texturePositionClipSpace.x = g.texturePosition.x / mergedSize;\n g.texturePositionClipSpace.y = g.texturePosition.y / mergedSize;\n }\n\n this._onRemoveTextureAtlasCanvas.fire(p.canvas);\n\n // Remove the merging page from active pages if it was there\n const index = this._activePages.indexOf(p);\n if (index !== -1) {\n this._activePages.splice(index, 1);\n }\n }\n return mergedPage;\n }\n\n private _deletePage(pageIndex: number): void {\n this._pages.splice(pageIndex, 1);\n for (let j = pageIndex; j < this._pages.length; j++) {\n const adjustingPage = this._pages[j];\n for (const g of adjustingPage.glyphs) {\n g.texturePage--;\n }\n adjustingPage.version = ++AtlasPage.nextVersion;\n }\n }\n\n private _evictAllPages(): void {\n const startTime = performance.now();\n const pageCount = this._pages.length;\n for (const page of this._pages) {\n this._onRemoveTextureAtlasCanvas.fire(page.canvas);\n page.canvas.remove();\n }\n this._pages.length = 0;\n this._activePages.length = 0;\n this._overflowSizePage = undefined;\n this._cacheMap.clear();\n this._cacheMapCombined.clear();\n this._didWarmUp = false;\n this._pageLayoutVersion++;\n this._logService.debug(`Evicted ${pageCount} WebGL atlas pages in ${(performance.now() - startTime).toFixed(2)}ms`);\n }\n\n public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMapCombined, chars, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n public getRasterizedGlyph(code: number, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n return this._getFromCacheMap(this._cacheMap, code, bg, fg, ext, restrictToCellHeight, domContainer);\n }\n\n /**\n * Gets the glyphs texture coords, drawing the texture if it's not already\n */\n private _getFromCacheMap(\n cacheMap: FourKeyMap,\n key: string | number,\n bg: number,\n fg: number,\n ext: number,\n restrictToCellHeight: boolean,\n domContainer: HTMLElement | undefined\n ): IRasterizedGlyph {\n $glyph = cacheMap.get(key, bg, fg, ext);\n if (!$glyph) {\n $glyph = this._drawToCache(key, bg, fg, ext, restrictToCellHeight, domContainer);\n cacheMap.set(key, bg, fg, ext, $glyph);\n }\n return $glyph;\n }\n\n private _getColorFromAnsiIndex(idx: number): IColor {\n if (idx >= this._config.colors.ansi.length) {\n throw new Error('No color found for idx ' + idx);\n }\n return this._config.colors.ansi[idx];\n }\n\n private _getBackgroundColor(bgColorMode: number, bgColor: number, inverse: boolean, dim: boolean): IColor {\n if (this._config.allowTransparency) {\n // The background color might have some transparency, so we need to render it as fully\n // transparent in the atlas. Otherwise we'd end up drawing the transparent background twice\n // around the anti-aliased edges of the glyph, and it would look too dark.\n return NULL_COLOR;\n }\n\n let result: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n result = this._getColorFromAnsiIndex(bgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(bgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = color.opaque(this._config.colors.foreground);\n } else {\n result = this._config.colors.background;\n }\n break;\n }\n\n // Ignore alpha channel when allowTransparency is false\n if (!this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n return result;\n }\n\n private _getForegroundColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, dim: boolean, bold: boolean, excludeFromContrastRatioDemands: boolean): IColor {\n const minimumContrastColor = this._getMinimumContrastColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold, dim, excludeFromContrastRatioDemands);\n if (minimumContrastColor) {\n return minimumContrastColor;\n }\n\n let result: IColor;\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n result = this._getColorFromAnsiIndex(fgColor);\n break;\n case Attributes.CM_RGB:\n const arr = AttributeData.toColorRGB(fgColor);\n result = channels.toColor(arr[0], arr[1], arr[2]);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n result = this._config.colors.background;\n } else {\n result = this._config.colors.foreground;\n }\n }\n\n // Always use an opaque color regardless of allowTransparency\n if (this._config.allowTransparency) {\n result = color.opaque(result);\n }\n\n // Apply dim to the color, opacity is fine to use for the foreground color\n if (dim) {\n result = color.multiplyOpacity(result, DIM_OPACITY);\n }\n\n return result;\n }\n\n private _resolveBackgroundRgba(bgColorMode: number, bgColor: number, inverse: boolean): number {\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n return this._getColorFromAnsiIndex(bgColor).rgba;\n case Attributes.CM_RGB:\n return bgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.foreground.rgba;\n }\n return this._config.colors.background.rgba;\n }\n }\n\n private _resolveForegroundRgba(fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean): number {\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (this._config.drawBoldTextInBrightColors && bold && fgColor < 8) {\n fgColor += 8;\n }\n return this._getColorFromAnsiIndex(fgColor).rgba;\n case Attributes.CM_RGB:\n return fgColor << 8;\n case Attributes.CM_DEFAULT:\n default:\n if (inverse) {\n return this._config.colors.background.rgba;\n }\n return this._config.colors.foreground.rgba;\n }\n }\n\n private _getMinimumContrastColor(bg: number, bgColorMode: number, bgColor: number, fg: number, fgColorMode: number, fgColor: number, inverse: boolean, bold: boolean, dim: boolean, excludeFromContrastRatioDemands: boolean): IColor | undefined {\n if (this._config.minimumContrastRatio === 1 || excludeFromContrastRatioDemands) {\n return undefined;\n }\n\n // Try get from cache first\n const cache = this._getContrastCache(dim);\n const adjustedColor = cache.getColor(bg, fg);\n if (adjustedColor !== undefined) {\n return adjustedColor ?? undefined;\n }\n\n const bgRgba = this._resolveBackgroundRgba(bgColorMode, bgColor, inverse);\n const fgRgba = this._resolveForegroundRgba(fgColorMode, fgColor, inverse, bold);\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const result = rgba.ensureContrastRatio(bgRgba, fgRgba, this._config.minimumContrastRatio / (dim ? 2 : 1));\n\n if (!result) {\n cache.setColor(bg, fg, null);\n return undefined;\n }\n\n const color = channels.toColor(\n (result >> 24) & 0xFF,\n (result >> 16) & 0xFF,\n (result >> 8) & 0xFF\n );\n cache.setColor(bg, fg, color);\n\n return color;\n }\n\n private _getContrastCache(dim: boolean): IColorContrastCache {\n if (dim) {\n return this._config.colors.halfContrastCache;\n }\n return this._config.colors.contrastCache;\n }\n\n /**\n * Orca diagnostic. Canvas ignores a font assignment it cannot parse and silently keeps the\n * previous value, so a bad family or weight rasterizes every glyph at a stale weight. Record\n * the mismatch rather than correcting it: the goal is to tell that failure apart from a\n * repaint bug when a terminal renders bold-collapsed.\n */\n private _probeRasterizationFontWeight(fontWeight: FontWeight): void {\n const desired = String(fontWeight);\n // Only numeric weights are comparable; keywords round-trip through Canvas unchanged.\n if (!/^(?:[1-8]\\d{2}|900)$/.test(desired)) {\n return;\n }\n // Canvas normalizes font serialization: Chromium omits 400 and emits the keyword bold for 700.\n const token = this._tmpCtx.font.match(\n /(?:^|\\s)(normal|bold|[1-9]\\d{0,3})(?=\\s+\\d+(?:\\.\\d+)?px(?:\\s|$))/\n )?.[1] ?? '400';\n const actual = token === 'normal' ? '400' : token === 'bold' ? '700' : token;\n if (actual === desired) {\n return;\n }\n this.fontProbeMismatchCount++;\n this.fontProbeLastMismatch = { desired, actual: this._tmpCtx.font };\n try {\n (globalThis as { __orcaAtlasFontProbe?: (mismatch: { desired: string, actual: string }) => void })\n .__orcaAtlasFontProbe?.(this.fontProbeLastMismatch);\n } catch {\n // Diagnostics only; a throwing listener must never break rasterization.\n }\n }\n\n private _drawToCache(codeOrChars: number | string, bg: number, fg: number, ext: number, restrictToCellHeight: boolean, domContainer: HTMLElement | undefined): IRasterizedGlyph {\n const chars = typeof codeOrChars === 'number' ? String.fromCharCode(codeOrChars) : codeOrChars;\n\n // Uncomment for debugging\n // console.log(`draw to cache \"${chars}\"`, bg, fg, ext);\n\n // Attach the canvas to the DOM in order to inherit font-feature-settings\n // from the parent elements. This is necessary for ligatures and variants to\n // work.\n if (domContainer && this._tmpCanvas.parentElement !== domContainer) {\n this._tmpCanvas.style.display = 'none';\n domContainer.append(this._tmpCanvas);\n }\n\n // Allow 1 cell width per character, with a minimum of 2 (CJK), plus some padding. This is used\n // to draw the glyph to the canvas as well as to restrict the bounding box search to ensure\n // giant ligatures (eg. =====>) don't impact overall performance.\n const allowedWidth = Math.min(this._config.deviceCellWidth * Math.max(chars.length, 2) + TMP_CANVAS_GLYPH_PADDING * 2, this._config.deviceMaxTextureSize);\n if (this._tmpCanvas.width < allowedWidth) {\n this._tmpCanvas.width = allowedWidth;\n }\n // Include line height when drawing glyphs\n const allowedHeight = Math.min(this._config.deviceCellHeight + TMP_CANVAS_GLYPH_PADDING * 4, this._textureSize);\n if (this._tmpCanvas.height < allowedHeight) {\n this._tmpCanvas.height = allowedHeight;\n }\n this._tmpCtx.save();\n\n this._workAttributeData.fg = fg;\n this._workAttributeData.bg = bg;\n this._workAttributeData.extended.ext = ext;\n\n const invisible = !!this._workAttributeData.isInvisible();\n if (invisible) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const bold = !!this._workAttributeData.isBold();\n const inverse = !!this._workAttributeData.isInverse();\n const dim = !!this._workAttributeData.isDim();\n const italic = !!this._workAttributeData.isItalic();\n const underline = !!this._workAttributeData.isUnderline();\n const strikethrough = !!this._workAttributeData.isStrikethrough();\n const overline = !!this._workAttributeData.isOverline();\n let fgColor = this._workAttributeData.getFgColor();\n let fgColorMode = this._workAttributeData.getFgColorMode();\n let bgColor = this._workAttributeData.getBgColor();\n let bgColorMode = this._workAttributeData.getBgColorMode();\n if (inverse) {\n const temp = fgColor;\n fgColor = bgColor;\n bgColor = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // draw the background\n const backgroundColor = this._getBackgroundColor(bgColorMode, bgColor, inverse, dim);\n // Use a 'copy' composite operation to clear any existing glyph out of _tmpCtxWithAlpha,\n // regardless of transparency in backgroundColor\n this._tmpCtx.globalCompositeOperation = 'copy';\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.globalCompositeOperation = 'source-over';\n\n // draw the foreground/glyph\n const fontWeight = bold ? this._config.fontWeightBold : this._config.fontWeight;\n const fontStyle = italic ? 'italic' : '';\n this._tmpCtx.font =\n `${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;\n this._probeRasterizationFontWeight(fontWeight);\n this._tmpCtx.textBaseline = TEXT_BASELINE;\n\n const powerlineGlyph = chars.length === 1 && isPowerlineGlyph(chars.charCodeAt(0));\n const restrictedPowerlineGlyph = chars.length === 1 && isRestrictedPowerlineGlyph(chars.charCodeAt(0));\n const foregroundColor = this._getForegroundColor(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, dim, bold, treatGlyphAsBackgroundColor(chars.charCodeAt(0)));\n this._tmpCtx.fillStyle = foregroundColor.css;\n\n // For powerline glyphs left/top padding is excluded (https://github.com/microsoft/vscode/issues/120129)\n const padding = restrictedPowerlineGlyph ? 0 : TMP_CANVAS_GLYPH_PADDING * 2;\n\n // Draw custom characters if applicable\n let customGlyph = false;\n if (this._config.customGlyphs !== false) {\n const variantOffset = this._workAttributeData.getUnderlineVariantOffset();\n customGlyph = tryDrawCustomGlyph(this._tmpCtx, chars, padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight, this._config.deviceCharWidth, this._config.deviceCharHeight, this._config.fontSize, this._config.devicePixelRatio, this._logService, backgroundColor.css, variantOffset);\n }\n\n // Whether to clear pixels based on a threshold difference between the glyph color and the\n // background color. This should be disabled when the glyph contains multiple colors such as\n // underline colors to prevent important colors could get cleared.\n let enableClearThresholdCheck = !powerlineGlyph;\n\n let chWidth: number;\n if (typeof codeOrChars === 'number') {\n chWidth = this._unicodeService.wcwidth(codeOrChars);\n } else {\n chWidth = this._unicodeService.getStringCellWidth(codeOrChars);\n }\n\n // Draw underline\n if (underline) {\n this._tmpCtx.save();\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n // When the line width is odd, draw at a 0.5 position\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n\n // Underline color\n if (this._workAttributeData.isUnderlineColorDefault()) {\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n } else if (this._workAttributeData.isUnderlineColorRGB()) {\n enableClearThresholdCheck = false;\n this._tmpCtx.strokeStyle = `rgb(${AttributeData.toColorRGB(this._workAttributeData.getUnderlineColor()).join(',')})`;\n } else {\n enableClearThresholdCheck = false;\n let fg = this._workAttributeData.getUnderlineColor();\n if (this._config.drawBoldTextInBrightColors && this._workAttributeData.isBold() && fg < 8) {\n fg += 8;\n }\n this._tmpCtx.strokeStyle = this._getColorFromAnsiIndex(fg).css;\n }\n this._tmpCtx.fillStyle = this._tmpCtx.strokeStyle;\n\n // Underline style/stroke\n this._tmpCtx.beginPath();\n const xLeft = padding;\n const yTopDefault = Math.ceil(padding + this._config.deviceCharHeight) - yOffset - (restrictToCellHeight ? lineWidth * 2 : 0);\n const yBotDefault = yTopDefault + lineWidth * 2;\n let nextOffset = this._workAttributeData.getUnderlineVariantOffset();\n let yTop = 0;\n let yBot = 0;\n\n for (let i = 0; i < chWidth; i++) {\n let wasFilled = false;\n this._tmpCtx.save();\n yTop = yTopDefault;\n yBot = yBotDefault;\n const xChLeft = xLeft + i * this._config.deviceCellWidth;\n const xChRight = xLeft + (i + 1) * this._config.deviceCellWidth;\n switch (this._workAttributeData.extended.underlineStyle) {\n case UnderlineStyle.DOUBLE:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n this._tmpCtx.moveTo(xChLeft, yBotDefault);\n this._tmpCtx.lineTo(xChRight, yBotDefault);\n break;\n case UnderlineStyle.CURLY:\n yTop = this._config.deviceCharHeight + 1;\n yBot = yTop + 3 * this._config.devicePixelRatio;\n\n const clipRegion = new Path2D();\n clipRegion.rect(xChLeft, yTop, this._config.deviceCellWidth, yBot - yTop);\n this._tmpCtx.clip(clipRegion);\n\n // Draw a zigzag pattern, this is derived from the SVG used in monaco for the same\n // style. The viewbox is 6x3 so scale it using that.\n const cellW = this._config.deviceCellWidth;\n const curlyH = (yBot - yTop);\n const scaleX = cellW / 6;\n const scaleY = curlyH / 3;\n\n const polygons: number[][] = [\n [0, 2, 1, 3, 2.4, 3, 0, 0.6],\n [5.5, 0, 2.5, 3, 1.1, 3, 4.1, 0],\n [4, 0, 6, 2, 6, 0.6, 5.4, 0],\n ];\n\n for (const polygon of polygons) {\n this._tmpCtx.beginPath();\n for (let i = 0; i < polygon.length; i += 2) {\n const x = xChLeft + polygon[i] * scaleX;\n const y = yBot - polygon[i + 1] * scaleY;\n if (i === 0) {\n this._tmpCtx.moveTo(x, y);\n } else {\n this._tmpCtx.lineTo(x, y);\n }\n }\n this._tmpCtx.closePath();\n this._tmpCtx.fill();\n }\n wasFilled = true;\n break;\n case UnderlineStyle.DOTTED:\n const offsetWidth = nextOffset === 0 ? 0 :\n (nextOffset >= lineWidth ? lineWidth * 2 - nextOffset : lineWidth - nextOffset);\n // a line and a gap.\n const isLineStart = nextOffset >= lineWidth ? false : true;\n if (isLineStart === false || offsetWidth === 0) {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n } else {\n this._tmpCtx.setLineDash([Math.round(lineWidth), Math.round(lineWidth)]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChLeft + offsetWidth, yTopDefault);\n this._tmpCtx.moveTo(xChLeft + offsetWidth + lineWidth, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n }\n nextOffset = computeNextVariantOffset(xChRight - xChLeft, lineWidth, nextOffset);\n break;\n case UnderlineStyle.DASHED:\n const lineRatio = 0.6;\n const gapRatio = 0.3;\n // End line ratio is approximately equal to 0.1\n const xChWidth = xChRight - xChLeft;\n const line = Math.floor(lineRatio * xChWidth);\n const gap = Math.floor(gapRatio * xChWidth);\n const end = xChWidth - line - gap;\n this._tmpCtx.setLineDash([line, gap, end]);\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n case UnderlineStyle.SINGLE:\n default:\n this._tmpCtx.moveTo(xChLeft, yTopDefault);\n this._tmpCtx.lineTo(xChRight, yTopDefault);\n break;\n }\n if (!wasFilled) {\n this._tmpCtx.stroke();\n }\n this._tmpCtx.restore();\n }\n this._tmpCtx.restore();\n\n // Draw stroke in the background color for non custom characters in order to give an outline\n // between the text and the underline. Only do this when font size is >= 12 as the underline\n // looks odd when the font size is too small\n if (!customGlyph && this._config.fontSize >= 12) {\n // This only works when transparency is disabled because it's not clear how to clear stroked\n // text\n if (!this._config.allowTransparency && chars !== ' ') {\n // Measure the text, only draw the stroke if there is a descent beyond an alphabetic text\n // baseline\n this._tmpCtx.save();\n this._tmpCtx.textBaseline = 'alphabetic';\n const metrics = this._tmpCtx.measureText(chars);\n this._tmpCtx.restore();\n if ('actualBoundingBoxDescent' in metrics && metrics.actualBoundingBoxDescent > 0) {\n // This translates to 1/2 the line width in either direction\n this._tmpCtx.save();\n // Clip the region to only draw in valid pixels near the underline to avoid a slight\n // outline around the whole glyph, as well as additional pixels in the glyph at the top\n // which would increase GPU memory demands\n const clipRegion = new Path2D();\n clipRegion.rect(xLeft, yTop - Math.ceil(lineWidth / 2), this._config.deviceCellWidth * chWidth, yBot - yTop + Math.ceil(lineWidth / 2));\n this._tmpCtx.clip(clipRegion);\n this._tmpCtx.lineWidth = this._config.devicePixelRatio * 3;\n this._tmpCtx.strokeStyle = backgroundColor.css;\n this._tmpCtx.strokeText(chars, padding, padding + this._config.deviceCharHeight);\n this._tmpCtx.restore();\n }\n }\n }\n }\n\n // Overline\n if (overline) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 15));\n const yOffset = lineWidth % 2 === 1 ? 0.5 : 0;\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + yOffset);\n this._tmpCtx.stroke();\n }\n\n // Draw the character\n if (!customGlyph) {\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight);\n }\n\n // If this character is underscore and beyond the cell bounds, shift it up until it is visible\n // even on the bottom row, try for a maximum of 5 pixels.\n if (chars === '_' && !this._config.allowTransparency) {\n let isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (isBeyondCellBounds) {\n for (let offset = 1; offset <= 5; offset++) {\n this._tmpCtx.save();\n this._tmpCtx.fillStyle = backgroundColor.css;\n this._tmpCtx.fillRect(0, 0, this._tmpCanvas.width, this._tmpCanvas.height);\n this._tmpCtx.restore();\n this._tmpCtx.fillText(chars, padding, padding + this._config.deviceCharHeight - offset);\n isBeyondCellBounds = clearColor(this._tmpCtx.getImageData(padding, padding, this._config.deviceCellWidth, this._config.deviceCellHeight), backgroundColor, foregroundColor, enableClearThresholdCheck);\n if (!isBeyondCellBounds) {\n break;\n }\n }\n }\n }\n\n // Draw strokethrough\n if (strikethrough) {\n const lineWidth = Math.max(1, Math.floor(this._config.fontSize * this._config.devicePixelRatio / 10));\n const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position\n this._tmpCtx.lineWidth = lineWidth;\n this._tmpCtx.strokeStyle = this._tmpCtx.fillStyle;\n this._tmpCtx.beginPath();\n this._tmpCtx.moveTo(padding, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.lineTo(padding + this._config.deviceCharWidth * chWidth, padding + Math.floor(this._config.deviceCharHeight / 2) - yOffset);\n this._tmpCtx.stroke();\n }\n\n this._tmpCtx.restore();\n\n // clear the background from the character to avoid issues with drawing over the previous\n // character if it extends past it's bounds\n const imageData = this._tmpCtx.getImageData(\n 0, 0, this._tmpCanvas.width, this._tmpCanvas.height\n );\n\n // Clear out the background color and determine if the glyph is empty.\n let isEmpty: boolean;\n if (!this._config.allowTransparency) {\n isEmpty = clearColor(imageData, backgroundColor, foregroundColor, enableClearThresholdCheck);\n } else {\n isEmpty = checkCompletelyTransparent(imageData);\n }\n\n // Handle empty glyphs\n if (isEmpty) {\n return NULL_RASTERIZED_GLYPH;\n }\n\n const rasterizedGlyph = this._findGlyphBoundingBox(imageData, this._workBoundingBox, allowedWidth, restrictedPowerlineGlyph, customGlyph, padding);\n\n // Find the best atlas row to use\n let activePage: AtlasPage;\n let activeRow: ICharAtlasActiveRow;\n while (true) {\n // If there are no active pages (the last smallest 4 were merged), create a new one\n if (this._activePages.length === 0) {\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n break;\n }\n\n // Get the best current row from all active pages\n activePage = this._activePages[this._activePages.length - 1];\n activeRow = activePage.currentRow;\n for (const p of this._activePages) {\n if (rasterizedGlyph.size.y <= p.currentRow.height) {\n activePage = p;\n activeRow = p.currentRow;\n }\n }\n\n // TODO: This algorithm could be simplified:\n // - Search for the page with ROW_PIXEL_THRESHOLD in mind\n // - Keep track of current/fixed rows in a Map\n\n // Replace the best current row with a fixed row if there is one at least as good as the\n // current row. Search in reverse to prioritize filling in older pages.\n for (let i = this._activePages.length - 1; i >= 0; i--) {\n for (const row of this._activePages[i].fixedRows) {\n if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {\n activePage = this._activePages[i];\n activeRow = row;\n }\n }\n }\n\n // Create a new page for oversized glyphs as they come up\n if (rasterizedGlyph.size.x > this._textureSize) {\n if (!this._overflowSizePage) {\n // Make room for the oversized page without exceeding texture capacity.\n if (TextureAtlas.maxAtlasPages && this._pages.length >= TextureAtlas.maxAtlasPages) {\n this._evictAllPages();\n }\n this._overflowSizePage = new AtlasPage(this._document, this._config.deviceMaxTextureSize);\n this.pages.push(this._overflowSizePage);\n\n // Invalidate renderer models so all texture pages are refreshed.\n this._pageLayoutVersion++;\n this._onAddTextureAtlasCanvas.fire(this._overflowSizePage.canvas);\n }\n activePage = this._overflowSizePage;\n activeRow = this._overflowSizePage.currentRow;\n // Move to next row if necessary\n if (activeRow.x + rasterizedGlyph.size.x >= activePage.canvas.width) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n }\n break;\n }\n\n // Create a new page if too much vertical space would be wasted or there is not enough room\n // left in the page. The previous active row will become fixed in the process as it now has a\n // fixed height\n if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {\n // Create the new fixed height row, creating a new page if there isn't enough room on the\n // current page\n let wasPageAndRowFound = false;\n if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {\n // Find the first page with room to create the new row on\n let candidatePage: AtlasPage | undefined;\n\n for (const p of this._activePages) {\n if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {\n candidatePage = p;\n break;\n }\n }\n if (candidatePage) {\n activePage = candidatePage;\n } else {\n // Before creating a new atlas page that would trigger a page merge, check if the\n // current active row is sufficient when ignoring the ROW_PIXEL_THRESHOLD. This will\n // improve texture utilization by using the available space before the page is merged\n // and becomes static.\n if (\n TextureAtlas.maxAtlasPages &&\n this._pages.length >= TextureAtlas.maxAtlasPages &&\n activeRow.y + rasterizedGlyph.size.y <= activePage.canvas.height &&\n activeRow.height >= rasterizedGlyph.size.y &&\n activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width\n ) {\n // activePage and activeRow is already valid\n wasPageAndRowFound = true;\n } else {\n // Create a new page if there is no room\n const newPage = this._createNewPage();\n activePage = newPage;\n activeRow = newPage.currentRow;\n activeRow.height = rasterizedGlyph.size.y;\n wasPageAndRowFound = true;\n }\n }\n }\n if (!wasPageAndRowFound) {\n // Fix the current row as the new row is being added below\n if (activePage.currentRow.height > 0) {\n activePage.fixedRows.push(activePage.currentRow);\n }\n activeRow = {\n x: 0,\n y: activePage.currentRow.y + activePage.currentRow.height,\n height: rasterizedGlyph.size.y\n };\n activePage.fixedRows.push(activeRow);\n\n // Create the new current row below the new fixed height row\n activePage.currentRow = {\n x: 0,\n y: activeRow.y + activeRow.height,\n height: 0\n };\n }\n // TODO: Remove pages from _activePages when all rows are filled\n }\n\n // Exit the loop if there is enough room in the row\n if (activeRow.x + rasterizedGlyph.size.x <= activePage.canvas.width) {\n break;\n }\n\n // If there is not enough room in the current row, finish it and try again\n if (activeRow === activePage.currentRow) {\n activeRow.x = 0;\n activeRow.y += activeRow.height;\n activeRow.height = 0;\n } else {\n activePage.fixedRows.splice(activePage.fixedRows.indexOf(activeRow), 1);\n }\n }\n\n // Record texture position\n rasterizedGlyph.texturePage = this._pages.indexOf(activePage);\n rasterizedGlyph.texturePosition.x = activeRow.x;\n rasterizedGlyph.texturePosition.y = activeRow.y;\n rasterizedGlyph.texturePositionClipSpace.x = activeRow.x / activePage.canvas.width;\n rasterizedGlyph.texturePositionClipSpace.y = activeRow.y / activePage.canvas.height;\n\n // Fix the clipspace position as pages may be of differing size\n rasterizedGlyph.sizeClipSpace.x /= activePage.canvas.width;\n rasterizedGlyph.sizeClipSpace.y /= activePage.canvas.height;\n\n // Update atlas current row, for fixed rows the glyph height will never be larger than the row\n // height\n activeRow.height = Math.max(activeRow.height, rasterizedGlyph.size.y);\n activeRow.x += rasterizedGlyph.size.x;\n\n // putImageData doesn't do any blending, so it will overwrite any existing cache entry for us\n activePage.ctx.putImageData(\n imageData,\n rasterizedGlyph.texturePosition.x - this._workBoundingBox.left,\n rasterizedGlyph.texturePosition.y - this._workBoundingBox.top,\n this._workBoundingBox.left,\n this._workBoundingBox.top,\n rasterizedGlyph.size.x,\n rasterizedGlyph.size.y\n );\n activePage.addGlyph(rasterizedGlyph);\n activePage.version = ++AtlasPage.nextVersion;\n\n return rasterizedGlyph;\n }\n\n /**\n * Given an ImageData object, find the bounding box of the non-transparent\n * portion of the texture and return an IRasterizedGlyph with these\n * dimensions.\n * @param imageData The image data to read.\n * @param boundingBox An IBoundingBox to put the clipped bounding box values.\n */\n private _findGlyphBoundingBox(imageData: ImageData, boundingBox: IBoundingBox, allowedWidth: number, restrictedGlyph: boolean, customGlyph: boolean, padding: number): IRasterizedGlyph {\n boundingBox.top = 0;\n const height = restrictedGlyph ? this._config.deviceCellHeight : this._tmpCanvas.height;\n const width = restrictedGlyph ? this._config.deviceCellWidth : allowedWidth;\n let found = false;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.top = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.left = 0;\n found = false;\n for (let x = 0; x < padding + width; x++) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.left = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.right = width;\n found = false;\n for (let x = padding + width - 1; x >= padding; x--) {\n for (let y = 0; y < height; y++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.right = x;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n boundingBox.bottom = height;\n found = false;\n for (let y = height - 1; y >= 0; y--) {\n for (let x = 0; x < width; x++) {\n const alphaOffset = y * this._tmpCanvas.width * 4 + x * 4 + 3;\n if (imageData.data[alphaOffset] !== 0) {\n boundingBox.bottom = y;\n found = true;\n break;\n }\n }\n if (found) {\n break;\n }\n }\n return {\n texturePage: 0,\n texturePosition: { x: 0, y: 0 },\n texturePositionClipSpace: { x: 0, y: 0 },\n size: {\n x: boundingBox.right - boundingBox.left + 1,\n y: boundingBox.bottom - boundingBox.top + 1\n },\n sizeClipSpace: {\n x: (boundingBox.right - boundingBox.left + 1),\n y: (boundingBox.bottom - boundingBox.top + 1)\n },\n offset: {\n x: -boundingBox.left + padding + ((restrictedGlyph || customGlyph) ? Math.floor((this._config.deviceCellWidth - this._config.deviceCharWidth) / 2) : 0),\n y: -boundingBox.top + padding + ((restrictedGlyph || customGlyph) ? this._config.lineHeight === 1 ? 0 : Math.round((this._config.deviceCellHeight - this._config.deviceCharHeight) / 2) : 0)\n }\n };\n }\n}\n\nclass AtlasPage {\n public readonly canvas: HTMLCanvasElement;\n public readonly ctx: CanvasRenderingContext2D;\n\n private _usedPixels: number = 0;\n public get percentageUsed(): number { return this._usedPixels / (this.canvas.width * this.canvas.height); }\n\n private readonly _glyphs: IRasterizedGlyph[] = [];\n public get glyphs(): ReadonlyArray { return this._glyphs; }\n public addGlyph(glyph: IRasterizedGlyph): void {\n this._glyphs.push(glyph);\n this._usedPixels += glyph.size.x * glyph.size.y;\n }\n\n /**\n * Monotonically increasing across all atlas pages globally. Used to detect when the texture\n * unit at a given index needs to be re-uploaded \u2014 both for content changes within the same\n * page and for a page object swap at the same index (which happens after a page merge,\n * where a per-page counter could coincide with the previously-bound page's value).\n */\n public static nextVersion: number = 0;\n public version = ++AtlasPage.nextVersion;\n\n // Texture atlas current positioning data. The texture packing strategy used is to fill from\n // left-to-right and top-to-bottom. When the glyph being written is less than half of the current\n // row's height, the following happens:\n //\n // - The current row becomes the fixed height row A\n // - A new fixed height row B the exact size of the glyph is created below the current row\n // - A new dynamic height current row is created below B\n //\n // This strategy does a good job preventing space being wasted for very short glyphs such as\n // underscores, hyphens etc. or those with underlines rendered.\n public currentRow: ICharAtlasActiveRow = {\n x: 0,\n y: 0,\n height: 0\n };\n public readonly fixedRows: ICharAtlasActiveRow[] = [];\n\n constructor(\n document: Document,\n size: number,\n sourcePages?: AtlasPage[]\n ) {\n this.canvas = createCanvas(document, size, size);\n // The canvas needs alpha because we use clearColor to convert the background color to alpha.\n // It might also contain some characters with transparent backgrounds if allowTransparency is\n // set.\n this.ctx = throwIfFalsy(this.canvas.getContext('2d', { alpha: true }));\n if (sourcePages) {\n if (sourcePages.length === 4) {\n // optimized for quadmerge\n this._glyphs = this._glyphs.concat(\n sourcePages[0].glyphs,\n sourcePages[1].glyphs,\n sourcePages[2].glyphs,\n sourcePages[3].glyphs\n );\n this._usedPixels = sourcePages[0]._usedPixels +\n sourcePages[1]._usedPixels +\n sourcePages[2]._usedPixels +\n sourcePages[3]._usedPixels;\n } else {\n // fallback for non quadmerges (should never be used)\n for (let i = 0; i < sourcePages.length; ++i) {\n this._glyphs = this._glyphs.concat(sourcePages[i].glyphs);\n this._usedPixels += sourcePages[i]._usedPixels;\n }\n\n }\n }\n }\n\n public clear(): void {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.currentRow.x = 0;\n this.currentRow.y = 0;\n this.currentRow.height = 0;\n this.fixedRows.length = 0;\n this.version = ++AtlasPage.nextVersion;\n }\n}\n\n/**\n * Makes a particular rgb color and colors that are nearly the same in an ImageData completely\n * transparent.\n * @returns True if the result is \"empty\", meaning all pixels are fully transparent.\n */\nfunction clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThresholdCheck: boolean): boolean {\n // Get color channels\n const r = bg.rgba >>> 24;\n const g = bg.rgba >>> 16 & 0xFF;\n const b = bg.rgba >>> 8 & 0xFF;\n const fgR = fg.rgba >>> 24;\n const fgG = fg.rgba >>> 16 & 0xFF;\n const fgB = fg.rgba >>> 8 & 0xFF;\n\n // Calculate a threshold that when below a color will be treated as transpart when the sum of\n // channel value differs. This helps improve rendering when glyphs overlap with others. This\n // threshold is calculated relative to the difference between the background and foreground to\n // ensure important details of the glyph are always shown, even when the contrast ratio is low.\n // The number 12 is largely arbitrary to ensure the pixels that escape the cell in the test case\n // were covered (fg=#8ae234, bg=#c4a000).\n const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);\n\n // Set alpha channel of relevant pixels to 0\n let isEmpty = true;\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n // Check exact match\n if (imageData.data[offset] === r &&\n imageData.data[offset + 1] === g &&\n imageData.data[offset + 2] === b) {\n imageData.data[offset + 3] = 0;\n } else {\n // Check the threshold based difference\n if (enableThresholdCheck &&\n (Math.abs(imageData.data[offset] - r) +\n Math.abs(imageData.data[offset + 1] - g) +\n Math.abs(imageData.data[offset + 2] - b)) < threshold) {\n imageData.data[offset + 3] = 0;\n } else {\n isEmpty = false;\n }\n }\n }\n\n return isEmpty;\n}\n\nfunction checkCompletelyTransparent(imageData: ImageData): boolean {\n for (let offset = 0; offset < imageData.data.length; offset += 4) {\n if (imageData.data[offset + 3] > 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction createCanvas(document: Document, width: number, height: number): HTMLCanvasElement {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharAtlasConfig } from './Types';\nimport { Attributes } from 'common/buffer/Constants';\nimport { ITerminalOptions } from '@xterm/xterm';\nimport { IColorSet, ReadonlyColorSet } from 'browser/Types';\nimport { NULL_COLOR } from 'common/Color';\n\nexport function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {\n // null out some fields that don't matter\n const clonedColors: IColorSet = {\n foreground: colors.foreground,\n background: colors.background,\n cursor: NULL_COLOR,\n cursorAccent: NULL_COLOR,\n selectionForeground: NULL_COLOR,\n selectionBackgroundTransparent: NULL_COLOR,\n selectionBackgroundOpaque: NULL_COLOR,\n selectionInactiveBackgroundTransparent: NULL_COLOR,\n selectionInactiveBackgroundOpaque: NULL_COLOR,\n overviewRulerBorder: NULL_COLOR,\n scrollbarSliderBackground: NULL_COLOR,\n scrollbarSliderHoverBackground: NULL_COLOR,\n scrollbarSliderActiveBackground: NULL_COLOR,\n // For the static char atlas, we only use the first 16 colors, but we need all 256 for the\n // dynamic character atlas.\n ansi: colors.ansi.slice(),\n contrastCache: colors.contrastCache,\n halfContrastCache: colors.halfContrastCache\n };\n return {\n customGlyphs,\n devicePixelRatio,\n deviceMaxTextureSize,\n letterSpacing: options.letterSpacing,\n lineHeight: options.lineHeight,\n deviceCellWidth: deviceCellWidth,\n deviceCellHeight: deviceCellHeight,\n deviceCharWidth: deviceCharWidth,\n deviceCharHeight: deviceCharHeight,\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontWeight: options.fontWeight,\n fontWeightBold: options.fontWeightBold,\n allowTransparency: options.allowTransparency,\n drawBoldTextInBrightColors: options.drawBoldTextInBrightColors,\n minimumContrastRatio: options.minimumContrastRatio,\n colors: clonedColors\n };\n}\n\nexport function configEquals(a: ICharAtlasConfig, b: ICharAtlasConfig): boolean {\n for (let i = 0; i < a.colors.ansi.length; i++) {\n if (a.colors.ansi[i].rgba !== b.colors.ansi[i].rgba) {\n return false;\n }\n }\n return a.devicePixelRatio === b.devicePixelRatio &&\n a.deviceMaxTextureSize === b.deviceMaxTextureSize &&\n a.customGlyphs === b.customGlyphs &&\n a.lineHeight === b.lineHeight &&\n a.letterSpacing === b.letterSpacing &&\n a.fontFamily === b.fontFamily &&\n a.fontSize === b.fontSize &&\n a.fontWeight === b.fontWeight &&\n a.fontWeightBold === b.fontWeightBold &&\n a.allowTransparency === b.allowTransparency &&\n a.deviceCellWidth === b.deviceCellWidth &&\n a.deviceCellHeight === b.deviceCellHeight &&\n a.deviceCharWidth === b.deviceCharWidth &&\n a.deviceCharHeight === b.deviceCharHeight &&\n a.drawBoldTextInBrightColors === b.drawBoldTextInBrightColors &&\n a.minimumContrastRatio === b.minimumContrastRatio &&\n a.colors.foreground.rgba === b.colors.foreground.rgba &&\n a.colors.background.rgba === b.colors.background.rgba;\n}\n\nexport function is256Color(colorCode: number): boolean {\n return (colorCode & Attributes.CM_MASK) === Attributes.CM_P16 || (colorCode & Attributes.CM_MASK) === Attributes.CM_P256;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TextureAtlas } from './TextureAtlas';\nimport { ITerminalOptions, Terminal } from '@xterm/xterm';\nimport { ITerminal, ReadonlyColorSet } from 'browser/Types';\nimport { ICharAtlasConfig, ITextureAtlas } from './Types';\nimport { generateConfig, configEquals } from './CharAtlasUtils';\nimport type { ILogService } from 'common/services/Services';\n\ninterface ITextureAtlasCacheEntry {\n atlas: ITextureAtlas;\n config: ICharAtlasConfig;\n // N.B. This implementation potentially holds onto copies of the terminal forever, so\n // this may cause memory leaks.\n ownedBy: Terminal[];\n}\n\nconst charAtlasCache: ITextureAtlasCacheEntry[] = [];\n\n/**\n * Acquires a char atlas, either generating a new one or returning an existing\n * one that is in use by another terminal.\n */\nexport function acquireTextureAtlas(\n terminal: Terminal,\n options: Required,\n colors: ReadonlyColorSet,\n deviceCellWidth: number,\n deviceCellHeight: number,\n deviceCharWidth: number,\n deviceCharHeight: number,\n devicePixelRatio: number,\n deviceMaxTextureSize: number,\n customGlyphs: boolean = true\n): ITextureAtlas {\n const newConfig = generateConfig(deviceCellWidth, deviceCellHeight, deviceCharWidth, deviceCharHeight, options, colors, devicePixelRatio, deviceMaxTextureSize, customGlyphs);\n\n // Check to see if the terminal already owns this config\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n const ownedByIndex = entry.ownedBy.indexOf(terminal);\n if (ownedByIndex >= 0) {\n if (configEquals(entry.config, newConfig)) {\n return entry.atlas;\n }\n // The configs differ, release the terminal from the entry\n if (entry.ownedBy.length === 1) {\n entry.atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n entry.ownedBy.splice(ownedByIndex, 1);\n }\n break;\n }\n }\n\n // Try match a char atlas from the cache\n for (let i = 0; i < charAtlasCache.length; i++) {\n const entry = charAtlasCache[i];\n if (configEquals(entry.config, newConfig)) {\n // Add the terminal to the cache entry and return\n entry.ownedBy.push(terminal);\n return entry.atlas;\n }\n }\n\n const core: ITerminal = (terminal as any)._core;\n const logService = (core as any)._logService as ILogService;\n const newEntry: ITextureAtlasCacheEntry = {\n atlas: new TextureAtlas(document, newConfig, core.unicodeService, logService),\n config: newConfig,\n ownedBy: [terminal]\n };\n charAtlasCache.push(newEntry);\n return newEntry.atlas;\n}\n\n/**\n * Removes a terminal reference from the cache, allowing its memory to be freed.\n * @param terminal The terminal to remove.\n */\nexport function removeTerminalFromCache(terminal: Terminal): void {\n for (let i = 0; i < charAtlasCache.length; i++) {\n const index = charAtlasCache[i].ownedBy.indexOf(terminal);\n if (index !== -1) {\n if (charAtlasCache[i].ownedBy.length === 1) {\n // Remove the cache entry if it's the only terminal\n charAtlasCache[i].atlas.dispose();\n charAtlasCache.splice(i, 1);\n } else {\n // Remove the reference from the cache entry\n charAtlasCache[i].ownedBy.splice(index, 1);\n }\n break;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RendererConstants } from 'browser/renderer/shared/Constants';\nimport { ICoreBrowserService } from 'browser/services/Services';\n\nconst enum Constants {\n /**\n * The time between cursor blinks.\n */\n BLINK_INTERVAL = 600,\n}\n\nexport class CursorBlinkStateManager {\n public isCursorVisible: boolean;\n\n private _animationFrame: number | undefined;\n private _blinkStartTimeout: number | undefined;\n private _blinkInterval: number | undefined;\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n /**\n * The time at which the animation frame was restarted, this is used on the\n * next render to restart the timers so they don't need to restart the timers\n * multiple times over a short period.\n */\n private _animationTimeRestarted: number | undefined;\n\n constructor(\n private _renderCallback: () => void,\n private _coreBrowserService: ICoreBrowserService\n ) {\n this.isCursorVisible = true;\n if (this._coreBrowserService.isFocused) {\n this._restartInterval();\n this._resetIdleTimer();\n }\n }\n\n public get isPaused(): boolean { return !(this._blinkStartTimeout || this._blinkInterval); }\n\n public dispose(): void {\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._resetIdleTimer();\n }\n if (this.isPaused) {\n return;\n }\n // Save a timestamp so that the restart can be done on the next interval\n this._animationTimeRestarted = Date.now();\n // Force a cursor render to ensure it's visible and in the correct position\n this.isCursorVisible = true;\n if (!this._animationFrame) {\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }\n }\n\n private _restartInterval(timeToStart: number = Constants.BLINK_INTERVAL): void {\n // Clear any existing interval\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n\n // Setup the initial timeout which will hide the cursor, this is done before\n // the regular interval is setup in order to support restarting the blink\n // animation in a lightweight way (without thrashing clearInterval and\n // setInterval).\n this._blinkStartTimeout = this._coreBrowserService.window.setTimeout(() => {\n // Check if another animation restart was requested while this was being\n // started\n if (this._animationTimeRestarted) {\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n if (time > 0) {\n this._restartInterval(time);\n return;\n }\n }\n\n // Hide the cursor\n this.isCursorVisible = false;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n\n // Setup the blink interval\n this._blinkInterval = this._coreBrowserService.window.setInterval(() => {\n // Adjust the animation time if it was restarted\n if (this._animationTimeRestarted) {\n // calc time diff\n // Make restart interval do a setTimeout initially?\n const time = Constants.BLINK_INTERVAL - (Date.now() - this._animationTimeRestarted);\n this._animationTimeRestarted = undefined;\n this._restartInterval(time);\n return;\n }\n\n // Invert visibility and render\n this.isCursorVisible = !this.isCursorVisible;\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n this._renderCallback();\n this._animationFrame = undefined;\n });\n }, Constants.BLINK_INTERVAL);\n }, timeToStart);\n }\n\n public pause(): void {\n this.isCursorVisible = true;\n this._isIdlePaused = false;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n public resume(): void {\n // Clear out any existing timers just in case\n this.pause();\n\n this._animationTimeRestarted = undefined;\n this._restartInterval();\n this._resetIdleTimer();\n this.restartBlinkAnimation();\n }\n\n /**\n * Resets the idle timer. If the terminal is idle for the idle timeout period,\n * the cursor blinking will stop.\n */\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n if (this._idleTimeout) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n }\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n /**\n * Stops cursor blinking due to idle timeout.\n */\n private _stopBlinkingDueToIdle(): void {\n // Make cursor visible and stop blinking\n this.isCursorVisible = true;\n this._isIdlePaused = true;\n if (this._blinkInterval) {\n this._coreBrowserService.window.clearInterval(this._blinkInterval);\n this._blinkInterval = undefined;\n }\n if (this._blinkStartTimeout) {\n this._coreBrowserService.window.clearTimeout(this._blinkStartTimeout);\n this._blinkStartTimeout = undefined;\n }\n if (this._animationFrame) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n // Clear the idle timeout as we've already acted on it\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n // Trigger a render to show the cursor in its final visible state\n this._renderCallback();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toDisposable, IDisposable } from 'common/Lifecycle';\n\nexport function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {\n // Observe any resizes to the element and extract the actual pixel size of the element if the\n // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when\n // converting between CSS pixels and device pixels which causes blurry rendering when device\n // pixel ratio is not a round number.\n let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {\n const entry = entries.find((entry) => entry.target === element);\n if (!entry) {\n return;\n }\n\n // Disconnect if devicePixelContentBoxSize isn't supported by the browser\n if (!('devicePixelContentBoxSize' in entry)) {\n observer?.disconnect();\n observer = undefined;\n return;\n }\n\n // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden\n const width = entry.devicePixelContentBoxSize[0].inlineSize;\n const height = entry.devicePixelContentBoxSize[0].blockSize;\n if (width > 0 && height > 0) {\n callback(width, height);\n }\n });\n try {\n observer.observe(element, { box: ['device-pixel-content-box'] } as any);\n } catch {\n observer.disconnect();\n observer = undefined;\n }\n return toDisposable(() => observer?.disconnect());\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\n/**\n * A matrix that when multiplies will translate 0-1 coordinates (left to right,\n * top to bottom) to clip space.\n */\nexport const PROJECTION_MATRIX = new Float32Array([\n 2, 0, 0, 0,\n 0, -2, 0, 0,\n 0, 0, 1, 0,\n -1, 1, 0, 1\n]);\n\nexport function createProgram(gl: WebGLRenderingContext, vertexSource: string, fragmentSource: string, logService: ILogService): WebGLProgram | undefined {\n const program = throwIfFalsy(gl.createProgram());\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.VERTEX_SHADER, vertexSource, logService)));\n gl.attachShader(program, throwIfFalsy(createShader(gl, gl.FRAGMENT_SHADER, fragmentSource, logService)));\n gl.linkProgram(program);\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (success) {\n return program;\n }\n\n logService.error(gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n}\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string, logService: ILogService): WebGLShader | undefined {\n const shader = throwIfFalsy(gl.createShader(type));\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (success) {\n return shader;\n }\n\n logService.error(gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n}\n\nexport function expandFloat32Array(source: Float32Array, max: number): Float32Array {\n const newLength = Math.min(source.length * 2, max);\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < source.length; i++) {\n newArray[i] = source[i];\n }\n return newArray;\n}\n\nexport class GLTexture {\n public texture: WebGLTexture;\n public version: number;\n\n constructor(texture: WebGLTexture) {\n this.texture = texture;\n this.version = -1;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { TextureAtlas } from './TextureAtlas';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';\nimport { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';\nimport type { ILogService, IOptionsService } from 'common/services/Services';\nimport { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\n\ninterface IVertices {\n attributes: Float32Array;\n /**\n * These buffers are the ones used to bind to WebGL, the reason there are\n * multiple is to allow double buffering to work as you cannot modify the\n * buffer while it's being used by the GPU. Having multiple lets us start\n * working on the next frame.\n */\n attributesBuffers: Float32Array[];\n count: number;\n}\n\nconst enum VertexAttribLocations {\n UNIT_QUAD = 0,\n CELL_POSITION = 1,\n OFFSET = 2,\n SIZE = 3,\n TEXPAGE = 4,\n TEXCOORD = 5,\n TEXSIZE = 6\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\nlayout (location = ${VertexAttribLocations.CELL_POSITION}) in vec2 a_cellpos;\nlayout (location = ${VertexAttribLocations.OFFSET}) in vec2 a_offset;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.TEXPAGE}) in float a_texpage;\nlayout (location = ${VertexAttribLocations.TEXCOORD}) in vec2 a_texcoord;\nlayout (location = ${VertexAttribLocations.TEXSIZE}) in vec2 a_texsize;\n\nuniform mat4 u_projection;\nuniform vec2 u_resolution;\n\nout vec2 v_texcoord;\nflat out int v_texpage;\n\nvoid main() {\n vec2 zeroToOne = (a_offset / u_resolution) + a_cellpos + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_texpage = int(a_texpage);\n v_texcoord = a_texcoord + a_unitquad * a_texsize;\n}`;\n\nfunction createFragmentShaderSource(maxFragmentShaderTextureUnits: number): string {\n let textureConditionals = '';\n for (let i = 1; i < maxFragmentShaderTextureUnits; i++) {\n textureConditionals += ` else if (v_texpage == ${i}) { outColor = texture(u_texture[${i}], v_texcoord); }`;\n }\n // A v_texpage beyond the sampler budget matches no branch above. Leaving outColor unwritten\n // is undefined behaviour in GLSL ES and paints garbage, so fall through to transparent.\n return (`#version 300 es\nprecision lowp float;\n\nin vec2 v_texcoord;\nflat in int v_texpage;\n\nuniform sampler2D u_texture[${maxFragmentShaderTextureUnits}];\n\nout vec4 outColor;\n\nvoid main() {\n if (v_texpage == 0) {\n outColor = texture(u_texture[0], v_texcoord);\n } ${textureConditionals} else { outColor = vec4(0.0, 0.0, 0.0, 0.0); }\n}`);\n}\n\nconst enum Constants {\n INDICES_PER_CELL = 11,\n BYTES_PER_CELL = INDICES_PER_CELL * 4/* Float32Array.BYTES_PER_ELEMENT */,\n CELL_POSITION_INDICES = 2\n}\n\n// Work variables to avoid garbage collection\nlet $i = 0;\nlet $glyph: IRasterizedGlyph | undefined = undefined;\nlet $leftCellPadding = 0;\nlet $clippedPixels = 0;\n\nexport class GlyphRenderer extends Disposable {\n private readonly _program: WebGLProgram;\n private readonly _vertexArrayObject: IWebGLVertexArrayObject;\n private readonly _projectionLocation: WebGLUniformLocation;\n private readonly _resolutionLocation: WebGLUniformLocation;\n private readonly _textureLocation: WebGLUniformLocation;\n private readonly _atlasTextures: GLTexture[];\n private readonly _attributesBuffer: WebGLBuffer;\n\n private _atlas: ITextureAtlas | undefined;\n private _lastSeenPageLayoutVersion: number = -1;\n private _pageOverflowWarned: boolean = false;\n private _activeBuffer: number = 0;\n private readonly _vertices: IVertices = {\n count: 0,\n attributes: new Float32Array(0),\n attributesBuffers: [\n new Float32Array(0),\n new Float32Array(0)\n ]\n };\n\n constructor(\n private readonly _terminal: Terminal,\n private readonly _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _optionsService: IOptionsService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n if (TextureAtlas.maxAtlasPages === undefined) {\n // Typically 8 or 16\n TextureAtlas.maxAtlasPages = Math.min(32, throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS) as number | null));\n // Almost all clients will support >= 4096\n TextureAtlas.maxTextureSize = throwIfFalsy(gl.getParameter(gl.MAX_TEXTURE_SIZE) as number | null);\n }\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, createFragmentShaderSource(TextureAtlas.maxAtlasPages), this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n this._resolutionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_resolution'));\n this._textureLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_texture'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.OFFSET);\n gl.vertexAttribPointer(VertexAttribLocations.OFFSET, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.OFFSET, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXPAGE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXPAGE, 1, gl.FLOAT, false, Constants.BYTES_PER_CELL, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXPAGE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXCOORD);\n gl.vertexAttribPointer(VertexAttribLocations.TEXCOORD, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 5 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXCOORD, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.TEXSIZE);\n gl.vertexAttribPointer(VertexAttribLocations.TEXSIZE, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 7 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.TEXSIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.CELL_POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.CELL_POSITION, 2, gl.FLOAT, false, Constants.BYTES_PER_CELL, 9 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.CELL_POSITION, 1);\n\n // Setup static uniforms\n gl.useProgram(this._program);\n const textureUnits = new Int32Array(TextureAtlas.maxAtlasPages);\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n textureUnits[i] = i;\n }\n gl.uniform1iv(this._textureLocation, textureUnits);\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Setup 1x1 red pixel textures for all potential atlas pages, if one of these invalid textures\n // is ever drawn it will show characters as red rectangles.\n this._atlasTextures = [];\n for (let i = 0; i < TextureAtlas.maxAtlasPages; i++) {\n const glTexture = new GLTexture(throwIfFalsy(gl.createTexture()));\n this._register(toDisposable(() => gl.deleteTexture(glTexture.texture)));\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));\n this._atlasTextures[i] = glTexture;\n }\n\n // Allow drawing of transparent texture\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n // Set viewport\n this.handleResize();\n }\n\n /**\n * Call when a frame is being drawn. Returns whether the full model must be rebuilt before\n * rendering this frame because the atlas page layout changed since this renderer last drew.\n */\n public beginFrame(): boolean {\n if (!this._atlas) {\n return true;\n }\n if (this._atlas.pageLayoutVersion !== this._lastSeenPageLayoutVersion) {\n this._lastSeenPageLayoutVersion = this._atlas.pageLayoutVersion;\n return true;\n }\n return false;\n }\n\n public updateCell(x: number, y: number, code: number, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n // Since this function is called for every cell (`rows*cols`), it must be very optimized. It\n // should not instantiate any variables unless a new glyph is drawn to the cache where the\n // slight slowdown is acceptable for the developer ergonomics provided as it's a one-off for\n // each glyph.\n this._updateCell(this._vertices.attributes, x, y, code, bg, fg, ext, chars, width, lastBg);\n }\n\n private _updateCell(array: Float32Array, x: number, y: number, code: number | undefined, bg: number, fg: number, ext: number, chars: string, width: number, lastBg: number): void {\n $i = (y * this._terminal.cols + x) * Constants.INDICES_PER_CELL;\n\n // Exit early if this is a null character, allow space character to continue as it may have\n // underline/strikethrough styles\n if (code === NULL_CELL_CODE || code === undefined/* This is used for the right side of wide chars */) {\n array.fill(0, $i, $i + Constants.INDICES_PER_CELL - 1 - Constants.CELL_POSITION_INDICES);\n return;\n }\n\n if (!this._atlas) {\n return;\n }\n\n // Get the glyph\n if (chars && chars.length > 1) {\n $glyph = this._atlas.getRasterizedGlyphCombinedChar(chars, bg, fg, ext, false, this._terminal.element);\n } else {\n $glyph = this._atlas.getRasterizedGlyph(code, bg, fg, ext, false, this._terminal.element);\n }\n\n $leftCellPadding = Math.floor((this._dimensions.device.cell.width - this._dimensions.device.char.width) / 2);\n if (bg !== lastBg && $glyph.offset.x > $leftCellPadding) {\n $clippedPixels = $glyph.offset.x - $leftCellPadding;\n // a_origin\n array[$i ] = -($glyph.offset.x - $clippedPixels) + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = ($glyph.size.x - $clippedPixels) / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x + $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x - $clippedPixels / this._atlas.pages[$glyph.texturePage].canvas.width;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n } else {\n // a_origin\n array[$i ] = -$glyph.offset.x + this._dimensions.device.char.left;\n array[$i + 1] = -$glyph.offset.y + this._dimensions.device.char.top;\n // a_size\n array[$i + 2] = $glyph.size.x / this._dimensions.device.canvas.width;\n array[$i + 3] = $glyph.size.y / this._dimensions.device.canvas.height;\n // a_texpage\n array[$i + 4] = $glyph.texturePage;\n // a_texcoord\n array[$i + 5] = $glyph.texturePositionClipSpace.x;\n array[$i + 6] = $glyph.texturePositionClipSpace.y;\n // a_texsize\n array[$i + 7] = $glyph.sizeClipSpace.x;\n array[$i + 8] = $glyph.sizeClipSpace.y;\n }\n // a_cellpos only changes on resize\n\n // Reduce scale horizontally for wide glyphs printed in cells that would overlap with the\n // following cell (ie. the width is not 2).\n if (this._optionsService.rawOptions.rescaleOverlappingGlyphs) {\n if (allowRescaling(code, width, $glyph.size.x, this._dimensions.device.cell.width)) {\n array[$i + 2] = (this._dimensions.device.cell.width - 1) / this._dimensions.device.canvas.width; // - 1 to improve readability\n }\n }\n }\n\n public clear(): void {\n const terminal = this._terminal;\n const newCount = terminal.cols * terminal.rows * Constants.INDICES_PER_CELL;\n\n // Clear vertices\n if (this._vertices.count !== newCount) {\n this._vertices.attributes = new Float32Array(newCount);\n } else {\n this._vertices.attributes.fill(0);\n }\n let i = 0;\n for (; i < this._vertices.attributesBuffers.length; i++) {\n if (this._vertices.count !== newCount) {\n this._vertices.attributesBuffers[i] = new Float32Array(newCount);\n } else {\n this._vertices.attributesBuffers[i].fill(0);\n }\n }\n this._vertices.count = newCount;\n i = 0;\n for (let y = 0; y < terminal.rows; y++) {\n for (let x = 0; x < terminal.cols; x++) {\n this._vertices.attributes[i + 9] = x / terminal.cols;\n this._vertices.attributes[i + 10] = y / terminal.rows;\n i += Constants.INDICES_PER_CELL;\n }\n }\n }\n\n public handleResize(): void {\n const gl = this._gl;\n gl.useProgram(this._program);\n gl.viewport(0, 0, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n gl.uniform2f(this._resolutionLocation, this._dimensions.device.canvas.width, this._dimensions.device.canvas.height);\n this.clear();\n }\n\n public render(renderModel: IRenderModel): void {\n if (!this._atlas) {\n return;\n }\n\n const gl = this._gl;\n\n gl.useProgram(this._program);\n gl.bindVertexArray(this._vertexArrayObject);\n\n // Alternate buffers each frame as the active buffer gets locked while it's in use by the GPU\n this._activeBuffer = (this._activeBuffer + 1) % 2;\n const activeBuffer = this._vertices.attributesBuffers[this._activeBuffer];\n\n // Copy data for each cell of each line up to its line length (the last non-whitespace cell)\n // from the attributes buffer into activeBuffer, which is the one that gets bound to the GPU.\n // The reasons for this are as follows:\n // - So the active buffer can be alternated so we don't get blocked on rendering finishing\n // - To copy either the normal attributes buffer or the selection attributes buffer when there\n // is a selection\n // - So we don't send vertices for all the line-ending whitespace to the GPU\n let bufferLength = 0;\n for (let y = 0; y < renderModel.lineLengths.length; y++) {\n const si = y * this._terminal.cols * Constants.INDICES_PER_CELL;\n const sub = this._vertices.attributes.subarray(si, si + renderModel.lineLengths[y] * Constants.INDICES_PER_CELL);\n activeBuffer.set(sub, bufferLength);\n bufferLength += sub.length;\n }\n\n // Bind the attributes buffer\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, activeBuffer.subarray(0, bufferLength), gl.STREAM_DRAW);\n\n // Bind the atlas page texture if they have changed. AtlasPage.version is globally\n // monotonic, so a page object swap at the same index (which happens after a page merge)\n // is detected by the same comparison.\n // Clamp defensively in case the atlas unexpectedly exceeds texture capacity.\n const pageCount = Math.min(this._atlas.pages.length, this._atlasTextures.length);\n if (this._atlas.pages.length > this._atlasTextures.length && !this._pageOverflowWarned) {\n this._pageOverflowWarned = true;\n this._logService.warn(`Atlas page count (${this._atlas.pages.length}) exceeds the renderer's texture capacity (${this._atlasTextures.length}), some glyphs will not render correctly`);\n }\n for (let i = 0; i < pageCount; i++) {\n if (this._atlas.pages[i].version !== this._atlasTextures[i].version) {\n this._bindAtlasPageTexture(gl, this._atlas, i);\n }\n }\n\n // Draw the viewport\n gl.drawElementsInstanced(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, bufferLength / Constants.INDICES_PER_CELL);\n }\n\n public setAtlas(atlas: ITextureAtlas): void {\n this._atlas = atlas;\n this._lastSeenPageLayoutVersion = -1;\n this.invalidateAtlasTextures();\n }\n\n public invalidateAtlasTextures(): void {\n for (const glTexture of this._atlasTextures) {\n glTexture.version = -1;\n }\n }\n\n private _bindAtlasPageTexture(gl: IWebGL2RenderingContext, atlas: ITextureAtlas, i: number): void {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, this._atlasTextures[i].texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, atlas.pages[i].canvas);\n this._atlasTextures[i].version = atlas.pages[i].version;\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICursorRenderModel, IRenderModel } from './Types';\nimport { ISelectionRenderModel } from 'browser/renderer/shared/Types';\nimport { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';\n\nexport const enum RenderModelConstants {\n INDICIES_PER_CELL = 4,\n BG_OFFSET = 1,\n FG_OFFSET = 2,\n EXT_OFFSET = 3\n}\n\nexport const COMBINED_CHAR_BIT_MASK = 0x80000000;\n\nexport class RenderModel implements IRenderModel {\n public cells: Uint32Array;\n public lineLengths: Uint32Array;\n public selection: ISelectionRenderModel;\n public cursor?: ICursorRenderModel;\n\n constructor() {\n this.cells = new Uint32Array(0);\n this.lineLengths = new Uint32Array(0);\n this.selection = createSelectionRenderModel();\n }\n\n public resize(cols: number, rows: number): void {\n const indexCount = cols * rows * RenderModelConstants.INDICIES_PER_CELL;\n if (indexCount !== this.cells.length) {\n this.cells = new Uint32Array(indexCount);\n this.lineLengths = new Uint32Array(rows);\n }\n }\n\n public clear(): void {\n this.cells.fill(0, 0);\n this.lineLengths.fill(0, 0);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { IThemeService } from 'browser/services/Services';\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { Attributes, FgFlags } from 'common/buffer/Constants';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { IColor } from 'common/Types';\nimport { Terminal } from '@xterm/xterm';\nimport { RenderModelConstants } from './RenderModel';\nimport { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';\nimport { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport type { ILogService } from 'common/services/Services';\n\nconst enum VertexAttribLocations {\n POSITION = 0,\n SIZE = 1,\n COLOR = 2,\n UNIT_QUAD = 3\n}\n\nconst vertexShaderSource = `#version 300 es\nlayout (location = ${VertexAttribLocations.POSITION}) in vec2 a_position;\nlayout (location = ${VertexAttribLocations.SIZE}) in vec2 a_size;\nlayout (location = ${VertexAttribLocations.COLOR}) in vec4 a_color;\nlayout (location = ${VertexAttribLocations.UNIT_QUAD}) in vec2 a_unitquad;\n\nuniform mat4 u_projection;\n\nout vec4 v_color;\n\nvoid main() {\n vec2 zeroToOne = a_position + (a_unitquad * a_size);\n gl_Position = u_projection * vec4(zeroToOne, 0.0, 1.0);\n v_color = a_color;\n}`;\n\nconst fragmentShaderSource = `#version 300 es\nprecision lowp float;\n\nin vec4 v_color;\n\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}`;\n\nconst INDICES_PER_RECTANGLE = 8;\nconst BYTES_PER_RECTANGLE = INDICES_PER_RECTANGLE * Float32Array.BYTES_PER_ELEMENT;\n\nconst INITIAL_BUFFER_RECTANGLE_CAPACITY = 20 * INDICES_PER_RECTANGLE;\n\nclass Vertices {\n public attributes: Float32Array;\n public count: number;\n\n constructor() {\n this.attributes = new Float32Array(INITIAL_BUFFER_RECTANGLE_CAPACITY);\n this.count = 0;\n }\n}\n\n// Work variables to avoid garbage collection\nlet $rgba = 0;\nlet $x1 = 0;\nlet $y1 = 0;\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport class RectangleRenderer extends Disposable {\n\n private _program: WebGLProgram;\n private _vertexArrayObject: IWebGLVertexArrayObject;\n private _attributesBuffer: WebGLBuffer;\n private _projectionLocation: WebGLUniformLocation;\n private _bgFloat!: Float32Array;\n private _cursorFloat!: Float32Array;\n\n private _vertices: Vertices = new Vertices();\n private _verticesCursor: Vertices = new Vertices();\n\n constructor(\n private _terminal: Terminal,\n private _gl: IWebGL2RenderingContext,\n private _dimensions: IRenderDimensions,\n private readonly _themeService: IThemeService,\n private readonly _logService: ILogService\n ) {\n super();\n\n const gl = this._gl;\n\n this._program = throwIfFalsy(createProgram(gl, vertexShaderSource, fragmentShaderSource, this._logService));\n this._register(toDisposable(() => gl.deleteProgram(this._program)));\n\n // Uniform locations\n this._projectionLocation = throwIfFalsy(gl.getUniformLocation(this._program, 'u_projection'));\n\n // Create and set the vertex array object\n const vertexArrayObject = this._vertexArrayObject = gl.createVertexArray();\n this._register(toDisposable(() => gl.deleteVertexArray(vertexArrayObject)));\n gl.bindVertexArray(vertexArrayObject);\n\n // Setup a_unitquad, this defines the 4 vertices of a rectangle\n const unitQuadVertices = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n const unitQuadVerticesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(unitQuadVerticesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, unitQuadVerticesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, unitQuadVertices, gl.STATIC_DRAW);\n gl.enableVertexAttribArray(VertexAttribLocations.UNIT_QUAD);\n gl.vertexAttribPointer(VertexAttribLocations.UNIT_QUAD, 2, this._gl.FLOAT, false, 0, 0);\n\n // Setup the unit quad element array buffer, this points to indices in\n // unitQuadVertices to allow is to draw 2 triangles from the vertices via a\n // triangle strip\n const unitQuadElementIndices = new Uint8Array([0, 1, 2, 3]);\n const elementIndicesBuffer = gl.createBuffer();\n this._register(toDisposable(() => gl.deleteBuffer(elementIndicesBuffer)));\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementIndicesBuffer);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, unitQuadElementIndices, gl.STATIC_DRAW);\n\n // Setup attributes\n this._attributesBuffer = throwIfFalsy(gl.createBuffer());\n this._register(toDisposable(() => gl.deleteBuffer(this._attributesBuffer)));\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.enableVertexAttribArray(VertexAttribLocations.POSITION);\n gl.vertexAttribPointer(VertexAttribLocations.POSITION, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 0);\n gl.vertexAttribDivisor(VertexAttribLocations.POSITION, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.SIZE);\n gl.vertexAttribPointer(VertexAttribLocations.SIZE, 2, gl.FLOAT, false, BYTES_PER_RECTANGLE, 2 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.SIZE, 1);\n gl.enableVertexAttribArray(VertexAttribLocations.COLOR);\n gl.vertexAttribPointer(VertexAttribLocations.COLOR, 4, gl.FLOAT, false, BYTES_PER_RECTANGLE, 4 * Float32Array.BYTES_PER_ELEMENT);\n gl.vertexAttribDivisor(VertexAttribLocations.COLOR, 1);\n\n this._updateCachedColors(_themeService.colors);\n this._register(this._themeService.onChangeColors(e => {\n this._updateCachedColors(e);\n this._updateViewportRectangle();\n }));\n }\n\n public renderBackgrounds(): void {\n this._renderVertices(this._vertices);\n }\n\n public renderCursor(): void {\n this._renderVertices(this._verticesCursor);\n }\n\n private _renderVertices(vertices: Vertices): void {\n const gl = this._gl;\n\n gl.useProgram(this._program);\n\n gl.bindVertexArray(this._vertexArrayObject);\n\n gl.uniformMatrix4fv(this._projectionLocation, false, PROJECTION_MATRIX);\n\n // Bind attributes buffer and draw\n gl.bindBuffer(gl.ARRAY_BUFFER, this._attributesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices.attributes, gl.DYNAMIC_DRAW);\n gl.drawElementsInstanced(this._gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_BYTE, 0, vertices.count);\n }\n\n public handleResize(): void {\n this._updateViewportRectangle();\n }\n\n public setDimensions(dimensions: IRenderDimensions): void {\n this._dimensions = dimensions;\n }\n\n private _updateCachedColors(colors: ReadonlyColorSet): void {\n this._bgFloat = this._colorToFloat32Array(colors.background);\n this._cursorFloat = this._colorToFloat32Array(colors.cursor);\n }\n\n private _updateViewportRectangle(): void {\n // Set first rectangle that clears the screen\n this._addRectangleFloat(\n this._vertices.attributes,\n 0,\n 0,\n 0,\n this._terminal.cols * this._dimensions.device.cell.width,\n this._terminal.rows * this._dimensions.device.cell.height,\n this._bgFloat\n );\n }\n\n public updateBackgrounds(model: IRenderModel): void {\n const terminal = this._terminal;\n const vertices = this._vertices;\n\n // Declare variable ahead of time to avoid garbage collection\n let rectangleCount = 1;\n let y: number;\n let x: number;\n let currentStartX: number;\n let currentBg: number;\n let currentFg: number;\n let currentInverse: boolean;\n let modelIndex: number;\n let bg: number;\n let fg: number;\n let inverse: boolean;\n let offset: number;\n\n for (y = 0; y < terminal.rows; y++) {\n currentStartX = -1;\n currentBg = 0;\n currentFg = 0;\n currentInverse = false;\n for (x = 0; x < terminal.cols; x++) {\n modelIndex = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n bg = model.cells[modelIndex + RenderModelConstants.BG_OFFSET];\n fg = model.cells[modelIndex + RenderModelConstants.FG_OFFSET];\n inverse = !!(fg & FgFlags.INVERSE);\n if (bg !== currentBg || (fg !== currentFg && (currentInverse || inverse))) {\n // A rectangle needs to be drawn if going from non-default to another color\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, x, y);\n }\n currentStartX = x;\n currentBg = bg;\n currentFg = fg;\n currentInverse = inverse;\n }\n }\n // Finish rectangle if it's still going\n if (currentBg !== 0 || (currentInverse && currentFg !== 0)) {\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._updateRectangle(vertices, offset, currentFg, currentBg, currentStartX, terminal.cols, y);\n }\n }\n vertices.count = rectangleCount;\n }\n\n public updateCursor(model: IRenderModel): void {\n const vertices = this._verticesCursor;\n const cursor = model.cursor;\n if (!cursor || cursor.style === 'block') {\n vertices.count = 0;\n return;\n }\n\n let offset: number;\n let rectangleCount = 0;\n\n if (cursor.style === 'bar' || cursor.style === 'outline') {\n // Left edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.style === 'bar' ? cursor.dpr * cursor.cursorWidth : cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n if (cursor.style === 'underline' || cursor.style === 'outline') {\n // Bottom edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n (cursor.y + 1) * this._dimensions.device.cell.height - cursor.dpr,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n }\n if (cursor.style === 'outline') {\n // Top edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n cursor.x * this._dimensions.device.cell.width,\n cursor.y * this._dimensions.device.cell.height,\n cursor.width * this._dimensions.device.cell.width,\n cursor.dpr,\n this._cursorFloat\n );\n // Right edge\n offset = rectangleCount++ * INDICES_PER_RECTANGLE;\n this._addRectangleFloat(\n vertices.attributes,\n offset,\n (cursor.x + cursor.width) * this._dimensions.device.cell.width - cursor.dpr,\n cursor.y * this._dimensions.device.cell.height,\n cursor.dpr,\n this._dimensions.device.cell.height,\n this._cursorFloat\n );\n }\n\n vertices.count = rectangleCount;\n }\n\n private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void {\n if (fg & FgFlags.INVERSE) {\n switch (fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[fg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (fg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.foreground.rgba;\n }\n } else {\n switch (bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n $rgba = this._themeService.colors.ansi[bg & Attributes.PCOLOR_MASK].rgba;\n break;\n case Attributes.CM_RGB:\n $rgba = (bg & Attributes.RGB_MASK) << 8;\n break;\n case Attributes.CM_DEFAULT:\n default:\n $rgba = this._themeService.colors.background.rgba;\n }\n }\n\n if (vertices.attributes.length < offset + INDICES_PER_RECTANGLE) {\n // +1 for the viewport-clear rectangle at offset 0.\n vertices.attributes = expandFloat32Array(vertices.attributes, (this._terminal.rows * this._terminal.cols + 1) * INDICES_PER_RECTANGLE);\n }\n $x1 = startX * this._dimensions.device.cell.width;\n $y1 = y * this._dimensions.device.cell.height;\n $r = (($rgba >> 24) & 0xFF) / 255;\n $g = (($rgba >> 16) & 0xFF) / 255;\n $b = (($rgba >> 8 ) & 0xFF) / 255;\n $a = 1;\n\n this._addRectangle(vertices.attributes, offset, $x1, $y1, (endX - startX) * this._dimensions.device.cell.width, this._dimensions.device.cell.height, $r, $g, $b, $a);\n }\n\n private _addRectangle(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, r: number, g: number, b: number, a: number): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = r;\n array[offset + 5] = g;\n array[offset + 6] = b;\n array[offset + 7] = a;\n }\n\n private _addRectangleFloat(array: Float32Array, offset: number, x1: number, y1: number, width: number, height: number, color: Float32Array): void {\n array[offset ] = x1 / this._dimensions.device.canvas.width;\n array[offset + 1] = y1 / this._dimensions.device.canvas.height;\n array[offset + 2] = width / this._dimensions.device.canvas.width;\n array[offset + 3] = height / this._dimensions.device.canvas.height;\n array[offset + 4] = color[0];\n array[offset + 5] = color[1];\n array[offset + 6] = color[2];\n array[offset + 7] = color[3];\n }\n\n private _colorToFloat32Array(color: IColor): Float32Array {\n return new Float32Array([\n ((color.rgba >> 24) & 0xFF) / 255,\n ((color.rgba >> 16) & 0xFF) / 255,\n ((color.rgba >> 8 ) & 0xFF) / 255,\n ((color.rgba ) & 0xFF) / 255\n ]);\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ReadonlyColorSet } from 'browser/Types';\nimport { acquireTextureAtlas } from '../CharAtlasCache';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { CellData } from 'common/buffer/CellData';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { IRenderLayer } from './Types';\nimport { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';\nimport { TEXT_BASELINE } from '../Constants';\nimport type { ITextureAtlas } from '../Types';\n\nexport abstract class BaseRenderLayer extends Disposable implements IRenderLayer {\n private _canvas: HTMLCanvasElement;\n protected _ctx!: CanvasRenderingContext2D;\n private _deviceCharWidth: number = 0;\n private _deviceCharHeight: number = 0;\n private _deviceCellWidth: number = 0;\n private _deviceCellHeight: number = 0;\n private _deviceCharLeft: number = 0;\n private _deviceCharTop: number = 0;\n\n protected _charAtlas: ITextureAtlas | undefined;\n\n constructor(\n terminal: Terminal,\n private _container: HTMLElement,\n id: string,\n zIndex: number,\n private _alpha: boolean,\n protected readonly _coreBrowserService: ICoreBrowserService,\n protected readonly _optionsService: IOptionsService,\n protected readonly _themeService: IThemeService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add(`xterm-${id}-layer`);\n this._canvas.style.zIndex = zIndex.toString();\n this._initCanvas();\n this._container.appendChild(this._canvas);\n this._register(this._themeService.onChangeColors(e => {\n this._refreshCharAtlas(terminal, e);\n this.reset(terminal);\n }));\n this._register(toDisposable(() => {\n this._canvas.remove();\n }));\n }\n\n private _initCanvas(): void {\n this._ctx = throwIfFalsy(this._canvas.getContext('2d', { alpha: this._alpha }));\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n }\n\n public handleBlur(terminal: Terminal): void {}\n public handleFocus(terminal: Terminal): void {}\n public handleCursorMove(terminal: Terminal): void {}\n public handleGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}\n public handleSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}\n\n protected _setTransparency(terminal: Terminal, alpha: boolean): void {\n // Do nothing when alpha doesn't change\n if (alpha === this._alpha) {\n return;\n }\n\n // Create new canvas and replace old one\n const oldCanvas = this._canvas;\n this._alpha = alpha;\n // Cloning preserves properties\n this._canvas = this._canvas.cloneNode() as HTMLCanvasElement;\n this._initCanvas();\n this._container.replaceChild(this._canvas, oldCanvas);\n\n // Regenerate char atlas and force a full redraw\n this._refreshCharAtlas(terminal, this._themeService.colors);\n this.handleGridChanged(terminal, 0, terminal.rows - 1);\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n * @param terminal The terminal.\n * @param colorSet The color set to use for the char atlas.\n */\n private _refreshCharAtlas(terminal: Terminal, colorSet: ReadonlyColorSet): void {\n if (this._deviceCharWidth <= 0 && this._deviceCharHeight <= 0) {\n return;\n }\n\n this._charAtlas = acquireTextureAtlas(terminal, this._optionsService.rawOptions, colorSet, this._deviceCellWidth, this._deviceCellHeight, this._deviceCharWidth, this._deviceCharHeight, this._coreBrowserService.dpr, 2048);\n this._charAtlas.warmUp();\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n this._deviceCellWidth = dim.device.cell.width;\n this._deviceCellHeight = dim.device.cell.height;\n this._deviceCharWidth = dim.device.char.width;\n this._deviceCharHeight = dim.device.char.height;\n this._deviceCharLeft = dim.device.char.left;\n this._deviceCharTop = dim.device.char.top;\n this._canvas.width = dim.device.canvas.width;\n this._canvas.height = dim.device.canvas.height;\n this._canvas.style.width = `${dim.css.canvas.width}px`;\n this._canvas.style.height = `${dim.css.canvas.height}px`;\n\n // Draw the background if this is an opaque layer\n if (!this._alpha) {\n this._clearAll();\n }\n\n this._refreshCharAtlas(terminal, this._themeService.colors);\n }\n\n public abstract reset(terminal: Terminal): void;\n\n /**\n * Fills a 1px line (2px on HDPI) at the bottom of the cell. This uses the\n * existing fillStyle on the context.\n * @param x The column to fill.\n * @param y The row to fill.\n */\n protected _fillBottomLineAtCells(x: number, y: number, width: number = 1): void {\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n (y + 1) * this._deviceCellHeight - this._coreBrowserService.dpr - 1 /* Ensure it's drawn within the cell */,\n width * this._deviceCellWidth,\n this._coreBrowserService.dpr);\n }\n\n /**\n * Clears the entire canvas.\n */\n protected _clearAll(): void {\n if (this._alpha) {\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n }\n }\n\n /**\n * Clears 1+ cells completely.\n * @param x The column to start at.\n * @param y The row to start at.\n * @param width The number of columns to clear.\n * @param height The number of rows to clear.\n */\n protected _clearCells(x: number, y: number, width: number, height: number): void {\n if (this._alpha) {\n this._ctx.clearRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n } else {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n this._ctx.fillRect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n height * this._deviceCellHeight);\n }\n }\n\n /**\n * Draws a truecolor character at the cell. The character will be clipped to\n * ensure that it fits with the cell, including the cell to the right if it's\n * a wide character. This uses the existing fillStyle on the context.\n * @param terminal The terminal.\n * @param cell The cell data for the character to draw.\n * @param x The column to draw at.\n * @param y The row to draw at.\n */\n protected _fillCharTrueColor(terminal: Terminal, cell: CellData, x: number, y: number): void {\n this._ctx.font = this._getFont(terminal, false, false);\n this._ctx.textBaseline = TEXT_BASELINE;\n this._clipCell(x, y, cell.getWidth());\n this._ctx.fillText(\n cell.getChars(),\n x * this._deviceCellWidth + this._deviceCharLeft,\n y * this._deviceCellHeight + this._deviceCharTop + this._deviceCharHeight);\n }\n\n /**\n * Clips a cell to ensure no pixels will be drawn outside of it.\n * @param x The column to clip.\n * @param y The row to clip.\n * @param width The number of columns to clip.\n */\n private _clipCell(x: number, y: number, width: number): void {\n this._ctx.beginPath();\n this._ctx.rect(\n x * this._deviceCellWidth,\n y * this._deviceCellHeight,\n width * this._deviceCellWidth,\n this._deviceCellHeight);\n this._ctx.clip();\n }\n\n /**\n * Gets the current font.\n * @param terminal The terminal.\n * @param isBold If we should use the bold fontWeight.\n */\n protected _getFont(terminal: Terminal, isBold: boolean, isItalic: boolean): string {\n const fontWeight = isBold ? terminal.options.fontWeightBold : terminal.options.fontWeight;\n const fontStyle = isItalic ? 'italic' : '';\n\n return `${fontStyle} ${fontWeight} ${terminal.options.fontSize! * this._coreBrowserService.dpr}px ${terminal.options.fontFamily}`;\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { is256Color } from '../CharAtlasUtils';\nimport { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';\nimport { IRenderDimensions } from 'browser/renderer/shared/Types';\nimport { ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { ILinkifier2, ILinkifierEvent } from 'browser/Types';\nimport { IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { BaseRenderLayer } from './BaseRenderLayer';\n\nexport class LinkRenderLayer extends BaseRenderLayer {\n private _state: ILinkifierEvent | undefined;\n\n constructor(\n container: HTMLElement,\n zIndex: number,\n terminal: Terminal,\n linkifier2: ILinkifier2,\n coreBrowserService: ICoreBrowserService,\n optionsService: IOptionsService,\n themeService: IThemeService\n ) {\n super(terminal, container, 'link', zIndex, true, coreBrowserService, optionsService, themeService);\n\n this._register(linkifier2.onShowLinkUnderline(e => this._handleShowLinkUnderline(e)));\n this._register(linkifier2.onHideLinkUnderline(e => this._handleHideLinkUnderline(e)));\n }\n\n public resize(terminal: Terminal, dim: IRenderDimensions): void {\n super.resize(terminal, dim);\n // Resizing the canvas discards the contents of the canvas so clear state\n this._state = undefined;\n }\n\n public reset(terminal: Terminal): void {\n this._clearCurrentLink();\n }\n\n private _clearCurrentLink(): void {\n if (this._state) {\n this._clearCells(this._state.x1, this._state.y1, this._state.cols - this._state.x1, 1);\n const middleRowCount = this._state.y2 - this._state.y1 - 1;\n if (middleRowCount > 0) {\n this._clearCells(0, this._state.y1 + 1, this._state.cols, middleRowCount);\n }\n this._clearCells(0, this._state.y2, this._state.x2, 1);\n this._state = undefined;\n }\n }\n\n private _handleShowLinkUnderline(e: ILinkifierEvent): void {\n if (e.fg === INVERTED_DEFAULT_COLOR) {\n this._ctx.fillStyle = this._themeService.colors.background.css;\n } else if (e.fg !== undefined && is256Color(e.fg)) {\n // 256 color support\n this._ctx.fillStyle = this._themeService.colors.ansi[e.fg!].css;\n } else {\n this._ctx.fillStyle = this._themeService.colors.foreground.css;\n }\n\n if (e.y1 === e.y2) {\n // Single line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.x2 - e.x1);\n } else {\n // Multi-line link\n this._fillBottomLineAtCells(e.x1, e.y1, e.cols - e.x1);\n for (let y = e.y1 + 1; y < e.y2; y++) {\n this._fillBottomLineAtCells(0, y, e.cols);\n }\n this._fillBottomLineAtCells(0, e.y2, e.x2);\n }\n this._state = e;\n }\n\n private _handleHideLinkUnderline(e: ILinkifierEvent): void {\n this._clearCurrentLink();\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from 'browser/Types';\nimport { CellColorResolver } from './CellColorResolver';\nimport { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';\nimport { CursorBlinkStateManager } from './CursorBlinkStateManager';\nimport { observeDevicePixelDimensions } from './DevicePixelObserver';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';\nimport { CharData, IBufferLine, ICellData } from 'common/buffer/Types';\nimport { AttributeData } from 'common/buffer/AttributeData';\nimport { CellData } from 'common/buffer/CellData';\nimport { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';\nimport { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { Terminal } from '@xterm/xterm';\nimport { GlyphRenderer } from './GlyphRenderer';\nimport { RectangleRenderer } from './RectangleRenderer';\nimport { COMBINED_CHAR_BIT_MASK, RenderModel, RenderModelConstants } from './RenderModel';\nimport { IWebGL2RenderingContext, type ITextureAtlas } from './Types';\nimport { LinkRenderLayer } from './renderLayer/LinkRenderLayer';\nimport { IRenderLayer } from './renderLayer/Types';\nimport { Emitter, EventUtils } from 'common/Event';\nimport { addDisposableListener } from 'browser/Dom';\nimport { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\nimport { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';\n\nconst enum Constants {\n MERGE_RETRY_LIMIT = 32\n}\n\nexport class WebglRenderer extends Disposable implements IRenderer {\n private _renderLayers: IRenderLayer[];\n private _cursorBlinkStateManager: MutableDisposable = this._register(new MutableDisposable());\n private _textBlinkStateManager: TextBlinkStateManager;\n private _charAtlasDisposable = this._register(new MutableDisposable());\n private _charAtlas: ITextureAtlas | undefined;\n private _devicePixelRatio: number;\n private _deviceMaxTextureSize: number;\n private _observerDisposable = this._register(new MutableDisposable());\n\n private _model: RenderModel = new RenderModel();\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n private _workCell: ICellData = new CellData();\n private _cellColorResolver: CellColorResolver;\n\n private _canvas: HTMLCanvasElement;\n private _gl: IWebGL2RenderingContext;\n private _rectangleRenderer: MutableDisposable = this._register(new MutableDisposable());\n private _glyphRenderer: MutableDisposable = this._register(new MutableDisposable());\n\n public readonly dimensions: IRenderDimensions;\n\n private _core: ITerminal;\n private _isAttached: boolean;\n private _contextRestorationTimeout: number | undefined;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n constructor(\n private _terminal: Terminal,\n private readonly _characterJoinerService: ICharacterJoinerService,\n private readonly _charSizeService: ICharSizeService,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _decorationService: IDecorationService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _themeService: IThemeService,\n private readonly _customGlyphs: boolean = true,\n preserveDrawingBuffer?: boolean\n ) {\n super();\n\n // IMPORTANT: Canvas initialization and fetching of the context must be first in order to\n // prevent possible listeners leaking and continuing to operate after the WebglRenderer has been\n // discarded.\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer\n };\n this._gl = this._canvas.getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!this._gl) {\n throw new Error('WebGL2 not supported ' + this._gl);\n }\n\n this._register(this._themeService.onChangeColors(() => this._handleColorChange()));\n\n this._cellColorResolver = new CellColorResolver(this._terminal, this._optionsService, this._model.selection, this._decorationService, this._coreBrowserService, this._themeService);\n\n this._core = (this._terminal as any)._core;\n\n this._renderLayers = [\n new LinkRenderLayer(this._core.screenElement!, 2, this._terminal, this._core.linkifier!, this._coreBrowserService, _optionsService, this._themeService)\n ];\n this.dimensions = createRenderDimensions();\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this._updateDimensions();\n this._updateCursorBlink();\n this._register(_optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._requestRedrawViewport(),\n this._coreBrowserService,\n this._optionsService\n ));\n this._resetBlinkingRowState();\n\n this._deviceMaxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE);\n\n this._register(addDisposableListener(this._canvas, 'webglcontextlost', (e) => {\n this._logService.debug('webglcontextlost event received');\n // Prevent the default behavior in order to enable WebGL context restoration.\n e.preventDefault();\n // Wait a few seconds to see if the 'webglcontextrestored' event is fired.\n // If not, dispatch the onContextLoss notification to observers.\n this._contextRestorationTimeout = setTimeout(() => {\n this._contextRestorationTimeout = undefined;\n this._logService.warn('webgl context not restored; firing onContextLoss');\n this._onContextLoss.fire(e);\n }, 3000 /* ms */);\n }));\n this._register(addDisposableListener(this._canvas, 'webglcontextrestored', (e) => {\n this._logService.warn('webglcontextrestored event received');\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n // The texture atlas and glyph renderer must be fully reinitialized\n // because their contents have been lost.\n removeTerminalFromCache(this._terminal);\n this._initializeWebGLState();\n this._requestRedrawViewport();\n }));\n\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, this._coreBrowserService.window, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n this._register(this._coreBrowserService.onWindowChange(w => {\n this._observerDisposable.value = observeDevicePixelDimensions(this._canvas, w, (w, h) => this._setCanvasDevicePixelDimensions(w, h));\n }));\n\n this._register(addDisposableListener(this._coreBrowserService.mainDocument, 'mousedown', () => this._cursorBlinkStateManager.value?.restartBlinkAnimation()));\n\n this._core.screenElement!.appendChild(this._canvas);\n\n [this._rectangleRenderer.value, this._glyphRenderer.value] = this._initializeWebGLState();\n\n this._isAttached = this._core.screenElement!.isConnected;\n\n this._register(toDisposable(() => {\n clearTimeout(this._contextRestorationTimeout);\n this._contextRestorationTimeout = undefined;\n for (const l of this._renderLayers) {\n l.dispose();\n }\n this._canvas.parentElement?.removeChild(this._canvas);\n removeTerminalFromCache(this._terminal);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._charAtlas?.pages[0].canvas;\n }\n\n private _handleColorChange(): void {\n this._refreshCharAtlas();\n\n // Force a full refresh\n this._clearModel(true);\n }\n\n public handleDevicePixelRatioChange(): void {\n // If the device pixel ratio changed, the char atlas needs to be regenerated\n // and the terminal needs to refreshed\n if (this._devicePixelRatio !== this._coreBrowserService.dpr) {\n this._devicePixelRatio = this._coreBrowserService.dpr;\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n // Update character and canvas dimensions\n this._updateDimensions();\n\n this._model.resize(this._terminal.cols, this._terminal.rows);\n this._resetBlinkingRowState();\n\n // Resize all render layers\n for (const l of this._renderLayers) {\n l.resize(this._terminal, this.dimensions);\n }\n\n // Resize the canvas\n this._canvas.width = this.dimensions.device.canvas.width;\n this._canvas.height = this.dimensions.device.canvas.height;\n this._canvas.style.width = `${this.dimensions.css.canvas.width}px`;\n this._canvas.style.height = `${this.dimensions.css.canvas.height}px`;\n\n // Resize the screen\n this._core.screenElement!.style.width = `${this.dimensions.css.canvas.width}px`;\n this._core.screenElement!.style.height = `${this.dimensions.css.canvas.height}px`;\n\n this._rectangleRenderer.value?.setDimensions(this.dimensions);\n this._rectangleRenderer.value?.handleResize();\n this._glyphRenderer.value?.setDimensions(this.dimensions);\n this._glyphRenderer.value?.handleResize();\n\n this._refreshCharAtlas();\n\n // Force a full refresh. Resizing `_glyphRenderer` should clear it already,\n // so there is no need to clear it again here.\n this._clearModel(false);\n\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n public handleCharSizeChanged(): void {\n this.handleResize(this._terminal.cols, this._terminal.rows);\n }\n\n public handleBlur(): void {\n for (const l of this._renderLayers) {\n l.handleBlur(this._terminal);\n }\n this._cursorBlinkStateManager.value?.pause();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleFocus(): void {\n for (const l of this._renderLayers) {\n l.handleFocus(this._terminal);\n }\n this._cursorBlinkStateManager.value?.resume();\n // Request a redraw for active/inactive selection background\n this._requestRedrawViewport();\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n for (const l of this._renderLayers) {\n l.handleSelectionChanged(this._terminal, start, end, columnSelectMode);\n }\n this._model.selection.update(this._core, start, end, columnSelectMode);\n this._requestRedrawViewport();\n }\n\n public handleCursorMove(): void {\n for (const l of this._renderLayers) {\n l.handleCursorMove(this._terminal);\n }\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._updateCursorBlink();\n }\n\n /**\n * Initializes members dependent on WebGL context state.\n */\n private _initializeWebGLState(): [RectangleRenderer, GlyphRenderer] {\n this._rectangleRenderer.value = new RectangleRenderer(this._terminal, this._gl, this.dimensions, this._themeService, this._logService);\n this._glyphRenderer.value = new GlyphRenderer(this._terminal, this._gl, this.dimensions, this._optionsService, this._logService);\n\n // Update dimensions and acquire char atlas\n this.handleCharSizeChanged();\n\n return [this._rectangleRenderer.value, this._glyphRenderer.value];\n }\n\n /**\n * Refreshes the char atlas, aquiring a new one if necessary.\n */\n private _refreshCharAtlas(): void {\n if (this.dimensions.device.char.width <= 0 && this.dimensions.device.char.height <= 0) {\n // Mark as not attached so char atlas gets refreshed on next render\n this._isAttached = false;\n return;\n }\n\n const atlas = acquireTextureAtlas(\n this._terminal,\n this._optionsService.rawOptions,\n this._themeService.colors,\n this.dimensions.device.cell.width,\n this.dimensions.device.cell.height,\n this.dimensions.device.char.width,\n this.dimensions.device.char.height,\n this._coreBrowserService.dpr,\n this._deviceMaxTextureSize,\n this._customGlyphs\n );\n if (this._charAtlas !== atlas) {\n this._onChangeTextureAtlas.fire(atlas.pages[0].canvas);\n this._charAtlasDisposable.value = combinedDisposable(\n EventUtils.forward(atlas.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas),\n EventUtils.forward(atlas.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas)\n );\n }\n this._charAtlas = atlas;\n this._charAtlas.warmUp();\n this._glyphRenderer.value?.setAtlas(this._charAtlas);\n }\n\n /**\n * Clear the model.\n * @param clearGlyphRenderer Whether to also clear the glyph renderer. This\n * should be true generally to make sure it is in the same state as the model.\n */\n private _clearModel(clearGlyphRenderer: boolean): void {\n this._model.clear();\n if (clearGlyphRenderer) {\n this._glyphRenderer.value?.clear();\n }\n }\n\n public clearTextureAtlas(): void {\n this._charAtlas?.clearTexture();\n this._clearModel(true);\n this._requestRedrawViewport();\n }\n\n public clear(): void {\n this._clearModel(true);\n for (const l of this._renderLayers) {\n l.reset(this._terminal);\n }\n\n this._resetBlinkingRowState();\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n\n this._cursorBlinkStateManager.value?.restartBlinkAnimation();\n this._updateCursorBlink();\n }\n\n public renderRows(start: number, end: number): void {\n if (!this._isAttached) {\n if (this._core.screenElement?.isConnected && this._charSizeService.width && this._charSizeService.height) {\n this._updateDimensions();\n this._refreshCharAtlas();\n this._isAttached = true;\n } else {\n return;\n }\n }\n\n // Update render layers\n for (const l of this._renderLayers) {\n l.handleGridChanged(this._terminal, start, end);\n }\n\n if (!this._glyphRenderer.value || !this._rectangleRenderer.value) {\n return;\n }\n\n // Tell renderer the frame is beginning\n // upon a model clear also refresh the full viewport model\n // (also triggered by an atlas page merge, part of #4480)\n if (this._glyphRenderer.value.beginFrame()) {\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n } else {\n // just update changed lines to draw\n this._updateModel(start, end);\n }\n\n // A mid-update atlas page merge invalidates vertex data and may not bump the host\n // page's version, so re-run the update and force a full texture rebind.\n let merged = false;\n let mergeRetries = 0;\n // Test the retry budget before beginFrame: beginFrame latches the page layout version it\n // observed, so tripping the limit after consuming it would strand a stale model with no\n // later frame able to notice it needs rebuilding.\n while (this._charAtlas && mergeRetries++ < Constants.MERGE_RETRY_LIMIT && this._glyphRenderer.value.beginFrame()) {\n merged = true;\n this._clearModel(true);\n this._updateModel(0, this._terminal.rows - 1);\n }\n if (merged) {\n this._glyphRenderer.value.invalidateAtlasTextures();\n }\n\n // Render\n this._rectangleRenderer.value.renderBackgrounds();\n this._glyphRenderer.value.render(this._model);\n if (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible) {\n this._rectangleRenderer.value.renderCursor();\n }\n }\n\n private _updateCursorBlink(): void {\n if (this._coreService.decPrivateModes.cursorBlink ?? this._terminal.options.cursorBlink) {\n this._cursorBlinkStateManager.value = new CursorBlinkStateManager(() => {\n this._requestRedrawCursor();\n }, this._coreBrowserService);\n } else {\n this._cursorBlinkStateManager.clear();\n }\n // Request a refresh from the terminal as management of rendering is being\n // moved back to the terminal\n this._requestRedrawCursor();\n }\n\n private _updateModel(start: number, end: number): void {\n const terminal = this._core;\n let cell: ICellData = this._workCell;\n\n // Declare variable ahead of time to avoid garbage collection\n let lastBg: number;\n let y: number;\n let row: number;\n let line: IBufferLine;\n let joinedRanges: [number, number][];\n let isJoined: boolean;\n let skipJoinedCheckUntilX: number;\n let isValidJoinRange: boolean;\n let lastCharX: number;\n let range: [number, number];\n let isCursorRow: boolean;\n let chars: string;\n let code: number;\n let width: number;\n let i: number;\n let x: number;\n let j: number;\n start = clamp(start, terminal.rows - 1, 0);\n end = clamp(end, terminal.rows - 1, 0);\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? terminal.options.cursorStyle ?? 'block';\n\n const cursorY = this._terminal.buffer.active.baseY + this._terminal.buffer.active.cursorY;\n const viewportRelativeCursorY = cursorY - terminal.buffer.ydisp;\n // in case cursor.x == cols adjust visual cursor to cols - 1\n const cursorX = Math.min(this._terminal.buffer.active.cursorX, terminal.cols - 1);\n let lastCursorX = -1;\n const isCursorVisible =\n this._coreService.isCursorInitialized &&\n !this._coreService.isCursorHidden &&\n (!this._cursorBlinkStateManager.value || this._cursorBlinkStateManager.value.isCursorVisible);\n this._model.cursor = undefined;\n let modelUpdated = false;\n\n for (y = start; y <= end; y++) {\n row = y + terminal.buffer.ydisp;\n const bufferLine = terminal.buffer.lines.get(row);\n if (!bufferLine) {\n this._model.lineLengths[y] = 0;\n for (x = 0; x < terminal.cols; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n modelUpdated = true;\n this._nullModelCell(x, y, j, 0, 0, 0);\n }\n this._setRowBlinkState(y, false);\n continue;\n }\n line = bufferLine;\n let rowHasBlinkingCells = false;\n this._model.lineLengths[y] = 0;\n isCursorRow = cursorY === row;\n skipJoinedCheckUntilX = 0;\n joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n for (x = 0; x < terminal.cols; x++) {\n lastBg = this._cellColorResolver.result.bg;\n line.loadCell(x, cell);\n\n if (x === 0) {\n lastBg = this._cellColorResolver.result.bg;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n range = joinedRanges.shift()!;\n\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._model.selection.isCellSelected(this._terminal, range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._model.selection.isCellSelected(this._terminal, i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly.\n cell = new JoinedCellData(\n cell,\n line!.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n }\n }\n\n chars = cell.getChars();\n code = cell.getCode();\n i = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n\n if (!rowHasBlinkingCells && cell.isBlink()) {\n rowHasBlinkingCells = true;\n }\n\n // Load colors/resolve overrides into work colors\n this._cellColorResolver.resolve(cell, x, row, this.dimensions.device.cell.width, this.dimensions.device.cell.height);\n\n // Override colors for cursor cell\n if (isCursorVisible && row === cursorY) {\n if (x === cursorX) {\n this._model.cursor = {\n x: cursorX,\n y: viewportRelativeCursorY,\n width: cell.getWidth(),\n style: this._coreBrowserService.isFocused ? cursorStyle : terminal.options.cursorInactiveStyle,\n cursorWidth: terminal.options.cursorWidth,\n dpr: this._devicePixelRatio\n };\n lastCursorX = cursorX + cell.getWidth() - 1;\n }\n if (x >= cursorX && x <= lastCursorX &&\n ((this._coreBrowserService.isFocused &&\n cursorStyle === 'block') ||\n (this._coreBrowserService.isFocused === false &&\n terminal.options.cursorInactiveStyle === 'block'))\n ) {\n this._cellColorResolver.result.fg =\n Attributes.CM_RGB | (this._themeService.colors.cursorAccent.rgba >> 8 & Attributes.RGB_MASK);\n this._cellColorResolver.result.bg =\n Attributes.CM_RGB | (this._themeService.colors.cursor.rgba >> 8 & Attributes.RGB_MASK);\n }\n }\n\n if (this._textBlinkStateManager.isEnabled && !this._textBlinkStateManager.isBlinkOn && cell.isBlink()) {\n this._cellColorResolver.result.fg |= FgFlags.INVISIBLE;\n }\n\n if (code !== NULL_CELL_CODE) {\n this._model.lineLengths[y] = x + 1;\n }\n\n // Nothing has changed, no updates needed\n if (this._model.cells[i] === code &&\n this._model.cells[i + RenderModelConstants.BG_OFFSET] === this._cellColorResolver.result.bg &&\n this._model.cells[i + RenderModelConstants.FG_OFFSET] === this._cellColorResolver.result.fg &&\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] === this._cellColorResolver.result.ext) {\n continue;\n }\n\n modelUpdated = true;\n\n // Flag combined chars with a bit mask so they're easily identifiable\n if (chars.length > 1) {\n code |= COMBINED_CHAR_BIT_MASK;\n }\n\n // Cache the results in the model\n this._model.cells[i] = code;\n this._model.cells[i + RenderModelConstants.BG_OFFSET] = this._cellColorResolver.result.bg;\n this._model.cells[i + RenderModelConstants.FG_OFFSET] = this._cellColorResolver.result.fg;\n this._model.cells[i + RenderModelConstants.EXT_OFFSET] = this._cellColorResolver.result.ext;\n\n width = cell.getWidth();\n this._glyphRenderer.value!.updateCell(x, y, code, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext, chars, width, lastBg);\n\n if (isJoined) {\n // Restore work cell\n cell = this._workCell;\n\n // Null out non-first cells\n for (x++; x <= lastCharX; x++) {\n j = ((y * terminal.cols) + x) * RenderModelConstants.INDICIES_PER_CELL;\n // Don't re-resolve the cell color since multi-colored ligature backgrounds are not\n // supported\n this._nullModelCell(x, y, j, this._cellColorResolver.result.bg, this._cellColorResolver.result.fg, this._cellColorResolver.result.ext);\n }\n x--; // Go back to the previous update cell for next iteration\n }\n }\n this._setRowBlinkState(y, rowHasBlinkingCells);\n }\n if (modelUpdated) {\n this._rectangleRenderer.value!.updateBackgrounds(this._model);\n }\n this._rectangleRenderer.value!.updateCursor(this._model);\n this._updateTextBlinkState();\n }\n\n private _nullModelCell(x: number, y: number, cellIndex: number, bg: number, fg: number, ext: number): void {\n this._glyphRenderer.value!.updateCell(x, y, NULL_CELL_CODE, bg, fg, ext, NULL_CELL_CHAR, 0, 0);\n this._model.cells[cellIndex] = NULL_CELL_CODE;\n this._model.cells[cellIndex + RenderModelConstants.BG_OFFSET] = bg;\n this._model.cells[cellIndex + RenderModelConstants.FG_OFFSET] = fg;\n this._model.cells[cellIndex + RenderModelConstants.EXT_OFFSET] = ext;\n }\n\n private _resetBlinkingRowState(): void {\n this._rowHasBlinkingCells = new Array(this._terminal.rows).fill(false);\n this._rowHasBlinkingCellsCount = 0;\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n\n /**\n * Recalculates the character and canvas dimensions.\n */\n private _updateDimensions(): void {\n // Perform a new measure if the CharMeasure dimensions are not yet available\n if (!this._charSizeService.width || !this._charSizeService.height) {\n return;\n }\n\n // Calculate the device character width. Width is floored as it must be drawn to an integer grid\n // in order for the char atlas glyphs to not be blurry.\n this.dimensions.device.char.width = Math.floor(this._charSizeService.width * this._devicePixelRatio);\n\n // Calculate the device character height. Height is ceiled in case devicePixelRatio is a\n // floating point number in order to ensure there is enough space to draw the character to the\n // cell.\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * this._devicePixelRatio);\n\n // Calculate the device cell height, if lineHeight is _not_ 1, the resulting value will be\n // floored since lineHeight can never be lower then 1, this guarentees the device cell height\n // will always be larger than device char height.\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n\n // Calculate the y offset within a cell that glyph should draw at in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2);\n\n // Calculate the device cell width, taking the letterSpacing into account.\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n\n // Calculate the x offset with a cell that text should draw from in order for it to be centered\n // correctly within the cell.\n this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2);\n\n // Recalculate the canvas dimensions, the device dimensions define the actual number of pixel in\n // the canvas\n this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;\n this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;\n\n // The size of the canvas on the page. It's important that this rounds to nearest integer\n // and not ceils as browsers often have floating point precision issues where\n // `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when\n // it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too\n // large for the canvas element size.\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);\n\n // Get the CSS dimensions of an individual cell. This needs to be derived from the calculated\n // device pixel canvas value above. CharMeasure.width/height by itself is insufficient when the\n // page is not at 100% zoom level as CharMeasure is measured in CSS pixels, but the actual char\n // size on the canvas can differ.\n this.dimensions.css.cell.height = this.dimensions.device.cell.height / this._devicePixelRatio;\n this.dimensions.css.cell.width = this.dimensions.device.cell.width / this._devicePixelRatio;\n }\n\n private _setCanvasDevicePixelDimensions(width: number, height: number): void {\n if (this._canvas.width === width && this._canvas.height === height) {\n return;\n }\n // While the actual canvas size has changed, keep device canvas dimensions as the value before\n // the change as it's an exact multiple of the cell sizes.\n this._canvas.width = width;\n this._canvas.height = height;\n // Render synchronously to avoid flicker when the canvas is cleared\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1, sync: true });\n }\n\n private _requestRedrawViewport(): void {\n this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });\n }\n\n private _requestRedrawCursor(): void {\n const cursorY = this._terminal.buffer.active.cursorY;\n this._onRequestRedraw.fire({ start: cursorY, end: cursorY });\n }\n}\n\n// TODO: Share impl with core\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nfunction clamp(value: number, max: number, min: number = 0): number {\n return Math.max(Math.min(value, max), min);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, Terminal } from '@xterm/xterm';\nimport type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';\nimport { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';\nimport { ITerminal } from 'browser/Types';\nimport { Disposable, toDisposable } from 'common/Lifecycle';\nimport { getSafariVersion, isSafari } from 'common/Platform';\nimport { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';\nimport { IWebGL2RenderingContext } from './Types';\nimport { WebglRenderer } from './WebglRenderer';\nimport { Emitter, EventUtils } from 'common/Event';\n\nexport class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi {\n private _terminal?: Terminal;\n private _renderer?: WebglRenderer;\n\n private readonly _onChangeTextureAtlas = this._register(new Emitter());\n public readonly onChangeTextureAtlas = this._onChangeTextureAtlas.event;\n private readonly _onAddTextureAtlasCanvas = this._register(new Emitter());\n public readonly onAddTextureAtlasCanvas = this._onAddTextureAtlasCanvas.event;\n private readonly _onRemoveTextureAtlasCanvas = this._register(new Emitter());\n public readonly onRemoveTextureAtlasCanvas = this._onRemoveTextureAtlasCanvas.event;\n private readonly _onContextLoss = this._register(new Emitter());\n public readonly onContextLoss = this._onContextLoss.event;\n\n private readonly _customGlyphs: boolean;\n private readonly _preserveDrawingBuffer?: boolean;\n\n constructor(options?: IWebglAddonOptions) {\n if (isSafari && getSafariVersion() < 16) {\n // Perform an extra check to determine if Webgl2 is manually enabled in developer settings\n const contextAttributes = {\n antialias: false,\n depth: false,\n preserveDrawingBuffer: true\n };\n const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;\n if (!gl) {\n throw new Error('WebGL2 is only supported on Safari 16 and above');\n }\n }\n super();\n this._customGlyphs = options?.customGlyphs ?? true;\n this._preserveDrawingBuffer = options?.preserveDrawingBuffer;\n }\n\n public activate(terminal: Terminal): void {\n const core = (terminal as any)._core as ITerminal;\n if (!terminal.element) {\n this._register(core.onWillOpen(() => this.activate(terminal)));\n return;\n }\n\n this._terminal = terminal;\n const coreService: ICoreService = core.coreService;\n const optionsService: IOptionsService = core.optionsService;\n\n const unsafeCore = core as any;\n const renderService: IRenderService = unsafeCore._renderService;\n const characterJoinerService: ICharacterJoinerService = unsafeCore._characterJoinerService;\n const charSizeService: ICharSizeService = unsafeCore._charSizeService;\n const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService;\n const decorationService: IDecorationService = unsafeCore._decorationService;\n const logService: ILogService = unsafeCore._logService;\n const themeService: IThemeService = unsafeCore._themeService;\n\n this._renderer = this._register(new WebglRenderer(\n terminal,\n characterJoinerService,\n charSizeService,\n coreBrowserService,\n coreService,\n decorationService,\n logService,\n optionsService,\n themeService,\n this._customGlyphs,\n this._preserveDrawingBuffer\n ));\n this._register(EventUtils.forward(this._renderer.onContextLoss, this._onContextLoss));\n this._register(EventUtils.forward(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas));\n this._register(EventUtils.forward(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas));\n this._register(EventUtils.forward(this._renderer.onRemoveTextureAtlasCanvas, this._onRemoveTextureAtlasCanvas));\n renderService.setRenderer(this._renderer);\n\n this._register(toDisposable(() => {\n if ((this._terminal as any)._core._store._isDisposed) {\n return;\n }\n const renderService: IRenderService = (this._terminal as any)._core._renderService;\n renderService.setRenderer((this._terminal as any)._core._createRenderer());\n renderService.handleResize(terminal.cols, terminal.rows);\n }));\n }\n\n public get textureAtlas(): HTMLCanvasElement | undefined {\n return this._renderer?.textureAtlas;\n }\n\n public clearTextureAtlas(): void {\n this._renderer?.clearTextureAtlas();\n }\n}\n"], ++ "mappings": "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", + "names": ["toDisposable", "fn", "dispose", "arg", "d", "combinedDisposable", "disposables", "DisposableStore", "o", "Disposable", "MutableDisposable", "value", "isNode", "userAgent", "platform", "isFirefox", "isChrome", "isLegacyEdge", "isSafari", "getSafariVersion", "isSafari", "majorVersion", "userAgent", "isMac", "platform", "isWindows", "isLinux", "isChromeOS", "$r", "$g", "$b", "$a", "NULL_COLOR", "channels", "toCss", "r", "g", "b", "a", "toPaddedHex", "toRgba", "toColor", "color", "blend", "bg", "fg", "fgR", "fgG", "fgB", "bgR", "bgG", "bgB", "css", "rgba", "isOpaque", "ensureContrastRatio", "ratio", "result", "opaque", "rgbaColor", "opacity", "multiplyOpacity", "factor", "toColorRGB", "$ctx", "$litmusColor", "canvas", "ctx", "rgbaMatch", "rgb", "relativeLuminance", "relativeLuminance2", "rs", "gs", "bs", "rr", "rg", "rb", "bgRgba", "fgRgba", "bgL", "fgL", "contrastRatio", "resultA", "reduceLuminance", "resultARatio", "resultB", "increaseLuminance", "resultBRatio", "cr", "toChannels", "value", "c", "s", "l1", "l2", "throwIfFalsy", "value", "isPowerlineGlyph", "codepoint", "isRestrictedPowerlineGlyph", "isNerdFontGlyph", "isBoxOrBlockGlyph", "isEmoji", "allowRescaling", "width", "glyphSizeX", "deviceCellWidth", "treatGlyphAsBackgroundColor", "createRenderDimensions", "createDimension", "computeNextVariantOffset", "cellWidth", "lineWidth", "currentOffset", "GitBranchSymbolsParts", "xp", "yp", "customGlyphDefinitions", "sextant", "segmentedDigit", "_", "i", "blockPatternCodepoints", "pattern", "rects", "rowH", "rowY", "row", "leftBit", "rightBit", "paths", "x1", "x2", "x3", "y1", "y2", "$fg", "$bg", "$hasFg", "$hasBg", "$isSelected", "$colors", "$variantOffset", "CellColorResolver", "_terminal", "_optionService", "_selectionRenderModel", "_decorationService", "_coreBrowserService", "_themeService", "cell", "x", "y", "deviceCellWidth", "deviceCellHeight", "code", "lineWidth", "blockPatternCodepoints", "d", "rgba", "treatGlyphAsBackgroundColor", "DIM_OPACITY", "TEXT_BASELINE", "isFirefox", "isLegacyEdge", "createOffscreenPatternCanvas", "width", "height", "createDomPatternCanvas", "canvas", "createPatternCanvas", "offscreenCanvasFactory", "domCanvasFactory", "tryDrawCustomGlyph", "ctx", "c", "xOffset", "yOffset", "deviceCellWidth", "deviceCellHeight", "deviceCharWidth", "deviceCharHeight", "fontSize", "devicePixelRatio", "logService", "backgroundColor", "variantOffset", "unifiedCharDefinition", "customGlyphDefinitions", "parts", "part", "drawDefinitionPart", "drawWidth", "drawHeight", "drawXOffset", "drawYOffset", "applyClipPath", "drawBlockVectorChar", "drawPatternChar", "drawPathFunctionCharacter", "drawPathDefinitionCharacter", "drawPathNegativeDefinitionCharacter", "drawVectorShape", "drawBrailleCharacter", "charDefinition", "i", "box", "xEighth", "yEighth", "brailleDotPositions", "pattern", "paddingY", "radius", "bit", "x", "y", "cx", "cy", "strokeWidth", "instructions", "currentX", "currentY", "lastControlX", "lastControlY", "lastCommand", "instruction", "type", "args", "rx", "ry", "xAxisRotation", "largeArcFlag", "sweepFlag", "drawSvgArc", "translatedArgs", "e", "val", "cpX", "cpY", "x1", "y1", "phi", "x2", "y2", "cosPhi", "sinPhi", "dx", "dy", "x1p", "y1p", "rxSq", "rySq", "x1pSq", "y1pSq", "lambda", "lambdaSqrt", "sq", "coef", "cxp", "cyp", "ux", "uy", "vx", "vy", "startAngle", "dTheta", "endAngle", "cachedPatterns", "patternSet", "fillStyle", "tmpCanvas", "tmpCtx", "throwIfFalsy", "imageData", "r", "g", "b", "a", "actualInstructions", "yp", "state", "f", "svgToCanvasInstructionMap", "translateArgs", "clipPath", "clipRegion", "cssLineWidth", "clamp", "value", "max", "min", "cellWidth", "cellHeight", "doClamp", "leftPadding", "rightPadding", "clampToCell", "result", "rounded", "TwoKeyMap", "first", "second", "value", "FourKeyMap", "third", "fourth", "TaskQueue", "logService", "task", "deadline", "taskDuration", "longestTask", "lastDeadlineRemaining", "deadlineRemaining", "PriorityTaskQueue", "callback", "identifier", "duration", "end", "IdleTaskQueueInternal", "IdleTaskQueue", "AttributeData", "_AttributeData", "ExtendedAttrs", "value", "newObj", "_ExtendedAttrs", "ext", "urlId", "val", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "i", "len", "EventUtils", "forward", "from", "to", "e", "map", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "NULL_RASTERIZED_GLYPH", "TMP_CANVAS_GLYPH_PADDING", "$glyph", "TextureAtlas", "_TextureAtlas", "_document", "_config", "_unicodeService", "_logService", "FourKeyMap", "AttributeData", "Emitter", "createCanvas", "TMP_CANVAS_GLYPH_PADDING", "throwIfFalsy", "page", "queue", "IdleTaskQueue", "i", "rasterizedGlyph", "pagesBySize", "e", "a", "b", "sameSizeI", "size", "mergingPages", "p", "newPage", "AtlasPage", "sortedMergingPagesIndexes", "mergedPageIndex", "mergedPage", "mergedSize", "xOffset", "yOffset", "g", "index", "pageIndex", "j", "adjustingPage", "startTime", "pageCount", "chars", "bg", "fg", "ext", "restrictToCellHeight", "domContainer", "code", "cacheMap", "key", "idx", "bgColorMode", "bgColor", "inverse", "dim", "NULL_COLOR", "result", "arr", "channels", "color", "fgColorMode", "fgColor", "bold", "excludeFromContrastRatioDemands", "minimumContrastColor", "DIM_OPACITY", "cache", "adjustedColor", "bgRgba", "fgRgba", "rgba", "fontWeight", "desired", "token", "codeOrChars", "allowedWidth", "allowedHeight", "NULL_RASTERIZED_GLYPH", "italic", "underline", "strikethrough", "overline", "temp", "temp2", "backgroundColor", "fontStyle", "TEXT_BASELINE", "powerlineGlyph", "isPowerlineGlyph", "restrictedPowerlineGlyph", "isRestrictedPowerlineGlyph", "foregroundColor", "treatGlyphAsBackgroundColor", "padding", "customGlyph", "variantOffset", "tryDrawCustomGlyph", "enableClearThresholdCheck", "chWidth", "lineWidth", "xLeft", "yTopDefault", "yBotDefault", "nextOffset", "yTop", "yBot", "wasFilled", "xChLeft", "xChRight", "clipRegion", "cellW", "curlyH", "scaleX", "scaleY", "polygons", "polygon", "x", "y", "offsetWidth", "computeNextVariantOffset", "lineRatio", "gapRatio", "xChWidth", "line", "gap", "end", "metrics", "isBeyondCellBounds", "clearColor", "offset", "imageData", "isEmpty", "checkCompletelyTransparent", "activePage", "activeRow", "row", "wasPageAndRowFound", "candidatePage", "boundingBox", "restrictedGlyph", "height", "width", "found", "alphaOffset", "_AtlasPage", "document", "sourcePages", "glyph", "enableThresholdCheck", "r", "fgR", "fgG", "fgB", "threshold", "canvas", "generateConfig", "deviceCellWidth", "deviceCellHeight", "deviceCharWidth", "deviceCharHeight", "options", "colors", "devicePixelRatio", "deviceMaxTextureSize", "customGlyphs", "clonedColors", "NULL_COLOR", "configEquals", "a", "b", "i", "is256Color", "colorCode", "charAtlasCache", "acquireTextureAtlas", "terminal", "options", "colors", "deviceCellWidth", "deviceCellHeight", "deviceCharWidth", "deviceCharHeight", "devicePixelRatio", "deviceMaxTextureSize", "customGlyphs", "newConfig", "generateConfig", "i", "entry", "ownedByIndex", "configEquals", "core", "logService", "newEntry", "TextureAtlas", "removeTerminalFromCache", "index", "CursorBlinkStateManager", "_renderCallback", "_coreBrowserService", "timeToStart", "time", "observeDevicePixelDimensions", "element", "parentWindow", "callback", "observer", "entries", "entry", "width", "height", "toDisposable", "stringFromCodePoint", "codePoint", "CellData", "_CellData", "AttributeData", "ExtendedAttrs", "value", "obj", "stringFromCodePoint", "combined", "code", "second", "other", "thisDefault", "otherDefault", "TextBlinkStateManager", "Disposable", "_renderCallback", "_coreBrowserService", "_optionsService", "duration", "toDisposable", "needsBlinkInViewport", "isVisible", "wasBlinkOn", "PROJECTION_MATRIX", "createProgram", "gl", "vertexSource", "fragmentSource", "logService", "program", "throwIfFalsy", "createShader", "type", "source", "shader", "expandFloat32Array", "max", "newLength", "newArray", "i", "GLTexture", "texture", "vertexShaderSource", "createFragmentShaderSource", "maxFragmentShaderTextureUnits", "textureConditionals", "i", "$i", "$glyph", "$leftCellPadding", "$clippedPixels", "GlyphRenderer", "Disposable", "_terminal", "_gl", "_dimensions", "_optionsService", "_logService", "gl", "TextureAtlas", "throwIfFalsy", "createProgram", "vertexShaderSource", "createFragmentShaderSource", "toDisposable", "vertexArrayObject", "unitQuadVertices", "unitQuadVerticesBuffer", "unitQuadElementIndices", "elementIndicesBuffer", "textureUnits", "i", "PROJECTION_MATRIX", "glTexture", "GLTexture", "x", "y", "code", "bg", "fg", "ext", "chars", "width", "lastBg", "array", "allowRescaling", "terminal", "newCount", "renderModel", "activeBuffer", "bufferLength", "si", "sub", "pageCount", "atlas", "dimensions", "SelectionRenderModel", "terminal", "start", "end", "columnSelectMode", "viewportY", "viewportStartRow", "viewportEndRow", "viewportCappedStartRow", "viewportCappedEndRow", "x", "y", "createSelectionRenderModel", "COMBINED_CHAR_BIT_MASK", "RenderModel", "createSelectionRenderModel", "cols", "rows", "indexCount", "vertexShaderSource", "fragmentShaderSource", "INDICES_PER_RECTANGLE", "BYTES_PER_RECTANGLE", "INITIAL_BUFFER_RECTANGLE_CAPACITY", "Vertices", "$rgba", "$x1", "$y1", "$r", "$g", "$b", "$a", "RectangleRenderer", "Disposable", "_terminal", "_gl", "_dimensions", "_themeService", "_logService", "gl", "throwIfFalsy", "createProgram", "toDisposable", "vertexArrayObject", "unitQuadVertices", "unitQuadVerticesBuffer", "unitQuadElementIndices", "elementIndicesBuffer", "e", "vertices", "PROJECTION_MATRIX", "dimensions", "colors", "model", "terminal", "rectangleCount", "y", "x", "currentStartX", "currentBg", "currentFg", "currentInverse", "modelIndex", "bg", "fg", "inverse", "offset", "cursor", "startX", "endX", "expandFloat32Array", "array", "x1", "y1", "width", "height", "r", "g", "b", "a", "color", "BaseRenderLayer", "Disposable", "terminal", "_container", "id", "zIndex", "_alpha", "_coreBrowserService", "_optionsService", "_themeService", "e", "toDisposable", "throwIfFalsy", "startRow", "endRow", "start", "end", "columnSelectMode", "alpha", "oldCanvas", "colorSet", "acquireTextureAtlas", "dim", "x", "y", "width", "height", "cell", "TEXT_BASELINE", "isBold", "isItalic", "fontWeight", "LinkRenderLayer", "BaseRenderLayer", "container", "zIndex", "terminal", "linkifier2", "coreBrowserService", "optionsService", "themeService", "e", "dim", "middleRowCount", "is256Color", "y", "DomListener", "node", "type", "handler", "options", "addDisposableListener", "useCaptureOrOptions", "WebglRenderer", "Disposable", "_terminal", "_characterJoinerService", "_charSizeService", "_coreBrowserService", "_coreService", "_decorationService", "_logService", "_optionsService", "_themeService", "_customGlyphs", "preserveDrawingBuffer", "MutableDisposable", "RenderModel", "CellData", "Emitter", "contextAttributes", "CellColorResolver", "LinkRenderLayer", "createRenderDimensions", "TextBlinkStateManager", "addDisposableListener", "e", "removeTerminalFromCache", "observeDevicePixelDimensions", "w", "h", "toDisposable", "l", "cols", "rows", "isVisible", "start", "end", "columnSelectMode", "RectangleRenderer", "GlyphRenderer", "atlas", "acquireTextureAtlas", "combinedDisposable", "EventUtils", "clearGlyphRenderer", "merged", "mergeRetries", "CursorBlinkStateManager", "terminal", "cell", "lastBg", "y", "row", "line", "joinedRanges", "isJoined", "skipJoinedCheckUntilX", "isValidJoinRange", "lastCharX", "range", "isCursorRow", "chars", "code", "width", "i", "x", "j", "clamp", "cursorStyle", "cursorY", "viewportRelativeCursorY", "cursorX", "lastCursorX", "isCursorVisible", "modelUpdated", "bufferLine", "rowHasBlinkingCells", "firstSelectionState", "JoinedCellData", "COMBINED_CHAR_BIT_MASK", "cellIndex", "bg", "fg", "ext", "hasBlinkingCells", "height", "AttributeData", "firstCell", "value", "max", "min", "WebglAddon", "Disposable", "options", "isSafari", "getSafariVersion", "contextAttributes", "Emitter", "terminal", "core", "coreService", "optionsService", "unsafeCore", "renderService", "characterJoinerService", "charSizeService", "coreBrowserService", "decorationService", "logService", "themeService", "WebglRenderer", "EventUtils", "toDisposable"] } diff --git a/src/GlyphRenderer.ts b/src/GlyphRenderer.ts diff --git a/config/patches/@xterm__xterm@6.1.0-beta.303.patch b/config/patches/@xterm__xterm@6.1.0-beta.304.patch similarity index 56% rename from config/patches/@xterm__xterm@6.1.0-beta.303.patch rename to config/patches/@xterm__xterm@6.1.0-beta.304.patch index 59aa7beae2a..ccc565c3326 100644 --- a/config/patches/@xterm__xterm@6.1.0-beta.303.patch +++ b/config/patches/@xterm__xterm@6.1.0-beta.304.patch @@ -1,62 +1,62 @@ diff --git a/lib/xterm.js b/lib/xterm.js -index 5de883f434d2e60af7181461b1e36cd5e75bdfc0..1c047b160284dcb92cc1a9eb678a6f07d51925cb 100644 +index 6c8a9e0cc1c1c26719d8466c8a304a8cf4472c73..3f9652457374cf89263cfc15b329fe03f07b15ae 100644 --- a/lib/xterm.js +++ b/lib/xterm.js @@ -1,2 +1,2 @@ --!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)("object"==typeof exports?exports:e)[s]=i[s]}}(globalThis,()=>(()=>{"use strict";var e={2840(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=r.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new c.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(e=>this._handleResize(e.rows))),this._register(this._terminal.onRender(e=>this._refreshRows(e.start,e.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(e=>this._handleChar(e))),this._register(this._terminal.onLineFeed(()=>this._handleChar("\n"))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register((0,f.addDisposableListener)(r,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register((0,d.toDisposable)(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent=l.tooMuchOutput.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const i=this._terminal.buffer,s=i.lines.length.toString();for(let r=e;r<=t;r++){const e=i.lines.get(i.ydisp+r),t=[],o=e?.translateToString(!0,void 0,void 0,t)||"",n=(i.ydisp+r+1).toString(),a=this._rowElements[r];a&&(0===o.length?(a.textContent=" ",this._rowColumns.set(a,[0,1])):(a.textContent=o,this._rowColumns.set(a,t)),a.setAttribute("aria-posinset",n),a.setAttribute("aria-setsize",s),this._alignRowWidth(a))}this._announceCharacters()}_announceCharacters(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent===l.tooMuchOutput.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){const i=e.target,s=this._rowElements[0===t?1:this._rowElements.length-2];if(i.getAttribute("aria-posinset")===(0===t?"1":`${this._terminal.buffer.lines.length}`))return;if(e.relatedTarget!==s)return;let r,o;if(0===t?(r=i,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(r=this._rowElements.shift(),o=i,this._rowContainer.removeChild(r)),r.removeEventListener("focus",this._topBoundaryFocusListener),o.removeEventListener("focus",this._bottomBoundaryFocusListener),0===t){const e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement("afterbegin",e)}else{const e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(0===this._rowElements.length)return;const e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error("anchorNode and/or focusNode are null");let t={node:e.anchorNode,offset:e.anchorOffset},i={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===i.node&&t.offset>i.offset)&&([t,i]=[i,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const s=this._rowElements.slice(-1)[0];if(i.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(i={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(i.node))return;const r=({node:e,offset:t})=>{const i=e instanceof Text?e.parentNode:e;let s=parseInt(i?.getAttribute("aria-posinset"),10)-1;if(isNaN(s))return console.warn("row is invalid. Race condition?"),null;const r=this._rowColumns.get(i);if(!r)return console.warn("columns is null. Race condition?"),null;let o=t=this._terminal.cols&&(++s,o=0),{row:s,column:o}},o=r(t),n=r(i);if(o&&n){if(o.row>n.row||o.row===n.row&&o.column>=n.column)throw new Error("invalid range");this._terminal.select(o.column,o.row,(n.row-o.row)*this._terminal.cols-o.column+n.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;ethis._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(I.EventUtils.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(I.EventUtils.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(I.EventUtils.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(I.EventUtils.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register((0,N.toDisposable)(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}_handleColorEvent(e){if(this._themeService)for(const t of e){let e,i;switch(t.index){case 256:e="foreground",i="10";break;case 257:e="background",i="11";break;case 258:e="cursor",i="12";break;default:e="ansi",i="4;"+t.index}switch(t.type){case 0:const s=E.color.toColorRGB("ansi"===e?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`]${i};${(0,M.toRgbString)(s)}\\`);break;case 1:if("ansi"===e)this._themeService.modifyColors(e=>e.ansi[t.index]=E.channels.toColor(...t.color));else{const i=e;this._themeService.modifyColors(e=>e[i]=E.channels.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_reportColorScheme(){if(!this._themeService)return;const e=E.rgb.relativeLuminance(this._themeService.colors.background.rgba>>8)>8)?1:2;this.coreService.triggerDataEvent(`[?997;${e}n`)}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(T.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;const i=Math.min(this.buffer.x,this.cols-1),s=this._renderService.dimensions.css.cell.height,r=t.getWidth(i),o=this._renderService.dimensions.css.cell.width*r,n=this.buffer.y*this._renderService.dimensions.css.cell.height,a=i*this._renderService.dimensions.css.cell.width;this.textarea.style.left=a+"px",this.textarea.style.top=n+"px",this.textarea.style.width=o+"px",this.textarea.style.height=s+"px",this.textarea.style.lineHeight=s+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this._register((0,H.addDisposableListener)(this.element,"copy",e=>{this.hasSelection()&&(0,a.copyHandler)(e,this._selectionService)}));const e=e=>(0,a.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this._register((0,H.addDisposableListener)(this.textarea,"paste",e)),this._register((0,H.addDisposableListener)(this.element,"paste",e)),x.isFirefox?this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>{2===e.button&&(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register((0,H.addDisposableListener)(this.element,"contextmenu",e=>{(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),x.isLinux&&this._register((0,H.addDisposableListener)(this.element,"auxclick",e=>{1===e.button&&(0,a.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register((0,H.addDisposableListener)(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register((0,H.addDisposableListener)(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register((0,H.addDisposableListener)(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this._register((0,H.addDisposableListener)(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",e=>this.element.classList.toggle("allow-transparency",e))),e.appendChild(this.element);const t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register((0,H.addDisposableListener)(this.screenElement,"mousemove",e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);const i=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",h.promptLabel.get()),x.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>i.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(g.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??("undefined"!=typeof window?window.document:null))),this._instantiationService.setService(C.ICoreBrowserService,this._coreBrowserService),this._register((0,H.addDisposableListener)(this.textarea,"focus",e=>this._handleTextAreaFocus(e))),this._register((0,H.addDisposableListener)(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(p.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(C.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(k.ThemeService),this._instantiationService.setService(C.IThemeService,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(v.CharacterJoinerService),this._instantiationService.setService(C.ICharacterJoinerService,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(w.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(C.IRenderService,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this._register(this._renderService.onDimensionsChange(e=>this._onDimensionsChange.fire({css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(u.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(S.MouseCoordsService),this._instantiationService.setService(C.IMouseCoordsService,this._mouseCoordsService);const s=this._linkifier.value=this._register(this._instantiationService.createInstance(O.Linkifier,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(e){this._logService.error("onWillOpen handler threw an exception",e)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(c.Viewport,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(y.SelectionService,this.element,this.screenElement,s)),this._instantiationService.setService(C.ISelectionService,this._selectionService),this._mouseService=this._instantiationService.createInstance(b.MouseService),this._instantiationService.setService(C.IMouseService,this._mouseService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(I.EventUtils.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(d.BufferDecorationRenderer,this.screenElement)),this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>this._selectionService.handleMouseDown(e))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(T.AccessibilityManager,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",e=>this._handleScreenReaderModeOptionChange(e)));const r=this.options.scrollbar?.showScrollbar??!0,o=this.options.scrollbar?.width;r&&o&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",e=>{const t=(e?.showScrollbar??!0)&&!!e?.width;!this._overviewRulerRenderer&&t&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:e=>this._viewport?.handleTouchScroll(e)},e=>this._register(e),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(f.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,i=!1){this._renderService?.refreshRows(e,t,i)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}paste(e){(0,a.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");const t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,i){this._selectionService.setSelection(e,t,i)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;const t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;t||"Dead"!==e.key&&"AltGraph"!==e.key||(this._unprocessedDeadKey=!0);const i=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),3===i.type||2===i.type){const t=this.rows-1;return this.scrollLines(2===i.type?-t:t),e.preventDefault(),e.stopPropagation(),!1}if(1===i.type&&this.selectAll(),this._isThirdLevelShift(this.browser,e))return!0;if(i.cancel&&(e.preventDefault(),e.stopPropagation()),!i.key)return!0;if(!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&1===e.key.length&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;""!==i.key&&"\r"!==i.key||(this.textarea.value="");const s=this._keyboardService.useWin32InputMode&&W(e);if(this._onKey.fire({key:i.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){const i=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return"keypress"===t.type?i:i&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return;W(e)||this.focus();const t=this._keyboardService.evaluateKeyUp(e);if(t?.key){const i=this._keyboardService.useWin32InputMode&&W(e);this.coreService.triggerDataEvent(t.key,!i)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&"insertText"===e.inputType&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;efunction(e){const t=l(e);for(t.animFrameRequested=!1,t.current=t.next,t.next=[],t.inAnimationFrameRunner=!0;t.current.length>0;)t.current.sort(a.sort),t.current.shift().execute();t.inAnimationFrameRunner=!1}(e))),r};const s=i(3132);function r(e){const t=e;if(t?.ownerDocument?.defaultView)return t.ownerDocument.defaultView;const i=e;return i?.view?i.view:window}class o{constructor(e,t,i,s){this._node=e,this._type=t,this._handler=i,this._options=s,e.addEventListener(t,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function n(e,t,i,s){return new o(e,t,i,s)}t.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class a{constructor(e,t){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){console.error(e)}}static sort(e,t){return t.priority-e.priority}}const h=new Map;function l(e){let t=h.get(e);return t||(t={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(e,t)),t}class c extends s.IntervalTimer{constructor(e){super(),this._defaultTarget=e?r(e):void 0}cancelAndSet(e,t,i){super.cancelAndSet(e,t,i??this._defaultTarget??window)}}t.WindowIntervalTimer=c},8906(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier=void 0;const o=i(4812),n=i(6501),a=i(7098),h=i(8636),l=i(4159);let c=class extends o.Disposable{get currentLink(){return this._currentLink}constructor(e,t,i,s,r){super(),this._element=e,this._mouseCoordsService=t,this._renderService=i,this._bufferService=s,this._linkProviderService=r,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this._register(new h.Emitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this._register(new h.Emitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this._register((0,o.toDisposable)(()=>{(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register((0,l.addDisposableListener)(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register((0,l.addDisposableListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;const t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;const i=e.composedPath();for(let e=0;e{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let i=!1;for(const[s,r]of this._linkProviderService.linkProviders.entries())if(t){const t=this._activeProviderReplies?.get(s);t&&(i=this._checkLinkProviderResult(s,e,i))}else r.provideLinks(e.y,t=>{if(this._isMouseOut)return;const r=t?.map(e=>({link:e}));this._activeProviderReplies?.set(s,r),i=this._checkLinkProviderResult(s,e,i),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){const i=new Set;for(let s=0;se?this._bufferService.cols:s.link.range.end.x;for(let e=o;e<=n;e++){if(i.has(e)){r.splice(t--,1);break}i.add(e)}}}}_checkLinkProviderResult(e,t,i){if(!this._activeProviderReplies)return i;const s=this._activeProviderReplies.get(e);let r=!1;for(let t=0;tthis._linkAtPosition(e.link,t));e&&(i=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!i)for(let e=0;ethis._linkAtPosition(e.link,t));if(s){i=!0,this._handleNewLink(s);break}}return i}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;const t=this._positionFromMouseEvent(e,this._element);var i,s;t&&this._mouseDownLink&&(i=this._mouseDownLink.link,s=this._currentLink.link,i.text===s.text&&i.range.start.x===s.range.start.x&&i.range.start.y===s.range.start.y&&i.range.end.x===s.range.end.x&&i.range.end.y===s.range.end.y)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;const t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;const t=0===e.start?0:e.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(t,i),this._lastMouseEvent)){const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(i,t.text)}_fireUnderlineEvent(e,t){const i=e.range,s=this._bufferService.buffer.ydisp,r=this._createLinkUnderlineEvent(i.start.x-1,i.start.y-s-1,i.end.x,i.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(r)}_linkLeave(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(i,t.text)}_linkAtPosition(e,t){const i=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,r=t.y*this._bufferService.cols+t.x;return i<=r&&r<=s}_positionFromMouseEvent(e,t){const i=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,i,s,r){return{x1:e,y1:t,x2:i,y2:s,cols:this._bufferService.cols,fg:r}}};t.Linkifier=c,t.Linkifier=c=s([r(1,a.IMouseCoordsService),r(2,a.IRenderService),r(3,n.IBufferService),r(4,a.ILinkProviderService)],c)},7721(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0;let i="Terminal input";const s={get:()=>i,set:e=>i=e};t.promptLabel=s;let r="Too much output to announce, navigate to rows manually to read";const o={get:()=>r,set:e=>r=e};t.tooMuchOutput=o},3285(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkProvider=void 0;const o=i(3055),n=i(6501);let a=class{constructor(e,t,i){this._bufferService=e,this._optionsService=t,this._oscLinkService=i,this._workCell=new o.CellData}provideLinks(e,t){const i=this._bufferService.buffer.lines.get(e-1);if(!i)return void t(void 0);const s=[],r=this._optionsService.rawOptions.linkHandler,o=this._workCell,n=i.getTrimmedLength();let a=-1,l=-1,c=!1;for(let t=0;tr?r.activate(e,t,d):h(0,t),hover:(e,t)=>r?.hover?.(e,t,d),leave:(e,t)=>r?.leave?.(e,t,d)})}c=!1,o.hasExtendedAttrs()&&o.extended.urlId?(l=t,a=o.extended.urlId):(l=-1,a=-1)}}t(s)}_getRangeWithLineWrap(e,t,i,s){let r=e,o=t,n=e,a=i;for(;0===o;){const e=this._bufferService.buffer.lines.get(r-1);if(!e?.isWrapped)break;const t=this._bufferService.buffer.lines.get(r-2);if(!t)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,i-1,s))break;let n=i-1;for(;n>0&&this._hasUrlId(t,n-1,s);)n--;r--,o=n}for(;;){const e=this._bufferService.buffer.lines.get(n-1);if(!e)break;if(a!==e.getTrimmedLength())break;const t=this._bufferService.buffer.lines.get(n);if(!t?.isWrapped)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,0,s))break;let r=1;for(;rthis._innerRefresh()),this._animationFrame}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return void this._runRefreshCallbacks();const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},4292(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;const s=performance.now();if(s-this._lastRefreshMs>=this._debounceThresholdMS)void 0!==this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=s,this._innerRefresh();else if(!this._additionalRefreshRequested){const e=s-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},t)}}_innerRefresh(){if(void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return;const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},9302(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_ANSI_COLORS=void 0;const s=i(4103);t.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const e=[s.css.toColor("#2e3436"),s.css.toColor("#cc0000"),s.css.toColor("#4e9a06"),s.css.toColor("#c4a000"),s.css.toColor("#3465a4"),s.css.toColor("#75507b"),s.css.toColor("#06989a"),s.css.toColor("#d3d7cf"),s.css.toColor("#555753"),s.css.toColor("#ef2929"),s.css.toColor("#8ae234"),s.css.toColor("#fce94f"),s.css.toColor("#729fcf"),s.css.toColor("#ad7fa8"),s.css.toColor("#34e2e2"),s.css.toColor("#eeeeec")],t=[0,95,135,175,215,255];for(let i=0;i<216;i++){const r=t[i/36%6|0],o=t[i/6%6|0],n=t[i%6];e.push({css:s.channels.toCss(r,o,n),rgba:s.channels.toRgba(r,o,n)})}for(let t=0;t<24;t++){const i=8+10*t;e.push({css:s.channels.toCss(i,i,i),rgba:s.channels.toRgba(i,i,i)})}return e})())},4017(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;const o=i(7098),n=i(4812),a=i(6501),h=i(4159),l=i(8566),c=i(8636),d=i(7880);let _=class extends n.Disposable{constructor(e,t,i,s,r,o,a,_,u){super(),this._bufferService=i,this._coreService=r,this._optionsService=_,this._renderService=u,this._onRequestScrollLines=this._register(new c.Emitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._isSyncing=!1,this._isHandlingScroll=!1,this._suppressOnScrollHandler=!1,this._needsSyncOnRender=!1;const f=this._register(new d.Scrollable({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:e=>(0,h.scheduleAtNextAnimationFrame)(s.window,e)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{f.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new l.SmoothScrollableElement(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},f)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(o.onProtocolChange(e=>{this._scrollableElement.updateOptions({handleMouseWheel:!(16&e)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{e.style.backgroundColor=a.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=a.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register((0,n.toDisposable)(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register((0,n.toDisposable)(()=>this._styleElement.remove())),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${a.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${a.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${a.colors.scrollbarSliderActiveBackground.css};`,"}"].join("\n")})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(e=>this._handleScroll(e)))}scrollLines(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){const e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,i=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:i,verticalHasArrows:t}}queueSync(e){void 0!==e&&(this._latestYDisp=e),void 0===this._queuedAnimationFrame&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){this._renderService&&!this._isSyncing&&(this._coreService.decPrivateModes.synchronizedOutput?this._needsSyncOnRender=!0:(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1))}_handleScroll(e){if(!this._renderService)return;if(this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;const t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),i=t-this._bufferService.buffer.ydisp;0!==i&&(this._latestYDisp=t,this._onRequestScrollLines.fire(i)),this._isHandlingScroll=!1}handleTouchScroll(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};t.Viewport=_,t.Viewport=_=s([r(2,a.IBufferService),r(3,o.ICoreBrowserService),r(4,a.ICoreService),r(5,a.IMouseStateService),r(6,o.IThemeService),r(7,a.IOptionsService),r(8,o.IRenderService)],_)},4196(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferDecorationRenderer=void 0;const o=i(7098),n=i(4812),a=i(6501);let h=class extends n.Disposable{constructor(e,t,i,s,r){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=i,this._decorationService=s,this._renderService=r,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(e=>this._removeDecoration(e))),this._register((0,n.toDisposable)(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){void 0===this._animationFrame&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){const t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer","top"===e?.options?.layer),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const i=e.options.x??0;return i&&i>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){const t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let i=this._decorationElements.get(e);i||(i=this._createElement(e),e.element=i,this._decorationElements.set(e,i),this._container.appendChild(i),e.onDispose(()=>{this._decorationElements.delete(e),i.remove()})),i.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(i.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",i.style.top=t*this._renderService.dimensions.css.cell.height+"px",i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(i)}}_refreshXPosition(e,t=e.element){if(!t)return;const i=e.options.x??0;"right"===(e.options.anchor||"left")?t.style.right=i?i*this._renderService.dimensions.css.cell.width+"px":"":t.style.left=i?i*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=h,t.BufferDecorationRenderer=h=s([r(1,a.IBufferService),r(2,o.ICoreBrowserService),r(3,a.IDecorationService),r(4,o.IRenderService)],h)},957(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(const t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,i){return t>=e.startBufferLine-this._linePadding[i||"full"]&&t<=e.endBufferLine+this._linePadding[i||"full"]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},9925(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OverviewRulerRenderer=void 0;const o=i(957),n=i(7098),a=i(4812),h=i(6501),l={full:0,left:0,center:0,right:0},c={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0};let _=class extends a.Disposable{get _width(){const e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??1?e?.width??0:0}constructor(e,t,i,s,r,n,h,l){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=i,this._decorationService=s,this._renderService=r,this._optionsService=n,this._themeService=h,this._coreBrowserService=l,this._colorZoneStore=new o.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register((0,a.toDisposable)(()=>this._canvas?.remove()));const c=this._canvas.getContext("2d");if(!c)throw new Error("Ctx cannot be null");this._ctx=c,this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register((0,a.toDisposable)(()=>{void 0!==this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}_refreshDrawConstants(){const e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);c.full=this._canvas.width,c.left=e,c.center=t,c.right=e,this._refreshDrawHeightConstants(),d.full=1,d.left=1,d.center=1+c.left,d.right=1+c.left+c.center}_refreshDrawHeightConstants(){l.full=Math.round(2*this._coreBrowserService.dpr);const e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);l.left=t,l.center=t,l.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;const e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1,this._renderRulerOutline();const e=this._colorZoneStore.zones;for(const t of e)"full"!==t.position&&this._renderColorZone(t);for(const t of e)"full"===t.position&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-l[e.position||"full"]/2),c[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+l[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=_,t.OverviewRulerRenderer=_=s([r(2,h.IBufferService),r(3,h.IDecorationService),r(4,n.IRenderService),r(5,h.IOptionsService),r(6,n.IThemeService),r(7,n.ICoreBrowserService)],_)},3618(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;const o=i(7098),n=i(6501);let a=class{get isComposing(){return this._isComposing}constructor(e,t,i,s,r,o){this._textarea=e,this._compositionView=t,this._bufferService=i,this._optionsService=s,this._coreService=r,this._renderService=o,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._compositionSuffix="",this._dataAlreadySent=""}compositionstart(){this._isComposing=!0;const e=this._textarea.selectionStart??this._textarea.value.length,t=this._textarea.selectionEnd??e;this._compositionPosition.start=Math.min(e,t),this._compositionPosition.end=Math.max(e,t),this._compositionSuffix=this._textarea.value.substring(this._compositionPosition.end),this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(e){this._compositionView.textContent=`‎${e.data}‎`,this.updateCompositionElements(),setTimeout(()=>{const e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)},0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(20===e.keyCode||229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove("active"),this._isComposing=!1,e){const e={start:this._compositionPosition.start,end:this._compositionPosition.end},t=this._compositionSuffix;this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){let i;if(this._isSendingComposition=!1,e.start+=this._dataAlreadySent.length,this._isComposing)i=this._textarea.value.substring(e.start,this._compositionPosition.start);else{const s=this._textarea.value,r=t.length>0&&s.endsWith(t)?s.length-t.length:s.length;i=s.substring(e.start,Math.max(e.start,r))}i.length>0&&this._coreService.triggerDataEvent(i,!0)}},0)}else{this._isSendingComposition=!1;const e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;const e=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){const t=this._textarea.value,i=t.replace(e,"");this._dataAlreadySent=i,t.length>e.length?this._coreService.triggerDataEvent(i,!0):t.lengththis.updateCompositionElements(!0),0)}}};t.CompositionHelper=a,t.CompositionHelper=a=s([r(2,n.IBufferService),r(3,n.IOptionsService),r(4,n.ICoreService),r(5,o.IRenderService)],a)},5251(e,t){function i(e,t,i){const s=i.getBoundingClientRect(),r=e.getComputedStyle(i),o=parseInt(r.getPropertyValue("padding-left"),10),n=parseInt(r.getPropertyValue("padding-top"),10);return[t.clientX-s.left-o,t.clientY-s.top-n]}Object.defineProperty(t,"__esModule",{value:!0}),t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,s,r,o,n,a,h,l){if(!n)return;const c=i(e,t,s);return c[0]=Math.ceil((c[0]+(l?a/2:0))/a),c[1]=Math.ceil(c[1]/h),c[0]=Math.min(Math.max(c[0],1),r+(l?1:0)),c[1]=Math.min(Math.max(c[1],1),o),c}},9686(e,t){function i(e,t,i,o){const h=e-s(e,i),l=t-s(t,i),c=Math.abs(h-l)-function(e,t,i){let o=0;const n=e-s(e,i),a=t-s(t,i);for(let s=0;s=0&&et?"A":"B"}function o(e,t,i,s,r,o){let n=e,a=t,h="";for(;(n!==i||a!==s)&&a>=0&&ao.cols-1?(h+=o.buffer.translateBufferLineToString(a,!1,e,n),n=0,e=0,a++):!r&&n<0&&(h+=o.buffer.translateBufferLineToString(a,!1,0,e+1),n=o.cols-1,e=n,a--);return h+o.buffer.translateBufferLineToString(a,!1,e,n)}function n(e,t){return""+(t?"O":"[")+e}function a(e,t){e=Math.floor(e);let i="";for(let s=0;s0?h-s(h,l):t;const _=h,u=function(e,t,r,o,n,a){let h;return h=i(t,o,n,a).length>0?o-s(o,n):t,e=r&&he?"D":"C",a(Math.abs(l-e),n(d,h));d=c>t?"D":"C";const _=Math.abs(c-t);return a(function(e,t){return t.cols-e}(c>t?e:l,r)+(_-1)*r.cols+1+((c>t?l:e)-1),n(d,h))}},6081(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(f.includes(e))throw new Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new _.ParserApi(this._core)}get unicode(){return this._checkProposedApi(),new u.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new d.BufferNamespaceApi(this._core))}get markers(){return this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t="none";switch(this._core.mouseStateService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:e.synchronizedOutput,win32InputMode:e.win32InputMode,wraparoundMode:e.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,i){this._verifyIntegers(e,t,i),this._core.select(e,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write("\r\n",t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return a.promptLabel.get()},set promptLabel(e){a.promptLabel.set(e)},get tooMuchOutput(){return a.tooMuchOutput.get()},set tooMuchOutput(e){a.tooMuchOutput.set(e)}}}_verifyIntegers(...e){for(p of e)if(p===1/0||isNaN(p)||p%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...e){for(p of e)if(p&&(p===1/0||isNaN(p)||p%1!=0||p<0))throw new Error("This API only accepts positive integers")}}t.Terminal=v},3955(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;const o=i(1433),n=i(2744),a=i(9176),h=i(6181),l=i(2274),c=i(654),d=i(7098),_=i(4103),u=i(4812),f=i(6501),p=i(8636),v=i(4159);let g=1,m=class extends u.Disposable{constructor(e,t,i,s,r,a,d,_,f,m,b,w,y,C){super(),this._terminal=e,this._document=t,this._element=i,this._screenElement=s,this._viewportElement=r,this._helperContainer=a,this._linkifier2=d,this._charSizeService=f,this._optionsService=m,this._bufferService=b,this._coreService=w,this._coreBrowserService=y,this._themeService=C,this._terminalClass=g++,this._rowElements=[],this._selectionRenderModel=(0,l.createSelectionRenderModel)(),this._lastSelectionColumnMode=!1,this._rowHasBlinkingCells=[],this._rowHasBlinkingCellsCount=0,this._onRequestRedraw=this._register(new p.Emitter),this.onRequestRedraw=this._onRequestRedraw.event,this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,h.createRenderDimensions)(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(e=>this._injectCss(e))),this._injectCss(this._themeService.colors),this._rowFactory=_.createInstance(o.DomRendererRowFactory,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(e=>this._handleLinkHover(e))),this._register(this._linkifier2.onHideLinkUnderline(e=>this._handleLinkLeave(e))),this._cursorBlinkStateManager=new S(this._rowContainer,this._coreBrowserService),this._register((0,v.addDisposableListener)(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register((0,u.toDisposable)(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new c.TextBlinkStateManager(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register((0,u.toDisposable)(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new n.WidthCache,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));const t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${_.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;const i=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,r=`blink_block_${this._terminalClass}`;t+=`@keyframes ${i} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${r} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(const[i,s]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${i} { color: ${s.css}; }${this._terminalSelector} .xterm-fg-${i}.xterm-dim { color: ${_.color.multiplyOpacity(s,.5).css}; }${this._terminalSelector} .xterm-bg-${i} { background-color: ${s.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR} { color: ${_.color.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${_.color.multiplyOpacity(_.color.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${a.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){const e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){const e=this._document.createElement("div");this._rowContainer.appendChild(e),this._rowElements.push(e),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,i){const s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,i);let r=0,o=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(r=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow));let n=0,a=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,i),this._selectionRenderModel.hasSelection){const s=this._selectionRenderModel.viewportStartRow,r=this._selectionRenderModel.viewportEndRow,o=this._selectionRenderModel.viewportCappedStartRow,h=this._selectionRenderModel.viewportCappedEndRow;n=o,a=h;const l=this._document.createDocumentFragment();if(i){const i=e[0]>t[0];l.appendChild(this._createSelectionElement(o,i?t[0]:e[0],i?e[0]:t[0],h-o+1))}else{const i=s===o?e[0]:0,n=o===r?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(o,i,n));const a=h-o-1;if(l.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,a)),o!==h){const e=r===h?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(h,0,e))}}this._selectionContainer.appendChild(l)}let h=Math.min(r,n),l=Math.max(o,a);if(l>=0){h=Math.max(h,0),l=Math.min(l,s-1);const e=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&e>=0&&ethis.dimensions.css.canvas.width&&(n=this.dimensions.css.canvas.width-o),r.style.height=s*this.dimensions.css.cell.height+"px",r.style.top=e*this.dimensions.css.cell.height+"px",r.style.left=`${o}px`,r.style.width=`${n}px`,r}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){const i=this._bufferService.buffer,s=i.ybase+i.y,r=Math.min(i.x,this._bufferService.cols-1),o=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,n=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,a=this._optionsService.rawOptions.cursorInactiveStyle,h={hasBlinkingCells:!1};for(let l=e;l<=t;l++){const e=l+i.ydisp,t=this._rowElements[l];if(!t)continue;const c=i.lines.get(e);c?(t.replaceChildren(...this._rowFactory.createRow(c,e,e===s,n,a,r,o,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,h)),this._setRowBlinkState(l,h.hasBlinkingCells)):(t.replaceChildren(),this._setRowBlinkState(l,!1))}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,i,s,r,o){i<0&&(e=0),s<0&&(t=0);const n=this._bufferService.rows-1;i=Math.max(Math.min(i,n),0),s=Math.max(Math.min(s,n),0),r=Math.min(r,this._bufferService.cols);const a=this._bufferService.buffer,h=a.ybase+a.y,l=Math.min(a.x,r-1),c=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,_=this._optionsService.rawOptions.cursorInactiveStyle,u={hasBlinkingCells:!1};for(let n=i;n<=s;++n){const f=n+a.ydisp,p=this._rowElements[n];if(!p)continue;const v=a.lines.get(f);v?(p.replaceChildren(...this._rowFactory.createRow(v,f,f===h,d,_,l,c,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,o?n===i?e:0:-1,o?(n===s?t:r)-1:-1,u)),this._setRowBlinkState(n,u.hasBlinkingCells)):(p.replaceChildren(),this._setRowBlinkState(n,!1))}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};t.DomRenderer=m,t.DomRenderer=m=s([r(7,f.IInstantiationService),r(8,d.ICharSizeService),r(9,f.IOptionsService),r(10,f.IBufferService),r(11,f.ICoreService),r(12,d.ICoreBrowserService),r(13,d.IThemeService)],m);class S{constructor(e,t){this._rowContainer=e,this._coreBrowserService=t,this._isIdlePaused=!1,this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){void 0!==this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}}},1433(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=void 0;const o=i(9176),n=i(8938),a=i(3055),h=i(6501),l=i(4103),c=i(7098),d=i(945),_=i(6181),u=i(5451);let f=class{constructor(e,t,i,s,r,o,n){this._document=e,this._characterJoinerService=t,this._optionsService=i,this._coreBrowserService=s,this._coreService=r,this._decorationService=o,this._themeService=n,this._workCell=new a.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,i){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=i}createRow(e,t,i,s,r,a,h,c,_,f,p,v,g){const m=[];g&&(g.hasBlinkingCells=!1);const S=this._characterJoinerService.getJoinedCharacters(t),b=this._themeService.colors;let w,y=e.getNoBgTrimmedLength();i&&y=P,F=I,W=this._workCell;if(S.length>0&&I===S[0][0]&&N){const s=S.shift(),r=this._isCellInSelection(s[0],t);for(C=s[0]+1;C=s[1],N?(H=!0,W=new d.JoinedCellData(this._workCell,e.translateToString(!0,s[0],s[1]),s[1]-s[0]),F=s[1]-1,y=W.getWidth()):P=s[1]}const z=this._isCellInSelection(I,t),K=i&&I===a,U=O&&I>=p&&I<=v;g&&W.isBlink()&&(g.hasBlinkingCells=!0),!c&&W.isBlink()&&T.push("xterm-blink-hidden");let j=!1;this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{j=!0});let $=W.getChars()||n.WHITESPACE_CELL_CHAR;if(" "===$&&(W.isUnderline()||W.isOverline())&&($=" "),k=y*_-f.get($,W.isBold(),W.isItalic()),w){if(D&&(z&&A||!z&&!A&&W.bg===L)&&(z&&A&&b.selectionForeground||W.fg===x)&&W.extended.ext===R&&U===M&&k===B&&!K&&!H&&!j&&N){W.isInvisible()?E+=n.WHITESPACE_CELL_CHAR:E+=$,D++;continue}D&&(w.textContent=E),w=this._document.createElement("span"),D=0,E=""}else w=this._document.createElement("span");if(L=W.bg,x=W.fg,R=W.extended.ext,M=U,B=k,A=z,H&&a>=I&&a<=F&&(a=I),!this._coreService.isCursorHidden&&K&&this._coreService.isCursorInitialized)if(T.push("xterm-cursor"),this._coreBrowserService.isFocused)h&&T.push("xterm-cursor-blink"),T.push("bar"===s?"xterm-cursor-bar":"underline"===s?"xterm-cursor-underline":"xterm-cursor-block");else if(r)switch(r){case"outline":T.push("xterm-cursor-outline");break;case"block":T.push("xterm-cursor-block");break;case"bar":T.push("xterm-cursor-bar");break;case"underline":T.push("xterm-cursor-underline")}if(W.isBold()&&T.push("xterm-bold"),W.isItalic()&&T.push("xterm-italic"),W.isDim()&&T.push("xterm-dim"),E=W.isInvisible()?n.WHITESPACE_CELL_CHAR:W.getChars()||n.WHITESPACE_CELL_CHAR,W.isUnderline()&&(T.push(`xterm-underline-${W.extended.underlineStyle}`)," "===E&&(E=" "),!W.isUnderlineColorDefault()))if(W.isUnderlineColorRGB())w.style.textDecorationColor=`rgb(${u.AttributeData.toColorRGB(W.getUnderlineColor()).join(",")})`;else{let e=W.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&W.isBold()&&e<8&&(e+=8),w.style.textDecorationColor=b.ansi[e].css}W.isOverline()&&(T.push("xterm-overline")," "===E&&(E=" ")),W.isStrikethrough()&&T.push("xterm-strikethrough"),U&&(w.style.textDecoration="underline");let V=W.getFgColor(),q=W.getFgColorMode(),X=W.getBgColor(),Y=W.getBgColorMode();const G=!!W.isInverse();if(G){const e=V;V=X,X=e;const t=q;q=Y,Y=t}let J,Z,Q,ee=!1;switch(this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{"top"!==e.options.layer&&ee||(e.backgroundColorRGB&&(Y=50331648,X=e.backgroundColorRGB.rgba>>8&16777215,J=e.backgroundColorRGB),e.foregroundColorRGB&&(q=50331648,V=e.foregroundColorRGB.rgba>>8&16777215,Z=e.foregroundColorRGB),ee="top"===e.options.layer)}),!ee&&z&&(J=this._coreBrowserService.isFocused?b.selectionBackgroundOpaque:b.selectionInactiveBackgroundOpaque,X=J.rgba>>8&16777215,Y=50331648,ee=!0,b.selectionForeground&&(q=50331648,V=b.selectionForeground.rgba>>8&16777215,Z=b.selectionForeground)),ee&&T.push("xterm-decoration-top"),Y){case 16777216:case 33554432:Q=b.ansi[X],T.push(`xterm-bg-${X}`);break;case 50331648:Q=l.channels.toColor(X>>16,X>>8&255,255&X),this._addStyle(w,`background-color:#${(X>>>0).toString(16).padStart(6,"0")}`);break;default:G?(Q=b.foreground,T.push(`xterm-bg-${o.INVERTED_DEFAULT_COLOR}`)):Q=b.background}switch(J||W.isDim()&&(J=l.color.multiplyOpacity(Q,.5)),q){case 16777216:case 33554432:W.isBold()&&V<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(V+=8),this._applyMinimumContrast(w,Q,b.ansi[V],W,J,void 0)||T.push(`xterm-fg-${V}`);break;case 50331648:const e=l.channels.toColor(V>>16&255,V>>8&255,255&V);this._applyMinimumContrast(w,Q,e,W,J,Z)||this._addStyle(w,`color:#${V.toString(16).padStart(6,"0")}`);break;default:this._applyMinimumContrast(w,Q,b.foreground,W,J,Z)||G&&T.push(`xterm-fg-${o.INVERTED_DEFAULT_COLOR}`)}T.length&&(w.className=T.join(" "),T.length=0),K||H||j||!N?w.textContent=E:D++,k!==this.defaultSpacing&&(w.style.letterSpacing=`${k}px`),m.push(w),I=F}return w&&D&&(w.textContent=E),m}_applyMinimumContrast(e,t,i,s,r,o){if(1===this._optionsService.rawOptions.minimumContrastRatio||(0,_.treatGlyphAsBackgroundColor)(s.getCode()))return!1;const n=this._getContrastCache(s);let a;if(r||o||(a=n.getColor(t.rgba,i.rgba)),void 0===a){const e=this._optionsService.rawOptions.minimumContrastRatio/(s.isDim()?2:1);a=l.color.ensureContrastRatio(r??t,o??i,e),n.setColor((r??t).rgba,(o??i).rgba,a??null)}return!!a&&(this._addStyle(e,`color:${a.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute("style",`${e.getAttribute("style")||""}${t};`)}_isCellInSelection(e,t){const i=this._selectionStart,s=this._selectionEnd;return!(!i||!s)&&(this._columnSelectMode?i[0]<=s[0]?e>=i[0]&&t>=i[1]&&e=i[1]&&e>=s[0]&&t<=s[1]:t>i[1]&&t=i[0]&&e=i[0])}};t.DomRendererRowFactory=f,t.DomRendererRowFactory=f=s([r(1,c.ICharacterJoinerService),r(2,h.IOptionsService),r(3,c.ICoreBrowserService),r(4,h.ICoreService),r(5,h.IDecorationService),r(6,c.IThemeService)],f)},2744(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WidthCache=void 0;const s=i(6181);t.WidthCache=class{constructor(e=()=>new r){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._canvasElements=[],this._canvasElements=[e(),e(),e(),e()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,i,s){e===this._font&&t===this._fontSize&&i===this._weight&&s===this._weightBold||(this._font=e,this._fontSize=t,this._weight=i,this._weightBold=s,this._canvasElements[0].setFont(e,t,i,!1),this._canvasElements[1].setFont(e,t,s,!1),this._canvasElements[2].setFont(e,t,i,!0),this._canvasElements[3].setFont(e,t,s,!0),this.clear())}get(e,t,i){let s;if(!t&&!i&&1===e.length&&(s=e.charCodeAt(0))<256){if(-9999!==this._flat[s])return this._flat[s];const t=this._measure(e,0);return t>0&&(this._flat[s]=t),t}let r=e;t&&(r+="B"),i&&(r+="I");let o=this._holey.get(r);if(void 0===o){let s=0;t&&(s|=1),i&&(s|=2),o=this._measure(e,s),o>0&&this._holey.set(r,o)}return o}_measure(e,t){return this._canvasElements[t].measure(e)}};class r{constructor(){"undefined"!=typeof OffscreenCanvas?(this._canvas=new OffscreenCanvas(1,1),this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d")))}setFont(e,t,i,s){const r=s?"italic":"";this._ctx.font=`${r} ${i} ${t}px ${e}`.trim()}measure(e){return this._ctx.measureText(e).width}}},9176(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.INVERTED_DEFAULT_COLOR=void 0,t.INVERTED_DEFAULT_COLOR=257},6181(e,t){function i(e){return 57508<=e&&e<=57558}function s(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e},t.isPowerlineGlyph=i,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=s,t.allowRescaling=function(e,t,r,o){return 1===t&&r>Math.ceil(1.5*o)&&void 0!==e&&e>255&&!s(e)&&!i(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return i(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,i=0){return(e-(2*Math.round(t)-i))%(2*Math.round(t))}},2274(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,i,s=!1){if(this.selectionStart=t,this.selectionEnd=i,!t||!i||t[0]===i[0]&&t[1]===i[1])return void this.clear();const r=e.buffers.active.ydisp,o=t[1]-r,n=i[1]-r,a=Math.max(o,0),h=Math.min(n,e.rows-1);a>=e.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=o,this.viewportEndRow=n,this.viewportCappedStartRow=a,this.viewportCappedEndRow=h,this.startCol=t[0],this.endCol=i[0])}isCellSelected(e,t,i){return!!this.hasSelection&&(i-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&i>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&t=this.startCol)}}},654(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.TextBlinkStateManager=void 0;const s=i(4812);class r extends s.Disposable{constructor(e,t,i){super(),this._renderCallback=e,this._coreBrowserService=t,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",e=>{this.setIntervalDuration(e)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const e=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(e||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}t.TextBlinkStateManager=r},8501(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._domNodePointerDown(e)))}_createArrow(e){const t=this._register(new c.ScrollbarArrow(e));return this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode),t}_createSlider(e,t,i,s){this.slider=new h.FastDomNode(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"==typeof i&&this.slider.setWidth(i),"number"==typeof s&&this.slider.setHeight(s),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(a.addDisposableListener(this.slider.domNode,a.eventType.POINTER_DOWN,e=>{0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))})),this._onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_handleElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._handlePointerDown(e)}delegatePointerDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),s=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),r=this._sliderPointerPosition(e);i<=r&&r<=s?0===e.button&&(e.preventDefault(),this._sliderPointerDown(e)):this._handlePointerDown(e)}_handlePointerDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"==typeof e.offsetX&&"number"==typeof e.offsetY)t=e.offsetX,i=e.offsetY;else{const s=a.getDomNodePagePosition(this.domNode.domNode);t=e.pageX-s.left,i=e.pageY-s.top}const s=this._pointerDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(s):this._scrollbarState.getDesiredScrollPositionFromOffset(s)),0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!(e.target&&e.target instanceof Element))return;const t=this._sliderPointerPosition(e),i=this._sliderOrthogonalPointerPosition(e),s=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{const r=this._sliderOrthogonalPointerPosition(e),o=Math.abs(r-i);if(u.isWindows&&o>140)return void this._setDesiredScrollPositionNow(s.getScrollPosition());const n=this._sliderPointerPosition(e)-t;this._setDesiredScrollPositionNow(s.getDesiredScrollPositionFromDelta(n))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}t.AbstractScrollbar=f},1203(e,t){function i(e){return"number"==typeof e?`${e}px`:e}Object.defineProperty(t,"__esModule",{value:!0}),t.FastDomNode=void 0,t.FastDomNode=class{constructor(e){this.domNode=e,this._width="",this._height="",this._top="",this._left="",this._bottom="",this._right="",this._className="",this._position="",this._layerHint=!1,this._contain="none"}setWidth(e){const t=i(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){const t=i(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){const t=i(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){const t=i(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){const t=i(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){const t=i(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=e?"translate3d(0px, 0px, 0px)":"")}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}}},928(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{try{e.releasePointerCapture(t)}catch{}}))}catch{o=a.getWindow(e)}this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_MOVE,e=>{e.buttons===i?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)})),this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_UP,e=>this.stopMonitoring(!0)))}}},9699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.HorizontalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(t.horizontalHasArrows?t.horizontalScrollbarSize:0,2===t.horizontal?0:t.horizontalScrollbarSize,2===t.vertical?0:t.verticalScrollbarSize,s.width,s.scrollWidth,o.scrollLeft),visibility:t.horizontal,extraScrollbarClassName:"xterm-horizontal",scrollable:e,scrollByPage:t.scrollByPage}),t.horizontalHasArrows)throw new Error("horizontalHasArrows is not supported in xterm.js");this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._handleElementSize(e.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return e}_sliderPointerPosition(e){return e.pageX}_sliderOrthogonalPointerPosition(e){return e.pageY}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}updateOptions(e){this.updateScrollbarSize(2===e.horizontal?0:e.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._visibilityController.setVisibility(e.horizontal),this._scrollByPage=e.scrollByPage}}t.HorizontalScrollbar=o},3988(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;ni&&(s=i-t),s<0&&(s=0),r<0&&(r=0),n+r>o&&(n=o-r),n<0&&(n=0),this.width=t,this.scrollWidth=i,this.scrollLeft=s,this.height=r,this.scrollHeight=o,this.scrollTop=n}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new o(this._forceIntegerValues,void 0!==e.width?e.width:this.width,void 0!==e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,void 0!==e.height?e.height:this.height,void 0!==e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new o(this._forceIntegerValues,this.width,this.scrollWidth,void 0!==e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,void 0!==e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){const i=this.width!==e.width,s=this.scrollWidth!==e.scrollWidth,r=this.scrollLeft!==e.scrollLeft,o=this.height!==e.height,n=this.scrollHeight!==e.scrollHeight,a=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:s,scrollLeftChanged:r,heightChanged:o,scrollHeightChanged:n,scrollTopChanged:a}}}t.ScrollState=o;class n extends r.Disposable{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new s.Emitter),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new o(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){const i=this._state.withScrollDimensions(e,t);this._setState(i,Boolean(this._smoothScrolling)),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0!==this._smoothScrollDuration){if(this._smoothScrolling){e={scrollLeft:void 0===e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:void 0===e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop};const i=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let s;s=t?new l(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):l.start(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=l.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}else this.setScrollPositionNow(e)}hasPendingScrollAnimation(){return Boolean(this._smoothScrolling)}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}t.Scrollable=n;class a{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function h(e,t){const i=t-e;return function(t){return e+i*(1-(s=1-t,Math.pow(s,3)));var s}}class l{constructor(e,t,i,s){this.from=e,this.to=t,this.duration=s,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this._scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this._scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(e,t,i){if(Math.abs(e-t)>2.5*i){let n,a;return e0&&Math.abs(e.deltaY)>0)return 1;let i=.5;if(this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(i+=.25),t){const s=Math.abs(e.deltaX),r=Math.abs(e.deltaY),o=Math.abs(t.deltaX),n=Math.abs(t.deltaY),a=Math.max(Math.min(s,o),1),h=Math.max(Math.min(r,n),1),l=Math.max(s,o),c=Math.max(r,n);l%a===0&&c%h===0&&(i-=.5)}return Math.min(Math.max(i,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}}S.INSTANCE=new S;class b extends _.Widget{get options(){return this._options}constructor(e,t,i){let s;super(),this._onScroll=this._register(new f.Emitter),this.onScroll=this._onScroll.event,t=t??{};const r=!i;i?s=i:(t.mouseWheelSmoothScroll=!1,s=new g.Scrollable({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:t=>a.scheduleAtNextAnimationFrame(a.getWindow(e),t)})),this._options=function(e){const t={lazyRender:void 0!==e.lazyRender&&e.lazyRender,className:void 0!==e.className?e.className:"",useShadows:void 0===e.useShadows||e.useShadows,handleMouseWheel:void 0===e.handleMouseWheel||e.handleMouseWheel,flipAxes:void 0!==e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:void 0!==e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:void 0!==e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:void 0!==e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:void 0!==e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:void 0!==e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:void 0===e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:void 0===e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,listenOnDomNode:void 0!==e.listenOnDomNode?e.listenOnDomNode:null,horizontal:void 0!==e.horizontal?e.horizontal:1,horizontalScrollbarSize:void 0!==e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:void 0!==e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:void 0!==e.horizontalHasArrows&&e.horizontalHasArrows,vertical:void 0!==e.vertical?e.vertical:1,verticalScrollbarSize:void 0!==e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:void 0!==e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:void 0!==e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:void 0!==e.scrollByPage&&e.scrollByPage};return t.horizontalSliderSize=void 0!==e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=void 0!==e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,v.isMac&&(t.className+=" xterm-mac"),t}(t),this._scrollable=s,this._register(this._scrollable.onScroll(e=>{this._handleScroll(e),this._onScroll.fire(e)})),r&&this._register(this._scrollable);const o={handleMouseWheel:e=>this._handleMouseWheel(e),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new d.VerticalScrollbar(this._scrollable,this._options,o)),this._horizontalScrollbar=this._register(new c.HorizontalScrollbar(this._scrollable,this._options,o)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,e=>this._handleMouseOver(e)),this._onmouseleave(this._listenOnDomNode,e=>this._handleMouseLeave(e)),this._hideTimeout=this._register(new u.TimeoutTimer),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,v.isMac&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){void 0!==e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),void 0!==e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),void 0!==e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),void 0!==e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),void 0!==e.horizontal&&(this._options.horizontal=e.horizontal),void 0!==e.vertical&&(this._options.vertical=e.vertical),void 0!==e.horizontalHasArrows&&(this._options.horizontalHasArrows=e.horizontalHasArrows),void 0!==e.verticalHasArrows&&(this._options.verticalHasArrows=e.verticalHasArrows),void 0!==e.horizontalScrollbarSize&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),void 0!==e.verticalScrollbarSize&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),void 0!==e.scrollByPage&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new l.StandardWheelEvent(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),e)){const e=e=>{this._handleMouseWheel(new l.StandardWheelEvent(e))};this._mouseWheelToDispose.push(a.addDisposableListener(this._listenOnDomNode,a.eventType.MOUSE_WHEEL,e,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;const t=S.INSTANCE;t.acceptStandardWheelEvent(e);let i=!1;if(e.deltaY||e.deltaX){let s=e.deltaY*this._options.mouseWheelScrollSensitivity,r=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&r+s===0?r=s=0:Math.abs(s)>=Math.abs(r)?r=0:s=0),this._options.flipAxes&&([s,r]=[r,s]);const o=!v.isMac&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!o||r||(r=s,s=0),e.browserEvent&&e.browserEvent.altKey&&(r*=this._options.fastScrollSensitivity,s*=this._options.fastScrollSensitivity);const n=this._scrollable.getFutureScrollPosition();let a={};if(s){const e=50*s,t=n.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(a,t)}if(r){const e=50*r,t=n.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(a,t)}a=this._scrollable.validateScrollPosition(a),(n.scrollLeft!==a.scrollLeft||n.scrollTop!==a.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),i=!0)}let s=i;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0,s=i?" xterm-shadow-left":"",r=t?" xterm-shadow-top":"",o=i||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${r}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${o}${r}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet(()=>this._hide(),500)}}t.SmoothScrollableElement=b},9594(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._arrowPointerDown(e))),this._register(c.addStandardDisposableListener(this.domNode,c.eventType.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new c.WindowIntervalTimer),this._pointerdownScheduleRepeatTimer=this._register(new l.TimeoutTimer)}_arrowPointerDown(e){e.target&&e.target instanceof Element&&(this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,c.getWindow(e))},200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),e.preventDefault())}}t.ScrollbarArrow=d},1270(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollbarState=void 0;class i{constructor(e,t,i,s,r,o){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=s,this._scrollSize=r,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new i(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setArrowSize(e){const t=Math.round(e);this._arrowSize!==t&&(this._arrowSize=t,this._refreshComputedValues())}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,i,s,r){const o=Math.max(0,i-e),n=Math.max(0,o-2*t),a=s>0&&s>i;if(!a)return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(n),computedSliderRatio:0,computedSliderPosition:0};const h=Math.round(Math.max(20,Math.floor(i*n/s))),l=(n-h)/(s-i),c=r*l;return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(h),computedSliderRatio:l,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){const e=i._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize;let i=this._scrollPosition;return t{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(e?" xterm-fade":"")))}}t.ScrollbarVisibilityController=o},2650(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{s||(s=!0,this._remove(i))}}_remove(e){if(e.prev!==_.Undefined&&e.next!==_.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===_.Undefined&&e.next===_.Undefined?(this._first=_.Undefined,this._last=_.Undefined):e.next===_.Undefined?(this._last=this._last.prev,this._last.next=_.Undefined):e.prev===_.Undefined&&(this._first=this._first.next,this._first.prev=_.Undefined)}*[Symbol.iterator](){let e=this._first;for(;e!==_.Undefined;)yield e.element,e=e.next}}var f;!function(e){e.TAP="-xterm-gesturetap",e.CHANGE="-xterm-gesturechange",e.START="-xterm-gesturestart",e.END="-xterm-gesturesend",e.CONTEXT_MENU="-xterm-gesturecontextmenu"}(f||(t.EventType=f={}));class p extends l.Disposable{constructor(){super(),this._dispatched=!1,this._targets=new u,this._ignoreTargets=new u,this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;const e=c;this._register(h.addDisposableListener(e.document,"touchstart",e=>this._handleTouchStart(e),{passive:!1})),this._register(h.addDisposableListener(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(h.addDisposableListener(e.document,"touchmove",e=>this._handleTouchMove(e),{passive:!1}))}static addTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._targets.push(e);return(0,l.toDisposable)(t)}static ignoreTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._ignoreTargets.push(e);return(0,l.toDisposable)(t)}static isTouchDevice(){return"ontouchstart"in c||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){const t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let i=0,s=e.targetTouches.length;i=p._holdDelay&&Math.abs(n.initialPageX-d(n.rollingPageX))<30&&Math.abs(n.initialPageY-d(n.rollingPageY))<30){const e=this._newGestureEvent(f.CONTEXT_MENU,n.initialTarget);e.pageX=d(n.rollingPageX),e.pageY=d(n.rollingPageY),this._dispatchEvent(e)}else if(1===s){const t=d(n.rollingPageX),s=d(n.rollingPageY),r=d(n.rollingTimestamps)-n.rollingTimestamps[0],o=t-n.rollingPageX[0],a=s-n.rollingPageY[0],h=[...this._targets].filter(e=>n.initialTarget instanceof Node&&e.contains(n.initialTarget));this._inertia(e,h,i,Math.abs(o)/r,o>0?1:-1,t,Math.abs(a)/r,a>0?1:-1,s)}this._dispatchEvent(this._newGestureEvent(f.END,n.initialTarget)),delete this._activeTouches[o.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){const i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}_dispatchEvent(e){if(e.type===f.TAP){const t=(new Date).getTime();let i;i=t-this._lastSetTapCountTime>p._clearTapCountTime?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==f.CHANGE&&e.type!==f.CONTEXT_MENU||(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(const t of this._ignoreTargets)if(t.contains(e.initialTarget))return;const t=[];for(const i of this._targets)if(i.contains(e.initialTarget)){let s=0,r=e.initialTarget;for(;r&&r!==i;)s++,r=r.parentElement;t.push([s,i])}t.sort((e,t)=>e[0]-t[0]);for(const[,i]of t)i.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,i,s,r,o,n,a,l){this._handle=h.scheduleAtNextAnimationFrame(e,()=>{const h=Date.now(),c=h-i;let d=0,_=0,u=!0;s+=p._scrollFriction*c,n+=p._scrollFriction*c,s>0&&(u=!1,d=r*s*c),n>0&&(u=!1,_=a*n*c);const v=this._newGestureEvent(f.CHANGE);v.translationX=d,v.translationY=_,t.forEach(e=>e.dispatchEvent(v)),u||this._inertia(e,t,h,s,r,o+d,n,a,l+_)})}_handleTouchMove(e){const t=Date.now();for(let i=0,s=e.changedTouches.length;i3&&(r.rollingPageX.shift(),r.rollingPageY.shift(),r.rollingTimestamps.shift()),r.rollingPageX.push(s.pageX),r.rollingPageY.push(s.pageY),r.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}}t.Gesture=p,p._scrollFriction=-.005,p._holdDelay=700,p._clearTapCountTime=400,n([function(e,t,i){let s=null,r=null;if("function"==typeof i.value?(s="value",r=i.value,0!==r.length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"==typeof i.get&&(s="get",r=i.get),!r||!s)throw new Error("not supported");const o=`$memoize$${t}`;i[s]=function(...e){return this.hasOwnProperty(o)||Object.defineProperty(this,o,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,e)}),this[o]}}],p,"isTouchDevice",null)},8997(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.VerticalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition(),n=t.verticalHasArrows;super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(n?t.verticalScrollbarSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,s.height,s.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"xterm-vertical",scrollable:e,scrollByPage:t.scrollByPage}),this._arrowScrollDelta=0,this._setArrows(n,t.verticalScrollbarSize),this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._handleElementSize(e.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return t}_sliderPointerPosition(e){return e.pageY}_sliderOrthogonalPointerPosition(e){return e.pageX}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}_arrowScroll(e){const t=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollTop:t.scrollTop+e})}_setArrows(e,t){if(this._arrowScrollDelta=t,!this._arrowUp||!this._arrowDown){const e=0;this._arrowUp=this._createArrow({className:"xterm-scra xterm-arrow-up",top:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})}if(this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;const i=e?"":"none";this._arrowUp.bgDomNode.style.display=i,this._arrowUp.domNode.style.display=i,this._arrowDown.bgDomNode.style.display=i,this._arrowDown.domNode.style.display=i}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){const t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}}t.VerticalScrollbar=o},7741(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nt(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseover(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_OVER,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseleave(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_LEAVE,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}}t.Widget=c},5959(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):!!(this.selectionStart&&this.selectionStart[1]<0)&&(this.selectionStart=[0,0],!0)}}},4792(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;const o=i(6501),n=i(4812),a=i(8636);let h=class extends n.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,i){super(),this._optionsService=i,this.width=0,this.height=0,this._onCharSizeChange=this._register(new a.Emitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new d(this._optionsService))}catch{this._measureStrategy=this._register(new c(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=h,t.CharSizeService=h=s([r(2,o.IOptionsService)],h);class l extends n.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){void 0!==e&&e>0&&void 0!==t&&t>0&&(this._result.width=e,this._result.height=t)}}class c extends l{constructor(e,t,i){super(),this._document=e,this._parentElement=t,this._optionsService=i,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends l{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");const t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},945(e,t,i){var s,r=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},o=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;const n=i(5451),a=i(8938),h=i(3055),l=i(6501);class c extends n.AttributeData{constructor(e,t,i){super(),this.content=0,this.combinedData="",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=c;let d=s=class{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new h.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;tthis._screenDprMonitor.setWindow(e))),this._register(s.EventUtils.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register((0,r.addDisposableListener)(this._textarea,"focus",()=>this._isFocused=!0)),this._register((0,r.addDisposableListener)(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return void 0===this._cachedIsFocused&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}}t.CoreBrowserService=n;class a extends o.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this._register(new o.MutableDisposable),this._onDprChange=this._register(new s.Emitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register((0,o.toDisposable)(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,r.addDisposableListener)(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},2136(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.KeyboardService=void 0;const o=i(706),n=i(7241),a=i(9249),h=i(701),l=i(6501);let c=class{constructor(e,t){this._coreService=e,this._optionsService=t}_getWin32InputMode(){return this._win32InputMode??=new a.Win32InputMode,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new n.KittyKeyboard,this._kittyKeyboard}evaluateKeyDown(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!0);const t=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(e,t,e.repeat?2:1,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):(0,o.evaluateKeyboardEvent)(e,this._coreService.decPrivateModes.applicationCursorKeys,h.isMac,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!1);const t=this._coreService.kittyKeyboard.flags;return this.useKitty&&2&t?this._getKittyKeyboard().evaluate(e,t,3,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):void 0}get useKitty(){const e=this._coreService.kittyKeyboard.flags;return!(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard||!n.KittyKeyboard.shouldUseProtocol(e))}get useWin32InputMode(){return!(!this._optionsService.rawOptions.vtExtensions?.win32InputMode||!this._coreService.decPrivateModes.win32InputMode)}};t.KeyboardService=c,t.KeyboardService=c=s([r(0,l.ICoreService),r(1,l.IOptionsService)],c)},9820(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.LinkProviderService=void 0;const s=i(4812);class r extends s.Disposable{constructor(){super(),this.linkProviders=[],this._register((0,s.toDisposable)(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{const t=this.linkProviders.indexOf(e);-1!==t&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=r},8294(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseCoordsService=void 0;const o=i(4159),n=i(5251),a=i(7098);let h=class{constructor(e,t){this._charSizeService=e,this._renderService=t}getCoords(e,t,i,s,r){return(0,n.getCoords)((0,o.getWindow)(t),e,t,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,r)}getMouseReportCoords(e,t){const i=(0,n.getCoordsRelativeToElement)((0,o.getWindow)(t),e,t);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};t.MouseCoordsService=h,t.MouseCoordsService=h=s([r(0,a.ICharSizeService),r(1,a.IRenderService)],h)},9784(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.AltMouseCursorController=t.MouseService=void 0;const o=i(4159),n=i(6501),a=i(4812),h=i(7098),l=i(2650);let c=class{constructor(e,t,i,s,r,o,n,a,h){this._renderService=e,this._mouseCoordsService=t,this._mouseStateService=i,this._coreService=s,this._bufferService=r,this._optionsService=o,this._selectionService=n,this._logService=a,this._coreBrowserService=h,this._lastEvent=null,this._wheelPartialScroll=0,this._touchScrollAccumulator=0}bindMouse(e,t,i){const{element:s,document:r}=e,n=new a.MutableDisposable,h=new a.MutableDisposable;t(n),t(h);const c={target:e,focus:i,requestedEvents:{mouseup:null,wheel:null,mousedrag:null,mousemove:null},mouseupListener:n,mousedragListener:h},_={mouseup:e=>this._handleMouseUp(c,e),wheel:e=>this._handleWheel(c,e),mousedrag:e=>this._handleMouseDrag(c,e),mousemove:e=>this._handleMouseMove(c,e)};this._altMouseCursor=new d(s,r,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),t(this._altMouseCursor),t(this._mouseStateService.onProtocolChange(e=>{this._handleProtocolChange(c,_,e)})),t(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(s),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,t((0,o.addDisposableListener)(s,"mousedown",e=>this._handleMouseDown(c,e))),t((0,o.addDisposableListener)(s,"wheel",e=>this._handlePassiveWheel(c,e),{passive:!1})),t(l.Gesture.addTarget(e.screenElement)),t((0,o.addDisposableListener)(e.screenElement,l.EventType.START,()=>this._handleTouchStart())),t((0,o.addDisposableListener)(e.screenElement,l.EventType.CHANGE,e=>this._handleTouchChange(c,e)))}_sendEvent(e,t){const i=this._mouseCoordsService.getMouseReportCoords(t,e.target.screenElement);if(!i)return!1;let s,r;switch(t.overrideType||t.type){case"mousemove":r=32,void 0===t.buttons?(s=3,void 0!==t.button&&(s=t.button<3?t.button:3)):s=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case"mouseup":r=0,s=t.button<3?t.button:3;break;case"mousedown":r=1,s=t.button<3?t.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;const e=t.deltaY;if(0===e)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return!1;r=e<0?0:1,s=4;break;default:return!1}if(void 0===r||void 0===s||s>4)return!1;if(4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!t.altKey)return!1;const o=4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:i.col,row:i.row,x:i.x,y:i.y,button:s,action:r,ctrl:t.ctrlKey,alt:!o&&t.altKey,shift:t.shiftKey})}_handleMouseUp(e,t){this._sendEvent(e,t),t.buttons||(e.mouseupListener.clear(),e.mousedragListener.clear())}_handleWheel(e,t){return this._sendEvent(e,t),t.preventDefault(),t.stopPropagation(),!1}_handleMouseDrag(e,t){t.buttons&&this._sendEvent(e,t)}_handleMouseMove(e,t){t.buttons||this._sendEvent(e,t)}_handleMouseDown(e,t){if(t.preventDefault(),e.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(t))return;this._sendEvent(e,t);const{element:i,document:s}=e.target,r=i.ownerDocument??s;e.requestedEvents.mouseup&&(e.mouseupListener.value=(0,o.addDisposableListener)(r,"mouseup",e.requestedEvents.mouseup)),e.requestedEvents.mousedrag&&(e.mousedragListener.value=(0,o.addDisposableListener)(r,"mousemove",e.requestedEvents.mousedrag))}_handlePassiveWheel(e,t){if(!e.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;if(!this._bufferService.buffer.hasScrollback){if(0===t.deltaY)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return t.preventDefault(),t.stopPropagation(),!1;const e=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(e,!0),t.preventDefault(),t.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(e,t){t.preventDefault(),t.stopPropagation(),e.requestedEvents.wheel?this._handleTouchScrollAsWheel(e,t):this._bufferService.buffer.hasScrollback?e.target.handleTouchScroll?.(t.translationY):this._handleTouchScrollAsKeys(t)}_handleTouchScrollAsKeys(e){const t=this._renderService?.dimensions.css.cell.height;if(!t)return;this._touchScrollAccumulator-=e.translationY;const i=Math.trunc(this._touchScrollAccumulator/t);if(0===i)return;this._touchScrollAccumulator-=i*t;const s=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(i<0?"A":"B");for(let e=0;e0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(r*=this._bufferService.rows),r}_triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._mouseStateService.isPixelEncoding))return!1;if(!this._mouseStateService.restrictMouseEvent(e))return!1;const t=this._mouseStateService.encodeMouseEvent(e);return t&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}_explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.MouseService=c,t.MouseService=c=s([r(0,h.IRenderService),r(1,h.IMouseCoordsService),r(2,n.IMouseStateService),r(3,n.ICoreService),r(4,n.IBufferService),r(5,n.IOptionsService),r(6,h.ISelectionService),r(7,n.ILogService),r(8,h.ICoreBrowserService)],c);class d{constructor(e,t,i){this._element=e,this._document=t,this._isActive=i,this._listeners=new a.MutableDisposable}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;const e=new a.DisposableStore,t=e=>this.syncFromModifier(e);e.add((0,o.addDisposableListener)(this._document,"keydown",t)),e.add((0,o.addDisposableListener)(this._document,"keyup",t)),e.add((0,o.addDisposableListener)(this._element,"mousemove",t));const i=this._element.ownerDocument?.defaultView;i&&e.add((0,o.addDisposableListener)(i,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=e}resetClass(){this._updateClass(!1)}syncFromModifier(e){this._isActive()&&this._updateClass(e.getModifierState("Alt"))}_updateClass(e){e?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}}t.AltMouseCursorController=d},5783(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;const o=i(4852),n=i(7098),a=i(4812),h=i(6168),l=i(6501),c=i(8636);let d=class extends a.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,i,s,r,n,l,d,u,f){super(),this._rowCount=e,this._optionsService=i,this._logService=s,this._charSizeService=r,this._coreService=n,this._coreBrowserService=u,this._renderer=this._register(new a.MutableDisposable),this._observerDisposable=this._register(new a.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this._register(new c.Emitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this._register(new c.Emitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this._register(new c.Emitter),this.onRender=this._onRender.event,this._onRefreshRequest=this._register(new c.Emitter),this.onRefreshRequest=this._onRefreshRequest.event,this._pausedResizeTask=this._register(new h.DebouncedIdleTask(this._logService)),this._renderDebouncer=new o.RenderDebouncer((e,t)=>this._renderRows(e,t),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new _(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register((0,a.toDisposable)(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(d.onResize(()=>this._fullRefresh())),this._register(d.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(d.cols,d.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(d.buffer.y,d.buffer.y,void 0,!0))),this._register(f.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(e=>this._registerIntersectionObserver(e,t)))}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){const i=new e.IntersectionObserver(e=>this._handleIntersectionChange(e[e.length-1]),{threshold:0});this._observerDisposable.value=(0,a.toDisposable)(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=i,i.observe(t)}}_handleIntersectionChange(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,i=!1,s=!1){if(this._isPaused)return void(this._needsFullRefresh=!0);if(this._coreService.decPrivateModes.synchronizedOutput)return void this._syncOutputHandler.bufferRows(e,t);const r=this._syncOutputHandler.flush();r&&(e=Math.min(e,r.start),t=Math.max(t,r.end)),s||(this._isNextRenderRedrawOnly=!1),i?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){this._renderer.value&&(this._coreService.decPrivateModes.synchronizedOutput?this._syncOutputHandler.bufferRows(e,t):(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0))}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(e=>this.refreshRows(e.start,e.end,e.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,i){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=i,this._renderer.value?.handleSelectionChanged(e,t,i)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d,t.RenderService=d=s([r(2,l.IOptionsService),r(3,l.ILogService),r(4,n.ICharSizeService),r(5,l.ICoreService),r(6,l.IDecorationService),r(7,l.IBufferService),r(8,n.ICoreBrowserService),r(9,n.IThemeService)],d);class _{constructor(e,t,i){this._coreBrowserService=e,this._coreService=t,this._onTimeout=i,this._start=0,this._end=0,this._isBuffering=!1}bufferRows(e,t){this._isBuffering?(this._start=Math.min(this._start,e),this._end=Math.max(this._end,t)):(this._start=e,this._end=t,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;const e={start:this._start,end:this._end};return this._isBuffering=!1,e}dispose(){void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}}},2079(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(e=>this._handleTrim(e)),this._register(this._bufferService.buffers.onBufferActivate(e=>this._handleBufferActivate(e))),this.enable(),this._model=new d.SelectionModel(this._bufferService),this._activeSelectionMode=0,this._register((0,u.toDisposable)(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(e=>{e.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";const i=this._bufferService.buffer,s=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";const r=e[0]e.replace(b," ")).join(f.isWindows?"\r\n":"\n")}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),f.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})}_isClickInSelection(e){const t=this._getMouseBufferCoords(e),i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!!(i&&s&&t)&&this._areCoordsInSelection(t,i,s)}isCellInSelection(e,t){const i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!(!i||!s)&&this._areCoordsInSelection([e,t],i,s)}_areCoordsInSelection(e,t,i){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){const i=this._linkifier.currentLink?.link?.range;if(i)return this._model.selectionStart=[i.start.x-1,i.start.y-1],this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const s=this._getMouseBufferCoords(e);return!!s&&(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){const t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=(0,l.getCoordsRelativeToElement)(this._coreBrowserService.window,e,this._screenElement)[1];const i=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=i?0:(t>i&&(t-=i),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(14*t))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:f.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(2===e.button&&this.hasSelection||0!==e.button||this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):1===e.detail?this._handleSingleClick(e):2===e.detail?this._handleDoubleClick(e):3===e.detail&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){const t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);const i=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);i&&i.length!==this._model.selectionStart[0]&&0===i.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){const t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return(!this._optionsService.rawOptions.mouseEventsRequireAlt||!this._mouseStateService.areMouseEventsActive)&&e.altKey&&!(f.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;const t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd)return void this.refresh(!0);2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const i=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){const t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const t=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(t&&void 0!==t[0]&&void 0!==t[1]){const e=(0,c.moveToCellSequence)(t[0]-1,t[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(e,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,i=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);i?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,i)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,i)}_fireOnSelectionChange(e,t,i){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=i,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(e=>this._handleTrim(e))}_convertViewportColToCharacterIndex(e,t){let i=t;for(let s=0;t>=s;s++){const r=e.loadCell(s,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:r>1&&t!==s&&(i+=r-1)}return i}setSelection(e,t,i){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=i,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,i=!0,s=!0){if(e[0]>=this._bufferService.cols)return;const r=this._bufferService.buffer,o=r.lines.get(e[1]);if(!o)return;const n=r.translateBufferLineToString(e[1],!1);let a=this._convertViewportColToCharacterIndex(o,e[0]),h=a;const l=e[0]-a;let c=0,d=0,_=0,u=0;if(" "===n.charAt(a)){for(;a>0&&" "===n.charAt(a-1);)a--;for(;h1&&(u+=s-1,h+=s-1);t>0&&a>0&&!this._isCharWordSeparator(o.loadCell(t-1,this._workCell));){o.loadCell(t-1,this._workCell);const e=this._workCell.getChars().length;0===this._workCell.getWidth()?(c++,t--):e>1&&(_+=e-1,a-=e-1),a--,t--}for(;i1&&(u+=e-1,h+=e-1),h++,i++}}h++;let f=a+l-c+_,p=Math.min(this._bufferService.cols,h-a+c+d-_-u);if(t||""!==n.slice(a,h).trim()){if(i&&0===f&&32!==o.getCodePoint(0)){const t=r.lines.get(e[1]-1);if(t&&o.isWrapped&&32!==t.getCodePoint(this._bufferService.cols-1)){const t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){const e=this._bufferService.cols-t.start;f-=e,p+=e}}}if(s&&f+p===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){const t=r.lines.get(e[1]+1);if(t?.isWrapped&&32!==t.getCodePoint(0)){const t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(p+=t.length)}}return{start:f,length:p}}}_selectWordAt(e,t){const i=this._getWordAt(e,t);if(i){for(;i.start<0;)i.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[i.start,e[1]],this._model.selectionStartLength=i.length}}_selectToWordAt(e){const t=this._getWordAt(e,!0);if(t){let i=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,i--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}}_isCharWordSeparator(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){const t=this._bufferService.buffer.getWrappedRangeForLine(e),i={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols)}};t.SelectionService=w,t.SelectionService=w=n([h(3,g.IBufferService),h(4,g.ICoreService),h(5,_.IMouseCoordsService),h(6,g.IOptionsService),h(7,g.IMouseStateService),h(8,_.IRenderService),h(9,_.ICoreBrowserService)],w)},7098(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IKeyboardService=t.ILinkProviderService=t.IThemeService=t.ICharacterJoinerService=t.ISelectionService=t.IRenderService=t.IMouseService=t.IMouseCoordsService=t.ICoreBrowserService=t.ICharSizeService=void 0;const s=i(6201);t.ICharSizeService=(0,s.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,s.createDecorator)("CoreBrowserService"),t.IMouseCoordsService=(0,s.createDecorator)("MouseCoordsService"),t.IMouseService=(0,s.createDecorator)("MouseService"),t.IRenderService=(0,s.createDecorator)("RenderService"),t.ISelectionService=(0,s.createDecorator)("SelectionService"),t.ICharacterJoinerService=(0,s.createDecorator)("CharacterJoinerService"),t.IThemeService=(0,s.createDecorator)("ThemeService"),t.ILinkProviderService=(0,s.createDecorator)("LinkProviderService"),t.IKeyboardService=(0,s.createDecorator)("KeyboardService")},9078(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.ThemeService=void 0;const o=i(7174),n=i(9302),a=i(4103),h=i(4812),l=i(6501),c=i(8636),d=a.css.toColor("#ffffff"),_=a.css.toColor("#000000"),u=a.css.toColor("#ffffff"),f=_,p={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},v=d;let g=class extends h.Disposable{get colors(){return this._colors}constructor(e){super(),this._optionsService=e,this._contrastCache=new o.ColorContrastCache,this._halfContrastCache=new o.ColorContrastCache,this._onChangeColors=this._register(new c.Emitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:d,background:_,cursor:u,cursorAccent:f,selectionForeground:void 0,selectionBackgroundTransparent:p,selectionBackgroundOpaque:a.color.blend(_,p),selectionInactiveBackgroundTransparent:p,selectionInactiveBackgroundOpaque:a.color.blend(_,p),scrollbarSliderBackground:a.color.opacity(d,.2),scrollbarSliderHoverBackground:a.color.opacity(d,.4),scrollbarSliderActiveBackground:a.color.opacity(d,.5),overviewRulerBorder:d,ansi:n.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}_setTheme(e={}){const t=this._colors;if(t.foreground=m(e.foreground,d),t.background=m(e.background,_),t.cursor=a.color.blend(t.background,m(e.cursor,u)),t.cursorAccent=a.color.blend(t.background,m(e.cursorAccent,f)),t.selectionBackgroundTransparent=m(e.selectionBackground,p),t.selectionBackgroundOpaque=a.color.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=m(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=a.color.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?m(e.selectionForeground,a.NULL_COLOR):void 0,t.selectionForeground===a.NULL_COLOR&&(t.selectionForeground=void 0),a.color.isOpaque(t.selectionBackgroundTransparent)){const e=.3;t.selectionBackgroundTransparent=a.color.opacity(t.selectionBackgroundTransparent,e)}if(a.color.isOpaque(t.selectionInactiveBackgroundTransparent)){const e=.3;t.selectionInactiveBackgroundTransparent=a.color.opacity(t.selectionInactiveBackgroundTransparent,e)}if(t.scrollbarSliderBackground=m(e.scrollbarSliderBackground,a.color.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=m(e.scrollbarSliderHoverBackground,a.color.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=m(e.scrollbarSliderActiveBackground,a.color.opacity(t.foreground,.5)),t.overviewRulerBorder=m(e.overviewRulerBorder,v),t.ansi=n.DEFAULT_ANSI_COLORS.slice(),t.ansi[0]=m(e.black,n.DEFAULT_ANSI_COLORS[0]),t.ansi[1]=m(e.red,n.DEFAULT_ANSI_COLORS[1]),t.ansi[2]=m(e.green,n.DEFAULT_ANSI_COLORS[2]),t.ansi[3]=m(e.yellow,n.DEFAULT_ANSI_COLORS[3]),t.ansi[4]=m(e.blue,n.DEFAULT_ANSI_COLORS[4]),t.ansi[5]=m(e.magenta,n.DEFAULT_ANSI_COLORS[5]),t.ansi[6]=m(e.cyan,n.DEFAULT_ANSI_COLORS[6]),t.ansi[7]=m(e.white,n.DEFAULT_ANSI_COLORS[7]),t.ansi[8]=m(e.brightBlack,n.DEFAULT_ANSI_COLORS[8]),t.ansi[9]=m(e.brightRed,n.DEFAULT_ANSI_COLORS[9]),t.ansi[10]=m(e.brightGreen,n.DEFAULT_ANSI_COLORS[10]),t.ansi[11]=m(e.brightYellow,n.DEFAULT_ANSI_COLORS[11]),t.ansi[12]=m(e.brightBlue,n.DEFAULT_ANSI_COLORS[12]),t.ansi[13]=m(e.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),t.ansi[14]=m(e.brightCyan,n.DEFAULT_ANSI_COLORS[14]),t.ansi[15]=m(e.brightWhite,n.DEFAULT_ANSI_COLORS[15]),e.extendedAnsi){const i=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;ssetTimeout(t,e))},t.disposableTimeout=function(e,t=0,i){const r=setTimeout(()=>{e(),i&&o.dispose()},t),o=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(o),o};const s=i(4812);t.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}},t.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(e){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,e())}))}},t.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(e,t,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{e()},t);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},5639(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;const s=i(4812),r=i(8636);class o extends s.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this._register(new r.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new r.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new r.Emitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;ithis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+i<0)throw new Error("Cannot shift elements in list beyond index 0");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>>0},e.toColor=function(t,i,s,r){return{css:e.toCss(t,i,s,r),rgba:e.toRgba(t,i,s,r)}}}(n||(t.channels=n={})),function(e){function t(e,t){return o=Math.round(255*t),[i,s,r]=c.toChannels(e.rgba),{css:n.toCss(i,s,r,o),rgba:n.toRgba(i,s,r,o)}}e.blend=function(e,t){if(o=(255&t.rgba)/255,1===o)return{css:t.css,rgba:t.rgba};const a=t.rgba>>24&255,h=t.rgba>>16&255,l=t.rgba>>8&255,c=e.rgba>>24&255,d=e.rgba>>16&255,_=e.rgba>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),{css:n.toCss(i,s,r),rgba:n.toRgba(i,s,r)}},e.isOpaque=function(e){return!(255&~e.rgba)},e.ensureContrastRatio=function(e,t,i){const s=c.ensureContrastRatio(e.rgba,t.rgba,i);if(s)return n.toColor(s>>24&255,s>>16&255,s>>8&255)},e.opaque=function(e){const t=(255|e.rgba)>>>0;return[i,s,r]=c.toChannels(t),{css:n.toCss(i,s,r),rgba:t}},e.opacity=t,e.multiplyOpacity=function(e,i){return o=255&e.rgba,t(e,o*i/255)},e.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}}(a||(t.color=a={})),function(e){let t,a;try{const e=document.createElement("canvas");e.width=1,e.height=1;const i=e.getContext("2d",{willReadFrequently:!0});i&&(t=i,t.globalCompositeOperation="copy",a=t.createLinearGradient(0,0,1,1))}catch{}e.toColor=function(e){if(e.match(/#[\da-f]{3,8}/i))switch(e.length){case 4:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),n.toColor(i,s,r);case 5:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),o=parseInt(e.slice(4,5).repeat(2),16),n.toColor(i,s,r,o);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}const h=e.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),o=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),n.toColor(i,s,r,o);if("transparent"===e)return{css:"transparent",rgba:0};if(!t||!a)throw new Error("css.toColor: Unsupported css format");if(t.fillStyle=a,t.fillStyle=e,"string"!=typeof t.fillStyle)throw new Error("css.toColor: Unsupported css format");if(t.fillRect(0,0,1,1),[i,s,r,o]=t.getImageData(0,0,1,1).data,255!==o)throw new Error("css.toColor: Unsupported css format");return{rgba:n.toRgba(i,s,r,o),css:e}}}(h||(t.css=h={})),function(e){function t(e,t,i){const s=e/255,r=t/255,o=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(l||(t.rgb=l={})),function(e){function t(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c0||a>0||h>0);)n-=Math.max(0,Math.ceil(.1*n)),a-=Math.max(0,Math.ceil(.1*a)),h-=Math.max(0,Math.ceil(.1*h)),c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));return(n<<24|a<<16|h<<8|255)>>>0}function a(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c>>0}e.blend=function(e,t){if(o=(255&t)/255,1===o)return t;const a=t>>24&255,h=t>>16&255,l=t>>8&255,c=e>>24&255,d=e>>16&255,_=e>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),n.toRgba(i,s,r)},e.ensureContrastRatio=function(e,i,s){const r=l.relativeLuminance(e>>8),o=l.relativeLuminance(i>>8);if(_(r,o)>8));if(n_(r,l.relativeLuminance(t>>8))?o:t}return o}const n=a(e,i,s),h=_(r,l.relativeLuminance(n>>8));if(h_(r,l.relativeLuminance(o>>8))?n:o}return n}},e.reduceLuminance=t,e.increaseLuminance=a,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}}(c||(t.rgba=c={}))},5777(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;const s=i(6501),r=i(6025),o=i(7276),n=i(9640),a=i(56),h=i(4071),l=i(6478),c=i(7428),d=i(6415),_=i(5746),u=i(5882),f=i(2486),p=i(3562),v=i(8811),g=i(8636),m=i(4812);let S=!1;class b extends m.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new g.Emitter),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this._register(new m.MutableDisposable),this._onBinary=this._register(new g.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new g.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new g.Emitter),this.onLineFeed=this._onLineFeed.event,this._onRender=this._register(new g.Emitter),this.onRender=this._onRender.event,this._onResize=this._register(new g.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new g.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new g.Emitter),this._instantiationService=new r.InstantiationService,this.optionsService=this._register(new a.OptionsService(e)),this._instantiationService.setService(s.IOptionsService,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(s.ILogService,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(n.BufferService)),this._instantiationService.setService(s.IBufferService,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(h.CoreService)),this._instantiationService.setService(s.ICoreService,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(l.MouseStateService)),this._instantiationService.setService(s.IMouseStateService,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(d.UnicodeService)),this.unicodeService.register(new c.UnicodeV6),this._instantiationService.setService(s.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(_.CharsetService),this._instantiationService.setService(s.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(v.OscLinkService),this._instantiationService.setService(s.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new f.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(g.EventUtils.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(g.EventUtils.forward(this._bufferService.onResize,this._onResize)),this._register(g.EventUtils.forward(this.coreService.onData,this._onData)),this._register(g.EventUtils.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new p.WriteBuffer((e,t)=>this._inputHandler.parse(e,t))),this._register(g.EventUtils.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.backend&&void 0!==t.buildNumber&&(e=!!("conpty"===t.backend&&t.buildNumber<21376)),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(u.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>((0,u.updateWindowsModeWrappedState)(this._bufferService),!1))),this._windowsWrappingHeuristics.value=(0,m.toDisposable)(()=>{for(const t of e)t.dispose()})}}}t.CoreTerminal=b},8636(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EventUtils=t.Emitter=void 0;const s=i(4812);var r;t.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(e,t,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(r);const o=(0,s.toDisposable)(()=>{const e=this._listeners.indexOf(r);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(o):i.add(o)),o}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,s=t.length;it.fire(e))},e.map=function(e,t){return(i,s,r)=>e(e=>i.call(s,t(e)),void 0,r)},e.any=function(...e){return(t,i,r)=>{const o=new s.DisposableStore;for(const s of e)o.add(s(e=>t.call(i,e)));return r&&(Array.isArray(r)?r.push(o):r.add(o)),o}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(r||(t.EventUtils=r={}))},2486(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0,t.isValidColorIndex=L;const o=i(6760),n=i(6717),a=i(4812),h=i(726),l=i(6107),c=i(8938),d=i(3055),_=i(5451),u=i(6501),f=i(6415),p=i(1346),v=i(9823),g=i(2607),m=i(8693),S=i(8636),b=i(7804),w={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function y(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var C;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(C||(t.WindowsOptionsReportType=C={}));let k=0;class D extends a.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,a,c,d,_=new n.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=a,this._mouseStateService=c,this._unicodeService=d,this._parser=_,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new h.StringToUtf32,this._utf8Decoder=new h.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new S.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new S.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new S.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new S.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new S.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new S.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new S.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new S.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new S.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new S.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new S.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new S.Emitter),this.onColor=this._onColor.event,this._onRequestColorSchemeQuery=this._register(new S.Emitter),this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new E(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(e=>this._activeBuffer=e.activeBuffer)),this._parser.setCsiHandlerFallback((e,t)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(e),params:t.toArray()})}),this._parser.setEscHandlerFallback(e=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(e)})}),this._parser.setExecuteHandlerFallback(e=>{this._logService.debug("Unknown EXECUTE code: ",{code:e})}),this._parser.setOscHandlerFallback((e,t,i)=>{this._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:i})}),this._parser.setDcsHandlerFallback((e,t,i)=>{"HOOK"===t&&(i=i.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setApcHandlerFallback((e,t,i)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setPrintHandler((e,t,i)=>this.print(e,t,i)),this._parser.registerCsiHandler({final:"@"},e=>this.insertChars(e)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},e=>this.scrollLeft(e)),this._parser.registerCsiHandler({final:"A"},e=>this.cursorUp(e)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},e=>this.scrollRight(e)),this._parser.registerCsiHandler({final:"B"},e=>this.cursorDown(e)),this._parser.registerCsiHandler({final:"C"},e=>this.cursorForward(e)),this._parser.registerCsiHandler({final:"D"},e=>this.cursorBackward(e)),this._parser.registerCsiHandler({final:"E"},e=>this.cursorNextLine(e)),this._parser.registerCsiHandler({final:"F"},e=>this.cursorPrecedingLine(e)),this._parser.registerCsiHandler({final:"G"},e=>this.cursorCharAbsolute(e)),this._parser.registerCsiHandler({final:"H"},e=>this.cursorPosition(e)),this._parser.registerCsiHandler({final:"I"},e=>this.cursorForwardTab(e)),this._parser.registerCsiHandler({final:"J"},e=>this.eraseInDisplay(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},e=>this.eraseInDisplay(e,!0)),this._parser.registerCsiHandler({final:"K"},e=>this.eraseInLine(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},e=>this.eraseInLine(e,!0)),this._parser.registerCsiHandler({final:"L"},e=>this.insertLines(e)),this._parser.registerCsiHandler({final:"M"},e=>this.deleteLines(e)),this._parser.registerCsiHandler({final:"P"},e=>this.deleteChars(e)),this._parser.registerCsiHandler({final:"S"},e=>this.scrollUp(e)),this._parser.registerCsiHandler({final:"T"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"X"},e=>this.eraseChars(e)),this._parser.registerCsiHandler({final:"Z"},e=>this.cursorBackwardTab(e)),this._parser.registerCsiHandler({final:"^"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"`"},e=>this.charPosAbsolute(e)),this._parser.registerCsiHandler({final:"a"},e=>this.hPositionRelative(e)),this._parser.registerCsiHandler({final:"b"},e=>this.repeatPrecedingCharacter(e)),this._parser.registerCsiHandler({final:"c"},e=>this.sendDeviceAttributesPrimary(e)),this._parser.registerCsiHandler({prefix:">",final:"c"},e=>this.sendDeviceAttributesSecondary(e)),this._parser.registerCsiHandler({final:"d"},e=>this.linePosAbsolute(e)),this._parser.registerCsiHandler({final:"e"},e=>this.vPositionRelative(e)),this._parser.registerCsiHandler({final:"f"},e=>this.hVPosition(e)),this._parser.registerCsiHandler({final:"g"},e=>this.tabClear(e)),this._parser.registerCsiHandler({final:"h"},e=>this.setMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"h"},e=>this.setModePrivate(e)),this._parser.registerCsiHandler({final:"l"},e=>this.resetMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"l"},e=>this.resetModePrivate(e)),this._parser.registerCsiHandler({final:"m"},e=>this.charAttributes(e)),this._parser.registerCsiHandler({final:"n"},e=>this.deviceStatus(e)),this._parser.registerCsiHandler({prefix:"?",final:"n"},e=>this.deviceStatusPrivate(e)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},e=>this.softReset(e)),this._parser.registerCsiHandler({prefix:">",final:"q"},e=>this.sendXtVersion(e)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},e=>this.setCursorStyle(e)),this._parser.registerCsiHandler({final:"r"},e=>this.setScrollRegion(e)),this._parser.registerCsiHandler({final:"s"},e=>this.saveCursor(e)),this._parser.registerCsiHandler({final:"t"},e=>this.windowOptions(e)),this._parser.registerCsiHandler({final:"u"},e=>this.restoreCursor(e)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},e=>this.insertColumns(e)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},e=>this.deleteColumns(e)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},e=>this.selectProtected(e)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},e=>this.requestMode(e,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},e=>this.requestMode(e,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},e=>this.kittyKeyboardSet(e)),this._parser.registerCsiHandler({prefix:"?",final:"u"},e=>this.kittyKeyboardQuery(e)),this._parser.registerCsiHandler({prefix:">",final:"u"},e=>this.kittyKeyboardPush(e)),this._parser.registerCsiHandler({prefix:"<",final:"u"},e=>this.kittyKeyboardPop(e)),this._parser.setExecuteHandler("",()=>this.bell()),this._parser.setExecuteHandler("\n",()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler("\t",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("„",()=>this.index()),this._parser.setExecuteHandler("…",()=>this.nextLine()),this._parser.setExecuteHandler("ˆ",()=>this.tabSet()),this._parser.registerOscHandler(0,new p.OscHandler(e=>(this.setTitle(e),this.setIconName(e),!0))),this._parser.registerOscHandler(1,new p.OscHandler(e=>this.setIconName(e))),this._parser.registerOscHandler(2,new p.OscHandler(e=>this.setTitle(e))),this._parser.registerOscHandler(4,new p.OscHandler(e=>this.setOrReportIndexedColor(e))),this._parser.registerOscHandler(8,new p.OscHandler(e=>this.setHyperlink(e))),this._parser.registerOscHandler(10,new p.OscHandler(e=>this.setOrReportFgColor(e))),this._parser.registerOscHandler(11,new p.OscHandler(e=>this.setOrReportBgColor(e))),this._parser.registerOscHandler(12,new p.OscHandler(e=>this.setOrReportCursorColor(e))),this._parser.registerOscHandler(104,new p.OscHandler(e=>this.restoreIndexedColor(e))),this._parser.registerOscHandler(110,new p.OscHandler(e=>this.restoreFgColor(e))),this._parser.registerOscHandler(111,new p.OscHandler(e=>this.restoreBgColor(e))),this._parser.registerOscHandler(112,new p.OscHandler(e=>this.restoreCursorColor(e))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(const e in o.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:e},()=>this.selectCharset("("+e)),this._parser.registerEscHandler({intermediates:")",final:e},()=>this.selectCharset(")"+e)),this._parser.registerEscHandler({intermediates:"*",final:e},()=>this.selectCharset("*"+e)),this._parser.registerEscHandler({intermediates:"+",final:e},()=>this.selectCharset("+"+e)),this._parser.registerEscHandler({intermediates:"-",final:e},()=>this.selectCharset("-"+e)),this._parser.registerEscHandler({intermediates:".",final:e},()=>this.selectCharset("."+e)),this._parser.registerEscHandler({intermediates:"/",final:e},()=>this.selectCharset("/"+e));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(e=>(this._logService.error("Parsing error: ",e),e)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new v.DcsHandler((e,t)=>this.requestStatusString(e,t)))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=u.LogLevelEnum.WARN){let t;const i=new Promise((e,i)=>{t=setTimeout(()=>i("#SLOW_TIMEOUT"),5e3)});Promise.race([e,i]).then(()=>{void 0!==t&&clearTimeout(t)},e=>{if(void 0!==t&&clearTimeout(t),"#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,o=0;const n=this._parseStack.paused;if(n){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(o=this._parseStack.position+131072)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+("string"==typeof e?` "${e}"`:` "${Array.prototype.map.call(e,e=>String.fromCharCode(e)).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)","string"==typeof e?e.split("").map(e=>e.charCodeAt(0)):e),this._parseBuffer.length131072)for(let t=o;t0&&2===p.getWidth(this._activeBuffer.x-1)&&p.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let v=this._parser.precedingJoinState;for(let g=t;ga)if(d){const e=p;let t=this._activeBuffer.x-m;if(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),p=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!p)return;for(m>0&&p instanceof l.BufferLine&&p.copyCellsFrom(e,t,0,m,!1);t=0;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(_&&(p.insertCells(this._activeBuffer.x,r-m,this._activeBuffer.getNullCell(u)),2===p.getWidth(a-1)&&p.setCellFromCodepoint(a-1,c.NULL_CELL_CODE,c.NULL_CELL_WIDTH,u)),p.setCellFromCodepoint(this._activeBuffer.x++,s,r,u),r>0)for(;--r;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=v,this._activeBuffer.x0&&0===p.getWidth(this._activeBuffer.x)&&!p.hasContent(this._activeBuffer.x)&&p.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,e=>!y(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new v.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new p.OscHandler(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new g.ApcHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const o=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);o&&(o.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(o.isWrapped=!1))}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i=this._bufferService.cols){const e=this._activeBuffer.lines.get(i+1);e&&(e.isWrapped=!1)}for(;i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(i=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,i-1);i--;){const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+i);if(e?.getTrimmedLength())break}for(;i>=0;i--)this._bufferService.scroll(this._eraseAttrData())}else{for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0)}break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let h=a;for(let e=1;e0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`P>|xterm.js(${b.XTERM_VERSION})\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(o.triggerDataEvent(`[${t?"":"?"}${e};${i}$y`),!0),_=e=>e?1:2,u=e.params[0];return t?d(u,2===u?4:4===u?_(o.modes.insertMode):12===u?3:20===u?_(c.convertEol):0):1===u?d(u,_(i.applicationCursorKeys)):3===u?d(u,c.windowOptions.setWinLines?80===a?2:132===a?1:0:0):6===u?d(u,_(i.origin)):7===u?d(u,_(i.wraparound)):8===u?d(u,3):9===u?d(u,_("X10"===s)):12===u?d(u,_(c.cursorBlink)):25===u?d(u,_(!o.isCursorHidden)):45===u?d(u,_(i.reverseWraparound)):66===u?d(u,_(i.applicationKeypad)):67===u?d(u,4):1e3===u?d(u,_("VT200"===s)):1002===u?d(u,_("DRAG"===s)):1003===u?d(u,_("ANY"===s)):1004===u?d(u,_(i.sendFocus)):1005===u?d(u,4):1006===u?d(u,_("SGR"===r)):1015===u?d(u,4):1016===u?d(u,_("SGR_PIXELS"===r)):1048===u?d(u,1):47===u||1047===u||1049===u?d(u,_(h===l)):2004===u?d(u,_(i.bracketedPasteMode)):2026===u?d(u,_(i.synchronizedOutput)):9001===u&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?d(u,_(i.win32InputMode)):d(u,0)}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=_.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-67108864,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,o=0;do{if(s[o+r]=e.params[t+o],e.hasSubParams(t+o)){const i=e.getSubParams(t+o);let n=0;do{5===s[1]&&(r=1),s[o+n+1+r]=i[n]}while(++n=2||2===s[1]&&o+r>=5)break;s[1]&&(r=1)}while(++o+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r=30&&i<=37?(s.fg&=-67108864,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-67108864,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-67108864,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-67108864,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:221===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.fg&=-134217729:222===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.bg&=-134217729:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("");break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[${e};${t}R`)}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[?${e};${t}R`);break;case 15:case 25:case 26:case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??1)&&this._onRequestColorSchemeQuery.fire()}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=0===e.length?1:e.params[0];if(0===t)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}const e=t%2==1;this._coreService.decPrivateModes.cursorBlink=e}return!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!y(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(C.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(C.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let e=0;e1;){const e=i.shift(),s=i.shift();if(/^\d+$/.exec(e)){const i=parseInt(e,10);if(L(i))if("?"===s)t.push({type:0,index:i});else{const e=(0,m.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.indexOf(";");if(-1===t)return!0;const i=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(i,s):!i.trim()&&this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(":");let s;const r=i.findIndex(e=>e.startsWith("id="));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(";");for(let e=0;e=this._specialColors.length);++e,++t)if("?"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,m.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(";");for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new d.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${e}\\`),!0))('"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}"q`:'"p'===e?'P1$r61;1"p':"r"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:"m"===e?"P1$r0m":" q"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(i){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;return s.length>=16&&s.shift(),s.push(i.flags),i.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=Math.max(1,e.params[0]||1),i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;for(let e=0;e0;e++)i.flags=s.pop();return 0===s.length&&t>0&&(i.flags=0),!0}}t.InputHandler=D;let E=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(k=e,e=t,t=k),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function L(e){return 0<=e&&e<256}E=s([r(0,u.IBufferService)],E)},4812(e,t){function i(e){return{dispose:e}}function s(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=s,t.combinedDisposable=function(...e){return i(()=>s(e))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=r;class o{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=o,o.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},7710(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.FourKeyMap=t.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(e,t,i){this._data[e]||(this._data[e]={}),this._data[e][t]=i}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}}t.TwoKeyMap=i,t.FourKeyMap=class{constructor(){this._data=new i}set(e,t,s,r,o){this._data.get(e,t)||this._data.set(e,t,new i),this._data.get(e,t).set(s,r,o)}get(e,t,i,s){return this._data.get(e,t)?.get(i,s)}clear(){this._data.clear()}}},701(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isMac=t.isSafari=t.isLegacyEdge=t.isChrome=t.isFirefox=t.isNode=void 0,t.getZoomFactor=function(e){return 1},t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\/(\d+)/);return null===e||e.length<2?0:parseInt(e[1],10)},t.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=t.isNode?"node":navigator.userAgent,s=t.isNode?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isChrome=i.includes("Chrome"),t.isLegacyEdge=i.includes("Edge"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),t.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),t.isLinux=s.indexOf("Linux")>=0,t.isChromeOS=/\bCrOS\b/.test(i)},3087(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SortedList=void 0;const s=i(6168);let r=0;t.SortedList=class{constructor(e,t){this._getKey=e,this._array=[],this._insertedValues=[],this._isFlushingInserted=!1,this._deletedIndices=[],this._isFlushingDeleted=!1,this._flushInsertedTask=new s.IdleTaskQueue(t),this._flushDeletedTask=new s.IdleTaskQueue(t)}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(e){this._flushCleanupDeleted(),0===this._insertedValues.length&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(e)}_flushInserted(){const e=this._insertedValues.sort((e,t)=>this._getKey(e)-this._getKey(t));let t=0,i=0;const s=new Array(this._array.length+this._insertedValues.length);for(let r=0;r=this._array.length||this._getKey(e[t])<=this._getKey(this._array[i])?(s[r]=e[t],t++):s[r]=this._array[i++];this._array=s,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(e){if(this._flushCleanupInserted(),0===this._array.length)return!1;const t=this._getKey(e);if(void 0===t)return!1;if(r=this._search(t),-1===r)return!1;if(this._getKey(this._array[r])!==t)return!1;do{if(this._array[r]===e)return 0===this._deletedIndices.length&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(r),!0}while(++re-t);let t=0;const i=new Array(this._array.length-e.length);let s=0;for(let r=0;r0&&this._flushDeletedTask.flush()}*getKeyIterator(e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),0!==this._array.length&&(r=this._search(e),!(r<0||r>=this._array.length)&&this._getKey(this._array[r])===e))do{yield this._array[r]}while(++r=this._array.length)&&this._getKey(this._array[r])===e))do{t(this._array[r])}while(++r=t;){let s=t+i>>1;const r=this._getKey(this._array[s]);if(r>e)i=s-1;else{if(!(r0&&this._getKey(this._array[s-1])===e;)s--;return s}t=s+1}}return t}}},4220(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.LimitedStringBuilder=t.StringBuilder=void 0;class i{constructor(){this._chunks=[],this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(e){this._chunks.push(e),this._length+=e.length}toString(){return this._chunks.join("")}}t.StringBuilder=i,t.LimitedStringBuilder=class{constructor(e){this._limit=e,this._builder=new i}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(e){return this._builder.append(e),this._builder.length>this._limit&&(this._builder.reset(),!0)}toString(){return this._builder.toString()}}},6168(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;class i{constructor(e){this._tasks=[],this._i=0,this._logService=e}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ii)return r-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-t))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}}t.PriorityTaskQueue=s,t.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:s,t.DebouncedIdleTask=class{constructor(e){this._queue=new t.IdleTaskQueue(e)}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},7804(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.XTERM_VERSION=void 0,t.XTERM_VERSION="6.1.0-beta.303"},5882(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)};const s=i(8938)},5451(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}t.ExtendedAttrs=s},1073(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(5639),r=i(4812),o=i(6168),n=i(5451),a=i(6107),h=i(732),l=i(3055),c=i(8938),d=i(8158),_=i(6760);t.MAX_BUFFER_SIZE=4294967295;class u extends r.Disposable{constructor(e,t,i,n){super(),this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this._logService=n,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=a.DEFAULT_ATTR_DATA.clone(),this.savedCharset=_.DEFAULT_CHARSET,this.savedCharsets=[],this.savedGlevel=0,this.savedOriginMode=!1,this.savedWraparoundMode=!0,this.markers=[],this._nullCell=l.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=l.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new o.IdleTaskQueue(this._logService),this._register((0,r.toDisposable)(()=>this._memoryCleanupQueue.clear())),this._register((0,r.toDisposable)(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new a.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){e??=a.DEFAULT_ATTR_DATA;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(a.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+o+1?(this.ybase--,o++,this.ydisp>0&&this.ydisp--):this.lines.push(new a.BufferLine(e,i,!1)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),o&&(this.y+=o),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t0){const e=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,e)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&"conpty"===e.backend&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=this._optionsService.rawOptions.reflowCursorLine,s=(0,h.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(a.DEFAULT_ATTR_DATA),i);if(s.length>0){const i=(0,h.reflowLargerCreateNewLayout)(this.lines,s);(0,h.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(a.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;n--){let l=this.lines.get(n);if(!l||!l.isWrapped&&l.getTrimmedLength()<=e)continue;const c=[l];for(;l.isWrapped&&n>0;)l=this.lines.get(--n),c.unshift(l);if(!i){const e=this.ybase+this.y;if(e>=n&&e0&&(r.push({start:n+c.length+o,newLines:p}),o+=p.length),c.push(...p);let v=_.length-1,g=_[v];0===g&&(v--,g=_[v]);let m=c.length-u-1,S=d;for(;m>=0;){const e=Math.min(S,g);if(void 0===c[v])break;if(c[v].copyCellsFrom(c[m],S-e,g-e,e,!0),g-=e,0===g&&(v--,g=_[v]),S-=e,0===S){m--;const e=Math.max(m,0);S=(0,h.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t0;)0===this.ybase?this.y0){const e=[],t=[];for(let e=0;e=0;l--)if(a&&a.start>s+h){for(let e=a.newLines.length-1;e>=0;e--)this.lines.set(l--,a.newLines[e]);l++,e.push({index:s+1,amount:a.newLines.length}),h+=a.newLines.length,a=r[++n]}else this.lines.set(l,t[s--]);let l=0;for(let t=e.length-1;t>=0;t--)e[t].index+=l,this.lines.onInsertEmitter.fire(e[t]),l+=e[t].amount;const c=Math.max(0,i+o-this.lines.maxLength);c>0&&this.lines.onTrimEmitter.fire(c)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):""}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(e=>{t.line>=e.index&&(t.line+=e.amount)})),t.register(this.lines.onDelete(e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}t.Buffer=u},6107(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(5451),r=i(3055),o=i(8938),n=i(726);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let a=0;const h=new r.CellData,l=t.DEFAULT_ATTR_DATA.extended.clone();class c{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._cacheValid=!1,this._cache="",this._cacheTrimmed=!1,this._data=new Uint32Array(3*e);const s=t??r.CellData.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]);for(let t=0;t>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._cacheValid=!1,this._data[3*e+1]=t[o.CHAR_DATA_ATTR_INDEX],t[o.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[o.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[o.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[o.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,n.stringFromCodePoint)(2097151&t):""}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return a=3*e,t.content=this._data[a+0],t.fg=this._data[a+1],t.bg=this._data[a+2],2097152&t.content?t.combinedData=this._combined[e]:t.combinedData="",268435456&t.bg?t.extended=this._extendedAttrs[e]:(l._ext=0,l._urlId=0,t.extended=l),t}setCell(e,t){this._cacheValid=!1,2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){this._cacheValid=!1,268435456&s.bg&&(this._extendedAttrs[e]=s.extended);const r=3*e;this._data[r+0]=t|i<<22,this._data[r+1]=s.fg,this._data[r+2]=s.bg}addCodepointToCell(e,t,i){this._cacheValid=!1;let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,n.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,n.stringFromCodePoint)(2097151&s)+(0,n.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if(this._cacheValid=!1,(e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t=0;--i)this.setCell(e+t+i,this.loadCell(e+i,h));for(let s=0;sthis.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){this._cacheValid=!1;const o=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=o[3*(t+r)+e];this._copyCellMapsFrom(e,t+r,i+r)}else for(let r=0;r>22||1}s&&s.push(t);const h=a.join("");return r&&(this._cache=h,this._cacheValid=!0,this._cacheTrimmed=!!e),h}_copyCellMapsFrom(e,t,i){const s=3*t;2097152&e._data[s+0]&&(this._combined[i]=e._combined[t]),268435456&e._data[s+2]&&(this._extendedAttrs[i]=e._extendedAttrs[t])}_copySparseMapsFrom(e){this._combined={},this._extendedAttrs={};for(let t=0;te.end.y)throw new Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},732(e,t){function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,"__esModule",{value:!0}),t.reflowLargerGetLinesToRemove=function(e,t,s,r,o,n){const a=[];for(let h=0;h=h&&r0&&(e>_||0===d[e].getTrimmedLength());e--)v++;v>0&&(a.push(h+d.length-v),a.push(v)),h+=d.length-1}return a},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],o=0;for(let n=0;nl&&(n-=l,a++);const c=2===e[a].getWidth(n-1);c&&n--;const d=c?s-1:s;r.push(d),h+=d}return r},t.getWrappedLineTrimmedLength=i},4097(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;const s=i(4812),r=i(1073),o=i(8636);class n extends s.Disposable{constructor(e,t,i){super(),this._optionsService=e,this._bufferService=t,this._logService=i,this._normalBuffer=this._register(new s.MutableDisposable),this._altBuffer=this._register(new s.MutableDisposable),this._onBufferActivate=this._register(new o.Emitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new r.Buffer(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new r.Buffer(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=n},3055(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;const s=i(726),r=i(8938),o=i(5451);class n extends o.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new o.ExtendedAttrs,this.combinedData=""}static fromCharData(e){const t=new n;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor())return!1;if(this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor())return!1;if(this.isInverse()!==e.isInverse())return!1;if(this.isBold()!==e.isBold())return!1;if(this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;const t=this.isUnderlineColorDefault(),i=e.isUnderlineColorDefault();if(!t||!i){if(t!==i)return!1;if(this.getUnderlineColor()!==e.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==e.getUnderlineColorMode())return!1}}return this.isOverline()===e.isOverline()&&this.isBlink()===e.isBlink()&&this.isInvisible()===e.isInvisible()&&this.isItalic()===e.isItalic()&&this.isDim()===e.isDim()&&this.isStrikethrough()===e.isStrikethrough()}}t.CellData=n},8938(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=t.DEFAULT_COLOR<<9|256,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},8158(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;const s=i(4812),r=i(8636);class o{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=o._nextId++,this._onDispose=this.register(new r.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,s.dispose)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=o,o._nextId=1},6760(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",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:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},706(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=function(e,t,s,r){const o={type:0,cancel:!1,key:void 0},n=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?o.key=t?"OA":"":"UIKeyInputLeftArrow"===e.key?o.key=t?"OD":"":"UIKeyInputRightArrow"===e.key?o.key=t?"OC":"":"UIKeyInputDownArrow"===e.key&&(o.key=t?"OB":"");break;case 8:o.key=e.ctrlKey?"\b":"",e.altKey&&(o.key=""+o.key);break;case 9:if(e.shiftKey){o.key="";break}o.key="\t",o.cancel=!0;break;case 13:"c"===e.key&&e.ctrlKey?o.key="":o.key=e.altKey?"\r":"\r",o.cancel=!0;break;case 27:o.key="",e.altKey&&(o.key=""),o.cancel=!0;break;case 37:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"D":t?"OD":"";break;case 39:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"C":t?"OC":"";break;case 38:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"A":t?"OA":"";break;case 40:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"B":t?"OB":"";break;case 45:e.shiftKey||e.ctrlKey||(o.key="[2~");break;case 46:o.key=n?"[3;"+(n+1)+"~":"[3~";break;case 36:o.key=n?"[1;"+(n+1)+"H":t?"OH":"";break;case 35:o.key=n?"[1;"+(n+1)+"F":t?"OF":"";break;case 33:e.shiftKey?o.type=2:e.ctrlKey?o.key="[5;"+(n+1)+"~":o.key="[5~";break;case 34:e.shiftKey?o.type=3:e.ctrlKey?o.key="[6;"+(n+1)+"~":o.key="[6~";break;case 112:o.key=n?"[1;"+(n+1)+"P":"OP";break;case 113:o.key=n?"[1;"+(n+1)+"Q":"OQ";break;case 114:o.key=n?"[1;"+(n+1)+"R":"OR";break;case 115:o.key=n?"[1;"+(n+1)+"S":"OS";break;case 116:o.key=n?"[15;"+(n+1)+"~":"[15~";break;case 117:o.key=n?"[17;"+(n+1)+"~":"[17~";break;case 118:o.key=n?"[18;"+(n+1)+"~":"[18~";break;case 119:o.key=n?"[19;"+(n+1)+"~":"[19~";break;case 120:o.key=n?"[20;"+(n+1)+"~":"[20~";break;case 121:o.key=n?"[21;"+(n+1)+"~":"[21~";break;case 122:o.key=n?"[23;"+(n+1)+"~":"[23~";break;case 123:o.key=n?"[24;"+(n+1)+"~":"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(s&&!r||!e.altKey||e.metaKey)if(!s||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey){if(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length)o.key=e.key;else if(e.key&&e.ctrlKey&&e.shiftKey)switch(e.code){case"Minus":o.key="";break;case"Digit2":o.key="\0";break;case"Digit6":o.key=""}}else 65===e.keyCode&&(o.type=1);else{const t=i[e.keyCode],s=t?.[e.shiftKey?1:0];if(s)o.key=""+s;else if(e.keyCode>=65&&e.keyCode<=90){const t=e.ctrlKey?e.keyCode-64:e.keyCode+32;let i=String.fromCharCode(t);e.shiftKey&&(i=i.toUpperCase()),o.key=""+i}else if(32===e.keyCode)o.key=""+(e.ctrlKey?"\0":" ");else if("Dead"===e.key&&e.code.startsWith("Key")){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),o.key=""+t,o.cancel=!0}}else e.keyCode>=65&&e.keyCode<=90?o.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?o.key="\0":e.keyCode>=51&&e.keyCode<=55?o.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?o.key="":"/"===e.key?o.key="":219===e.keyCode?o.key="":220===e.keyCode?o.key="":221===e.keyCode&&(o.key="")}return o};const i={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']}},7241(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyKeyboard=void 0,t.KittyKeyboard=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440},this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24},this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"},this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(e){if(e.code.startsWith("Numpad")){const t=e.code.slice(6);if(t>="0"&&t<="9")return 57399+parseInt(t,10);switch(t){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(e){switch(e.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(e){let t=0;return e.shiftKey&&(t|=1),e.altKey&&(t|=2),e.ctrlKey&&(t|=4),e.metaKey&&(t|=8),t>0?t+1:0}_getKeyCode(e,t){const i=this._getNumpadKeyCode(e);if(void 0!==i)return i;const s=this._getModifierKeyCode(e);if(void 0!==s)return s;const r=this._functionalKeyCodes[e.key];if(void 0!==r)return r;if((e.shiftKey||t&&e.altKey)&&e.code){if(e.code.startsWith("Digit")&&6===e.code.length){const t=e.code.charAt(5);if(t>="0"&&t<="9")return t.charCodeAt(0)}if(e.code.startsWith("Key")&&4===e.code.length)return e.code.charAt(3).toLowerCase().charCodeAt(0)}if(1===e.key.length){const t=e.key.codePointAt(0);return t>=65&&t<=90?t+32:t}}_isModifierKey(e){return"Shift"===e.key||"Control"===e.key||"Alt"===e.key||"Meta"===e.key}_isLockKey(e){return"CapsLock"===e.key||"NumLock"===e.key||"ScrollLock"===e.key}_buildCsiLetterSequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"["+e}_buildSs3Sequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"O"+e}_buildCsiTildeSequence(e,t,i,s){const r=s&&1!==i;let o="["+e;return(t>0||r)&&(o+=";"+(t>0?t:"1"),r&&(o+=":"+i)),o+="~",o}_buildCsiUSequence(e,t,i,s,r,o,n){const a=!!(2&r);let h,l="["+t;4&r&&e.shiftKey&&1===e.key.length&&!o&&!n&&(h=e.key.codePointAt(0),l+=":"+h);const c=16&r&&3!==s&&1===e.key.length&&!o&&!n&&!e.ctrlKey?e.key.codePointAt(0):void 0,d=a&&1!==s&&(3===s||void 0===c);return(i>0||d||void 0!==c)&&(l+=";",i>0?l+=i:d&&(l+="1"),d&&(l+=":"+s)),void 0!==c&&(l+=";"+c),l+="u",l}evaluate(e,t,i=1,s=!1){const r={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(e),n=this._isModifierKey(e),a=!!(2&t);if(!a&&3===i)return r;if(n&&!(8&t))return r;if(this._isLockKey(e)&&!(8&t))return r;const h=this._csiLetterKeys[e.key];if(h)return r.key=this._buildCsiLetterSequence(h,o,i,a),r.cancel=!0,r;const l=this._ss3FunctionKeys[e.key];if(l)return r.key=this._buildSs3Sequence(l,o,i,a),r.cancel=!0,r;const c=this._csiTildeKeys[e.key];if(void 0!==c)return r.key=this._buildCsiTildeSequence(c,o,i,a),r.cancel=!0,r;const d=this._getKeyCode(e,s);if(void 0===d)return r;const _=13===d||9===d||127===d;if(_&&3===i&&!(8&t))return r;const u=void 0!==this._functionalKeyCodes[e.key]||void 0!==this._getNumpadKeyCode(e);if(8&t||a&&3===i||(1&t||a)&&(u&&!_||o>0&&1!==e.key.length||o-1>1))r.key=this._buildCsiUSequence(e,d,o,i,t,u,n),r.cancel=!0;else{const t=13===d?"\r":9===d?"\t":127===d?"":void 0;t?r.key=t:1!==e.key.length||e.ctrlKey||e.altKey||e.metaKey||(r.key=e.key)}return r}static shouldUseProtocol(e){return e>0}}},726(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s="";for(let r=t;r65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let o=r;o=i)return this._interim=r,s;const n=e.charCodeAt(o);56320<=n&&n<=57343?t[s++]=1024*(r-55296)+n-56320+65536:(t[s++]=r,t[s++]=n);continue}65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,o,n,a,h=0,l=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let o,n=0;for(;(o=this.interim[++n])&&n<4;)r<<=6,r|=63&o;const a=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,c=a-n;for(;l=i)return 0;if(o=e[l++],128!=(192&o)){l--,s=!0;break}this.interim[n++]=o,r<<=6,r|=63&o}s||(2===a?r<128?l--:t[h++]=r:3===a?r<2048||r>=55296&&r<=57343||65279===r||(t[h++]=r):r<65536||r>1114111||(t[h++]=r)),this.interim.fill(0)}const c=i-4;let d=l;for(;d=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(a=(31&s)<<6|63&r,a<128){d--;continue}t[h++]=a}else if(224==(240&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(a=(15&s)<<12|(63&r)<<6|63&o,a<2048||a>=55296&&a<=57343||65279===a)continue;t[h++]=a}else if(240==(248&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=o,h;if(n=e[d++],128!=(192&n)){d--;continue}if(a=(7&s)<<18|(63&r)<<12|(63&o)<<6|63&n,a<65536||a>1114111)continue;t[h++]=a}}return h}}},7428(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;const s=i(6415),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],o=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let n;t.UnicodeV6=class{constructor(){if(this.version="6",!n){n=new Uint8Array(65536),n.fill(1),n[0]=0,n.fill(0,1,32),n.fill(0,127,160),n.fill(2,4352,4448),n[9001]=2,n[9002]=2,n.fill(2,11904,42192),n[12351]=1,n.fill(2,44032,55204),n.fill(2,63744,64256),n.fill(2,65040,65050),n.fill(2,65072,65136),n.fill(2,65280,65377),n.fill(2,65504,65511);for(let e=0;et[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},9249(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Win32InputMode=void 0,t.Win32InputMode=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226},this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40},this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]),this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(e){const t=this._codeToVk[e.code];return void 0!==t?t:e.keyCode||0}_getScanCode(e){return this._codeToScancode[e.code]||0}_getUnicodeChar(e){if(e.ctrlKey&&!e.altKey&&!e.metaKey){if("Enter"===e.key)return 10;if("Backspace"===e.key)return 127}const t=this._keyToControlChar[e.key];if(void 0!==t)return t;if(1===e.key.length){const t=e.key.codePointAt(0)||0;if(e.ctrlKey&&!e.altKey&&!e.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(e){let t=0;return e.shiftKey&&(t|=16),e.ctrlKey&&("ControlRight"===e.code?t|=4:t|=8),e.altKey&&("AltRight"===e.code?t|=1:t|=2),this._enhancedKeyCodes.has(e.code)&&(t|=256),t}evaluateKeyboardEvent(e,t){return{type:0,cancel:!0,key:`[${this._getVirtualKeyCode(e)};${this._getScanCode(e)};${this._getUnicodeChar(e)};${t?1:0};${this._getControlKeyState(e)};1_`}}}},3562(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;const s=i(3132),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._innerWriteTimer=this._register(new s.TimeoutTimer),this._onWriteParsed=this._register(new o.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._register((0,r.toDisposable)(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed)return;if(this._isSyncWriting)return;let e;this._isSyncWriting=!0;let t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);const i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;const i=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>{this._store.isDisposed||(performance.now()-i>=12?this._scheduleInnerWrite(0,e):this._innerWrite(i,e))};return void s.catch(e=>(queueMicrotask(()=>{throw e}),Promise.resolve(!1))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,performance.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},8693(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(t.startsWith("rgb:")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(t.startsWith("#")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,o]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(o,t)}`};const i=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,s=/^[\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?"0"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}},2607(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ApcHandler=t.ApcParser=void 0;const s=i(726),r=i(4220),o=[];t.ApcParser=class{constructor(){this._handlers=Object.create(null),this._active=o,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._ident=0}start(e){if(this.reset(),this._ident=e,this._active=this._handlers[e]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._ident,"START")}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}end(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"END",e);this._active=o,this._ident=0}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.ApcHandler=n,n._payloadLimit=1e7},9823(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(726),r=i(7262),o=i(4220),n=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=n,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=n,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,"HOOK",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"UNHOOK",e);this._active=n,this._ident=0}};const a=new r.Params;a.addParam(0);class h{constructor(e){this._handler=e,this._data=new o.LimitedStringBuilder(h._payloadLimit),this._params=a,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():a,this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString(),this._params),t instanceof Promise))return t.then(e=>(this._params=a,this._data.reset(),this._hitLimit=!1,e));return this._params=a,this._data.reset(),this._hitLimit=!1,t}}t.DcsHandler=h,h._payloadLimit=1e7},6717(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(4812),r=i(7262),o=i(1346),n=i(9823),a=i(2607);class h{constructor(e){this.table=new Uint16Array(e)}setDefault(e,t){this.table.fill(e<<8|t)}add(e,t,i,s){this.table[t<<8|e]=i<<8|s}addMany(e,t,i,s){for(let r=0;rt),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const o=i(0,17);e.setDefault(1,0),e.addMany(s,0,2,0);for(const t of o)e.addMany([24,26,153,154],t,3,0),e.addMany(i(128,144),t,3,0),e.addMany(i(144,152),t,3,0),e.add(156,t,0,0),e.add(27,t,11,1),e.add(157,t,4,8),e.addMany([152,158],t,0,7),e.add(159,t,11,14),e.add(155,t,11,3),e.add(144,t,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(95,1,11,14),e.addMany(r,14,0,14),e.add(127,14,0,14),e.addMany(i(32,48),14,9,15),e.addMany(i(48,127),14,15,16),e.addMany(i(48,127),15,15,16),e.addMany(r,15,0,15),e.addMany(i(32,48),15,9,15),e.add(127,15,0,15),e.addMany(s,16,16,16),e.addMany(r,16,0,16),e.addMany(i(8,14),16,16,16),e.add(127,16,0,16),e.addMany([27,156,24,26],16,17,0),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(l,0,2,0),e.add(l,8,5,8),e.add(l,6,0,6),e.add(l,11,0,11),e.add(l,13,13,13),e.add(l,16,16,16),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,s.toDisposable)(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new o.OscParser),this._dcsParser=this._register(new n.DcsParser),this._apcParser=this._register(new a.ApcParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(i=e.prefix.charCodeAt(0),i<60||i>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let t=0;ts||s>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");i<<=8,i|=s}}if(1!==e.final.length)throw new Error("final must be a single byte");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);this._escHandlers[i]??=[];const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){const i=e.charCodeAt(0);this._executeHandlers[i]=t,i<24&&(this._executeHandlersArr[i]=t)}clearExecuteHandler(e){const t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);this._csiHandlers[i]??=[];const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r,o,n=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,n=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");const t=this._parseStack.handlers;let r=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](this._params),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 4:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],o=this._dcsParser.unhook(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],o=this._oscParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],o=this._apcParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0}this._parseStack.state=0,n=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=255&this._parseStack.transition}for(let i=n;i=60&&n<=63&&(this._collect=n,s++);let a=!1;for(;s=48&&n<=57)this._params.addDigit(n-48);else if(59===n)this._params.addParam(0);else{if(58!==n){if(n>=64&&n<=126){const e=this._csiHandlers[this._collect<<8|n];let t=e?e.length-1:-1;for(;t>=0&&(o=e[t](this._params),!0!==o);t--)if(o instanceof Promise)return r=1792,this._preserveStack(3,e,t,r,s),o;t<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingJoinState=0,i=s,this.currentState=0,a=!0;break}break}this._params.addSubParam(-1)}a||(i=s-1,this.currentState=4);continue}switch(r=this._transitions.table[this.currentState<<8|(s>8){case 2:let n=i;const a=t-4;for(;n=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l););if(n>=a)for(;n=32&&(e[n]<=126||e[n]>=l);)n++;this._printHandler(e,i,n),i=n-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:i,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:const h=this._csiHandlers[this._collect<<8|s];let c=h?h.length-1:-1;for(;c>=0&&(o=h[c](this._params),!0!==o);c--)if(o instanceof Promise)return this._preserveStack(3,h,c,r,i),o;c<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do{switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}}while(++i47&&s<60);i--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:const d=this._escHandlers[this._collect<<8|s];let _=d?d.length-1:-1;for(;_>=0&&(o=d[_](),!0!==o);_--)if(o instanceof Promise)return this._preserveStack(4,d,_,r,i),o;_<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let r=i+1;;++r)if(r>=t||24===(s=e[r])||26===s||27===s||s>127&&s=t||(s=e[r])<32||s>127&&s=32&&e[s]<127||e[s]>=8&&e[s]<14||e[s]>=l))){this._apcParser.put(e,i,s),i=s-1;break}break;case 17:if(o=this._apcParser.end(24!==s&&26!==s),o)return this._preserveStack(7,[],0,r,i),o;27===s&&(r|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0}this.currentState=255&r}}}t.EscapeSequenceParser=c},1346(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(726),r=i(4220),o=[];t.OscParser=class{constructor(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,"PUT",(0,s.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.OscHandler=n,n._payloadLimit=1e7},7262(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;class i{static fromArray(e){const t=new i;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new i(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>2147483647?2147483647:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=e>2147483647?2147483647:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const i=this._digitIsSub?this._subParams:this.params,s=i[t-1];i[t-1]=~s?Math.min(10*s+e,2147483647):e}}t.Params=i},3027(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},5101(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(3235),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new o.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new s.BufferApiView(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=n},6097(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,i)=>t(e,i.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}registerApcHandler(e,t){return this._core.registerApcHandler(e,t)}}},4335(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},9640(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=void 0;const o=i(4812),n=i(4097),a=i(6501),h=i(8636);let l=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(e,t){super(),this.isUserScrolling=!1,this._onResize=this._register(new h.Emitter),this.onResize=this._onResize.event,this._onScroll=this._register(new h.Emitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new n.BufferSet(e,this,t)),this._register(this.buffers.onBufferActivate(e=>{this._onScroll.fire(e.activeBuffer.ydisp)}))}resize(e,t){const i=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:i,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;o===i.lines.length-1?e?i.lines.recycle().copyFrom(s,!0):i.lines.push(s.clone(!0)):i.lines.splice(o+1,0,s.clone(!0)),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=o-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(o,s.clone(!0))}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t){const i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);const s=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),s!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))}};t.BufferService=l,t.BufferService=l=s([r(0,a.IOptionsService),r(1,a.ILogService)],l)},5746(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},4071(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;const o=i(4812),n=i(6501),a=i(8636),h=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0});let c=class extends o.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorHidden=!1,this._onData=this._register(new a.Emitter),this.onData=this._onData.event,this._onUserInput=this._register(new a.Emitter),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new a.Emitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new a.Emitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.isCursorInitialized=i.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}reset(){this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onBinary.fire(e))}};t.CoreService=c,t.CoreService=c=s([r(0,n.IBufferService),r(1,n.ILogService),r(2,n.IOptionsService)],c)},4720(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DecorationLineCache=t.DecorationService=void 0;const o=i(3132),n=i(4103),a=i(4812),h=i(6501),l=i(3087),c=i(8636);let d=0,_=0,u=class extends a.Disposable{get decorations(){return this._decorations.values()}constructor(e,t){super(),this._logService=e,this._bufferService=t,this._lineCache=this._register(new f),this._onDecorationRegistered=this._register(new c.Emitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this._register(new c.Emitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this._decorations=new l.SortedList(e=>e?.marker.line,this._logService),this._register((0,a.toDisposable)(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}registerDecoration(e){if(e.marker.isDisposed)return;const t=new p(e);if(t){const e=t.marker.onDispose(()=>t.dispose()),i=t.onDispose(()=>{i.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),e.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,i){const s=this._lineCache.getDecorationsOnLine(t);if(s)for(const t of s)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&(yield t)}forEachDecorationAtCell(e,t,i,s){const r=this._lineCache.getDecorationsOnLine(t);if(r)for(const t of r)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&s(t)}};t.DecorationService=u,t.DecorationService=u=s([r(0,h.ILogService),r(1,h.IBufferService)],u);class f extends a.Disposable{constructor(){super(...arguments),this._decorationsByLine=new Map,this._decorations=new Set,this._bufferLineListeners=this._register(new a.MutableDisposable),this._lineIndexSyncTimer=this._register(new o.MicrotaskTimer),this._lineIndexSyncCallbacks=[]}clear(){this._lineIndexSyncCallbacks.length=0,this._lineIndexSyncTimer.cancel(),this._decorationsByLine.clear(),this._decorations.clear()}add(e){this._decorations.add(e),this._addToLineBuckets(e)}remove(e){this._decorations.delete(e),this._removeFromLineBuckets(e)}getDecorationsOnLine(e){return this._decorationsByLine.get(e)}attachToBufferLines(e){const t=new a.DisposableStore;this._bufferLineListeners.value=t,t.add(e.onTrim(e=>this._handleBufferLinesTrim(e))),t.add(e.onInsert(e=>this._handleBufferLinesInsert(e))),t.add(e.onDelete(e=>this._handleBufferLinesDelete(e)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){const t=e.marker.line;if(t<0)return;e._indexedStartLine=t;const i=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{const e=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(const t of e)t()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;const t=new Map;for(const[i,s]of this._decorationsByLine){const r=i-e;r<0||this._mergeLineBucket(t,r,s)}this._decorationsByLine.clear();for(const[e,i]of t)this._decorationsByLine.set(e,i);for(const t of this._decorations)t.marker.isDisposed||(t._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,i){const s=e.get(t);if(s)for(let e=0,t=i.length;et&&(s.push(e),this._removeFromLineBuckets(e))}const r=new Map;for(const[e,s]of this._decorationsByLine){const o=e>=t?e+i:e;this._mergeLineBucket(r,o,s)}this._decorationsByLine.clear();for(const[e,t]of r)this._decorationsByLine.set(e,t);for(const e of this._decorations)e.marker.isDisposed||e._indexedStartLine>=t&&(e._indexedStartLine=e.marker.line);for(const e of s)this._addToLineBuckets(e)}_applyBufferLinesDelete(e){const t=e.index+e.amount,i=new Map;for(const[s,r]of this._decorationsByLine){if(s>=e.index&&s=t?s-e.amount:s;this._mergeLineBucket(i,o,r)}this._decorationsByLine.clear();for(const[e,t]of i)this._decorationsByLine.set(e,t);const s=[];for(const i of this._decorations){if(i.marker.isDisposed)continue;const r=i._indexedStartLine,o=this._getDecorationHeight(i);r>=t?i._indexedStartLine=i.marker.line:rt&&s.push(i)}for(const e of s)this._reindexDecoration(e)}}t.DecorationLineCache=f;class p extends a.DisposableStore{get backgroundColorRGB(){return null===this._cachedBg&&(this.options.backgroundColor?this._cachedBg=n.css.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return null===this._cachedFg&&(this.options.foregroundColor?this._cachedFg=n.css.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}constructor(e){super(),this.options=e,this.onRenderEmitter=this.add(new c.Emitter),this.onRender=this.onRenderEmitter.event,this._onDispose=this.add(new c.Emitter),this.onDispose=this._onDispose.event,this._cachedBg=null,this._cachedFg=null,this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}dispose(){this._onDispose.fire(),super.dispose()}}},6025(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(6501),r=i(6201);class o{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=o,t.InstantiationService=class{constructor(){this._services=new o,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort((e,t)=>e.index-t.index),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id._id}.`);s.push(i)}const o=i.length>0?i[0].index:t.length;if(t.length!==o)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${o+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},7276(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LogService=void 0;const o=i(4812),n=i(6501),a={trace:n.LogLevelEnum.TRACE,debug:n.LogLevelEnum.DEBUG,info:n.LogLevelEnum.INFO,warn:n.LogLevelEnum.WARN,error:n.LogLevelEnum.ERROR,off:n.LogLevelEnum.OFF};let h=class extends o.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=n.LogLevelEnum.OFF,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}_updateLogLevel(){this._logLevel=a[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;t!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function n(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const a=String.fromCharCode,h={DEFAULT:e=>{const t=[n(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":`${a(t[0])}${a(t[1])}${a(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.x};${e.y}${t}`}};class l extends s.Disposable{constructor(){super(),this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=this._register(new r.Emitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(o))this.addProtocol(e,o[e]);for(const e of Object.keys(h))this.addEncoding(e,h[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return!this._customWheelEventHandler||!1!==this._customWheelEventHandler(e)}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return"DEFAULT"===this._activeEncoding}get isPixelEncoding(){return"SGR_PIXELS"===this._activeEncoding}}t.MouseStateService=l},56(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(4812),r=i(701),o=i(8636);t.DEFAULT_OPTIONS={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:r.isMac,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}};const n=["normal","bold","100","200","300","400","500","600","700","800","900"];class a extends s.Disposable{constructor(e){super(),this._onOptionChange=this._register(new o.Emitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this._register((0,s.toDisposable)(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(i=>{i===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(i=>{-1!==e.indexOf(i)&&t()})}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case"cursorStyle":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return"block"===e||"underline"===e||"bar"===e}(i))throw new Error(`"${i}" is not a valid value for ${e}`);break;case"wordSeparator":i||(i=t.DEFAULT_OPTIONS[e]);break;case"fontWeight":case"fontWeightBold":if("number"==typeof i&&1<=i&&i<=1e3)break;i=n.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case"blinkIntervalDuration":if((i=Math.floor(i))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"cursorWidth":i=Math.floor(i);case"lineHeight":case"tabStopWidth":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case"minimumContrastRatio":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case"scrollback":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case"rows":case"cols":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case"windowsPty":i=i??{}}return i}}t.OptionsService=a},8811(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkService=void 0;const o=i(6501);let n=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose(()=>this._removeMarkerFromLink(s,i)),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const o=t.addMarker(t.ybase+t.y),n={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(n,o)),this._entriesWithId.set(n.key,n),this._dataByLinkId.set(n.id,n),n.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every(e=>e.line!==t)){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose(()=>this._removeMarkerFromLink(i,e))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=n,t.OscLinkService=n=s([r(0,o.IBufferService)],n)},6201(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.serviceRegistry=void 0,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const i=function(e,t,s){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");!function(e,t,i){t.di$target===t?t.di$dependencies.push({id:e,index:i}):(t.di$dependencies=[{id:e,index:i}],t.di$target=t)}(i,e,s)};return i._id=e,t.serviceRegistry.set(e,i),i},t.serviceRegistry=new Map},6501(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.IMouseStateService=t.IBufferService=void 0;const s=i(6201);var r;t.IBufferService=(0,s.createDecorator)("BufferService"),t.IMouseStateService=(0,s.createDecorator)("MouseStateService"),t.ICoreService=(0,s.createDecorator)("CoreService"),t.ICharsetService=(0,s.createDecorator)("CharsetService"),t.IInstantiationService=(0,s.createDecorator)("InstantiationService"),function(e){e[e.TRACE=0]="TRACE",e[e.DEBUG=1]="DEBUG",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.OFF=5]="OFF"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)("LogService"),t.IOptionsService=(0,s.createDecorator)("OptionsService"),t.IOscLinkService=(0,s.createDecorator)("OscLinkService"),t.IUnicodeService=(0,s.createDecorator)("UnicodeService"),t.IDecorationService=(0,s.createDecorator)("DecorationService")},6415(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;const s=i(8636);class r{constructor(){this._providers=Object.create(null),this._active="",this._onChange=new s.Emitter,this.onChange=this._onChange.event}static extractShouldJoin(e){return!!(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version "${e}"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e,this._active||(this.activeVersion=e.version)}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let o=0;o=s)return t+this.wcwidth(n);const i=e.charCodeAt(o);56320<=i&&i<=57343?n=1024*(n-55296)+i-56320+65536:t+=this.wcwidth(i)}const a=this.charProperties(n,i);let h=r.extractWidth(a);r.extractShouldJoin(a)&&(h-=r.extractWidth(i)),t+=h,i=a}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=r}},t={};return function i(s){var r=t[s];if(void 0!==r)return r.exports;var o=t[s]={exports:{}};return e[s].call(o.exports,o,o.exports,i),o.exports}(6081)})()); -+!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)("object"==typeof exports?exports:e)[s]=i[s]}}(globalThis,()=>(()=>{"use strict";var e={2840(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=r.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new c.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(e=>this._handleResize(e.rows))),this._register(this._terminal.onRender(e=>this._refreshRows(e.start,e.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(e=>this._handleChar(e))),this._register(this._terminal.onLineFeed(()=>this._handleChar("\n"))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register((0,f.addDisposableListener)(r,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register((0,d.toDisposable)(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent=l.tooMuchOutput.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const i=this._terminal.buffer,s=i.lines.length.toString();for(let r=e;r<=t;r++){const e=i.lines.get(i.ydisp+r),t=[],o=e?.translateToString(!0,void 0,void 0,t)||"",n=(i.ydisp+r+1).toString(),a=this._rowElements[r];a&&(0===o.length?(a.textContent=" ",this._rowColumns.set(a,[0,1])):(a.textContent=o,this._rowColumns.set(a,t)),a.setAttribute("aria-posinset",n),a.setAttribute("aria-setsize",s),this._alignRowWidth(a))}this._announceCharacters()}_announceCharacters(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent===l.tooMuchOutput.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){const i=e.target,s=this._rowElements[0===t?1:this._rowElements.length-2];if(i.getAttribute("aria-posinset")===(0===t?"1":`${this._terminal.buffer.lines.length}`))return;if(e.relatedTarget!==s)return;let r,o;if(0===t?(r=i,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(r=this._rowElements.shift(),o=i,this._rowContainer.removeChild(r)),r.removeEventListener("focus",this._topBoundaryFocusListener),o.removeEventListener("focus",this._bottomBoundaryFocusListener),0===t){const e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement("afterbegin",e)}else{const e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(0===this._rowElements.length)return;const e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error("anchorNode and/or focusNode are null");let t={node:e.anchorNode,offset:e.anchorOffset},i={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===i.node&&t.offset>i.offset)&&([t,i]=[i,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const s=this._rowElements.slice(-1)[0];if(i.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(i={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(i.node))return;const r=({node:e,offset:t})=>{const i=e instanceof Text?e.parentNode:e;let s=parseInt(i?.getAttribute("aria-posinset"),10)-1;if(isNaN(s))return console.warn("row is invalid. Race condition?"),null;const r=this._rowColumns.get(i);if(!r)return console.warn("columns is null. Race condition?"),null;let o=t=this._terminal.cols&&(++s,o=0),{row:s,column:o}},o=r(t),n=r(i);if(o&&n){if(o.row>n.row||o.row===n.row&&o.column>=n.column)throw new Error("invalid range");this._terminal.select(o.column,o.row,(n.row-o.row)*this._terminal.cols-o.column+n.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;ethis._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(I.EventUtils.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(I.EventUtils.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(I.EventUtils.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(I.EventUtils.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register((0,N.toDisposable)(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}_handleColorEvent(e){if(this._themeService)for(const t of e){let e,i;switch(t.index){case 256:e="foreground",i="10";break;case 257:e="background",i="11";break;case 258:e="cursor",i="12";break;default:e="ansi",i="4;"+t.index}switch(t.type){case 0:const s=E.color.toColorRGB("ansi"===e?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`]${i};${(0,T.toRgbString)(s)}\\`);break;case 1:if("ansi"===e)this._themeService.modifyColors(e=>e.ansi[t.index]=E.channels.toColor(...t.color));else{const i=e;this._themeService.modifyColors(e=>e[i]=E.channels.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_reportColorScheme(){if(!this._themeService)return;const e=E.rgb.relativeLuminance(this._themeService.colors.background.rgba>>8)>8)?1:2;this.coreService.triggerDataEvent(`[?997;${e}n`)}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(A.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this._compositionHelper instanceof u.CompositionHelper&&this._compositionHelper.blur(),this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;const i=Math.min(this.buffer.x,this.cols-1),s=this._renderService.dimensions.css.cell.height,r=t.getWidth(i),o=this._renderService.dimensions.css.cell.width*r,n=this.buffer.y*this._renderService.dimensions.css.cell.height,a=i*this._renderService.dimensions.css.cell.width;this.textarea.style.left=a+"px",this.textarea.style.top=n+"px",this.textarea.style.width=o+"px",this.textarea.style.height=s+"px",this.textarea.style.lineHeight=s+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this._register((0,H.addDisposableListener)(this.element,"copy",e=>{this.hasSelection()&&(0,a.copyHandler)(e,this._selectionService)}));const e=e=>(0,a.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this._register((0,H.addDisposableListener)(this.textarea,"paste",e)),this._register((0,H.addDisposableListener)(this.element,"paste",e)),L.isFirefox?this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>{2===e.button&&(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register((0,H.addDisposableListener)(this.element,"contextmenu",e=>{(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),L.isLinux&&this._register((0,H.addDisposableListener)(this.element,"auxclick",e=>{1===e.button&&(0,a.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register((0,H.addDisposableListener)(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register((0,H.addDisposableListener)(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register((0,H.addDisposableListener)(this.textarea,"compositionend",e=>{this._compositionHelper instanceof u.CompositionHelper?this._compositionHelper.compositionend(e)&&this.textarea.dispatchEvent(new CustomEvent("xterm-composition-transaction-accepted",{bubbles:!0})):this._compositionHelper.compositionend()})),this._register((0,H.addDisposableListener)(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",e=>this.element.classList.toggle("allow-transparency",e))),e.appendChild(this.element);const t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register((0,H.addDisposableListener)(this.screenElement,"mousemove",e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);const i=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",h.promptLabel.get()),L.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>i.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(g.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??("undefined"!=typeof window?window.document:null))),this._instantiationService.setService(C.ICoreBrowserService,this._coreBrowserService),this._register((0,H.addDisposableListener)(this.textarea,"focus",e=>this._handleTextAreaFocus(e))),this._register((0,H.addDisposableListener)(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(p.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(C.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(k.ThemeService),this._instantiationService.setService(C.IThemeService,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(v.CharacterJoinerService),this._instantiationService.setService(C.ICharacterJoinerService,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(w.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(C.IRenderService,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this._register(this._renderService.onDimensionsChange(e=>this._onDimensionsChange.fire({css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(u.CompositionHelper,this.textarea,this._compositionView),this._register((0,N.toDisposable)(()=>{this._compositionHelper instanceof u.CompositionHelper&&this._compositionHelper.dispose()})),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(S.MouseCoordsService),this._instantiationService.setService(C.IMouseCoordsService,this._mouseCoordsService);const s=this._linkifier.value=this._register(this._instantiationService.createInstance(O.Linkifier,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(e){this._logService.error("onWillOpen handler threw an exception",e)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(c.Viewport,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(y.SelectionService,this.element,this.screenElement,s)),this._instantiationService.setService(C.ISelectionService,this._selectionService),this._mouseService=this._instantiationService.createInstance(b.MouseService),this._instantiationService.setService(C.IMouseService,this._mouseService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(I.EventUtils.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(d.BufferDecorationRenderer,this.screenElement)),this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>this._selectionService.handleMouseDown(e))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(A.AccessibilityManager,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",e=>this._handleScreenReaderModeOptionChange(e)));const r=this.options.scrollbar?.showScrollbar??!0,o=this.options.scrollbar?.width;r&&o&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",e=>{const t=(e?.showScrollbar??!0)&&!!e?.width;!this._overviewRulerRenderer&&t&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:e=>this._viewport?.handleTouchScroll(e)},e=>this._register(e),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(f.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,i=!1){this._renderService?.refreshRows(e,t,i)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}paste(e){(0,a.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");const t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,i){this._selectionService.setSelection(e,t,i)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;const t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;t||"Dead"!==e.key&&"AltGraph"!==e.key||(this._unprocessedDeadKey=!0);const i=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),3===i.type||2===i.type){const t=this.rows-1;return this.scrollLines(2===i.type?-t:t),e.preventDefault(),e.stopPropagation(),!1}if(1===i.type&&this.selectAll(),this._isThirdLevelShift(this.browser,e))return!0;if(i.cancel&&(e.preventDefault(),e.stopPropagation()),!i.key)return!0;if(!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&1===e.key.length&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;""!==i.key&&"\r"!==i.key||(this.textarea.value="");const s=this._keyboardService.useWin32InputMode&&W(e);if(this._onKey.fire({key:i.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){const i=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return"keypress"===t.type?i:i&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return;W(e)||this.focus();const t=this._keyboardService.evaluateKeyUp(e);if(t?.key){const i=this._keyboardService.useWin32InputMode&&W(e);this.coreService.triggerDataEvent(t.key,!i)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this._compositionHelper.keypress?.(t)||this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&"insertText"===e.inputType&&!this.optionsService.rawOptions.screenReaderMode&&this._compositionHelper instanceof u.CompositionHelper&&this._compositionHelper.input(e.data))return!0;if(e.data&&"insertText"===e.inputType&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;efunction(e){const t=l(e);for(t.animFrameRequested=!1,t.current=t.next,t.next=[],t.inAnimationFrameRunner=!0;t.current.length>0;)t.current.sort(a.sort),t.current.shift().execute();t.inAnimationFrameRunner=!1}(e))),r};const s=i(3132);function r(e){const t=e;if(t?.ownerDocument?.defaultView)return t.ownerDocument.defaultView;const i=e;return i?.view?i.view:window}class o{constructor(e,t,i,s){this._node=e,this._type=t,this._handler=i,this._options=s,e.addEventListener(t,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function n(e,t,i,s){return new o(e,t,i,s)}t.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class a{constructor(e,t){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){console.error(e)}}static sort(e,t){return t.priority-e.priority}}const h=new Map;function l(e){let t=h.get(e);return t||(t={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(e,t)),t}class c extends s.IntervalTimer{constructor(e){super(),this._defaultTarget=e?r(e):void 0}cancelAndSet(e,t,i){super.cancelAndSet(e,t,i??this._defaultTarget??window)}}t.WindowIntervalTimer=c},8906(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier=void 0;const o=i(4812),n=i(6501),a=i(7098),h=i(8636),l=i(4159);let c=class extends o.Disposable{get currentLink(){return this._currentLink}constructor(e,t,i,s,r){super(),this._element=e,this._mouseCoordsService=t,this._renderService=i,this._bufferService=s,this._linkProviderService=r,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this._register(new h.Emitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this._register(new h.Emitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this._register((0,o.toDisposable)(()=>{(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register((0,l.addDisposableListener)(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register((0,l.addDisposableListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;const t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;const i=e.composedPath();for(let e=0;e{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let i=!1;for(const[s,r]of this._linkProviderService.linkProviders.entries())if(t){const t=this._activeProviderReplies?.get(s);t&&(i=this._checkLinkProviderResult(s,e,i))}else r.provideLinks(e.y,t=>{if(this._isMouseOut)return;const r=t?.map(e=>({link:e}));this._activeProviderReplies?.set(s,r),i=this._checkLinkProviderResult(s,e,i),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){const i=new Set;for(let s=0;se?this._bufferService.cols:s.link.range.end.x;for(let e=o;e<=n;e++){if(i.has(e)){r.splice(t--,1);break}i.add(e)}}}}_checkLinkProviderResult(e,t,i){if(!this._activeProviderReplies)return i;const s=this._activeProviderReplies.get(e);let r=!1;for(let t=0;tthis._linkAtPosition(e.link,t));e&&(i=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!i)for(let e=0;ethis._linkAtPosition(e.link,t));if(s){i=!0,this._handleNewLink(s);break}}return i}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;const t=this._positionFromMouseEvent(e,this._element);var i,s;t&&this._mouseDownLink&&(i=this._mouseDownLink.link,s=this._currentLink.link,i.text===s.text&&i.range.start.x===s.range.start.x&&i.range.start.y===s.range.start.y&&i.range.end.x===s.range.end.x&&i.range.end.y===s.range.end.y)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;const t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;const t=0===e.start?0:e.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(t,i),this._lastMouseEvent)){const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(i,t.text)}_fireUnderlineEvent(e,t){const i=e.range,s=this._bufferService.buffer.ydisp,r=this._createLinkUnderlineEvent(i.start.x-1,i.start.y-s-1,i.end.x,i.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(r)}_linkLeave(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(i,t.text)}_linkAtPosition(e,t){const i=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,r=t.y*this._bufferService.cols+t.x;return i<=r&&r<=s}_positionFromMouseEvent(e,t){const i=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,i,s,r){return{x1:e,y1:t,x2:i,y2:s,cols:this._bufferService.cols,fg:r}}};t.Linkifier=c,t.Linkifier=c=s([r(1,a.IMouseCoordsService),r(2,a.IRenderService),r(3,n.IBufferService),r(4,a.ILinkProviderService)],c)},7721(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0;let i="Terminal input";const s={get:()=>i,set:e=>i=e};t.promptLabel=s;let r="Too much output to announce, navigate to rows manually to read";const o={get:()=>r,set:e=>r=e};t.tooMuchOutput=o},3285(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkProvider=void 0;const o=i(3055),n=i(6501);let a=class{constructor(e,t,i){this._bufferService=e,this._optionsService=t,this._oscLinkService=i,this._workCell=new o.CellData}provideLinks(e,t){const i=this._bufferService.buffer.lines.get(e-1);if(!i)return void t(void 0);const s=[],r=this._optionsService.rawOptions.linkHandler,o=this._workCell,n=i.getTrimmedLength();let a=-1,l=-1,c=!1;for(let t=0;tr?r.activate(e,t,d):h(0,t),hover:(e,t)=>r?.hover?.(e,t,d),leave:(e,t)=>r?.leave?.(e,t,d)})}c=!1,o.hasExtendedAttrs()&&o.extended.urlId?(l=t,a=o.extended.urlId):(l=-1,a=-1)}}t(s)}_getRangeWithLineWrap(e,t,i,s){let r=e,o=t,n=e,a=i;for(;0===o;){const e=this._bufferService.buffer.lines.get(r-1);if(!e?.isWrapped)break;const t=this._bufferService.buffer.lines.get(r-2);if(!t)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,i-1,s))break;let n=i-1;for(;n>0&&this._hasUrlId(t,n-1,s);)n--;r--,o=n}for(;;){const e=this._bufferService.buffer.lines.get(n-1);if(!e)break;if(a!==e.getTrimmedLength())break;const t=this._bufferService.buffer.lines.get(n);if(!t?.isWrapped)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,0,s))break;let r=1;for(;rthis._innerRefresh()),this._animationFrame}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return void this._runRefreshCallbacks();const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},4292(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;const s=performance.now();if(s-this._lastRefreshMs>=this._debounceThresholdMS)void 0!==this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=s,this._innerRefresh();else if(!this._additionalRefreshRequested){const e=s-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},t)}}_innerRefresh(){if(void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return;const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},9302(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_ANSI_COLORS=void 0;const s=i(4103);t.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const e=[s.css.toColor("#2e3436"),s.css.toColor("#cc0000"),s.css.toColor("#4e9a06"),s.css.toColor("#c4a000"),s.css.toColor("#3465a4"),s.css.toColor("#75507b"),s.css.toColor("#06989a"),s.css.toColor("#d3d7cf"),s.css.toColor("#555753"),s.css.toColor("#ef2929"),s.css.toColor("#8ae234"),s.css.toColor("#fce94f"),s.css.toColor("#729fcf"),s.css.toColor("#ad7fa8"),s.css.toColor("#34e2e2"),s.css.toColor("#eeeeec")],t=[0,95,135,175,215,255];for(let i=0;i<216;i++){const r=t[i/36%6|0],o=t[i/6%6|0],n=t[i%6];e.push({css:s.channels.toCss(r,o,n),rgba:s.channels.toRgba(r,o,n)})}for(let t=0;t<24;t++){const i=8+10*t;e.push({css:s.channels.toCss(i,i,i),rgba:s.channels.toRgba(i,i,i)})}return e})())},4017(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;const o=i(7098),n=i(4812),a=i(6501),h=i(4159),l=i(8566),c=i(8636),d=i(7880);let _=class extends n.Disposable{constructor(e,t,i,s,r,o,a,_,u){super(),this._bufferService=i,this._coreService=r,this._optionsService=_,this._renderService=u,this._onRequestScrollLines=this._register(new c.Emitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._isSyncing=!1,this._isHandlingScroll=!1,this._suppressOnScrollHandler=!1,this._needsSyncOnRender=!1;const f=this._register(new d.Scrollable({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:e=>(0,h.scheduleAtNextAnimationFrame)(s.window,e)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{f.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new l.SmoothScrollableElement(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},f)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(o.onProtocolChange(e=>{this._scrollableElement.updateOptions({handleMouseWheel:!(16&e)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{e.style.backgroundColor=a.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=a.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register((0,n.toDisposable)(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register((0,n.toDisposable)(()=>this._styleElement.remove())),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${a.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${a.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${a.colors.scrollbarSliderActiveBackground.css};`,"}"].join("\n")})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(e=>this._handleScroll(e)))}scrollLines(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){const e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,i=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:i,verticalHasArrows:t}}queueSync(e){void 0!==e&&(this._latestYDisp=e),void 0===this._queuedAnimationFrame&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){this._renderService&&!this._isSyncing&&(this._coreService.decPrivateModes.synchronizedOutput?this._needsSyncOnRender=!0:(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1))}_handleScroll(e){if(!this._renderService)return;if(this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;const t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),i=t-this._bufferService.buffer.ydisp;0!==i&&(this._latestYDisp=t,this._onRequestScrollLines.fire(i)),this._isHandlingScroll=!1}handleTouchScroll(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};t.Viewport=_,t.Viewport=_=s([r(2,a.IBufferService),r(3,o.ICoreBrowserService),r(4,a.ICoreService),r(5,a.IMouseStateService),r(6,o.IThemeService),r(7,a.IOptionsService),r(8,o.IRenderService)],_)},4196(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferDecorationRenderer=void 0;const o=i(7098),n=i(4812),a=i(6501);let h=class extends n.Disposable{constructor(e,t,i,s,r){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=i,this._decorationService=s,this._renderService=r,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(e=>this._removeDecoration(e))),this._register((0,n.toDisposable)(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){void 0===this._animationFrame&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){const t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer","top"===e?.options?.layer),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const i=e.options.x??0;return i&&i>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){const t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let i=this._decorationElements.get(e);i||(i=this._createElement(e),e.element=i,this._decorationElements.set(e,i),this._container.appendChild(i),e.onDispose(()=>{this._decorationElements.delete(e),i.remove()})),i.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(i.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",i.style.top=t*this._renderService.dimensions.css.cell.height+"px",i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(i)}}_refreshXPosition(e,t=e.element){if(!t)return;const i=e.options.x??0;"right"===(e.options.anchor||"left")?t.style.right=i?i*this._renderService.dimensions.css.cell.width+"px":"":t.style.left=i?i*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=h,t.BufferDecorationRenderer=h=s([r(1,a.IBufferService),r(2,o.ICoreBrowserService),r(3,a.IDecorationService),r(4,o.IRenderService)],h)},957(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(const t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,i){return t>=e.startBufferLine-this._linePadding[i||"full"]&&t<=e.endBufferLine+this._linePadding[i||"full"]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},9925(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OverviewRulerRenderer=void 0;const o=i(957),n=i(7098),a=i(4812),h=i(6501),l={full:0,left:0,center:0,right:0},c={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0};let _=class extends a.Disposable{get _width(){const e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??1?e?.width??0:0}constructor(e,t,i,s,r,n,h,l){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=i,this._decorationService=s,this._renderService=r,this._optionsService=n,this._themeService=h,this._coreBrowserService=l,this._colorZoneStore=new o.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register((0,a.toDisposable)(()=>this._canvas?.remove()));const c=this._canvas.getContext("2d");if(!c)throw new Error("Ctx cannot be null");this._ctx=c,this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register((0,a.toDisposable)(()=>{void 0!==this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}_refreshDrawConstants(){const e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);c.full=this._canvas.width,c.left=e,c.center=t,c.right=e,this._refreshDrawHeightConstants(),d.full=1,d.left=1,d.center=1+c.left,d.right=1+c.left+c.center}_refreshDrawHeightConstants(){l.full=Math.round(2*this._coreBrowserService.dpr);const e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);l.left=t,l.center=t,l.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;const e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1,this._renderRulerOutline();const e=this._colorZoneStore.zones;for(const t of e)"full"!==t.position&&this._renderColorZone(t);for(const t of e)"full"===t.position&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-l[e.position||"full"]/2),c[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+l[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=_,t.OverviewRulerRenderer=_=s([r(2,h.IBufferService),r(3,h.IDecorationService),r(4,n.IRenderService),r(5,h.IOptionsService),r(6,n.IThemeService),r(7,n.ICoreBrowserService)],_)},3618(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;const o=i(7098),n=i(6501),a=i(2744),h=i(4159),l=i(4812),c=i(4103),d="xterm-composition-session-end";let _=class{get isComposing(){return this._isComposing}get hasPendingCompositionFinalization(){return void 0!==this._pendingComposition}get _isSendingComposition(){return this.hasPendingCompositionFinalization}get _pendingKeypressData(){return this._pendingComposition?.keypressData??""}constructor(e,t,i,s,r,o,n,a){this._textarea=e,this._compositionView=t,this._bufferService=i,this._optionsService=s,this._coreService=r,this._renderService=o,this._themeService=n,this._unicodeService=a,this._isComposing=!1,this._isAwaitingCompositionEnd=!1,this._compositionPosition={start:0,end:0},this._compositionSuffix="",this._dataAlreadySent="",this._compositionInputData="",this._lastCompositionData="",this._compositionStartValue="",this._compositionStartSelection={start:0,end:0},this._compositionHasObservedProgress=!1,this._compositionTransactionId=0,this._compositionTimers=new Set,this._imeKeydownAwaitingCommit=!1}compositionstart(){this._cancelDeferredTimer(this._compositionPositionTimer),this._compositionPositionTimer=void 0,this._cancelDeferredTimer(this._compositionViewTimer),this._compositionViewTimer=void 0,this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,void 0!==this._textareaChangeTimer&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0);const e=this._textarea.selectionStart??this._textarea.value.length,t=this._textarea.selectionEnd??e;this._compositionPosition.start=Math.min(e,t),this._compositionPosition.end=Math.max(e,t),this._compositionStartValue=this._textarea.value,this._compositionStartSelection={start:e,end:t},this._compositionHasObservedProgress=!1,this._imeKeydownAwaitingCommit=!1,this._pendingComposition&&(this._pendingComposition.nextCompositionStart=this._compositionPosition.start),this._compositionTransactionId++,this._isComposing=!0,this._isAwaitingCompositionEnd=!0,this._compositionSuffix=this._textarea.value.substring(this._compositionPosition.end),this._resetCompositionView(),this._dataAlreadySent="",this._compositionInputData="",this._lastCompositionData="",this._compositionView.classList.add("active"),this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-session-start",{bubbles:!0,detail:{id:this._compositionTransactionId}}))}compositionupdate(e){e.data&&!this._isComposing&&this.compositionstart(),this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._compositionHasObservedProgress||=this._hasCompositionProgress(),e.data?.length>0&&(this._lastCompositionData=e.data),this._renderCompositionView(e.data??""),this._compositionView.classList.toggle("active",Boolean(e.data)),this.updateCompositionElements();const t=this._compositionTransactionId;this._cancelDeferredTimer(this._compositionPositionTimer),this._compositionPositionTimer=this._defer(()=>{if(this._isComposing&&this._compositionTransactionId===t){this._compositionHasObservedProgress||=this._hasCompositionProgress();const e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)}})}compositionend(e){if(!this._isAwaitingCompositionEnd)return!1;if(!this._isComposing){const t=this._pendingComposition;return t?.transactionId===this._compositionTransactionId&&(t.endData=e?.data??"",this._updatePostCompositionInputExpectation(t)),!1}const t=e?.data??"";if(this._compositionHasObservedProgress||=this._hasCompositionProgress(),!this._compositionEndBelongsToCurrentTransaction(t)){const e=this._pendingComposition;return e&&e.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(e),this._deferCompositionEnd(t),!1}return this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._finalizeComposition(!0,t),!0}blur(){if(this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._isComposing){const e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)}(this._isComposing||this.hasPendingCompositionFinalization)&&this._finalizeComposition(!1)}dispose(){void 0!==this._textareaChangeTimer&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0);for(const e of this._compositionTimers)clearTimeout(e);this._compositionTimers.clear(),this._compositionPositionTimer=void 0,this._compositionViewTimer=void 0,this._compositionEndTimer=void 0,this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionTransactionId++,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._preeditRenderer?.dispose(),this._preeditRenderer=void 0}keydown(e){if(this._canceledKey?.code===e.code&&this._canceledKey.timeStamp===e.timeStamp)return this._canceledKey=void 0,!1;if("Escape"===e.key&&(this._isComposing||this.hasPendingCompositionFinalization))return this._canceledKey={code:e.code,timeStamp:e.timeStamp},this._cancelComposition(),!1;if(this._isComposing||this.hasPendingCompositionFinalization){if(this._deferPreeditResync(this._composedRegionLength()>0),20===e.keyCode||229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return this._imeKeydownAwaitingCommit=229===e.keyCode,229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)}keypress(e){const t=this._pendingComposition;return!(!t||(t.keypressMayOverlapComposition?(t.keypressData+=e,0):t.expectsPostCompositionInput&&0===t.keypressData.length?(t.keypressData=e,0):(this._sendPendingComposition(t),1)))}input(e){if(this._isComposing)return this._compositionHasObservedProgress||=this._hasCompositionProgress(),this._compositionInputData+=e,!0;const t=this._pendingComposition;if(!t)return this._claimImeKeydownCommit(e);if(t.expectsPostCompositionInput)return t.inputData+=e,t.expectsPostCompositionInput=!1,this._sendPendingComposition(t),!0;const i=e.length>0&&this._getPendingTextareaInput(t)===e&&this._getPendingTextareaInput(t,!0)===e;return this._sendPendingComposition(t),i||this._coreService.triggerDataEvent(e,!0),!0}_claimImeKeydownCommit(e){return!!this._imeKeydownAwaitingCommit&&(this._imeKeydownAwaitingCommit=!1,void 0!==this._textareaChangeTimer&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0),this._coreService.triggerDataEvent(e,!0),!0)}_finalizeComposition(e,t=""){const i=this._isComposing;if(this._compositionView.classList.remove("active"),this._resetCompositionView(),this._isComposing=!1,!e||i)if(e){this._pendingComposition&&this._sendPendingComposition(this._pendingComposition);const e={transactionId:this._compositionTransactionId,lifecycleSettled:!1,sessionEnded:!1,position:{start:this._compositionPosition.start,end:this._compositionPosition.end},suffix:this._compositionSuffix,dataAlreadySent:this._dataAlreadySent,compositionData:this._lastCompositionData,endData:t,inputData:this._compositionInputData,keypressData:"",keypressMayOverlapComposition:0===this._lastCompositionData.length&&0===t.length,expectsPostCompositionInput:!1};this._updatePostCompositionInputExpectation(e),this._pendingComposition=e,e.finalizerTimer=this._defer(()=>{e.finalizerTimer=void 0,this._compositionTransactionId===e.transactionId&&(this._isAwaitingCompositionEnd=!1),this._pendingComposition===e&&this._sendPendingComposition(e,!0)})}else if(this._pendingComposition&&this._sendPendingComposition(this._pendingComposition,!0),i){const e=this._getCompositionInput(this._compositionPosition.start+this._dataAlreadySent.length,this._compositionSuffix);this._sendCompositionInput(this._compositionTransactionId,e)}}_sendPendingComposition(e,t=!1){this._cancelPendingFinalizer(e),this._pendingComposition===e&&(this._pendingComposition=void 0);const i=this._getPendingTextareaInput(e,t),s=this._removeAlreadySentData(e.inputData||e.keypressData,e.dataAlreadySent),r=this._mergeTextObservations(i||e.endData||(s?e.compositionData:""),s,e.keypressMayOverlapComposition);this._sendCompositionInput(e.transactionId,r,!e.sessionEnded),this._settlePendingComposition(e)}_cancelPendingFinalizer(e){void 0!==e.finalizerTimer&&(clearTimeout(e.finalizerTimer),this._compositionTimers.delete(e.finalizerTimer),e.finalizerTimer=void 0)}_settlePendingComposition(e){e.lifecycleSettled||(e.lifecycleSettled=!0,this._dispatchCompositionTransactionSettled())}_mergeTextObservations(e,t,i){if(!t||e.includes(t))return e;if(!e||t.includes(e))return t;if(i){let i=Math.min(e.length,t.length);for(;i>0&&!e.endsWith(t.substring(0,i));)i--;let s=Math.min(e.length,t.length);for(;s>0&&!t.endsWith(e.substring(0,s));)s--;return i>s?e+t.substring(i):t+e.substring(s)}let s=Math.min(e.length,t.length);for(;s>0&&!e.endsWith(t.substring(0,s));)s--;return e+t.substring(s)}_updatePostCompositionInputExpectation(e){e.expectsPostCompositionInput=(e.endData.length>0||e.compositionData.length>0)&&0===e.inputData.length&&0===this._getPendingTextareaInput(e).length}_getPendingTextareaInput(e,t=!1){const i=this._textarea.value,s=e.position.start+e.dataAlreadySent.length;if(void 0!==e.nextCompositionStart)return i.substring(s,Math.max(s,e.nextCompositionStart));const r=e.suffix.length>0&&i.endsWith(e.suffix)?i.length-e.suffix.length:i.length,o=(e.endData||e.compositionData).length,n=t?r:Math.max(e.position.end,s+o);return i.substring(s,Math.max(s,Math.min(r,n)))}_getCompositionInput(e,t){const i=this._textarea.value,s=t.length>0&&i.endsWith(t)?i.length-t.length:i.length;return i.substring(e,Math.max(e,s))}_removeAlreadySentData(e,t){return 0===t.length?e:e.startsWith(t)?e.substring(t.length):t.includes(e)?"":e}_cancelComposition(){const e=this._pendingComposition;e&&this._isComposing&&e.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(e);const t=this._isComposing?this._compositionTransactionId:this._pendingComposition?.transactionId??0,i=void 0!==e&&this._pendingComposition===e;this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._textarea.value=this._textarea.value.substring(0,this._compositionPosition.start)+this._compositionSuffix,this._sendCompositionInput(t,""),i&&e&&this._settlePendingComposition(e)}_sendCompositionInput(e,t,i=!0){let s=!1;if(i){const i=new CustomEvent(d,{bubbles:!0,cancelable:!0,detail:{id:e,data:t}});this._dispatchCompositionSessionEvent(i),s=i.defaultPrevented}t.length>0&&!s&&this._coreService.triggerDataEvent(t,!0)}_endPendingCompositionSession(e){if(e.sessionEnded)return;e.sessionEnded=!0;const t=this._getPendingTextareaInput(e)||e.endData||e.compositionData;this._dispatchCompositionSessionEvent(new CustomEvent(d,{bubbles:!0,cancelable:!0,detail:{id:e.transactionId,data:t,dataPendingReconciliation:!0}}))}_dispatchCompositionSessionEvent(e){"function"==typeof this._textarea.dispatchEvent&&this._textarea.dispatchEvent(e)}_dispatchCompositionTransactionSettled(){this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-transaction-settled",{bubbles:!0}))}_deferCompositionEnd(e){this._cancelDeferredTimer(this._compositionEndTimer);const t=this._compositionTransactionId,i=this._defer(()=>{if(this._compositionEndTimer!==i||!this._isComposing||this._compositionTransactionId!==t)return;if(this._compositionEndTimer=void 0,!this._compositionEndBelongsToCurrentTransaction(e))return void(0!==e.length||this._hasCompositionProgress()||this._cancelComposition());this._finalizeComposition(!0,e),this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-transaction-accepted",{bubbles:!0}));const s=this._pendingComposition;s?.transactionId===t&&this._sendPendingComposition(s,!0)});this._compositionEndTimer=i}_composedRegionLength(){const e=this._textarea.value.length-this._compositionSuffix.length;return Math.max(0,e-this._compositionPosition.start)}_deferPreeditResync(e){if(!e||!this._isComposing)return;const t=this._compositionTransactionId;this._defer(()=>{this._isComposing&&this._compositionTransactionId===t&&0===this._composedRegionLength()&&this._cancelComposition()})}_hasCompositionProgress(){const e=this._textarea.selectionStart??this._textarea.value.length,t=this._textarea.selectionEnd??e;return this._compositionHasObservedProgress||this._textarea.value!==this._compositionStartValue||e!==this._compositionStartSelection.start||t!==this._compositionStartSelection.end}_compositionEndBelongsToCurrentTransaction(e){return this._hasCompositionProgress()||e.length>0&&e===this._lastCompositionData}_defer(e){const t=setTimeout(()=>{this._compositionTimers.delete(t),e()},0);return this._compositionTimers.add(t),t}_cancelDeferredTimer(e){void 0!==e&&(clearTimeout(e),this._compositionTimers.delete(e))}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;const e=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){const t=this._textarea.value,i=t.replace(e,"");t!==e&&(this._imeKeydownAwaitingCommit=!1),this._dataAlreadySent=i,t.length>e.length?this._coreService.triggerDataEvent(i,!0):t.lengththis.updateCompositionElements(!0)),this._preeditRenderer.render(this._compositionPreedit));const r=this._bufferService.cols*this._renderService.dimensions.css.cell.width-s;this._compositionView.style.maxWidth=r+"px",this._compositionView.style.overflow="hidden";const o=(this._compositionPreedit??this._compositionView).getBoundingClientRect(),n=s+Math.min(0,r-o.width),a=Boolean(this._compositionRemainder)&&o.widththis.updateCompositionElements(!0)))}};t.CompositionHelper=_,t.CompositionHelper=_=s([r(2,n.IBufferService),r(3,n.IOptionsService),r(4,n.ICoreService),r(5,o.IRenderService),r(6,o.IThemeService),r(7,n.IUnicodeService)],_);const u=/^[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}\uac00-\ud7a3\u3131-\u318e\uff01-\uff60]$/u,f=/[\p{Mark}\p{Extended_Pictographic}]/u;class p extends l.Disposable{constructor(e,t,i){super(),this._unicodeService=e,this._segmenter=new Intl.Segmenter(void 0,{granularity:"grapheme"}),this._font="",t.fonts&&this._register((0,h.addDisposableListener)(t.fonts,"loadingdone",()=>{this._font="",this._preedit&&i()}))}clear(){this._preedit=void 0,this._font=""}dispose(){this.clear(),this._measure=void 0,super.dispose()}render(e){const t=e.ownerDocument,i=t.defaultView?.getComputedStyle(e);if(!i)return;const s=[i.fontFamily,i.fontSize,i.fontWeight,i.fontStyle,t.defaultView?.devicePixelRatio].join("|");if(this._preedit===e&&this._font===s)return;this._preedit=e,this._font=s;const r=(e.textContent??"").slice(1,-1),o=new Map,n=[t.createTextNode("‎")];let h,l=0,c=0;const d=e=>{if(e===l)return;const i=r.slice(l,e);if(void 0===h)n.push(t.createTextNode(i));else{const e=t.createElement("span");e.style.letterSpacing=h,e.style.fontKerning="none",e.style.textDecoration="inherit",e.textContent=i,n.push(e),c++}l=e};for(const{segment:e,index:t}of this._segmenter.segment(r)){if(c>=128){d(t),h=void 0;break}let s;const r=this._unicodeService.wcwidth(e.codePointAt(0));if(u.test(e)&&!f.test(e)&&(2===r||/^[\uff61-\uff9f]$/u.test(e))){let t=o.get(e);void 0===t&&(this._measure??=new a.WidthCacheFontVariantCanvas,this._measure.setFont(i.fontFamily,parseFloat(i.fontSize),parseFloat(i.fontWeight)||400,"italic"===i.fontStyle),t=this._measure.measure(e),o.set(e,t),c++),s=`calc(var(--xterm-composition-cell-width) * ${r} - ${t}px)`}s!==h&&(d(t),h=s)}d(r.length),n.push(t.createTextNode("‎")),e.replaceChildren(...n)}}},5251(e,t){function i(e,t,i){const s=i.getBoundingClientRect(),r=e.getComputedStyle(i),o=parseInt(r.getPropertyValue("padding-left"),10),n=parseInt(r.getPropertyValue("padding-top"),10);return[t.clientX-s.left-o,t.clientY-s.top-n]}Object.defineProperty(t,"__esModule",{value:!0}),t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,s,r,o,n,a,h,l){if(!n)return;const c=i(e,t,s);return c[0]=Math.ceil((c[0]+(l?a/2:0))/a),c[1]=Math.ceil(c[1]/h),c[0]=Math.min(Math.max(c[0],1),r+(l?1:0)),c[1]=Math.min(Math.max(c[1],1),o),c}},9686(e,t){function i(e,t,i,o){const h=e-s(e,i),l=t-s(t,i),c=Math.abs(h-l)-function(e,t,i){let o=0;const n=e-s(e,i),a=t-s(t,i);for(let s=0;s=0&&et?"A":"B"}function o(e,t,i,s,r,o){let n=e,a=t,h="";for(;(n!==i||a!==s)&&a>=0&&ao.cols-1?(h+=o.buffer.translateBufferLineToString(a,!1,e,n),n=0,e=0,a++):!r&&n<0&&(h+=o.buffer.translateBufferLineToString(a,!1,0,e+1),n=o.cols-1,e=n,a--);return h+o.buffer.translateBufferLineToString(a,!1,e,n)}function n(e,t){return""+(t?"O":"[")+e}function a(e,t){e=Math.floor(e);let i="";for(let s=0;s0?h-s(h,l):t;const _=h,u=function(e,t,r,o,n,a){let h;return h=i(t,o,n,a).length>0?o-s(o,n):t,e=r&&he?"D":"C",a(Math.abs(l-e),n(d,h));d=c>t?"D":"C";const _=Math.abs(c-t);return a(function(e,t){return t.cols-e}(c>t?e:l,r)+(_-1)*r.cols+1+((c>t?l:e)-1),n(d,h))}},6081(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(f.includes(e))throw new Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new _.ParserApi(this._core)}get unicode(){return this._checkProposedApi(),new u.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new d.BufferNamespaceApi(this._core))}get markers(){return this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t="none";switch(this._core.mouseStateService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:e.synchronizedOutput,win32InputMode:e.win32InputMode,wraparoundMode:e.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,i){this._verifyIntegers(e,t,i),this._core.select(e,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write("\r\n",t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return a.promptLabel.get()},set promptLabel(e){a.promptLabel.set(e)},get tooMuchOutput(){return a.tooMuchOutput.get()},set tooMuchOutput(e){a.tooMuchOutput.set(e)}}}_verifyIntegers(...e){for(p of e)if(p===1/0||isNaN(p)||p%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...e){for(p of e)if(p&&(p===1/0||isNaN(p)||p%1!=0||p<0))throw new Error("This API only accepts positive integers")}}t.Terminal=v},3955(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;const o=i(1433),n=i(2744),a=i(9176),h=i(6181),l=i(2274),c=i(654),d=i(7098),_=i(4103),u=i(4812),f=i(6501),p=i(8636),v=i(4159);let g=1,m=class extends u.Disposable{constructor(e,t,i,s,r,a,d,_,f,m,b,w,y,C){super(),this._terminal=e,this._document=t,this._element=i,this._screenElement=s,this._viewportElement=r,this._helperContainer=a,this._linkifier2=d,this._charSizeService=f,this._optionsService=m,this._bufferService=b,this._coreService=w,this._coreBrowserService=y,this._themeService=C,this._terminalClass=g++,this._rowElements=[],this._selectionRenderModel=(0,l.createSelectionRenderModel)(),this._lastSelectionColumnMode=!1,this._rowHasBlinkingCells=[],this._rowHasBlinkingCellsCount=0,this._onRequestRedraw=this._register(new p.Emitter),this.onRequestRedraw=this._onRequestRedraw.event,this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,h.createRenderDimensions)(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(e=>this._injectCss(e))),this._injectCss(this._themeService.colors),this._rowFactory=_.createInstance(o.DomRendererRowFactory,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(e=>this._handleLinkHover(e))),this._register(this._linkifier2.onHideLinkUnderline(e=>this._handleLinkLeave(e))),this._cursorBlinkStateManager=new S(this._rowContainer,this._coreBrowserService),this._register((0,v.addDisposableListener)(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register((0,u.toDisposable)(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new c.TextBlinkStateManager(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register((0,u.toDisposable)(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new n.WidthCache,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));const t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${_.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;const i=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,r=`blink_block_${this._terminalClass}`;t+=`@keyframes ${i} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${r} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(const[i,s]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${i} { color: ${s.css}; }${this._terminalSelector} .xterm-fg-${i}.xterm-dim { color: ${_.color.multiplyOpacity(s,.5).css}; }${this._terminalSelector} .xterm-bg-${i} { background-color: ${s.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR} { color: ${_.color.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${_.color.multiplyOpacity(_.color.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${a.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){const e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){const e=this._document.createElement("div");this._rowContainer.appendChild(e),this._rowElements.push(e),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,i){const s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,i);let r=0,o=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(r=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow));let n=0,a=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,i),this._selectionRenderModel.hasSelection){const s=this._selectionRenderModel.viewportStartRow,r=this._selectionRenderModel.viewportEndRow,o=this._selectionRenderModel.viewportCappedStartRow,h=this._selectionRenderModel.viewportCappedEndRow;n=o,a=h;const l=this._document.createDocumentFragment();if(i){const i=e[0]>t[0];l.appendChild(this._createSelectionElement(o,i?t[0]:e[0],i?e[0]:t[0],h-o+1))}else{const i=s===o?e[0]:0,n=o===r?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(o,i,n));const a=h-o-1;if(l.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,a)),o!==h){const e=r===h?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(h,0,e))}}this._selectionContainer.appendChild(l)}let h=Math.min(r,n),l=Math.max(o,a);if(l>=0){h=Math.max(h,0),l=Math.min(l,s-1);const e=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&e>=0&&ethis.dimensions.css.canvas.width&&(n=this.dimensions.css.canvas.width-o),r.style.height=s*this.dimensions.css.cell.height+"px",r.style.top=e*this.dimensions.css.cell.height+"px",r.style.left=`${o}px`,r.style.width=`${n}px`,r}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){const i=this._bufferService.buffer,s=i.ybase+i.y,r=Math.min(i.x,this._bufferService.cols-1),o=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,n=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,a=this._optionsService.rawOptions.cursorInactiveStyle,h={hasBlinkingCells:!1};for(let l=e;l<=t;l++){const e=l+i.ydisp,t=this._rowElements[l];if(!t)continue;const c=i.lines.get(e);c?(t.replaceChildren(...this._rowFactory.createRow(c,e,e===s,n,a,r,o,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,h)),this._setRowBlinkState(l,h.hasBlinkingCells)):(t.replaceChildren(),this._setRowBlinkState(l,!1))}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,i,s,r,o){i<0&&(e=0),s<0&&(t=0);const n=this._bufferService.rows-1;i=Math.max(Math.min(i,n),0),s=Math.max(Math.min(s,n),0),r=Math.min(r,this._bufferService.cols);const a=this._bufferService.buffer,h=a.ybase+a.y,l=Math.min(a.x,r-1),c=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,_=this._optionsService.rawOptions.cursorInactiveStyle,u={hasBlinkingCells:!1};for(let n=i;n<=s;++n){const f=n+a.ydisp,p=this._rowElements[n];if(!p)continue;const v=a.lines.get(f);v?(p.replaceChildren(...this._rowFactory.createRow(v,f,f===h,d,_,l,c,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,o?n===i?e:0:-1,o?(n===s?t:r)-1:-1,u)),this._setRowBlinkState(n,u.hasBlinkingCells)):(p.replaceChildren(),this._setRowBlinkState(n,!1))}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};t.DomRenderer=m,t.DomRenderer=m=s([r(7,f.IInstantiationService),r(8,d.ICharSizeService),r(9,f.IOptionsService),r(10,f.IBufferService),r(11,f.ICoreService),r(12,d.ICoreBrowserService),r(13,d.IThemeService)],m);class S{constructor(e,t){this._rowContainer=e,this._coreBrowserService=t,this._isIdlePaused=!1,this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){void 0!==this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}}},1433(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=void 0;const o=i(9176),n=i(8938),a=i(3055),h=i(6501),l=i(4103),c=i(7098),d=i(945),_=i(6181),u=i(5451);let f=class{constructor(e,t,i,s,r,o,n){this._document=e,this._characterJoinerService=t,this._optionsService=i,this._coreBrowserService=s,this._coreService=r,this._decorationService=o,this._themeService=n,this._workCell=new a.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,i){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=i}createRow(e,t,i,s,r,a,h,c,_,f,p,v,g){const m=[];g&&(g.hasBlinkingCells=!1);const S=this._characterJoinerService.getJoinedCharacters(t),b=this._themeService.colors;let w,y=e.getNoBgTrimmedLength();i&&y=B,F=I,W=this._workCell;if(S.length>0&&I===S[0][0]&&N){const s=S.shift(),r=this._isCellInSelection(s[0],t);for(C=s[0]+1;C=s[1],N?(H=!0,W=new d.JoinedCellData(this._workCell,e.translateToString(!0,s[0],s[1]),s[1]-s[0]),F=s[1]-1,y=W.getWidth()):B=s[1]}const z=this._isCellInSelection(I,t),K=i&&I===a,U=O&&I>=p&&I<=v;g&&W.isBlink()&&(g.hasBlinkingCells=!0),!c&&W.isBlink()&&A.push("xterm-blink-hidden");let j=!1;this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{j=!0});let V=W.getChars()||n.WHITESPACE_CELL_CHAR;if(" "===V&&(W.isUnderline()||W.isOverline())&&(V=" "),k=y*_-f.get(V,W.isBold(),W.isItalic()),w){if(D&&(z&&P||!z&&!P&&W.bg===x)&&(z&&P&&b.selectionForeground||W.fg===L)&&W.extended.ext===R&&U===T&&k===M&&!K&&!H&&!j&&N){W.isInvisible()?E+=n.WHITESPACE_CELL_CHAR:E+=V,D++;continue}D&&(w.textContent=E),w=this._document.createElement("span"),D=0,E=""}else w=this._document.createElement("span");if(x=W.bg,L=W.fg,R=W.extended.ext,T=U,M=k,P=z,H&&a>=I&&a<=F&&(a=I),!this._coreService.isCursorHidden&&K&&this._coreService.isCursorInitialized)if(A.push("xterm-cursor"),this._coreBrowserService.isFocused)h&&A.push("xterm-cursor-blink"),A.push("bar"===s?"xterm-cursor-bar":"underline"===s?"xterm-cursor-underline":"xterm-cursor-block");else if(r)switch(r){case"outline":A.push("xterm-cursor-outline");break;case"block":A.push("xterm-cursor-block");break;case"bar":A.push("xterm-cursor-bar");break;case"underline":A.push("xterm-cursor-underline")}if(W.isBold()&&A.push("xterm-bold"),W.isItalic()&&A.push("xterm-italic"),W.isDim()&&A.push("xterm-dim"),E=W.isInvisible()?n.WHITESPACE_CELL_CHAR:W.getChars()||n.WHITESPACE_CELL_CHAR,W.isUnderline()&&(A.push(`xterm-underline-${W.extended.underlineStyle}`)," "===E&&(E=" "),!W.isUnderlineColorDefault()))if(W.isUnderlineColorRGB())w.style.textDecorationColor=`rgb(${u.AttributeData.toColorRGB(W.getUnderlineColor()).join(",")})`;else{let e=W.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&W.isBold()&&e<8&&(e+=8),w.style.textDecorationColor=b.ansi[e].css}W.isOverline()&&(A.push("xterm-overline")," "===E&&(E=" ")),W.isStrikethrough()&&A.push("xterm-strikethrough"),U&&(w.style.textDecoration="underline");let $=W.getFgColor(),q=W.getFgColorMode(),X=W.getBgColor(),Y=W.getBgColorMode();const G=!!W.isInverse();if(G){const e=$;$=X,X=e;const t=q;q=Y,Y=t}let J,Z,Q,ee=!1;switch(this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{"top"!==e.options.layer&&ee||(e.backgroundColorRGB&&(Y=50331648,X=e.backgroundColorRGB.rgba>>8&16777215,J=e.backgroundColorRGB),e.foregroundColorRGB&&(q=50331648,$=e.foregroundColorRGB.rgba>>8&16777215,Z=e.foregroundColorRGB),ee="top"===e.options.layer)}),!ee&&z&&(J=this._coreBrowserService.isFocused?b.selectionBackgroundOpaque:b.selectionInactiveBackgroundOpaque,X=J.rgba>>8&16777215,Y=50331648,ee=!0,b.selectionForeground&&(q=50331648,$=b.selectionForeground.rgba>>8&16777215,Z=b.selectionForeground)),ee&&A.push("xterm-decoration-top"),Y){case 16777216:case 33554432:Q=b.ansi[X],A.push(`xterm-bg-${X}`);break;case 50331648:Q=l.channels.toColor(X>>16,X>>8&255,255&X),this._addStyle(w,`background-color:#${(X>>>0).toString(16).padStart(6,"0")}`);break;default:G?(Q=b.foreground,A.push(`xterm-bg-${o.INVERTED_DEFAULT_COLOR}`)):Q=b.background}switch(J||W.isDim()&&(J=l.color.multiplyOpacity(Q,.5)),q){case 16777216:case 33554432:W.isBold()&&$<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&($+=8),this._applyMinimumContrast(w,Q,b.ansi[$],W,J,void 0)||A.push(`xterm-fg-${$}`);break;case 50331648:const e=l.channels.toColor($>>16&255,$>>8&255,255&$);this._applyMinimumContrast(w,Q,e,W,J,Z)||this._addStyle(w,`color:#${$.toString(16).padStart(6,"0")}`);break;default:this._applyMinimumContrast(w,Q,b.foreground,W,J,Z)||G&&A.push(`xterm-fg-${o.INVERTED_DEFAULT_COLOR}`)}A.length&&(w.className=A.join(" "),A.length=0),K||H||j||!N?w.textContent=E:D++,k!==this.defaultSpacing&&(w.style.letterSpacing=`${k}px`),m.push(w),I=F}return w&&D&&(w.textContent=E),m}_applyMinimumContrast(e,t,i,s,r,o){if(1===this._optionsService.rawOptions.minimumContrastRatio||(0,_.treatGlyphAsBackgroundColor)(s.getCode()))return!1;const n=this._getContrastCache(s);let a;if(r||o||(a=n.getColor(t.rgba,i.rgba)),void 0===a){const e=this._optionsService.rawOptions.minimumContrastRatio/(s.isDim()?2:1);a=l.color.ensureContrastRatio(r??t,o??i,e),n.setColor((r??t).rgba,(o??i).rgba,a??null)}return!!a&&(this._addStyle(e,`color:${a.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute("style",`${e.getAttribute("style")||""}${t};`)}_isCellInSelection(e,t){const i=this._selectionStart,s=this._selectionEnd;return!(!i||!s)&&(this._columnSelectMode?i[0]<=s[0]?e>=i[0]&&t>=i[1]&&e=i[1]&&e>=s[0]&&t<=s[1]:t>i[1]&&t=i[0]&&e=i[0])}};t.DomRendererRowFactory=f,t.DomRendererRowFactory=f=s([r(1,c.ICharacterJoinerService),r(2,h.IOptionsService),r(3,c.ICoreBrowserService),r(4,h.ICoreService),r(5,h.IDecorationService),r(6,c.IThemeService)],f)},2744(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WidthCacheFontVariantCanvas=t.WidthCache=void 0;const s=i(6181);t.WidthCache=class{constructor(e=()=>new r){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._canvasElements=[],this._canvasElements=[e(),e(),e(),e()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,i,s){e===this._font&&t===this._fontSize&&i===this._weight&&s===this._weightBold||(this._font=e,this._fontSize=t,this._weight=i,this._weightBold=s,this._canvasElements[0].setFont(e,t,i,!1),this._canvasElements[1].setFont(e,t,s,!1),this._canvasElements[2].setFont(e,t,i,!0),this._canvasElements[3].setFont(e,t,s,!0),this.clear())}get(e,t,i){let s;if(!t&&!i&&1===e.length&&(s=e.charCodeAt(0))<256){if(-9999!==this._flat[s])return this._flat[s];const t=this._measure(e,0);return t>0&&(this._flat[s]=t),t}let r=e;t&&(r+="B"),i&&(r+="I");let o=this._holey.get(r);if(void 0===o){let s=0;t&&(s|=1),i&&(s|=2),o=this._measure(e,s),o>0&&this._holey.set(r,o)}return o}_measure(e,t){return this._canvasElements[t].measure(e)}};class r{constructor(){"undefined"!=typeof OffscreenCanvas?(this._canvas=new OffscreenCanvas(1,1),this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d")))}setFont(e,t,i,s){const r=s?"italic":"";this._ctx.font=`${r} ${i} ${t}px ${e}`.trim()}measure(e){return this._ctx.measureText(e).width}}t.WidthCacheFontVariantCanvas=r},9176(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.INVERTED_DEFAULT_COLOR=void 0,t.INVERTED_DEFAULT_COLOR=257},6181(e,t){function i(e){return 57508<=e&&e<=57558}function s(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e},t.isPowerlineGlyph=i,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=s,t.allowRescaling=function(e,t,r,o){return 1===t&&r>Math.ceil(1.5*o)&&void 0!==e&&e>255&&!s(e)&&!i(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return i(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,i=0){return(e-(2*Math.round(t)-i))%(2*Math.round(t))}},2274(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,i,s=!1){if(this.selectionStart=t,this.selectionEnd=i,!t||!i||t[0]===i[0]&&t[1]===i[1])return void this.clear();const r=e.buffers.active.ydisp,o=t[1]-r,n=i[1]-r,a=Math.max(o,0),h=Math.min(n,e.rows-1);a>=e.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=o,this.viewportEndRow=n,this.viewportCappedStartRow=a,this.viewportCappedEndRow=h,this.startCol=t[0],this.endCol=i[0])}isCellSelected(e,t,i){return!!this.hasSelection&&(i-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&i>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&t=this.startCol)}}},654(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.TextBlinkStateManager=void 0;const s=i(4812);class r extends s.Disposable{constructor(e,t,i){super(),this._renderCallback=e,this._coreBrowserService=t,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",e=>{this.setIntervalDuration(e)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const e=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(e||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}t.TextBlinkStateManager=r},8501(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._domNodePointerDown(e)))}_createArrow(e){const t=this._register(new c.ScrollbarArrow(e));return this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode),t}_createSlider(e,t,i,s){this.slider=new h.FastDomNode(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"==typeof i&&this.slider.setWidth(i),"number"==typeof s&&this.slider.setHeight(s),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(a.addDisposableListener(this.slider.domNode,a.eventType.POINTER_DOWN,e=>{0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))})),this._onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_handleElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._handlePointerDown(e)}delegatePointerDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),s=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),r=this._sliderPointerPosition(e);i<=r&&r<=s?0===e.button&&(e.preventDefault(),this._sliderPointerDown(e)):this._handlePointerDown(e)}_handlePointerDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"==typeof e.offsetX&&"number"==typeof e.offsetY)t=e.offsetX,i=e.offsetY;else{const s=a.getDomNodePagePosition(this.domNode.domNode);t=e.pageX-s.left,i=e.pageY-s.top}const s=this._pointerDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(s):this._scrollbarState.getDesiredScrollPositionFromOffset(s)),0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!(e.target&&e.target instanceof Element))return;const t=this._sliderPointerPosition(e),i=this._sliderOrthogonalPointerPosition(e),s=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{const r=this._sliderOrthogonalPointerPosition(e),o=Math.abs(r-i);if(u.isWindows&&o>140)return void this._setDesiredScrollPositionNow(s.getScrollPosition());const n=this._sliderPointerPosition(e)-t;this._setDesiredScrollPositionNow(s.getDesiredScrollPositionFromDelta(n))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}t.AbstractScrollbar=f},1203(e,t){function i(e){return"number"==typeof e?`${e}px`:e}Object.defineProperty(t,"__esModule",{value:!0}),t.FastDomNode=void 0,t.FastDomNode=class{constructor(e){this.domNode=e,this._width="",this._height="",this._top="",this._left="",this._bottom="",this._right="",this._className="",this._position="",this._layerHint=!1,this._contain="none"}setWidth(e){const t=i(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){const t=i(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){const t=i(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){const t=i(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){const t=i(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){const t=i(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=e?"translate3d(0px, 0px, 0px)":"")}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}}},928(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{try{e.releasePointerCapture(t)}catch{}}))}catch{o=a.getWindow(e)}this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_MOVE,e=>{e.buttons===i?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)})),this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_UP,e=>this.stopMonitoring(!0)))}}},9699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.HorizontalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(t.horizontalHasArrows?t.horizontalScrollbarSize:0,2===t.horizontal?0:t.horizontalScrollbarSize,2===t.vertical?0:t.verticalScrollbarSize,s.width,s.scrollWidth,o.scrollLeft),visibility:t.horizontal,extraScrollbarClassName:"xterm-horizontal",scrollable:e,scrollByPage:t.scrollByPage}),t.horizontalHasArrows)throw new Error("horizontalHasArrows is not supported in xterm.js");this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._handleElementSize(e.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return e}_sliderPointerPosition(e){return e.pageX}_sliderOrthogonalPointerPosition(e){return e.pageY}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}updateOptions(e){this.updateScrollbarSize(2===e.horizontal?0:e.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._visibilityController.setVisibility(e.horizontal),this._scrollByPage=e.scrollByPage}}t.HorizontalScrollbar=o},3988(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;ni&&(s=i-t),s<0&&(s=0),r<0&&(r=0),n+r>o&&(n=o-r),n<0&&(n=0),this.width=t,this.scrollWidth=i,this.scrollLeft=s,this.height=r,this.scrollHeight=o,this.scrollTop=n}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new o(this._forceIntegerValues,void 0!==e.width?e.width:this.width,void 0!==e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,void 0!==e.height?e.height:this.height,void 0!==e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new o(this._forceIntegerValues,this.width,this.scrollWidth,void 0!==e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,void 0!==e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){const i=this.width!==e.width,s=this.scrollWidth!==e.scrollWidth,r=this.scrollLeft!==e.scrollLeft,o=this.height!==e.height,n=this.scrollHeight!==e.scrollHeight,a=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:s,scrollLeftChanged:r,heightChanged:o,scrollHeightChanged:n,scrollTopChanged:a}}}t.ScrollState=o;class n extends r.Disposable{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new s.Emitter),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new o(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){const i=this._state.withScrollDimensions(e,t);this._setState(i,Boolean(this._smoothScrolling)),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0!==this._smoothScrollDuration){if(this._smoothScrolling){e={scrollLeft:void 0===e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:void 0===e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop};const i=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let s;s=t?new l(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):l.start(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=l.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}else this.setScrollPositionNow(e)}hasPendingScrollAnimation(){return Boolean(this._smoothScrolling)}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}t.Scrollable=n;class a{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function h(e,t){const i=t-e;return function(t){return e+i*(1-(s=1-t,Math.pow(s,3)));var s}}class l{constructor(e,t,i,s){this.from=e,this.to=t,this.duration=s,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this._scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this._scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(e,t,i){if(Math.abs(e-t)>2.5*i){let n,a;return e0&&Math.abs(e.deltaY)>0)return 1;let i=.5;if(this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(i+=.25),t){const s=Math.abs(e.deltaX),r=Math.abs(e.deltaY),o=Math.abs(t.deltaX),n=Math.abs(t.deltaY),a=Math.max(Math.min(s,o),1),h=Math.max(Math.min(r,n),1),l=Math.max(s,o),c=Math.max(r,n);l%a===0&&c%h===0&&(i-=.5)}return Math.min(Math.max(i,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}}S.INSTANCE=new S;class b extends _.Widget{get options(){return this._options}constructor(e,t,i){let s;super(),this._onScroll=this._register(new f.Emitter),this.onScroll=this._onScroll.event,t=t??{};const r=!i;i?s=i:(t.mouseWheelSmoothScroll=!1,s=new g.Scrollable({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:t=>a.scheduleAtNextAnimationFrame(a.getWindow(e),t)})),this._options=function(e){const t={lazyRender:void 0!==e.lazyRender&&e.lazyRender,className:void 0!==e.className?e.className:"",useShadows:void 0===e.useShadows||e.useShadows,handleMouseWheel:void 0===e.handleMouseWheel||e.handleMouseWheel,flipAxes:void 0!==e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:void 0!==e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:void 0!==e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:void 0!==e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:void 0!==e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:void 0!==e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:void 0===e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:void 0===e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,listenOnDomNode:void 0!==e.listenOnDomNode?e.listenOnDomNode:null,horizontal:void 0!==e.horizontal?e.horizontal:1,horizontalScrollbarSize:void 0!==e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:void 0!==e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:void 0!==e.horizontalHasArrows&&e.horizontalHasArrows,vertical:void 0!==e.vertical?e.vertical:1,verticalScrollbarSize:void 0!==e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:void 0!==e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:void 0!==e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:void 0!==e.scrollByPage&&e.scrollByPage};return t.horizontalSliderSize=void 0!==e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=void 0!==e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,v.isMac&&(t.className+=" xterm-mac"),t}(t),this._scrollable=s,this._register(this._scrollable.onScroll(e=>{this._handleScroll(e),this._onScroll.fire(e)})),r&&this._register(this._scrollable);const o={handleMouseWheel:e=>this._handleMouseWheel(e),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new d.VerticalScrollbar(this._scrollable,this._options,o)),this._horizontalScrollbar=this._register(new c.HorizontalScrollbar(this._scrollable,this._options,o)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,e=>this._handleMouseOver(e)),this._onmouseleave(this._listenOnDomNode,e=>this._handleMouseLeave(e)),this._hideTimeout=this._register(new u.TimeoutTimer),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,v.isMac&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){void 0!==e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),void 0!==e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),void 0!==e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),void 0!==e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),void 0!==e.horizontal&&(this._options.horizontal=e.horizontal),void 0!==e.vertical&&(this._options.vertical=e.vertical),void 0!==e.horizontalHasArrows&&(this._options.horizontalHasArrows=e.horizontalHasArrows),void 0!==e.verticalHasArrows&&(this._options.verticalHasArrows=e.verticalHasArrows),void 0!==e.horizontalScrollbarSize&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),void 0!==e.verticalScrollbarSize&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),void 0!==e.scrollByPage&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new l.StandardWheelEvent(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),e)){const e=e=>{this._handleMouseWheel(new l.StandardWheelEvent(e))};this._mouseWheelToDispose.push(a.addDisposableListener(this._listenOnDomNode,a.eventType.MOUSE_WHEEL,e,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;const t=S.INSTANCE;t.acceptStandardWheelEvent(e);let i=!1;if(e.deltaY||e.deltaX){let s=e.deltaY*this._options.mouseWheelScrollSensitivity,r=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&r+s===0?r=s=0:Math.abs(s)>=Math.abs(r)?r=0:s=0),this._options.flipAxes&&([s,r]=[r,s]);const o=!v.isMac&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!o||r||(r=s,s=0),e.browserEvent&&e.browserEvent.altKey&&(r*=this._options.fastScrollSensitivity,s*=this._options.fastScrollSensitivity);const n=this._scrollable.getFutureScrollPosition();let a={};if(s){const e=50*s,t=n.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(a,t)}if(r){const e=50*r,t=n.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(a,t)}a=this._scrollable.validateScrollPosition(a),(n.scrollLeft!==a.scrollLeft||n.scrollTop!==a.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),i=!0)}let s=i;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0,s=i?" xterm-shadow-left":"",r=t?" xterm-shadow-top":"",o=i||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${r}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${o}${r}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet(()=>this._hide(),500)}}t.SmoothScrollableElement=b},9594(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._arrowPointerDown(e))),this._register(c.addStandardDisposableListener(this.domNode,c.eventType.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new c.WindowIntervalTimer),this._pointerdownScheduleRepeatTimer=this._register(new l.TimeoutTimer)}_arrowPointerDown(e){e.target&&e.target instanceof Element&&(this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,c.getWindow(e))},200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),e.preventDefault())}}t.ScrollbarArrow=d},1270(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollbarState=void 0;class i{constructor(e,t,i,s,r,o){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=s,this._scrollSize=r,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new i(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setArrowSize(e){const t=Math.round(e);this._arrowSize!==t&&(this._arrowSize=t,this._refreshComputedValues())}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,i,s,r){const o=Math.max(0,i-e),n=Math.max(0,o-2*t),a=s>0&&s>i;if(!a)return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(n),computedSliderRatio:0,computedSliderPosition:0};const h=Math.round(Math.max(20,Math.floor(i*n/s))),l=(n-h)/(s-i),c=r*l;return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(h),computedSliderRatio:l,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){const e=i._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize;let i=this._scrollPosition;return t{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(e?" xterm-fade":"")))}}t.ScrollbarVisibilityController=o},2650(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{s||(s=!0,this._remove(i))}}_remove(e){if(e.prev!==_.Undefined&&e.next!==_.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===_.Undefined&&e.next===_.Undefined?(this._first=_.Undefined,this._last=_.Undefined):e.next===_.Undefined?(this._last=this._last.prev,this._last.next=_.Undefined):e.prev===_.Undefined&&(this._first=this._first.next,this._first.prev=_.Undefined)}*[Symbol.iterator](){let e=this._first;for(;e!==_.Undefined;)yield e.element,e=e.next}}var f;!function(e){e.TAP="-xterm-gesturetap",e.CHANGE="-xterm-gesturechange",e.START="-xterm-gesturestart",e.END="-xterm-gesturesend",e.CONTEXT_MENU="-xterm-gesturecontextmenu"}(f||(t.EventType=f={}));class p extends l.Disposable{constructor(){super(),this._dispatched=!1,this._targets=new u,this._ignoreTargets=new u,this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;const e=c;this._register(h.addDisposableListener(e.document,"touchstart",e=>this._handleTouchStart(e),{passive:!1})),this._register(h.addDisposableListener(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(h.addDisposableListener(e.document,"touchmove",e=>this._handleTouchMove(e),{passive:!1}))}static addTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._targets.push(e);return(0,l.toDisposable)(t)}static ignoreTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._ignoreTargets.push(e);return(0,l.toDisposable)(t)}static isTouchDevice(){return"ontouchstart"in c||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){const t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let i=0,s=e.targetTouches.length;i=p._holdDelay&&Math.abs(n.initialPageX-d(n.rollingPageX))<30&&Math.abs(n.initialPageY-d(n.rollingPageY))<30){const e=this._newGestureEvent(f.CONTEXT_MENU,n.initialTarget);e.pageX=d(n.rollingPageX),e.pageY=d(n.rollingPageY),this._dispatchEvent(e)}else if(1===s){const t=d(n.rollingPageX),s=d(n.rollingPageY),r=d(n.rollingTimestamps)-n.rollingTimestamps[0],o=t-n.rollingPageX[0],a=s-n.rollingPageY[0],h=[...this._targets].filter(e=>n.initialTarget instanceof Node&&e.contains(n.initialTarget));this._inertia(e,h,i,Math.abs(o)/r,o>0?1:-1,t,Math.abs(a)/r,a>0?1:-1,s)}this._dispatchEvent(this._newGestureEvent(f.END,n.initialTarget)),delete this._activeTouches[o.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){const i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}_dispatchEvent(e){if(e.type===f.TAP){const t=(new Date).getTime();let i;i=t-this._lastSetTapCountTime>p._clearTapCountTime?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==f.CHANGE&&e.type!==f.CONTEXT_MENU||(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(const t of this._ignoreTargets)if(t.contains(e.initialTarget))return;const t=[];for(const i of this._targets)if(i.contains(e.initialTarget)){let s=0,r=e.initialTarget;for(;r&&r!==i;)s++,r=r.parentElement;t.push([s,i])}t.sort((e,t)=>e[0]-t[0]);for(const[,i]of t)i.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,i,s,r,o,n,a,l){this._handle=h.scheduleAtNextAnimationFrame(e,()=>{const h=Date.now(),c=h-i;let d=0,_=0,u=!0;s+=p._scrollFriction*c,n+=p._scrollFriction*c,s>0&&(u=!1,d=r*s*c),n>0&&(u=!1,_=a*n*c);const v=this._newGestureEvent(f.CHANGE);v.translationX=d,v.translationY=_,t.forEach(e=>e.dispatchEvent(v)),u||this._inertia(e,t,h,s,r,o+d,n,a,l+_)})}_handleTouchMove(e){const t=Date.now();for(let i=0,s=e.changedTouches.length;i3&&(r.rollingPageX.shift(),r.rollingPageY.shift(),r.rollingTimestamps.shift()),r.rollingPageX.push(s.pageX),r.rollingPageY.push(s.pageY),r.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}}t.Gesture=p,p._scrollFriction=-.005,p._holdDelay=700,p._clearTapCountTime=400,n([function(e,t,i){let s=null,r=null;if("function"==typeof i.value?(s="value",r=i.value,0!==r.length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"==typeof i.get&&(s="get",r=i.get),!r||!s)throw new Error("not supported");const o=`$memoize$${t}`;i[s]=function(...e){return this.hasOwnProperty(o)||Object.defineProperty(this,o,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,e)}),this[o]}}],p,"isTouchDevice",null)},8997(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.VerticalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition(),n=t.verticalHasArrows;super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(n?t.verticalScrollbarSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,s.height,s.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"xterm-vertical",scrollable:e,scrollByPage:t.scrollByPage}),this._arrowScrollDelta=0,this._setArrows(n,t.verticalScrollbarSize),this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._handleElementSize(e.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return t}_sliderPointerPosition(e){return e.pageY}_sliderOrthogonalPointerPosition(e){return e.pageX}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}_arrowScroll(e){const t=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollTop:t.scrollTop+e})}_setArrows(e,t){if(this._arrowScrollDelta=t,!this._arrowUp||!this._arrowDown){const e=0;this._arrowUp=this._createArrow({className:"xterm-scra xterm-arrow-up",top:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})}if(this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;const i=e?"":"none";this._arrowUp.bgDomNode.style.display=i,this._arrowUp.domNode.style.display=i,this._arrowDown.bgDomNode.style.display=i,this._arrowDown.domNode.style.display=i}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){const t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}}t.VerticalScrollbar=o},7741(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nt(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseover(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_OVER,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseleave(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_LEAVE,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}}t.Widget=c},5959(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):!!(this.selectionStart&&this.selectionStart[1]<0)&&(this.selectionStart=[0,0],!0)}}},4792(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;const o=i(6501),n=i(4812),a=i(8636);let h=class extends n.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,i){super(),this._optionsService=i,this.width=0,this.height=0,this._onCharSizeChange=this._register(new a.Emitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new d(this._optionsService))}catch{this._measureStrategy=this._register(new c(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=h,t.CharSizeService=h=s([r(2,o.IOptionsService)],h);class l extends n.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){void 0!==e&&e>0&&void 0!==t&&t>0&&(this._result.width=e,this._result.height=t)}}class c extends l{constructor(e,t,i){super(),this._document=e,this._parentElement=t,this._optionsService=i,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends l{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");const t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},945(e,t,i){var s,r=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},o=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;const n=i(5451),a=i(8938),h=i(3055),l=i(6501);class c extends n.AttributeData{constructor(e,t,i){super(),this.content=0,this.combinedData="",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=c;let d=s=class{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new h.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;tthis._screenDprMonitor.setWindow(e))),this._register(s.EventUtils.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register((0,r.addDisposableListener)(this._textarea,"focus",()=>this._isFocused=!0)),this._register((0,r.addDisposableListener)(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return void 0===this._cachedIsFocused&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}}t.CoreBrowserService=n;class a extends o.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this._register(new o.MutableDisposable),this._onDprChange=this._register(new s.Emitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register((0,o.toDisposable)(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,r.addDisposableListener)(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},2136(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.KeyboardService=void 0;const o=i(706),n=i(7241),a=i(9249),h=i(701),l=i(6501);let c=class{constructor(e,t){this._coreService=e,this._optionsService=t}_getWin32InputMode(){return this._win32InputMode??=new a.Win32InputMode,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new n.KittyKeyboard,this._kittyKeyboard}evaluateKeyDown(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!0);const t=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(e,t,e.repeat?2:1,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):(0,o.evaluateKeyboardEvent)(e,this._coreService.decPrivateModes.applicationCursorKeys,h.isMac,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!1);const t=this._coreService.kittyKeyboard.flags;return this.useKitty&&2&t?this._getKittyKeyboard().evaluate(e,t,3,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):void 0}get useKitty(){const e=this._coreService.kittyKeyboard.flags;return!(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard||!n.KittyKeyboard.shouldUseProtocol(e))}get useWin32InputMode(){return!(!this._optionsService.rawOptions.vtExtensions?.win32InputMode||!this._coreService.decPrivateModes.win32InputMode)}};t.KeyboardService=c,t.KeyboardService=c=s([r(0,l.ICoreService),r(1,l.IOptionsService)],c)},9820(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.LinkProviderService=void 0;const s=i(4812);class r extends s.Disposable{constructor(){super(),this.linkProviders=[],this._register((0,s.toDisposable)(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{const t=this.linkProviders.indexOf(e);-1!==t&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=r},8294(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseCoordsService=void 0;const o=i(4159),n=i(5251),a=i(7098);let h=class{constructor(e,t){this._charSizeService=e,this._renderService=t}getCoords(e,t,i,s,r){return(0,n.getCoords)((0,o.getWindow)(t),e,t,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,r)}getMouseReportCoords(e,t){const i=(0,n.getCoordsRelativeToElement)((0,o.getWindow)(t),e,t);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};t.MouseCoordsService=h,t.MouseCoordsService=h=s([r(0,a.ICharSizeService),r(1,a.IRenderService)],h)},9784(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.AltMouseCursorController=t.MouseService=void 0;const o=i(4159),n=i(6501),a=i(4812),h=i(7098),l=i(2650);let c=class{constructor(e,t,i,s,r,o,n,a,h){this._renderService=e,this._mouseCoordsService=t,this._mouseStateService=i,this._coreService=s,this._bufferService=r,this._optionsService=o,this._selectionService=n,this._logService=a,this._coreBrowserService=h,this._lastEvent=null,this._wheelPartialScroll=0,this._touchScrollAccumulator=0}bindMouse(e,t,i){const{element:s,document:r}=e,n=new a.MutableDisposable,h=new a.MutableDisposable;t(n),t(h);const c={target:e,focus:i,requestedEvents:{mouseup:null,wheel:null,mousedrag:null,mousemove:null},mouseupListener:n,mousedragListener:h},_={mouseup:e=>this._handleMouseUp(c,e),wheel:e=>this._handleWheel(c,e),mousedrag:e=>this._handleMouseDrag(c,e),mousemove:e=>this._handleMouseMove(c,e)};this._altMouseCursor=new d(s,r,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),t(this._altMouseCursor),t(this._mouseStateService.onProtocolChange(e=>{this._handleProtocolChange(c,_,e)})),t(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(s),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,t((0,o.addDisposableListener)(s,"mousedown",e=>this._handleMouseDown(c,e))),t((0,o.addDisposableListener)(s,"wheel",e=>this._handlePassiveWheel(c,e),{passive:!1})),t(l.Gesture.addTarget(e.screenElement)),t((0,o.addDisposableListener)(e.screenElement,l.EventType.START,()=>this._handleTouchStart())),t((0,o.addDisposableListener)(e.screenElement,l.EventType.CHANGE,e=>this._handleTouchChange(c,e)))}_sendEvent(e,t){const i=this._mouseCoordsService.getMouseReportCoords(t,e.target.screenElement);if(!i)return!1;let s,r;switch(t.overrideType||t.type){case"mousemove":r=32,void 0===t.buttons?(s=3,void 0!==t.button&&(s=t.button<3?t.button:3)):s=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case"mouseup":r=0,s=t.button<3?t.button:3;break;case"mousedown":r=1,s=t.button<3?t.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;const e=t.deltaY;if(0===e)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return!1;r=e<0?0:1,s=4;break;default:return!1}if(void 0===r||void 0===s||s>4)return!1;if(4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!t.altKey)return!1;const o=4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:i.col,row:i.row,x:i.x,y:i.y,button:s,action:r,ctrl:t.ctrlKey,alt:!o&&t.altKey,shift:t.shiftKey})}_handleMouseUp(e,t){this._sendEvent(e,t),t.buttons||(e.mouseupListener.clear(),e.mousedragListener.clear())}_handleWheel(e,t){return this._sendEvent(e,t),t.preventDefault(),t.stopPropagation(),!1}_handleMouseDrag(e,t){t.buttons&&this._sendEvent(e,t)}_handleMouseMove(e,t){t.buttons||this._sendEvent(e,t)}_handleMouseDown(e,t){if(t.preventDefault(),e.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(t))return;this._sendEvent(e,t);const{element:i,document:s}=e.target,r=i.ownerDocument??s;e.requestedEvents.mouseup&&(e.mouseupListener.value=(0,o.addDisposableListener)(r,"mouseup",e.requestedEvents.mouseup)),e.requestedEvents.mousedrag&&(e.mousedragListener.value=(0,o.addDisposableListener)(r,"mousemove",e.requestedEvents.mousedrag))}_handlePassiveWheel(e,t){if(!e.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;if(!this._bufferService.buffer.hasScrollback){if(0===t.deltaY)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return t.preventDefault(),t.stopPropagation(),!1;const e=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(e,!0),t.preventDefault(),t.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(e,t){t.preventDefault(),t.stopPropagation(),e.requestedEvents.wheel?this._handleTouchScrollAsWheel(e,t):this._bufferService.buffer.hasScrollback?e.target.handleTouchScroll?.(t.translationY):this._handleTouchScrollAsKeys(t)}_handleTouchScrollAsKeys(e){const t=this._renderService?.dimensions.css.cell.height;if(!t)return;this._touchScrollAccumulator-=e.translationY;const i=Math.trunc(this._touchScrollAccumulator/t);if(0===i)return;this._touchScrollAccumulator-=i*t;const s=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(i<0?"A":"B");for(let e=0;e0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(r*=this._bufferService.rows),r}_triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._mouseStateService.isPixelEncoding))return!1;if(!this._mouseStateService.restrictMouseEvent(e))return!1;const t=this._mouseStateService.encodeMouseEvent(e);return t&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}_explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.MouseService=c,t.MouseService=c=s([r(0,h.IRenderService),r(1,h.IMouseCoordsService),r(2,n.IMouseStateService),r(3,n.ICoreService),r(4,n.IBufferService),r(5,n.IOptionsService),r(6,h.ISelectionService),r(7,n.ILogService),r(8,h.ICoreBrowserService)],c);class d{constructor(e,t,i){this._element=e,this._document=t,this._isActive=i,this._listeners=new a.MutableDisposable}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;const e=new a.DisposableStore,t=e=>this.syncFromModifier(e);e.add((0,o.addDisposableListener)(this._document,"keydown",t)),e.add((0,o.addDisposableListener)(this._document,"keyup",t)),e.add((0,o.addDisposableListener)(this._element,"mousemove",t));const i=this._element.ownerDocument?.defaultView;i&&e.add((0,o.addDisposableListener)(i,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=e}resetClass(){this._updateClass(!1)}syncFromModifier(e){this._isActive()&&this._updateClass(e.getModifierState("Alt"))}_updateClass(e){e?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}}t.AltMouseCursorController=d},5783(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;const o=i(4852),n=i(7098),a=i(4812),h=i(6168),l=i(6501),c=i(8636);let d=class extends a.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,i,s,r,n,l,d,u,f){super(),this._rowCount=e,this._optionsService=i,this._logService=s,this._charSizeService=r,this._coreService=n,this._coreBrowserService=u,this._renderer=this._register(new a.MutableDisposable),this._observerDisposable=this._register(new a.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this._register(new c.Emitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this._register(new c.Emitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this._register(new c.Emitter),this.onRender=this._onRender.event,this._onRefreshRequest=this._register(new c.Emitter),this.onRefreshRequest=this._onRefreshRequest.event,this._pausedResizeTask=this._register(new h.DebouncedIdleTask(this._logService)),this._renderDebouncer=new o.RenderDebouncer((e,t)=>this._renderRows(e,t),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new _(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register((0,a.toDisposable)(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(d.onResize(()=>this._fullRefresh())),this._register(d.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(d.cols,d.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(d.buffer.y,d.buffer.y,void 0,!0))),this._register(f.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(e=>this._registerIntersectionObserver(e,t)))}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){const i=new e.IntersectionObserver(e=>this._handleIntersectionChange(e[e.length-1]),{threshold:0});this._observerDisposable.value=(0,a.toDisposable)(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=i,i.observe(t)}}_handleIntersectionChange(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,i=!1,s=!1){if(this._isPaused)return void(this._needsFullRefresh=!0);if(this._coreService.decPrivateModes.synchronizedOutput)return void this._syncOutputHandler.bufferRows(e,t);const r=this._syncOutputHandler.flush();r&&(e=Math.min(e,r.start),t=Math.max(t,r.end)),s||(this._isNextRenderRedrawOnly=!1),i?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){this._renderer.value&&(this._coreService.decPrivateModes.synchronizedOutput?this._syncOutputHandler.bufferRows(e,t):(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0))}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(e=>this.refreshRows(e.start,e.end,e.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,i){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=i,this._renderer.value?.handleSelectionChanged(e,t,i)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d,t.RenderService=d=s([r(2,l.IOptionsService),r(3,l.ILogService),r(4,n.ICharSizeService),r(5,l.ICoreService),r(6,l.IDecorationService),r(7,l.IBufferService),r(8,n.ICoreBrowserService),r(9,n.IThemeService)],d);class _{constructor(e,t,i){this._coreBrowserService=e,this._coreService=t,this._onTimeout=i,this._start=0,this._end=0,this._isBuffering=!1}bufferRows(e,t){this._isBuffering?(this._start=Math.min(this._start,e),this._end=Math.max(this._end,t)):(this._start=e,this._end=t,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;const e={start:this._start,end:this._end};return this._isBuffering=!1,e}dispose(){void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}}},2079(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(e=>this._handleTrim(e)),this._register(this._bufferService.buffers.onBufferActivate(e=>this._handleBufferActivate(e))),this.enable(),this._model=new d.SelectionModel(this._bufferService),this._activeSelectionMode=0,this._register((0,u.toDisposable)(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(e=>{e.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";const i=this._bufferService.buffer,s=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";const r=e[0]e.replace(b," ")).join(f.isWindows?"\r\n":"\n")}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),f.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})}_isClickInSelection(e){const t=this._getMouseBufferCoords(e),i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!!(i&&s&&t)&&this._areCoordsInSelection(t,i,s)}isCellInSelection(e,t){const i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!(!i||!s)&&this._areCoordsInSelection([e,t],i,s)}_areCoordsInSelection(e,t,i){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){const i=this._linkifier.currentLink?.link?.range;if(i)return this._model.selectionStart=[i.start.x-1,i.start.y-1],this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const s=this._getMouseBufferCoords(e);return!!s&&(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){const t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=(0,l.getCoordsRelativeToElement)(this._coreBrowserService.window,e,this._screenElement)[1];const i=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=i?0:(t>i&&(t-=i),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(14*t))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:f.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(2===e.button&&this.hasSelection||0!==e.button||this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):1===e.detail?this._handleSingleClick(e):2===e.detail?this._handleDoubleClick(e):3===e.detail&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){const t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);const i=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);i&&i.length!==this._model.selectionStart[0]&&0===i.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){const t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return(!this._optionsService.rawOptions.mouseEventsRequireAlt||!this._mouseStateService.areMouseEventsActive)&&e.altKey&&!(f.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;const t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd)return void this.refresh(!0);2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const i=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){const t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const t=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(t&&void 0!==t[0]&&void 0!==t[1]){const e=(0,c.moveToCellSequence)(t[0]-1,t[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(e,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,i=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);i?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,i)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,i)}_fireOnSelectionChange(e,t,i){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=i,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(e=>this._handleTrim(e))}_convertViewportColToCharacterIndex(e,t){let i=t;for(let s=0;t>=s;s++){const r=e.loadCell(s,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:r>1&&t!==s&&(i+=r-1)}return i}setSelection(e,t,i){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=i,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,i=!0,s=!0){if(e[0]>=this._bufferService.cols)return;const r=this._bufferService.buffer,o=r.lines.get(e[1]);if(!o)return;const n=r.translateBufferLineToString(e[1],!1);let a=this._convertViewportColToCharacterIndex(o,e[0]),h=a;const l=e[0]-a;let c=0,d=0,_=0,u=0;if(" "===n.charAt(a)){for(;a>0&&" "===n.charAt(a-1);)a--;for(;h1&&(u+=s-1,h+=s-1);t>0&&a>0&&!this._isCharWordSeparator(o.loadCell(t-1,this._workCell));){o.loadCell(t-1,this._workCell);const e=this._workCell.getChars().length;0===this._workCell.getWidth()?(c++,t--):e>1&&(_+=e-1,a-=e-1),a--,t--}for(;i1&&(u+=e-1,h+=e-1),h++,i++}}h++;let f=a+l-c+_,p=Math.min(this._bufferService.cols,h-a+c+d-_-u);if(t||""!==n.slice(a,h).trim()){if(i&&0===f&&32!==o.getCodePoint(0)){const t=r.lines.get(e[1]-1);if(t&&o.isWrapped&&32!==t.getCodePoint(this._bufferService.cols-1)){const t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){const e=this._bufferService.cols-t.start;f-=e,p+=e}}}if(s&&f+p===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){const t=r.lines.get(e[1]+1);if(t?.isWrapped&&32!==t.getCodePoint(0)){const t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(p+=t.length)}}return{start:f,length:p}}}_selectWordAt(e,t){const i=this._getWordAt(e,t);if(i){for(;i.start<0;)i.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[i.start,e[1]],this._model.selectionStartLength=i.length}}_selectToWordAt(e){const t=this._getWordAt(e,!0);if(t){let i=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,i--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}}_isCharWordSeparator(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){const t=this._bufferService.buffer.getWrappedRangeForLine(e),i={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols)}};t.SelectionService=w,t.SelectionService=w=n([h(3,g.IBufferService),h(4,g.ICoreService),h(5,_.IMouseCoordsService),h(6,g.IOptionsService),h(7,g.IMouseStateService),h(8,_.IRenderService),h(9,_.ICoreBrowserService)],w)},7098(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IKeyboardService=t.ILinkProviderService=t.IThemeService=t.ICharacterJoinerService=t.ISelectionService=t.IRenderService=t.IMouseService=t.IMouseCoordsService=t.ICoreBrowserService=t.ICharSizeService=void 0;const s=i(6201);t.ICharSizeService=(0,s.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,s.createDecorator)("CoreBrowserService"),t.IMouseCoordsService=(0,s.createDecorator)("MouseCoordsService"),t.IMouseService=(0,s.createDecorator)("MouseService"),t.IRenderService=(0,s.createDecorator)("RenderService"),t.ISelectionService=(0,s.createDecorator)("SelectionService"),t.ICharacterJoinerService=(0,s.createDecorator)("CharacterJoinerService"),t.IThemeService=(0,s.createDecorator)("ThemeService"),t.ILinkProviderService=(0,s.createDecorator)("LinkProviderService"),t.IKeyboardService=(0,s.createDecorator)("KeyboardService")},9078(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.ThemeService=void 0;const o=i(7174),n=i(9302),a=i(4103),h=i(4812),l=i(6501),c=i(8636),d=a.css.toColor("#ffffff"),_=a.css.toColor("#000000"),u=a.css.toColor("#ffffff"),f=_,p={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},v=d;let g=class extends h.Disposable{get colors(){return this._colors}constructor(e){super(),this._optionsService=e,this._contrastCache=new o.ColorContrastCache,this._halfContrastCache=new o.ColorContrastCache,this._onChangeColors=this._register(new c.Emitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:d,background:_,cursor:u,cursorAccent:f,selectionForeground:void 0,selectionBackgroundTransparent:p,selectionBackgroundOpaque:a.color.blend(_,p),selectionInactiveBackgroundTransparent:p,selectionInactiveBackgroundOpaque:a.color.blend(_,p),scrollbarSliderBackground:a.color.opacity(d,.2),scrollbarSliderHoverBackground:a.color.opacity(d,.4),scrollbarSliderActiveBackground:a.color.opacity(d,.5),overviewRulerBorder:d,ansi:n.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}_setTheme(e={}){const t=this._colors;if(t.foreground=m(e.foreground,d),t.background=m(e.background,_),t.cursor=a.color.blend(t.background,m(e.cursor,u)),t.cursorAccent=a.color.blend(t.background,m(e.cursorAccent,f)),t.selectionBackgroundTransparent=m(e.selectionBackground,p),t.selectionBackgroundOpaque=a.color.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=m(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=a.color.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?m(e.selectionForeground,a.NULL_COLOR):void 0,t.selectionForeground===a.NULL_COLOR&&(t.selectionForeground=void 0),a.color.isOpaque(t.selectionBackgroundTransparent)){const e=.3;t.selectionBackgroundTransparent=a.color.opacity(t.selectionBackgroundTransparent,e)}if(a.color.isOpaque(t.selectionInactiveBackgroundTransparent)){const e=.3;t.selectionInactiveBackgroundTransparent=a.color.opacity(t.selectionInactiveBackgroundTransparent,e)}if(t.scrollbarSliderBackground=m(e.scrollbarSliderBackground,a.color.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=m(e.scrollbarSliderHoverBackground,a.color.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=m(e.scrollbarSliderActiveBackground,a.color.opacity(t.foreground,.5)),t.overviewRulerBorder=m(e.overviewRulerBorder,v),t.ansi=n.DEFAULT_ANSI_COLORS.slice(),t.ansi[0]=m(e.black,n.DEFAULT_ANSI_COLORS[0]),t.ansi[1]=m(e.red,n.DEFAULT_ANSI_COLORS[1]),t.ansi[2]=m(e.green,n.DEFAULT_ANSI_COLORS[2]),t.ansi[3]=m(e.yellow,n.DEFAULT_ANSI_COLORS[3]),t.ansi[4]=m(e.blue,n.DEFAULT_ANSI_COLORS[4]),t.ansi[5]=m(e.magenta,n.DEFAULT_ANSI_COLORS[5]),t.ansi[6]=m(e.cyan,n.DEFAULT_ANSI_COLORS[6]),t.ansi[7]=m(e.white,n.DEFAULT_ANSI_COLORS[7]),t.ansi[8]=m(e.brightBlack,n.DEFAULT_ANSI_COLORS[8]),t.ansi[9]=m(e.brightRed,n.DEFAULT_ANSI_COLORS[9]),t.ansi[10]=m(e.brightGreen,n.DEFAULT_ANSI_COLORS[10]),t.ansi[11]=m(e.brightYellow,n.DEFAULT_ANSI_COLORS[11]),t.ansi[12]=m(e.brightBlue,n.DEFAULT_ANSI_COLORS[12]),t.ansi[13]=m(e.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),t.ansi[14]=m(e.brightCyan,n.DEFAULT_ANSI_COLORS[14]),t.ansi[15]=m(e.brightWhite,n.DEFAULT_ANSI_COLORS[15]),e.extendedAnsi){const i=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;ssetTimeout(t,e))},t.disposableTimeout=function(e,t=0,i){const r=setTimeout(()=>{e(),i&&o.dispose()},t),o=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(o),o};const s=i(4812);t.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}},t.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(e){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,e())}))}},t.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(e,t,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{e()},t);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},5639(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;const s=i(4812),r=i(8636);class o extends s.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this._register(new r.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new r.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new r.Emitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;ithis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+i<0)throw new Error("Cannot shift elements in list beyond index 0");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>>0},e.toColor=function(t,i,s,r){return{css:e.toCss(t,i,s,r),rgba:e.toRgba(t,i,s,r)}}}(n||(t.channels=n={})),function(e){function t(e,t){return o=Math.round(255*t),[i,s,r]=c.toChannels(e.rgba),{css:n.toCss(i,s,r,o),rgba:n.toRgba(i,s,r,o)}}e.blend=function(e,t){if(o=(255&t.rgba)/255,1===o)return{css:t.css,rgba:t.rgba};const a=t.rgba>>24&255,h=t.rgba>>16&255,l=t.rgba>>8&255,c=e.rgba>>24&255,d=e.rgba>>16&255,_=e.rgba>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),{css:n.toCss(i,s,r),rgba:n.toRgba(i,s,r)}},e.isOpaque=function(e){return!(255&~e.rgba)},e.ensureContrastRatio=function(e,t,i){const s=c.ensureContrastRatio(e.rgba,t.rgba,i);if(s)return n.toColor(s>>24&255,s>>16&255,s>>8&255)},e.opaque=function(e){const t=(255|e.rgba)>>>0;return[i,s,r]=c.toChannels(t),{css:n.toCss(i,s,r),rgba:t}},e.opacity=t,e.multiplyOpacity=function(e,i){return o=255&e.rgba,t(e,o*i/255)},e.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}}(a||(t.color=a={})),function(e){let t,a;try{const e=document.createElement("canvas");e.width=1,e.height=1;const i=e.getContext("2d",{willReadFrequently:!0});i&&(t=i,t.globalCompositeOperation="copy",a=t.createLinearGradient(0,0,1,1))}catch{}e.toColor=function(e){if(e.match(/#[\da-f]{3,8}/i))switch(e.length){case 4:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),n.toColor(i,s,r);case 5:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),o=parseInt(e.slice(4,5).repeat(2),16),n.toColor(i,s,r,o);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}const h=e.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),o=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),n.toColor(i,s,r,o);if("transparent"===e)return{css:"transparent",rgba:0};if(!t||!a)throw new Error("css.toColor: Unsupported css format");if(t.fillStyle=a,t.fillStyle=e,"string"!=typeof t.fillStyle)throw new Error("css.toColor: Unsupported css format");if(t.fillRect(0,0,1,1),[i,s,r,o]=t.getImageData(0,0,1,1).data,255!==o)throw new Error("css.toColor: Unsupported css format");return{rgba:n.toRgba(i,s,r,o),css:e}}}(h||(t.css=h={})),function(e){function t(e,t,i){const s=e/255,r=t/255,o=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(l||(t.rgb=l={})),function(e){function t(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c0||a>0||h>0);)n-=Math.max(0,Math.ceil(.1*n)),a-=Math.max(0,Math.ceil(.1*a)),h-=Math.max(0,Math.ceil(.1*h)),c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));return(n<<24|a<<16|h<<8|255)>>>0}function a(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c>>0}e.blend=function(e,t){if(o=(255&t)/255,1===o)return t;const a=t>>24&255,h=t>>16&255,l=t>>8&255,c=e>>24&255,d=e>>16&255,_=e>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),n.toRgba(i,s,r)},e.ensureContrastRatio=function(e,i,s){const r=l.relativeLuminance(e>>8),o=l.relativeLuminance(i>>8);if(_(r,o)>8));if(n_(r,l.relativeLuminance(t>>8))?o:t}return o}const n=a(e,i,s),h=_(r,l.relativeLuminance(n>>8));if(h_(r,l.relativeLuminance(o>>8))?n:o}return n}},e.reduceLuminance=t,e.increaseLuminance=a,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}}(c||(t.rgba=c={}))},5777(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;const s=i(6501),r=i(6025),o=i(7276),n=i(9640),a=i(56),h=i(4071),l=i(6478),c=i(7428),d=i(6415),_=i(5746),u=i(5882),f=i(2486),p=i(3562),v=i(8811),g=i(8636),m=i(4812);let S=!1;class b extends m.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new g.Emitter),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this._register(new m.MutableDisposable),this._onBinary=this._register(new g.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new g.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new g.Emitter),this.onLineFeed=this._onLineFeed.event,this._onRender=this._register(new g.Emitter),this.onRender=this._onRender.event,this._onResize=this._register(new g.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new g.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new g.Emitter),this._instantiationService=new r.InstantiationService,this.optionsService=this._register(new a.OptionsService(e)),this._instantiationService.setService(s.IOptionsService,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(s.ILogService,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(n.BufferService)),this._instantiationService.setService(s.IBufferService,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(h.CoreService)),this._instantiationService.setService(s.ICoreService,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(l.MouseStateService)),this._instantiationService.setService(s.IMouseStateService,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(d.UnicodeService)),this.unicodeService.register(new c.UnicodeV6),this._instantiationService.setService(s.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(_.CharsetService),this._instantiationService.setService(s.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(v.OscLinkService),this._instantiationService.setService(s.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new f.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(g.EventUtils.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(g.EventUtils.forward(this._bufferService.onResize,this._onResize)),this._register(g.EventUtils.forward(this.coreService.onData,this._onData)),this._register(g.EventUtils.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new p.WriteBuffer((e,t)=>this._inputHandler.parse(e,t))),this._register(g.EventUtils.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.backend&&void 0!==t.buildNumber&&(e=!!("conpty"===t.backend&&t.buildNumber<21376)),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(u.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>((0,u.updateWindowsModeWrappedState)(this._bufferService),!1))),this._windowsWrappingHeuristics.value=(0,m.toDisposable)(()=>{for(const t of e)t.dispose()})}}}t.CoreTerminal=b},8636(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EventUtils=t.Emitter=void 0;const s=i(4812);var r;t.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(e,t,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(r);const o=(0,s.toDisposable)(()=>{const e=this._listeners.indexOf(r);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(o):i.add(o)),o}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,s=t.length;it.fire(e))},e.map=function(e,t){return(i,s,r)=>e(e=>i.call(s,t(e)),void 0,r)},e.any=function(...e){return(t,i,r)=>{const o=new s.DisposableStore;for(const s of e)o.add(s(e=>t.call(i,e)));return r&&(Array.isArray(r)?r.push(o):r.add(o)),o}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(r||(t.EventUtils=r={}))},2486(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0,t.isValidColorIndex=x;const o=i(6760),n=i(6717),a=i(4812),h=i(726),l=i(6107),c=i(8938),d=i(3055),_=i(5451),u=i(6501),f=i(6415),p=i(1346),v=i(9823),g=i(2607),m=i(8693),S=i(8636),b=i(7804),w={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function y(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var C;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(C||(t.WindowsOptionsReportType=C={}));let k=0;class D extends a.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,a,c,d,_=new n.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=a,this._mouseStateService=c,this._unicodeService=d,this._parser=_,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new h.StringToUtf32,this._utf8Decoder=new h.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new S.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new S.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new S.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new S.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new S.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new S.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new S.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new S.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new S.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new S.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new S.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new S.Emitter),this.onColor=this._onColor.event,this._onRequestColorSchemeQuery=this._register(new S.Emitter),this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new E(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(e=>this._activeBuffer=e.activeBuffer)),this._parser.setCsiHandlerFallback((e,t)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(e),params:t.toArray()})}),this._parser.setEscHandlerFallback(e=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(e)})}),this._parser.setExecuteHandlerFallback(e=>{this._logService.debug("Unknown EXECUTE code: ",{code:e})}),this._parser.setOscHandlerFallback((e,t,i)=>{this._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:i})}),this._parser.setDcsHandlerFallback((e,t,i)=>{"HOOK"===t&&(i=i.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setApcHandlerFallback((e,t,i)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setPrintHandler((e,t,i)=>this.print(e,t,i)),this._parser.registerCsiHandler({final:"@"},e=>this.insertChars(e)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},e=>this.scrollLeft(e)),this._parser.registerCsiHandler({final:"A"},e=>this.cursorUp(e)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},e=>this.scrollRight(e)),this._parser.registerCsiHandler({final:"B"},e=>this.cursorDown(e)),this._parser.registerCsiHandler({final:"C"},e=>this.cursorForward(e)),this._parser.registerCsiHandler({final:"D"},e=>this.cursorBackward(e)),this._parser.registerCsiHandler({final:"E"},e=>this.cursorNextLine(e)),this._parser.registerCsiHandler({final:"F"},e=>this.cursorPrecedingLine(e)),this._parser.registerCsiHandler({final:"G"},e=>this.cursorCharAbsolute(e)),this._parser.registerCsiHandler({final:"H"},e=>this.cursorPosition(e)),this._parser.registerCsiHandler({final:"I"},e=>this.cursorForwardTab(e)),this._parser.registerCsiHandler({final:"J"},e=>this.eraseInDisplay(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},e=>this.eraseInDisplay(e,!0)),this._parser.registerCsiHandler({final:"K"},e=>this.eraseInLine(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},e=>this.eraseInLine(e,!0)),this._parser.registerCsiHandler({final:"L"},e=>this.insertLines(e)),this._parser.registerCsiHandler({final:"M"},e=>this.deleteLines(e)),this._parser.registerCsiHandler({final:"P"},e=>this.deleteChars(e)),this._parser.registerCsiHandler({final:"S"},e=>this.scrollUp(e)),this._parser.registerCsiHandler({final:"T"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"X"},e=>this.eraseChars(e)),this._parser.registerCsiHandler({final:"Z"},e=>this.cursorBackwardTab(e)),this._parser.registerCsiHandler({final:"^"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"`"},e=>this.charPosAbsolute(e)),this._parser.registerCsiHandler({final:"a"},e=>this.hPositionRelative(e)),this._parser.registerCsiHandler({final:"b"},e=>this.repeatPrecedingCharacter(e)),this._parser.registerCsiHandler({final:"c"},e=>this.sendDeviceAttributesPrimary(e)),this._parser.registerCsiHandler({prefix:">",final:"c"},e=>this.sendDeviceAttributesSecondary(e)),this._parser.registerCsiHandler({final:"d"},e=>this.linePosAbsolute(e)),this._parser.registerCsiHandler({final:"e"},e=>this.vPositionRelative(e)),this._parser.registerCsiHandler({final:"f"},e=>this.hVPosition(e)),this._parser.registerCsiHandler({final:"g"},e=>this.tabClear(e)),this._parser.registerCsiHandler({final:"h"},e=>this.setMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"h"},e=>this.setModePrivate(e)),this._parser.registerCsiHandler({final:"l"},e=>this.resetMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"l"},e=>this.resetModePrivate(e)),this._parser.registerCsiHandler({final:"m"},e=>this.charAttributes(e)),this._parser.registerCsiHandler({final:"n"},e=>this.deviceStatus(e)),this._parser.registerCsiHandler({prefix:"?",final:"n"},e=>this.deviceStatusPrivate(e)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},e=>this.softReset(e)),this._parser.registerCsiHandler({prefix:">",final:"q"},e=>this.sendXtVersion(e)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},e=>this.setCursorStyle(e)),this._parser.registerCsiHandler({final:"r"},e=>this.setScrollRegion(e)),this._parser.registerCsiHandler({final:"s"},e=>this.saveCursor(e)),this._parser.registerCsiHandler({final:"t"},e=>this.windowOptions(e)),this._parser.registerCsiHandler({final:"u"},e=>this.restoreCursor(e)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},e=>this.insertColumns(e)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},e=>this.deleteColumns(e)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},e=>this.selectProtected(e)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},e=>this.requestMode(e,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},e=>this.requestMode(e,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},e=>this.kittyKeyboardSet(e)),this._parser.registerCsiHandler({prefix:"?",final:"u"},e=>this.kittyKeyboardQuery(e)),this._parser.registerCsiHandler({prefix:">",final:"u"},e=>this.kittyKeyboardPush(e)),this._parser.registerCsiHandler({prefix:"<",final:"u"},e=>this.kittyKeyboardPop(e)),this._parser.setExecuteHandler("",()=>this.bell()),this._parser.setExecuteHandler("\n",()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler("\t",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("„",()=>this.index()),this._parser.setExecuteHandler("…",()=>this.nextLine()),this._parser.setExecuteHandler("ˆ",()=>this.tabSet()),this._parser.registerOscHandler(0,new p.OscHandler(e=>(this.setTitle(e),this.setIconName(e),!0))),this._parser.registerOscHandler(1,new p.OscHandler(e=>this.setIconName(e))),this._parser.registerOscHandler(2,new p.OscHandler(e=>this.setTitle(e))),this._parser.registerOscHandler(4,new p.OscHandler(e=>this.setOrReportIndexedColor(e))),this._parser.registerOscHandler(8,new p.OscHandler(e=>this.setHyperlink(e))),this._parser.registerOscHandler(10,new p.OscHandler(e=>this.setOrReportFgColor(e))),this._parser.registerOscHandler(11,new p.OscHandler(e=>this.setOrReportBgColor(e))),this._parser.registerOscHandler(12,new p.OscHandler(e=>this.setOrReportCursorColor(e))),this._parser.registerOscHandler(104,new p.OscHandler(e=>this.restoreIndexedColor(e))),this._parser.registerOscHandler(110,new p.OscHandler(e=>this.restoreFgColor(e))),this._parser.registerOscHandler(111,new p.OscHandler(e=>this.restoreBgColor(e))),this._parser.registerOscHandler(112,new p.OscHandler(e=>this.restoreCursorColor(e))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(const e in o.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:e},()=>this.selectCharset("("+e)),this._parser.registerEscHandler({intermediates:")",final:e},()=>this.selectCharset(")"+e)),this._parser.registerEscHandler({intermediates:"*",final:e},()=>this.selectCharset("*"+e)),this._parser.registerEscHandler({intermediates:"+",final:e},()=>this.selectCharset("+"+e)),this._parser.registerEscHandler({intermediates:"-",final:e},()=>this.selectCharset("-"+e)),this._parser.registerEscHandler({intermediates:".",final:e},()=>this.selectCharset("."+e)),this._parser.registerEscHandler({intermediates:"/",final:e},()=>this.selectCharset("/"+e));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(e=>(this._logService.error("Parsing error: ",e),e)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new v.DcsHandler((e,t)=>this.requestStatusString(e,t)))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=u.LogLevelEnum.WARN){let t;const i=new Promise((e,i)=>{t=setTimeout(()=>i("#SLOW_TIMEOUT"),5e3)});Promise.race([e,i]).then(()=>{void 0!==t&&clearTimeout(t)},e=>{if(void 0!==t&&clearTimeout(t),"#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,o=0;const n=this._parseStack.paused;if(n){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(o=this._parseStack.position+131072)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+("string"==typeof e?` "${e}"`:` "${Array.prototype.map.call(e,e=>String.fromCharCode(e)).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)","string"==typeof e?e.split("").map(e=>e.charCodeAt(0)):e),this._parseBuffer.length131072)for(let t=o;t0&&2===p.getWidth(this._activeBuffer.x-1)&&p.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let v=this._parser.precedingJoinState;for(let g=t;ga)if(d){const e=p;let t=this._activeBuffer.x-m;if(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),p=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!p)return;for(m>0&&p instanceof l.BufferLine&&p.copyCellsFrom(e,t,0,m,!1);t=0;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(_&&(p.insertCells(this._activeBuffer.x,r-m,this._activeBuffer.getNullCell(u)),2===p.getWidth(a-1)&&p.setCellFromCodepoint(a-1,c.NULL_CELL_CODE,c.NULL_CELL_WIDTH,u)),p.setCellFromCodepoint(this._activeBuffer.x++,s,r,u),r>0)for(;--r;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=v,this._activeBuffer.x0&&0===p.getWidth(this._activeBuffer.x)&&!p.hasContent(this._activeBuffer.x)&&p.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,e=>!y(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new v.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new p.OscHandler(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new g.ApcHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const o=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);o&&(o.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(o.isWrapped=!1))}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i=this._bufferService.cols){const e=this._activeBuffer.lines.get(i+1);e&&(e.isWrapped=!1)}for(;i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(i=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,i-1);i--;){const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+i);if(e?.getTrimmedLength())break}for(;i>=0;i--)this._bufferService.scroll(this._eraseAttrData())}else{for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0)}break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let h=a;for(let e=1;e0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`P>|xterm.js(${b.XTERM_VERSION})\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(o.triggerDataEvent(`[${t?"":"?"}${e};${i}$y`),!0),_=e=>e?1:2,u=e.params[0];return t?d(u,2===u?4:4===u?_(o.modes.insertMode):12===u?3:20===u?_(c.convertEol):0):1===u?d(u,_(i.applicationCursorKeys)):3===u?d(u,c.windowOptions.setWinLines?80===a?2:132===a?1:0:0):6===u?d(u,_(i.origin)):7===u?d(u,_(i.wraparound)):8===u?d(u,3):9===u?d(u,_("X10"===s)):12===u?d(u,_(c.cursorBlink)):25===u?d(u,_(!o.isCursorHidden)):45===u?d(u,_(i.reverseWraparound)):66===u?d(u,_(i.applicationKeypad)):67===u?d(u,4):1e3===u?d(u,_("VT200"===s)):1002===u?d(u,_("DRAG"===s)):1003===u?d(u,_("ANY"===s)):1004===u?d(u,_(i.sendFocus)):1005===u?d(u,4):1006===u?d(u,_("SGR"===r)):1015===u?d(u,4):1016===u?d(u,_("SGR_PIXELS"===r)):1048===u?d(u,1):47===u||1047===u||1049===u?d(u,_(h===l)):2004===u?d(u,_(i.bracketedPasteMode)):2026===u?d(u,_(i.synchronizedOutput)):9001===u&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?d(u,_(i.win32InputMode)):d(u,0)}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=_.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-67108864,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,o=0;do{if(s[o+r]=e.params[t+o],e.hasSubParams(t+o)){const i=e.getSubParams(t+o);let n=0;do{5===s[1]&&(r=1),s[o+n+1+r]=i[n]}while(++n=2||2===s[1]&&o+r>=5)break;s[1]&&(r=1)}while(++o+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r=30&&i<=37?(s.fg&=-67108864,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-67108864,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-67108864,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-67108864,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:221===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.fg&=-134217729:222===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.bg&=-134217729:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("");break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[${e};${t}R`)}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[?${e};${t}R`);break;case 15:case 25:case 26:case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??1)&&this._onRequestColorSchemeQuery.fire()}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=0===e.length?1:e.params[0];if(0===t)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}const e=t%2==1;this._coreService.decPrivateModes.cursorBlink=e}return!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!y(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(C.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(C.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let e=0;e1;){const e=i.shift(),s=i.shift();if(/^\d+$/.exec(e)){const i=parseInt(e,10);if(x(i))if("?"===s)t.push({type:0,index:i});else{const e=(0,m.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.indexOf(";");if(-1===t)return!0;const i=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(i,s):!i.trim()&&this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(":");let s;const r=i.findIndex(e=>e.startsWith("id="));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(";");for(let e=0;e=this._specialColors.length);++e,++t)if("?"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,m.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(";");for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new d.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${e}\\`),!0))('"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}"q`:'"p'===e?'P1$r61;1"p':"r"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:"m"===e?"P1$r0m":" q"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(i){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;return s.length>=16&&s.shift(),s.push(i.flags),i.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=Math.max(1,e.params[0]||1),i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;for(let e=0;e0;e++)i.flags=s.pop();return 0===s.length&&t>0&&(i.flags=0),!0}}t.InputHandler=D;let E=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(k=e,e=t,t=k),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function x(e){return 0<=e&&e<256}E=s([r(0,u.IBufferService)],E)},4812(e,t){function i(e){return{dispose:e}}function s(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=s,t.combinedDisposable=function(...e){return i(()=>s(e))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=r;class o{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=o,o.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},7710(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.FourKeyMap=t.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(e,t,i){this._data[e]||(this._data[e]={}),this._data[e][t]=i}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}}t.TwoKeyMap=i,t.FourKeyMap=class{constructor(){this._data=new i}set(e,t,s,r,o){this._data.get(e,t)||this._data.set(e,t,new i),this._data.get(e,t).set(s,r,o)}get(e,t,i,s){return this._data.get(e,t)?.get(i,s)}clear(){this._data.clear()}}},701(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isMac=t.isSafari=t.isLegacyEdge=t.isChrome=t.isFirefox=t.isNode=void 0,t.getZoomFactor=function(e){return 1},t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\/(\d+)/);return null===e||e.length<2?0:parseInt(e[1],10)},t.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=t.isNode?"node":navigator.userAgent,s=t.isNode?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isChrome=i.includes("Chrome"),t.isLegacyEdge=i.includes("Edge"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),t.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),t.isLinux=s.indexOf("Linux")>=0,t.isChromeOS=/\bCrOS\b/.test(i)},3087(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SortedList=void 0;const s=i(6168);let r=0;t.SortedList=class{constructor(e,t){this._getKey=e,this._array=[],this._insertedValues=[],this._isFlushingInserted=!1,this._deletedIndices=new Set,this._indicesByValue=new Map,this._isFlushingDeleted=!1,this._flushInsertedTask=new s.IdleTaskQueue(t),this._flushDeletedTask=new s.IdleTaskQueue(t)}clear(){this._array.length=0,this._indicesByValue.clear(),this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.clear(),this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(e){this._flushCleanupDeleted(),0===this._insertedValues.length&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(e)}_flushInserted(){const e=this._insertedValues.sort((e,t)=>this._getKey(e)-this._getKey(t));let t=0,i=0;const s=new Array(this._array.length+this._insertedValues.length);for(let r=0;r=this._array.length||this._getKey(e[t])<=this._getKey(this._array[i])?(s[r]=e[t],t++):s[r]=this._array[i++];this._array=s,this._rebuildIdentityIndex(),this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}_rebuildIdentityIndex(){this._indicesByValue.clear();for(let e=this._array.length-1;e>=0;e--){const t=this._array[e],i=this._indicesByValue.get(t);void 0===i?this._indicesByValue.set(t,e):"number"==typeof i?this._indicesByValue.set(t,[i,e]):i.push(e)}}delete(e){this._flushCleanupInserted();const t=this._indicesByValue.get(e);if(void 0===t)return!1;const i="number"==typeof t?t:t.pop();return void 0!==i&&("number"!=typeof t&&0!==t.length||this._indicesByValue.delete(e),0===this._deletedIndices.size&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.add(i),!0)}_flushDeleted(){this._isFlushingDeleted=!0;const e=new Array(this._array.length-this._deletedIndices.size);let t=0;for(let i=0;i0&&this._flushDeletedTask.flush()}*getKeyIterator(e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),0!==this._array.length&&(r=this._search(e),!(r<0||r>=this._array.length)&&this._getKey(this._array[r])===e))do{yield this._array[r]}while(++r=this._array.length)&&this._getKey(this._array[r])===e))do{t(this._array[r])}while(++r=t;){let s=t+i>>1;const r=this._getKey(this._array[s]);if(r>e)i=s-1;else{if(!(r0&&this._getKey(this._array[s-1])===e;)s--;return s}t=s+1}}return t}}},4220(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.LimitedStringBuilder=t.StringBuilder=void 0;class i{constructor(){this._chunks=[],this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(e){this._chunks.push(e),this._length+=e.length}toString(){return this._chunks.join("")}}t.StringBuilder=i,t.LimitedStringBuilder=class{constructor(e){this._limit=e,this._builder=new i}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(e){return this._builder.append(e),this._builder.length>this._limit&&(this._builder.reset(),!0)}toString(){return this._builder.toString()}}},6168(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;class i{constructor(e){this._tasks=[],this._i=0,this._logService=e}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ii)return r-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-t))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}}t.PriorityTaskQueue=s,t.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:s,t.DebouncedIdleTask=class{constructor(e){this._queue=new t.IdleTaskQueue(e)}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},7804(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.XTERM_VERSION=void 0,t.XTERM_VERSION="6.1.0-beta.303"},5882(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)};const s=i(8938)},5451(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}t.ExtendedAttrs=s},1073(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(5639),r=i(4812),o=i(6168),n=i(5451),a=i(6107),h=i(732),l=i(3055),c=i(8938),d=i(8158),_=i(6760);t.MAX_BUFFER_SIZE=4294967295;class u extends r.Disposable{constructor(e,t,i,n){super(),this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this._logService=n,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=a.DEFAULT_ATTR_DATA.clone(),this.savedCharset=_.DEFAULT_CHARSET,this.savedCharsets=[],this.savedGlevel=0,this.savedOriginMode=!1,this.savedWraparoundMode=!0,this.markers=[],this._nullCell=l.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=l.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new o.IdleTaskQueue(this._logService),this._register((0,r.toDisposable)(()=>this._memoryCleanupQueue.clear())),this._register((0,r.toDisposable)(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new a.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){e??=a.DEFAULT_ATTR_DATA;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(a.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+o+1?(this.ybase--,o++,this.ydisp>0&&this.ydisp--):this.lines.push(new a.BufferLine(e,i,!1)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),o&&(this.y+=o),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t0){const e=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,e)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&"conpty"===e.backend&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=this._optionsService.rawOptions.reflowCursorLine,s=(0,h.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(a.DEFAULT_ATTR_DATA),i);if(s.length>0){const i=(0,h.reflowLargerCreateNewLayout)(this.lines,s);(0,h.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(a.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;n--){let l=this.lines.get(n);if(!l||!l.isWrapped&&l.getTrimmedLength()<=e)continue;const c=[l];for(;l.isWrapped&&n>0;)l=this.lines.get(--n),c.unshift(l);if(!i){const e=this.ybase+this.y;if(e>=n&&e0&&(r.push({start:n+c.length+o,newLines:p}),o+=p.length),c.push(...p);let v=_.length-1,g=_[v];0===g&&(v--,g=_[v]);let m=c.length-u-1,S=d;for(;m>=0;){const e=Math.min(S,g);if(void 0===c[v])break;if(c[v].copyCellsFrom(c[m],S-e,g-e,e,!0),g-=e,0===g&&(v--,g=_[v]),S-=e,0===S){m--;const e=Math.max(m,0);S=(0,h.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t0;)0===this.ybase?this.y0){const e=[],t=[];for(let e=0;e=0;l--)if(a&&a.start>s+h){for(let e=a.newLines.length-1;e>=0;e--)this.lines.set(l--,a.newLines[e]);l++,e.push({index:s+1,amount:a.newLines.length}),h+=a.newLines.length,a=r[++n]}else this.lines.set(l,t[s--]);let l=0;for(let t=e.length-1;t>=0;t--)e[t].index+=l,this.lines.onInsertEmitter.fire(e[t]),l+=e[t].amount;const c=Math.max(0,i+o-this.lines.maxLength);c>0&&this.lines.onTrimEmitter.fire(c)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):""}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(e=>{t.line>=e.index&&(t.line+=e.amount)})),t.register(this.lines.onDelete(e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}t.Buffer=u},6107(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(5451),r=i(3055),o=i(8938),n=i(726);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let a=0;const h=new r.CellData,l=t.DEFAULT_ATTR_DATA.extended.clone();class c{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._cacheValid=!1,this._cache="",this._cacheTrimmed=!1,this._data=new Uint32Array(3*e);const s=t??r.CellData.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]);for(let t=0;t>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._cacheValid=!1,this._data[3*e+1]=t[o.CHAR_DATA_ATTR_INDEX],t[o.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[o.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[o.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[o.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,n.stringFromCodePoint)(2097151&t):""}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return a=3*e,t.content=this._data[a+0],t.fg=this._data[a+1],t.bg=this._data[a+2],2097152&t.content?t.combinedData=this._combined[e]:t.combinedData="",268435456&t.bg?t.extended=this._extendedAttrs[e]:(l._ext=0,l._urlId=0,t.extended=l),t}setCell(e,t){this._cacheValid=!1,2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){this._cacheValid=!1,268435456&s.bg&&(this._extendedAttrs[e]=s.extended);const r=3*e;this._data[r+0]=t|i<<22,this._data[r+1]=s.fg,this._data[r+2]=s.bg}addCodepointToCell(e,t,i){this._cacheValid=!1;let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,n.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,n.stringFromCodePoint)(2097151&s)+(0,n.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if(this._cacheValid=!1,(e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t=0;--i)this.setCell(e+t+i,this.loadCell(e+i,h));for(let s=0;sthis.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){this._cacheValid=!1;const o=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=o[3*(t+r)+e];this._copyCellMapsFrom(e,t+r,i+r)}else for(let r=0;r>22||1}s&&s.push(t);const h=a.join("");return r&&(this._cache=h,this._cacheValid=!0,this._cacheTrimmed=!!e),h}_copyCellMapsFrom(e,t,i){const s=3*t;2097152&e._data[s+0]&&(this._combined[i]=e._combined[t]),268435456&e._data[s+2]&&(this._extendedAttrs[i]=e._extendedAttrs[t])}_copySparseMapsFrom(e){this._combined={},this._extendedAttrs={};for(let t=0;te.end.y)throw new Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},732(e,t){function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,"__esModule",{value:!0}),t.reflowLargerGetLinesToRemove=function(e,t,s,r,o,n){const a=[];for(let h=0;h=h&&r0&&(e>_||0===d[e].getTrimmedLength());e--)v++;v>0&&(a.push(h+d.length-v),a.push(v)),h+=d.length-1}return a},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],o=0;for(let n=0;nl&&(n-=l,a++);const c=2===e[a].getWidth(n-1);c&&n--;const d=c?s-1:s;r.push(d),h+=d}return r},t.getWrappedLineTrimmedLength=i},4097(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;const s=i(4812),r=i(1073),o=i(8636);class n extends s.Disposable{constructor(e,t,i){super(),this._optionsService=e,this._bufferService=t,this._logService=i,this._normalBuffer=this._register(new s.MutableDisposable),this._altBuffer=this._register(new s.MutableDisposable),this._onBufferActivate=this._register(new o.Emitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new r.Buffer(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new r.Buffer(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=n},3055(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;const s=i(726),r=i(8938),o=i(5451);class n extends o.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new o.ExtendedAttrs,this.combinedData=""}static fromCharData(e){const t=new n;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor())return!1;if(this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor())return!1;if(this.isInverse()!==e.isInverse())return!1;if(this.isBold()!==e.isBold())return!1;if(this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;const t=this.isUnderlineColorDefault(),i=e.isUnderlineColorDefault();if(!t||!i){if(t!==i)return!1;if(this.getUnderlineColor()!==e.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==e.getUnderlineColorMode())return!1}}return this.isOverline()===e.isOverline()&&this.isBlink()===e.isBlink()&&this.isInvisible()===e.isInvisible()&&this.isItalic()===e.isItalic()&&this.isDim()===e.isDim()&&this.isStrikethrough()===e.isStrikethrough()}}t.CellData=n},8938(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=t.DEFAULT_COLOR<<9|256,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},8158(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;const s=i(4812),r=i(8636);class o{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=o._nextId++,this._onDispose=this.register(new r.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,s.dispose)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=o,o._nextId=1},6760(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",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:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},706(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=function(e,t,s,r){const o={type:0,cancel:!1,key:void 0},n=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?o.key=t?"OA":"":"UIKeyInputLeftArrow"===e.key?o.key=t?"OD":"":"UIKeyInputRightArrow"===e.key?o.key=t?"OC":"":"UIKeyInputDownArrow"===e.key&&(o.key=t?"OB":"");break;case 8:o.key=e.ctrlKey?"\b":"",e.altKey&&(o.key=""+o.key);break;case 9:if(e.shiftKey){o.key="";break}o.key="\t",o.cancel=!0;break;case 13:"c"===e.key&&e.ctrlKey?o.key="":o.key=e.altKey?"\r":"\r",o.cancel=!0;break;case 27:o.key="",e.altKey&&(o.key=""),o.cancel=!0;break;case 37:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"D":t?"OD":"";break;case 39:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"C":t?"OC":"";break;case 38:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"A":t?"OA":"";break;case 40:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"B":t?"OB":"";break;case 45:e.shiftKey||e.ctrlKey||(o.key="[2~");break;case 46:o.key=n?"[3;"+(n+1)+"~":"[3~";break;case 36:o.key=n?"[1;"+(n+1)+"H":t?"OH":"";break;case 35:o.key=n?"[1;"+(n+1)+"F":t?"OF":"";break;case 33:e.shiftKey?o.type=2:e.ctrlKey?o.key="[5;"+(n+1)+"~":o.key="[5~";break;case 34:e.shiftKey?o.type=3:e.ctrlKey?o.key="[6;"+(n+1)+"~":o.key="[6~";break;case 112:o.key=n?"[1;"+(n+1)+"P":"OP";break;case 113:o.key=n?"[1;"+(n+1)+"Q":"OQ";break;case 114:o.key=n?"[1;"+(n+1)+"R":"OR";break;case 115:o.key=n?"[1;"+(n+1)+"S":"OS";break;case 116:o.key=n?"[15;"+(n+1)+"~":"[15~";break;case 117:o.key=n?"[17;"+(n+1)+"~":"[17~";break;case 118:o.key=n?"[18;"+(n+1)+"~":"[18~";break;case 119:o.key=n?"[19;"+(n+1)+"~":"[19~";break;case 120:o.key=n?"[20;"+(n+1)+"~":"[20~";break;case 121:o.key=n?"[21;"+(n+1)+"~":"[21~";break;case 122:o.key=n?"[23;"+(n+1)+"~":"[23~";break;case 123:o.key=n?"[24;"+(n+1)+"~":"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(s&&!r||!e.altKey||e.metaKey)if(!s||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey){if(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length)o.key=e.key;else if(e.key&&e.ctrlKey&&e.shiftKey)switch(e.code){case"Minus":o.key="";break;case"Digit2":o.key="\0";break;case"Digit6":o.key=""}}else 65===e.keyCode&&(o.type=1);else{const t=i[e.keyCode],s=t?.[e.shiftKey?1:0];if(s)o.key=""+s;else if(e.keyCode>=65&&e.keyCode<=90){const t=e.ctrlKey?e.keyCode-64:e.keyCode+32;let i=String.fromCharCode(t);e.shiftKey&&(i=i.toUpperCase()),o.key=""+i}else if(32===e.keyCode)o.key=""+(e.ctrlKey?"\0":" ");else if("Dead"===e.key&&e.code.startsWith("Key")){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),o.key=""+t,o.cancel=!0}}else e.keyCode>=65&&e.keyCode<=90?o.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?o.key="\0":e.keyCode>=51&&e.keyCode<=55?o.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?o.key="":"/"===e.key?o.key="":219===e.keyCode?o.key="":220===e.keyCode?o.key="":221===e.keyCode&&(o.key="")}return o};const i={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']}},7241(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyKeyboard=void 0,t.KittyKeyboard=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440},this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24},this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"},this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(e){if(e.code.startsWith("Numpad")){const t=e.code.slice(6);if(t>="0"&&t<="9")return 57399+parseInt(t,10);switch(t){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(e){switch(e.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(e){let t=0;return e.shiftKey&&(t|=1),e.altKey&&(t|=2),e.ctrlKey&&(t|=4),e.metaKey&&(t|=8),t>0?t+1:0}_getKeyCode(e,t){const i=this._getNumpadKeyCode(e);if(void 0!==i)return i;const s=this._getModifierKeyCode(e);if(void 0!==s)return s;const r=this._functionalKeyCodes[e.key];if(void 0!==r)return r;if((e.shiftKey||t&&e.altKey)&&e.code){if(e.code.startsWith("Digit")&&6===e.code.length){const t=e.code.charAt(5);if(t>="0"&&t<="9")return t.charCodeAt(0)}if(e.code.startsWith("Key")&&4===e.code.length)return e.code.charAt(3).toLowerCase().charCodeAt(0)}if(1===e.key.length){const t=e.key.codePointAt(0);return t>=65&&t<=90?t+32:t}}_isModifierKey(e){return"Shift"===e.key||"Control"===e.key||"Alt"===e.key||"Meta"===e.key}_isLockKey(e){return"CapsLock"===e.key||"NumLock"===e.key||"ScrollLock"===e.key}_buildCsiLetterSequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"["+e}_buildSs3Sequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"O"+e}_buildCsiTildeSequence(e,t,i,s){const r=s&&1!==i;let o="["+e;return(t>0||r)&&(o+=";"+(t>0?t:"1"),r&&(o+=":"+i)),o+="~",o}_buildCsiUSequence(e,t,i,s,r,o,n){const a=!!(2&r);let h,l="["+t;4&r&&e.shiftKey&&1===e.key.length&&!o&&!n&&(h=e.key.codePointAt(0),l+=":"+h);const c=16&r&&3!==s&&1===e.key.length&&!o&&!n&&!e.ctrlKey?e.key.codePointAt(0):void 0,d=a&&1!==s&&(3===s||void 0===c);return(i>0||d||void 0!==c)&&(l+=";",i>0?l+=i:d&&(l+="1"),d&&(l+=":"+s)),void 0!==c&&(l+=";"+c),l+="u",l}evaluate(e,t,i=1,s=!1){const r={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(e),n=this._isModifierKey(e),a=!!(2&t);if(!a&&3===i)return r;if(n&&!(8&t))return r;if(this._isLockKey(e)&&!(8&t))return r;const h=this._csiLetterKeys[e.key];if(h)return r.key=this._buildCsiLetterSequence(h,o,i,a),r.cancel=!0,r;const l=this._ss3FunctionKeys[e.key];if(l)return r.key=this._buildSs3Sequence(l,o,i,a),r.cancel=!0,r;const c=this._csiTildeKeys[e.key];if(void 0!==c)return r.key=this._buildCsiTildeSequence(c,o,i,a),r.cancel=!0,r;const d=this._getKeyCode(e,s);if(void 0===d)return r;const _=13===d||9===d||127===d;if(_&&3===i&&!(8&t))return r;const u=void 0!==this._functionalKeyCodes[e.key]||void 0!==this._getNumpadKeyCode(e);if(8&t||a&&3===i||(1&t||a)&&(u&&!_||o>0&&1!==e.key.length||o-1>1))r.key=this._buildCsiUSequence(e,d,o,i,t,u,n),r.cancel=!0;else{const t=13===d?"\r":9===d?"\t":127===d?"":void 0;t?r.key=t:1!==e.key.length||e.ctrlKey||e.altKey||e.metaKey||(r.key=e.key)}return r}static shouldUseProtocol(e){return e>0}}},726(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s="";for(let r=t;r65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let o=r;o=i)return this._interim=r,s;const n=e.charCodeAt(o);56320<=n&&n<=57343?t[s++]=1024*(r-55296)+n-56320+65536:(t[s++]=r,t[s++]=n);continue}65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,o,n,a,h=0,l=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let o,n=0;for(;(o=this.interim[++n])&&n<4;)r<<=6,r|=63&o;const a=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,c=a-n;for(;l=i)return 0;if(o=e[l++],128!=(192&o)){l--,s=!0;break}this.interim[n++]=o,r<<=6,r|=63&o}s||(2===a?r<128?l--:t[h++]=r:3===a?r<2048||r>=55296&&r<=57343||65279===r||(t[h++]=r):r<65536||r>1114111||(t[h++]=r)),this.interim.fill(0)}const c=i-4;let d=l;for(;d=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(a=(31&s)<<6|63&r,a<128){d--;continue}t[h++]=a}else if(224==(240&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(a=(15&s)<<12|(63&r)<<6|63&o,a<2048||a>=55296&&a<=57343||65279===a)continue;t[h++]=a}else if(240==(248&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=o,h;if(n=e[d++],128!=(192&n)){d--;continue}if(a=(7&s)<<18|(63&r)<<12|(63&o)<<6|63&n,a<65536||a>1114111)continue;t[h++]=a}}return h}}},7428(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;const s=i(6415),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],o=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let n;t.UnicodeV6=class{constructor(){if(this.version="6",!n){n=new Uint8Array(65536),n.fill(1),n[0]=0,n.fill(0,1,32),n.fill(0,127,160),n.fill(2,4352,4448),n[9001]=2,n[9002]=2,n.fill(2,11904,42192),n[12351]=1,n.fill(2,44032,55204),n.fill(2,63744,64256),n.fill(2,65040,65050),n.fill(2,65072,65136),n.fill(2,65280,65377),n.fill(2,65504,65511);for(let e=0;et[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},9249(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Win32InputMode=void 0,t.Win32InputMode=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226},this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40},this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]),this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(e){const t=this._codeToVk[e.code];return void 0!==t?t:e.keyCode||0}_getScanCode(e){return this._codeToScancode[e.code]||0}_getUnicodeChar(e){if(e.ctrlKey&&!e.altKey&&!e.metaKey){if("Enter"===e.key)return 10;if("Backspace"===e.key)return 127}const t=this._keyToControlChar[e.key];if(void 0!==t)return t;if(1===e.key.length){const t=e.key.codePointAt(0)||0;if(e.ctrlKey&&!e.altKey&&!e.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(e){let t=0;return e.shiftKey&&(t|=16),e.ctrlKey&&("ControlRight"===e.code?t|=4:t|=8),e.altKey&&("AltRight"===e.code?t|=1:t|=2),this._enhancedKeyCodes.has(e.code)&&(t|=256),t}evaluateKeyboardEvent(e,t){return{type:0,cancel:!0,key:`[${this._getVirtualKeyCode(e)};${this._getScanCode(e)};${this._getUnicodeChar(e)};${t?1:0};${this._getControlKeyState(e)};1_`}}}},3562(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;const s=i(3132),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._innerWriteTimer=this._register(new s.TimeoutTimer),this._onWriteParsed=this._register(new o.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._register((0,r.toDisposable)(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed)return;if(this._isSyncWriting)return;let e;this._isSyncWriting=!0;let t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);const i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;const i=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>{this._store.isDisposed||(performance.now()-i>=12?this._scheduleInnerWrite(0,e):this._innerWrite(i,e))};return void s.catch(e=>(queueMicrotask(()=>{throw e}),Promise.resolve(!1))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,performance.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},8693(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(t.startsWith("rgb:")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(t.startsWith("#")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,o]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(o,t)}`};const i=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,s=/^[\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?"0"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}},2607(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ApcHandler=t.ApcParser=void 0;const s=i(726),r=i(4220),o=[];t.ApcParser=class{constructor(){this._handlers=Object.create(null),this._active=o,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._ident=0}start(e){if(this.reset(),this._ident=e,this._active=this._handlers[e]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._ident,"START")}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}end(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"END",e);this._active=o,this._ident=0}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.ApcHandler=n,n._payloadLimit=1e7},9823(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(726),r=i(7262),o=i(4220),n=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=n,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=n,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,"HOOK",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"UNHOOK",e);this._active=n,this._ident=0}};const a=new r.Params;a.addParam(0);class h{constructor(e){this._handler=e,this._data=new o.LimitedStringBuilder(h._payloadLimit),this._params=a,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():a,this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString(),this._params),t instanceof Promise))return t.then(e=>(this._params=a,this._data.reset(),this._hitLimit=!1,e));return this._params=a,this._data.reset(),this._hitLimit=!1,t}}t.DcsHandler=h,h._payloadLimit=1e7},6717(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(4812),r=i(7262),o=i(1346),n=i(9823),a=i(2607);class h{constructor(e){this.table=new Uint16Array(e)}setDefault(e,t){this.table.fill(e<<8|t)}add(e,t,i,s){this.table[t<<8|e]=i<<8|s}addMany(e,t,i,s){for(let r=0;rt),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const o=i(0,17);e.setDefault(1,0),e.addMany(s,0,2,0);for(const t of o)e.addMany([24,26,153,154],t,3,0),e.addMany(i(128,144),t,3,0),e.addMany(i(144,152),t,3,0),e.add(156,t,0,0),e.add(27,t,11,1),e.add(157,t,4,8),e.addMany([152,158],t,0,7),e.add(159,t,11,14),e.add(155,t,11,3),e.add(144,t,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(95,1,11,14),e.addMany(r,14,0,14),e.add(127,14,0,14),e.addMany(i(32,48),14,9,15),e.addMany(i(48,127),14,15,16),e.addMany(i(48,127),15,15,16),e.addMany(r,15,0,15),e.addMany(i(32,48),15,9,15),e.add(127,15,0,15),e.addMany(s,16,16,16),e.addMany(r,16,0,16),e.addMany(i(8,14),16,16,16),e.add(127,16,0,16),e.addMany([27,156,24,26],16,17,0),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(l,0,2,0),e.add(l,8,5,8),e.add(l,6,0,6),e.add(l,11,0,11),e.add(l,13,13,13),e.add(l,16,16,16),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,s.toDisposable)(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new o.OscParser),this._dcsParser=this._register(new n.DcsParser),this._apcParser=this._register(new a.ApcParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(i=e.prefix.charCodeAt(0),i<60||i>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let t=0;ts||s>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");i<<=8,i|=s}}if(1!==e.final.length)throw new Error("final must be a single byte");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);this._escHandlers[i]??=[];const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){const i=e.charCodeAt(0);this._executeHandlers[i]=t,i<24&&(this._executeHandlersArr[i]=t)}clearExecuteHandler(e){const t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);this._csiHandlers[i]??=[];const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r,o,n=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,n=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");const t=this._parseStack.handlers;let r=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](this._params),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 4:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],o=this._dcsParser.unhook(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],o=this._oscParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],o=this._apcParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0}this._parseStack.state=0,n=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=255&this._parseStack.transition}for(let i=n;i=60&&n<=63&&(this._collect=n,s++);let a=!1;for(;s=48&&n<=57)this._params.addDigit(n-48);else if(59===n)this._params.addParam(0);else{if(58!==n){if(n>=64&&n<=126){const e=this._csiHandlers[this._collect<<8|n];let t=e?e.length-1:-1;for(;t>=0&&(o=e[t](this._params),!0!==o);t--)if(o instanceof Promise)return r=1792,this._preserveStack(3,e,t,r,s),o;t<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingJoinState=0,i=s,this.currentState=0,a=!0;break}break}this._params.addSubParam(-1)}a||(i=s-1,this.currentState=4);continue}switch(r=this._transitions.table[this.currentState<<8|(s>8){case 2:let n=i;const a=t-4;for(;n=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l););if(n>=a)for(;n=32&&(e[n]<=126||e[n]>=l);)n++;this._printHandler(e,i,n),i=n-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:i,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:const h=this._csiHandlers[this._collect<<8|s];let c=h?h.length-1:-1;for(;c>=0&&(o=h[c](this._params),!0!==o);c--)if(o instanceof Promise)return this._preserveStack(3,h,c,r,i),o;c<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do{switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}}while(++i47&&s<60);i--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:const d=this._escHandlers[this._collect<<8|s];let _=d?d.length-1:-1;for(;_>=0&&(o=d[_](),!0!==o);_--)if(o instanceof Promise)return this._preserveStack(4,d,_,r,i),o;_<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let r=i+1;;++r)if(r>=t||24===(s=e[r])||26===s||27===s||s>127&&s=t||(s=e[r])<32||s>127&&s=32&&e[s]<127||e[s]>=8&&e[s]<14||e[s]>=l))){this._apcParser.put(e,i,s),i=s-1;break}break;case 17:if(o=this._apcParser.end(24!==s&&26!==s),o)return this._preserveStack(7,[],0,r,i),o;27===s&&(r|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0}this.currentState=255&r}}}t.EscapeSequenceParser=c},1346(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(726),r=i(4220),o=[];t.OscParser=class{constructor(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,"PUT",(0,s.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.OscHandler=n,n._payloadLimit=1e7},7262(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;class i{static fromArray(e){const t=new i;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new i(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>2147483647?2147483647:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=e>2147483647?2147483647:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const i=this._digitIsSub?this._subParams:this.params,s=i[t-1];i[t-1]=~s?Math.min(10*s+e,2147483647):e}}t.Params=i},3027(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},5101(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(3235),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new o.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new s.BufferApiView(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=n},6097(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,i)=>t(e,i.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}registerApcHandler(e,t){return this._core.registerApcHandler(e,t)}}},4335(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},9640(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=void 0;const o=i(4812),n=i(4097),a=i(6501),h=i(8636);let l=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(e,t){super(),this.isUserScrolling=!1,this._onResize=this._register(new h.Emitter),this.onResize=this._onResize.event,this._onScroll=this._register(new h.Emitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new n.BufferSet(e,this,t)),this._register(this.buffers.onBufferActivate(e=>{this._onScroll.fire(e.activeBuffer.ydisp)}))}resize(e,t){const i=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:i,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;o===i.lines.length-1?e?i.lines.recycle().copyFrom(s,!0):i.lines.push(s.clone(!0)):i.lines.splice(o+1,0,s.clone(!0)),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=o-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(o,s.clone(!0))}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t){const i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);const s=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),s!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))}};t.BufferService=l,t.BufferService=l=s([r(0,a.IOptionsService),r(1,a.ILogService)],l)},5746(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},4071(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;const o=i(4812),n=i(6501),a=i(8636),h=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0});let c=class extends o.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorHidden=!1,this._onData=this._register(new a.Emitter),this.onData=this._onData.event,this._onUserInput=this._register(new a.Emitter),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new a.Emitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new a.Emitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.isCursorInitialized=i.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}reset(){this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onBinary.fire(e))}};t.CoreService=c,t.CoreService=c=s([r(0,n.IBufferService),r(1,n.ILogService),r(2,n.IOptionsService)],c)},4720(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DecorationLineCache=t.DecorationService=void 0;const o=i(3132),n=i(4103),a=i(4812),h=i(6501),l=i(3087),c=i(8636);let d=0,_=0,u=class extends a.Disposable{get decorations(){return this._decorations.values()}constructor(e,t){super(),this._logService=e,this._bufferService=t,this._lineCache=this._register(new f),this._onDecorationRegistered=this._register(new c.Emitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this._register(new c.Emitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this._decorations=new l.SortedList(e=>e?.marker.line,this._logService),this._register((0,a.toDisposable)(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}registerDecoration(e){if(e.marker.isDisposed)return;const t=new p(e);if(t){const e=t.marker.onDispose(()=>t.dispose()),i=t.onDispose(()=>{i.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),e.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,i){const s=this._lineCache.getDecorationsOnLine(t);if(s)for(const t of s)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&(yield t)}forEachDecorationAtCell(e,t,i,s){const r=this._lineCache.getDecorationsOnLine(t);if(r)for(const t of r)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&s(t)}};t.DecorationService=u,t.DecorationService=u=s([r(0,h.ILogService),r(1,h.IBufferService)],u);class f extends a.Disposable{constructor(){super(...arguments),this._decorationsByLine=new Map,this._decorations=new Set,this._bufferLineListeners=this._register(new a.MutableDisposable),this._lineIndexSyncTimer=this._register(new o.MicrotaskTimer),this._lineIndexSyncCallbacks=[]}clear(){this._lineIndexSyncCallbacks.length=0,this._lineIndexSyncTimer.cancel(),this._decorationsByLine.clear(),this._decorations.clear()}add(e){this._decorations.add(e),this._addToLineBuckets(e)}remove(e){this._decorations.delete(e),this._removeFromLineBuckets(e)}getDecorationsOnLine(e){return this._decorationsByLine.get(e)}attachToBufferLines(e){const t=new a.DisposableStore;this._bufferLineListeners.value=t,t.add(e.onTrim(e=>this._handleBufferLinesTrim(e))),t.add(e.onInsert(e=>this._handleBufferLinesInsert(e))),t.add(e.onDelete(e=>this._handleBufferLinesDelete(e)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){const t=e.marker.line;if(t<0)return;e._indexedStartLine=t;const i=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{const e=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(const t of e)t()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;const t=new Map;for(const[i,s]of this._decorationsByLine){const r=i-e;r<0||this._mergeLineBucket(t,r,s)}this._decorationsByLine.clear();for(const[e,i]of t)this._decorationsByLine.set(e,i);for(const t of this._decorations)t.marker.isDisposed||(t._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,i){const s=e.get(t);if(s)for(let e=0,t=i.length;et&&(s.push(e),this._removeFromLineBuckets(e))}const r=new Map;for(const[e,s]of this._decorationsByLine){const o=e>=t?e+i:e;this._mergeLineBucket(r,o,s)}this._decorationsByLine.clear();for(const[e,t]of r)this._decorationsByLine.set(e,t);for(const e of this._decorations)e.marker.isDisposed||e._indexedStartLine>=t&&(e._indexedStartLine=e.marker.line);for(const e of s)this._addToLineBuckets(e)}_applyBufferLinesDelete(e){const t=e.index+e.amount,i=new Map;for(const[s,r]of this._decorationsByLine){if(s>=e.index&&s=t?s-e.amount:s;this._mergeLineBucket(i,o,r)}this._decorationsByLine.clear();for(const[e,t]of i)this._decorationsByLine.set(e,t);const s=[];for(const i of this._decorations){if(i.marker.isDisposed)continue;const r=i._indexedStartLine,o=this._getDecorationHeight(i);r>=t?i._indexedStartLine=i.marker.line:rt&&s.push(i)}for(const e of s)this._reindexDecoration(e)}}t.DecorationLineCache=f;class p extends a.DisposableStore{get backgroundColorRGB(){return null===this._cachedBg&&(this.options.backgroundColor?this._cachedBg=n.css.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return null===this._cachedFg&&(this.options.foregroundColor?this._cachedFg=n.css.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}constructor(e){super(),this.options=e,this.onRenderEmitter=this.add(new c.Emitter),this.onRender=this.onRenderEmitter.event,this._onDispose=this.add(new c.Emitter),this.onDispose=this._onDispose.event,this._cachedBg=null,this._cachedFg=null,this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}dispose(){this._onDispose.fire(),super.dispose()}}},6025(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(6501),r=i(6201);class o{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=o,t.InstantiationService=class{constructor(){this._services=new o,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort((e,t)=>e.index-t.index),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id._id}.`);s.push(i)}const o=i.length>0?i[0].index:t.length;if(t.length!==o)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${o+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},7276(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LogService=void 0;const o=i(4812),n=i(6501),a={trace:n.LogLevelEnum.TRACE,debug:n.LogLevelEnum.DEBUG,info:n.LogLevelEnum.INFO,warn:n.LogLevelEnum.WARN,error:n.LogLevelEnum.ERROR,off:n.LogLevelEnum.OFF};let h=class extends o.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=n.LogLevelEnum.OFF,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}_updateLogLevel(){this._logLevel=a[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;t!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function n(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const a=String.fromCharCode,h={DEFAULT:e=>{const t=[n(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":`${a(t[0])}${a(t[1])}${a(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.x};${e.y}${t}`}};class l extends s.Disposable{constructor(){super(),this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=this._register(new r.Emitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(o))this.addProtocol(e,o[e]);for(const e of Object.keys(h))this.addEncoding(e,h[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return!this._customWheelEventHandler||!1!==this._customWheelEventHandler(e)}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return"DEFAULT"===this._activeEncoding}get isPixelEncoding(){return"SGR_PIXELS"===this._activeEncoding}}t.MouseStateService=l},56(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(4812),r=i(701),o=i(8636);t.DEFAULT_OPTIONS={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:r.isMac,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}};const n=["normal","bold","100","200","300","400","500","600","700","800","900"];class a extends s.Disposable{constructor(e){super(),this._onOptionChange=this._register(new o.Emitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this._register((0,s.toDisposable)(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(i=>{i===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(i=>{-1!==e.indexOf(i)&&t()})}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case"cursorStyle":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return"block"===e||"underline"===e||"bar"===e}(i))throw new Error(`"${i}" is not a valid value for ${e}`);break;case"wordSeparator":i||(i=t.DEFAULT_OPTIONS[e]);break;case"fontWeight":case"fontWeightBold":if("number"==typeof i&&1<=i&&i<=1e3)break;i=n.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case"blinkIntervalDuration":if((i=Math.floor(i))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"cursorWidth":i=Math.floor(i);case"lineHeight":case"tabStopWidth":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case"minimumContrastRatio":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case"scrollback":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case"rows":case"cols":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case"windowsPty":i=i??{}}return i}}t.OptionsService=a},8811(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkService=void 0;const o=i(6501);let n=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose(()=>this._removeMarkerFromLink(s,i)),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const o=t.addMarker(t.ybase+t.y),n={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(n,o)),this._entriesWithId.set(n.key,n),this._dataByLinkId.set(n.id,n),n.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every(e=>e.line!==t)){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose(()=>this._removeMarkerFromLink(i,e))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=n,t.OscLinkService=n=s([r(0,o.IBufferService)],n)},6201(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.serviceRegistry=void 0,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const i=function(e,t,s){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");!function(e,t,i){t.di$target===t?t.di$dependencies.push({id:e,index:i}):(t.di$dependencies=[{id:e,index:i}],t.di$target=t)}(i,e,s)};return i._id=e,t.serviceRegistry.set(e,i),i},t.serviceRegistry=new Map},6501(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.IMouseStateService=t.IBufferService=void 0;const s=i(6201);var r;t.IBufferService=(0,s.createDecorator)("BufferService"),t.IMouseStateService=(0,s.createDecorator)("MouseStateService"),t.ICoreService=(0,s.createDecorator)("CoreService"),t.ICharsetService=(0,s.createDecorator)("CharsetService"),t.IInstantiationService=(0,s.createDecorator)("InstantiationService"),function(e){e[e.TRACE=0]="TRACE",e[e.DEBUG=1]="DEBUG",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.OFF=5]="OFF"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)("LogService"),t.IOptionsService=(0,s.createDecorator)("OptionsService"),t.IOscLinkService=(0,s.createDecorator)("OscLinkService"),t.IUnicodeService=(0,s.createDecorator)("UnicodeService"),t.IDecorationService=(0,s.createDecorator)("DecorationService")},6415(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;const s=i(8636);class r{constructor(){this._providers=Object.create(null),this._active="",this._onChange=new s.Emitter,this.onChange=this._onChange.event}static extractShouldJoin(e){return!!(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version "${e}"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e,this._active||(this.activeVersion=e.version)}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let o=0;o=s)return t+this.wcwidth(n);const i=e.charCodeAt(o);56320<=i&&i<=57343?n=1024*(n-55296)+i-56320+65536:t+=this.wcwidth(i)}const a=this.charProperties(n,i);let h=r.extractWidth(a);r.extractShouldJoin(a)&&(h-=r.extractWidth(i)),t+=h,i=a}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=r}},t={};return function i(s){var r=t[s];if(void 0!==r)return r.exports;var o=t[s]={exports:{}};return e[s].call(o.exports,o,o.exports,i),o.exports}(6081)})()); +-!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)("object"==typeof exports?exports:e)[s]=i[s]}}(globalThis,()=>(()=>{"use strict";var e={2840(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=r.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new c.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(e=>this._handleResize(e.rows))),this._register(this._terminal.onRender(e=>this._refreshRows(e.start,e.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(e=>this._handleChar(e))),this._register(this._terminal.onLineFeed(()=>this._handleChar("\n"))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register((0,f.addDisposableListener)(r,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register((0,d.toDisposable)(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent=l.tooMuchOutput.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const i=this._terminal.buffer,s=i.lines.length.toString();for(let r=e;r<=t;r++){const e=i.lines.get(i.ydisp+r),t=[],o=e?.translateToString(!0,void 0,void 0,t)||"",n=(i.ydisp+r+1).toString(),a=this._rowElements[r];a&&(0===o.length?(a.textContent=" ",this._rowColumns.set(a,[0,1])):(a.textContent=o,this._rowColumns.set(a,t)),a.setAttribute("aria-posinset",n),a.setAttribute("aria-setsize",s),this._alignRowWidth(a))}this._announceCharacters()}_announceCharacters(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent===l.tooMuchOutput.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){const i=e.target,s=this._rowElements[0===t?1:this._rowElements.length-2];if(i.getAttribute("aria-posinset")===(0===t?"1":`${this._terminal.buffer.lines.length}`))return;if(e.relatedTarget!==s)return;let r,o;if(0===t?(r=i,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(r=this._rowElements.shift(),o=i,this._rowContainer.removeChild(r)),r.removeEventListener("focus",this._topBoundaryFocusListener),o.removeEventListener("focus",this._bottomBoundaryFocusListener),0===t){const e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement("afterbegin",e)}else{const e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(0===this._rowElements.length)return;const e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error("anchorNode and/or focusNode are null");let t={node:e.anchorNode,offset:e.anchorOffset},i={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===i.node&&t.offset>i.offset)&&([t,i]=[i,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const s=this._rowElements.slice(-1)[0];if(i.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(i={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(i.node))return;const r=({node:e,offset:t})=>{const i=e instanceof Text?e.parentNode:e;let s=parseInt(i?.getAttribute("aria-posinset"),10)-1;if(isNaN(s))return console.warn("row is invalid. Race condition?"),null;const r=this._rowColumns.get(i);if(!r)return console.warn("columns is null. Race condition?"),null;let o=t=this._terminal.cols&&(++s,o=0),{row:s,column:o}},o=r(t),n=r(i);if(o&&n){if(o.row>n.row||o.row===n.row&&o.column>=n.column)throw new Error("invalid range");this._terminal.select(o.column,o.row,(n.row-o.row)*this._terminal.cols-o.column+n.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;ethis._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(I.EventUtils.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(I.EventUtils.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(I.EventUtils.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(I.EventUtils.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register((0,N.toDisposable)(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}_handleColorEvent(e){if(this._themeService)for(const t of e){let e,i;switch(t.index){case 256:e="foreground",i="10";break;case 257:e="background",i="11";break;case 258:e="cursor",i="12";break;default:e="ansi",i="4;"+t.index}switch(t.type){case 0:const s=E.color.toColorRGB("ansi"===e?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`]${i};${(0,M.toRgbString)(s)}\\`);break;case 1:if("ansi"===e)this._themeService.modifyColors(e=>e.ansi[t.index]=E.channels.toColor(...t.color));else{const i=e;this._themeService.modifyColors(e=>e[i]=E.channels.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_reportColorScheme(){if(!this._themeService)return;const e=E.rgb.relativeLuminance(this._themeService.colors.background.rgba>>8)>8)?1:2;this.coreService.triggerDataEvent(`[?997;${e}n`)}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(T.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;const i=Math.min(this.buffer.x,this.cols-1),s=this._renderService.dimensions.css.cell.height,r=t.getWidth(i),o=this._renderService.dimensions.css.cell.width*r,n=this.buffer.y*this._renderService.dimensions.css.cell.height,a=i*this._renderService.dimensions.css.cell.width;this.textarea.style.left=a+"px",this.textarea.style.top=n+"px",this.textarea.style.width=o+"px",this.textarea.style.height=s+"px",this.textarea.style.lineHeight=s+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this._register((0,H.addDisposableListener)(this.element,"copy",e=>{this.hasSelection()&&(0,a.copyHandler)(e,this._selectionService)}));const e=e=>(0,a.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this._register((0,H.addDisposableListener)(this.textarea,"paste",e)),this._register((0,H.addDisposableListener)(this.element,"paste",e)),x.isFirefox?this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>{2===e.button&&(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register((0,H.addDisposableListener)(this.element,"contextmenu",e=>{(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),x.isLinux&&this._register((0,H.addDisposableListener)(this.element,"auxclick",e=>{1===e.button&&(0,a.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register((0,H.addDisposableListener)(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register((0,H.addDisposableListener)(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register((0,H.addDisposableListener)(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this._register((0,H.addDisposableListener)(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",e=>this.element.classList.toggle("allow-transparency",e))),e.appendChild(this.element);const t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register((0,H.addDisposableListener)(this.screenElement,"mousemove",e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);const i=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",h.promptLabel.get()),x.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>i.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(g.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??("undefined"!=typeof window?window.document:null))),this._instantiationService.setService(C.ICoreBrowserService,this._coreBrowserService),this._register((0,H.addDisposableListener)(this.textarea,"focus",e=>this._handleTextAreaFocus(e))),this._register((0,H.addDisposableListener)(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(p.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(C.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(k.ThemeService),this._instantiationService.setService(C.IThemeService,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(v.CharacterJoinerService),this._instantiationService.setService(C.ICharacterJoinerService,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(w.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(C.IRenderService,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this._register(this._renderService.onDimensionsChange(e=>this._onDimensionsChange.fire({css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(u.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(S.MouseCoordsService),this._instantiationService.setService(C.IMouseCoordsService,this._mouseCoordsService);const s=this._linkifier.value=this._register(this._instantiationService.createInstance(O.Linkifier,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(e){this._logService.error("onWillOpen handler threw an exception",e)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(c.Viewport,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(y.SelectionService,this.element,this.screenElement,s)),this._instantiationService.setService(C.ISelectionService,this._selectionService),this._mouseService=this._instantiationService.createInstance(b.MouseService),this._instantiationService.setService(C.IMouseService,this._mouseService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(I.EventUtils.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(d.BufferDecorationRenderer,this.screenElement)),this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>this._selectionService.handleMouseDown(e))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(T.AccessibilityManager,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",e=>this._handleScreenReaderModeOptionChange(e)));const r=this.options.scrollbar?.showScrollbar??!0,o=this.options.scrollbar?.width;r&&o&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",e=>{const t=(e?.showScrollbar??!0)&&!!e?.width;!this._overviewRulerRenderer&&t&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:e=>this._viewport?.handleTouchScroll(e)},e=>this._register(e),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(f.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,i=!1){this._renderService?.refreshRows(e,t,i)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}paste(e){(0,a.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");const t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,i){this._selectionService.setSelection(e,t,i)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;const t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;t||"Dead"!==e.key&&"AltGraph"!==e.key||(this._unprocessedDeadKey=!0);const i=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),3===i.type||2===i.type){const t=this.rows-1;return this.scrollLines(2===i.type?-t:t),e.preventDefault(),e.stopPropagation(),!1}if(1===i.type&&this.selectAll(),this._isThirdLevelShift(this.browser,e))return!0;if(i.cancel&&(e.preventDefault(),e.stopPropagation()),!i.key)return!0;if(!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&1===e.key.length&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;""!==i.key&&"\r"!==i.key||(this.textarea.value="");const s=this._keyboardService.useWin32InputMode&&W(e);if(this._onKey.fire({key:i.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){const i=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return"keypress"===t.type?i:i&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return;W(e)||this.focus();const t=this._keyboardService.evaluateKeyUp(e);if(t?.key){const i=this._keyboardService.useWin32InputMode&&W(e);this.coreService.triggerDataEvent(t.key,!i)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&"insertText"===e.inputType&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;efunction(e){const t=l(e);for(t.animFrameRequested=!1,t.current=t.next,t.next=[],t.inAnimationFrameRunner=!0;t.current.length>0;)t.current.sort(a.sort),t.current.shift().execute();t.inAnimationFrameRunner=!1}(e))),r};const s=i(3132);function r(e){const t=e;if(t?.ownerDocument?.defaultView)return t.ownerDocument.defaultView;const i=e;return i?.view?i.view:window}class o{constructor(e,t,i,s){this._node=e,this._type=t,this._handler=i,this._options=s,e.addEventListener(t,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function n(e,t,i,s){return new o(e,t,i,s)}t.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class a{constructor(e,t){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){console.error(e)}}static sort(e,t){return t.priority-e.priority}}const h=new Map;function l(e){let t=h.get(e);return t||(t={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(e,t)),t}class c extends s.IntervalTimer{constructor(e){super(),this._defaultTarget=e?r(e):void 0}cancelAndSet(e,t,i){super.cancelAndSet(e,t,i??this._defaultTarget??window)}}t.WindowIntervalTimer=c},8906(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier=void 0;const o=i(4812),n=i(6501),a=i(7098),h=i(8636),l=i(4159);let c=class extends o.Disposable{get currentLink(){return this._currentLink}constructor(e,t,i,s,r){super(),this._element=e,this._mouseCoordsService=t,this._renderService=i,this._bufferService=s,this._linkProviderService=r,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this._register(new h.Emitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this._register(new h.Emitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this._register((0,o.toDisposable)(()=>{(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register((0,l.addDisposableListener)(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register((0,l.addDisposableListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;const t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;const i=e.composedPath();for(let e=0;e{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let i=!1;for(const[s,r]of this._linkProviderService.linkProviders.entries())if(t){const t=this._activeProviderReplies?.get(s);t&&(i=this._checkLinkProviderResult(s,e,i))}else r.provideLinks(e.y,t=>{if(this._isMouseOut)return;const r=t?.map(e=>({link:e}));this._activeProviderReplies?.set(s,r),i=this._checkLinkProviderResult(s,e,i),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){const i=new Set;for(let s=0;se?this._bufferService.cols:s.link.range.end.x;for(let e=o;e<=n;e++){if(i.has(e)){r.splice(t--,1);break}i.add(e)}}}}_checkLinkProviderResult(e,t,i){if(!this._activeProviderReplies)return i;const s=this._activeProviderReplies.get(e);let r=!1;for(let t=0;tthis._linkAtPosition(e.link,t));e&&(i=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!i)for(let e=0;ethis._linkAtPosition(e.link,t));if(s){i=!0,this._handleNewLink(s);break}}return i}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;const t=this._positionFromMouseEvent(e,this._element);var i,s;t&&this._mouseDownLink&&(i=this._mouseDownLink.link,s=this._currentLink.link,i.text===s.text&&i.range.start.x===s.range.start.x&&i.range.start.y===s.range.start.y&&i.range.end.x===s.range.end.x&&i.range.end.y===s.range.end.y)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;const t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;const t=0===e.start?0:e.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(t,i),this._lastMouseEvent)){const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(i,t.text)}_fireUnderlineEvent(e,t){const i=e.range,s=this._bufferService.buffer.ydisp,r=this._createLinkUnderlineEvent(i.start.x-1,i.start.y-s-1,i.end.x,i.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(r)}_linkLeave(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(i,t.text)}_linkAtPosition(e,t){const i=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,r=t.y*this._bufferService.cols+t.x;return i<=r&&r<=s}_positionFromMouseEvent(e,t){const i=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,i,s,r){return{x1:e,y1:t,x2:i,y2:s,cols:this._bufferService.cols,fg:r}}};t.Linkifier=c,t.Linkifier=c=s([r(1,a.IMouseCoordsService),r(2,a.IRenderService),r(3,n.IBufferService),r(4,a.ILinkProviderService)],c)},7721(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0;let i="Terminal input";const s={get:()=>i,set:e=>i=e};t.promptLabel=s;let r="Too much output to announce, navigate to rows manually to read";const o={get:()=>r,set:e=>r=e};t.tooMuchOutput=o},3285(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkProvider=void 0;const o=i(3055),n=i(6501);let a=class{constructor(e,t,i){this._bufferService=e,this._optionsService=t,this._oscLinkService=i,this._workCell=new o.CellData}provideLinks(e,t){const i=this._bufferService.buffer.lines.get(e-1);if(!i)return void t(void 0);const s=[],r=this._optionsService.rawOptions.linkHandler,o=this._workCell,n=i.getTrimmedLength();let a=-1,l=-1,c=!1;for(let t=0;tr?r.activate(e,t,d):h(0,t),hover:(e,t)=>r?.hover?.(e,t,d),leave:(e,t)=>r?.leave?.(e,t,d)})}c=!1,o.hasExtendedAttrs()&&o.extended.urlId?(l=t,a=o.extended.urlId):(l=-1,a=-1)}}t(s)}_getRangeWithLineWrap(e,t,i,s){let r=e,o=t,n=e,a=i;for(;0===o;){const e=this._bufferService.buffer.lines.get(r-1);if(!e?.isWrapped)break;const t=this._bufferService.buffer.lines.get(r-2);if(!t)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,i-1,s))break;let n=i-1;for(;n>0&&this._hasUrlId(t,n-1,s);)n--;r--,o=n}for(;;){const e=this._bufferService.buffer.lines.get(n-1);if(!e)break;if(a!==e.getTrimmedLength())break;const t=this._bufferService.buffer.lines.get(n);if(!t?.isWrapped)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,0,s))break;let r=1;for(;rthis._innerRefresh()),this._animationFrame}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return void this._runRefreshCallbacks();const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},4292(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;const s=performance.now();if(s-this._lastRefreshMs>=this._debounceThresholdMS)void 0!==this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=s,this._innerRefresh();else if(!this._additionalRefreshRequested){const e=s-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},t)}}_innerRefresh(){if(void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return;const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},9302(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_ANSI_COLORS=void 0;const s=i(4103);t.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const e=[s.css.toColor("#2e3436"),s.css.toColor("#cc0000"),s.css.toColor("#4e9a06"),s.css.toColor("#c4a000"),s.css.toColor("#3465a4"),s.css.toColor("#75507b"),s.css.toColor("#06989a"),s.css.toColor("#d3d7cf"),s.css.toColor("#555753"),s.css.toColor("#ef2929"),s.css.toColor("#8ae234"),s.css.toColor("#fce94f"),s.css.toColor("#729fcf"),s.css.toColor("#ad7fa8"),s.css.toColor("#34e2e2"),s.css.toColor("#eeeeec")],t=[0,95,135,175,215,255];for(let i=0;i<216;i++){const r=t[i/36%6|0],o=t[i/6%6|0],n=t[i%6];e.push({css:s.channels.toCss(r,o,n),rgba:s.channels.toRgba(r,o,n)})}for(let t=0;t<24;t++){const i=8+10*t;e.push({css:s.channels.toCss(i,i,i),rgba:s.channels.toRgba(i,i,i)})}return e})())},4017(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;const o=i(7098),n=i(4812),a=i(6501),h=i(4159),l=i(8566),c=i(8636),d=i(7880);let _=class extends n.Disposable{constructor(e,t,i,s,r,o,a,_,u){super(),this._bufferService=i,this._coreService=r,this._optionsService=_,this._renderService=u,this._onRequestScrollLines=this._register(new c.Emitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._isSyncing=!1,this._isHandlingScroll=!1,this._suppressOnScrollHandler=!1,this._needsSyncOnRender=!1;const f=this._register(new d.Scrollable({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:e=>(0,h.scheduleAtNextAnimationFrame)(s.window,e)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{f.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new l.SmoothScrollableElement(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},f)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(o.onProtocolChange(e=>{this._scrollableElement.updateOptions({handleMouseWheel:!(16&e)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{e.style.backgroundColor=a.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=a.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register((0,n.toDisposable)(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register((0,n.toDisposable)(()=>this._styleElement.remove())),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${a.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${a.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${a.colors.scrollbarSliderActiveBackground.css};`,"}"].join("\n")})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(e=>this._handleScroll(e)))}scrollLines(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){const e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,i=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:i,verticalHasArrows:t}}queueSync(e){void 0!==e&&(this._latestYDisp=e),void 0===this._queuedAnimationFrame&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){this._renderService&&!this._isSyncing&&(this._coreService.decPrivateModes.synchronizedOutput?this._needsSyncOnRender=!0:(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1))}_handleScroll(e){if(!this._renderService)return;if(this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;const t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),i=t-this._bufferService.buffer.ydisp;0!==i&&(this._latestYDisp=t,this._onRequestScrollLines.fire(i)),this._isHandlingScroll=!1}handleTouchScroll(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};t.Viewport=_,t.Viewport=_=s([r(2,a.IBufferService),r(3,o.ICoreBrowserService),r(4,a.ICoreService),r(5,a.IMouseStateService),r(6,o.IThemeService),r(7,a.IOptionsService),r(8,o.IRenderService)],_)},4196(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferDecorationRenderer=void 0;const o=i(7098),n=i(4812),a=i(6501);let h=class extends n.Disposable{constructor(e,t,i,s,r){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=i,this._decorationService=s,this._renderService=r,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(e=>this._removeDecoration(e))),this._register((0,n.toDisposable)(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){void 0===this._animationFrame&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){const t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer","top"===e?.options?.layer),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const i=e.options.x??0;return i&&i>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){const t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let i=this._decorationElements.get(e);i||(i=this._createElement(e),e.element=i,this._decorationElements.set(e,i),this._container.appendChild(i),e.onDispose(()=>{this._decorationElements.delete(e),i.remove()})),i.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(i.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",i.style.top=t*this._renderService.dimensions.css.cell.height+"px",i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(i)}}_refreshXPosition(e,t=e.element){if(!t)return;const i=e.options.x??0;"right"===(e.options.anchor||"left")?t.style.right=i?i*this._renderService.dimensions.css.cell.width+"px":"":t.style.left=i?i*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=h,t.BufferDecorationRenderer=h=s([r(1,a.IBufferService),r(2,o.ICoreBrowserService),r(3,a.IDecorationService),r(4,o.IRenderService)],h)},957(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(const t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,i){return t>=e.startBufferLine-this._linePadding[i||"full"]&&t<=e.endBufferLine+this._linePadding[i||"full"]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},9925(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OverviewRulerRenderer=void 0;const o=i(957),n=i(7098),a=i(4812),h=i(6501),l={full:0,left:0,center:0,right:0},c={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0};let _=class extends a.Disposable{get _width(){const e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??1?e?.width??0:0}constructor(e,t,i,s,r,n,h,l){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=i,this._decorationService=s,this._renderService=r,this._optionsService=n,this._themeService=h,this._coreBrowserService=l,this._colorZoneStore=new o.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register((0,a.toDisposable)(()=>this._canvas?.remove()));const c=this._canvas.getContext("2d");if(!c)throw new Error("Ctx cannot be null");this._ctx=c,this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register((0,a.toDisposable)(()=>{void 0!==this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}_refreshDrawConstants(){const e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);c.full=this._canvas.width,c.left=e,c.center=t,c.right=e,this._refreshDrawHeightConstants(),d.full=1,d.left=1,d.center=1+c.left,d.right=1+c.left+c.center}_refreshDrawHeightConstants(){l.full=Math.round(2*this._coreBrowserService.dpr);const e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);l.left=t,l.center=t,l.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;const e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1,this._renderRulerOutline();const e=this._colorZoneStore.zones;for(const t of e)"full"!==t.position&&this._renderColorZone(t);for(const t of e)"full"===t.position&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-l[e.position||"full"]/2),c[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+l[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=_,t.OverviewRulerRenderer=_=s([r(2,h.IBufferService),r(3,h.IDecorationService),r(4,n.IRenderService),r(5,h.IOptionsService),r(6,n.IThemeService),r(7,n.ICoreBrowserService)],_)},3618(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;const o=i(7098),n=i(6501);let a=class{get isComposing(){return this._isComposing}constructor(e,t,i,s,r,o){this._textarea=e,this._compositionView=t,this._bufferService=i,this._optionsService=s,this._coreService=r,this._renderService=o,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._compositionSuffix="",this._dataAlreadySent=""}compositionstart(){this._isComposing=!0;const e=this._textarea.selectionStart??this._textarea.value.length,t=this._textarea.selectionEnd??e;this._compositionPosition.start=Math.min(e,t),this._compositionPosition.end=Math.max(e,t),this._compositionSuffix=this._textarea.value.substring(this._compositionPosition.end),this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(e){this._compositionView.textContent=`‎${e.data}‎`,this.updateCompositionElements(),setTimeout(()=>{const e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)},0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(20===e.keyCode||229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove("active"),this._isComposing=!1,e){const e={start:this._compositionPosition.start,end:this._compositionPosition.end},t=this._compositionSuffix;this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){let i;if(this._isSendingComposition=!1,e.start+=this._dataAlreadySent.length,this._isComposing)i=this._textarea.value.substring(e.start,this._compositionPosition.start);else{const s=this._textarea.value,r=t.length>0&&s.endsWith(t)?s.length-t.length:s.length;i=s.substring(e.start,Math.max(e.start,r))}i.length>0&&this._coreService.triggerDataEvent(i,!0)}},0)}else{this._isSendingComposition=!1;const e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;const e=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){const t=this._textarea.value,i=t.replace(e,"");this._dataAlreadySent=i,t.length>e.length?this._coreService.triggerDataEvent(i,!0):t.lengththis.updateCompositionElements(!0),0)}}};t.CompositionHelper=a,t.CompositionHelper=a=s([r(2,n.IBufferService),r(3,n.IOptionsService),r(4,n.ICoreService),r(5,o.IRenderService)],a)},5251(e,t){function i(e,t,i){const s=i.getBoundingClientRect(),r=e.getComputedStyle(i),o=parseInt(r.getPropertyValue("padding-left"),10),n=parseInt(r.getPropertyValue("padding-top"),10);return[t.clientX-s.left-o,t.clientY-s.top-n]}Object.defineProperty(t,"__esModule",{value:!0}),t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,s,r,o,n,a,h,l){if(!n)return;const c=i(e,t,s);return c[0]=Math.ceil((c[0]+(l?a/2:0))/a),c[1]=Math.ceil(c[1]/h),c[0]=Math.min(Math.max(c[0],1),r+(l?1:0)),c[1]=Math.min(Math.max(c[1],1),o),c}},9686(e,t){function i(e,t,i,o){const h=e-s(e,i),l=t-s(t,i),c=Math.abs(h-l)-function(e,t,i){let o=0;const n=e-s(e,i),a=t-s(t,i);for(let s=0;s=0&&et?"A":"B"}function o(e,t,i,s,r,o){let n=e,a=t,h="";for(;(n!==i||a!==s)&&a>=0&&ao.cols-1?(h+=o.buffer.translateBufferLineToString(a,!1,e,n),n=0,e=0,a++):!r&&n<0&&(h+=o.buffer.translateBufferLineToString(a,!1,0,e+1),n=o.cols-1,e=n,a--);return h+o.buffer.translateBufferLineToString(a,!1,e,n)}function n(e,t){return""+(t?"O":"[")+e}function a(e,t){e=Math.floor(e);let i="";for(let s=0;s0?h-s(h,l):t;const _=h,u=function(e,t,r,o,n,a){let h;return h=i(t,o,n,a).length>0?o-s(o,n):t,e=r&&he?"D":"C",a(Math.abs(l-e),n(d,h));d=c>t?"D":"C";const _=Math.abs(c-t);return a(function(e,t){return t.cols-e}(c>t?e:l,r)+(_-1)*r.cols+1+((c>t?l:e)-1),n(d,h))}},6081(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(f.includes(e))throw new Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new _.ParserApi(this._core)}get unicode(){return this._checkProposedApi(),new u.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new d.BufferNamespaceApi(this._core))}get markers(){return this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t="none";switch(this._core.mouseStateService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:e.synchronizedOutput,win32InputMode:e.win32InputMode,wraparoundMode:e.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,i){this._verifyIntegers(e,t,i),this._core.select(e,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write("\r\n",t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return a.promptLabel.get()},set promptLabel(e){a.promptLabel.set(e)},get tooMuchOutput(){return a.tooMuchOutput.get()},set tooMuchOutput(e){a.tooMuchOutput.set(e)}}}_verifyIntegers(...e){for(p of e)if(p===1/0||isNaN(p)||p%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...e){for(p of e)if(p&&(p===1/0||isNaN(p)||p%1!=0||p<0))throw new Error("This API only accepts positive integers")}}t.Terminal=v},3955(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;const o=i(1433),n=i(2744),a=i(9176),h=i(6181),l=i(2274),c=i(654),d=i(7098),_=i(4103),u=i(4812),f=i(6501),p=i(8636),v=i(4159);let g=1,m=class extends u.Disposable{constructor(e,t,i,s,r,a,d,_,f,m,b,w,y,C){super(),this._terminal=e,this._document=t,this._element=i,this._screenElement=s,this._viewportElement=r,this._helperContainer=a,this._linkifier2=d,this._charSizeService=f,this._optionsService=m,this._bufferService=b,this._coreService=w,this._coreBrowserService=y,this._themeService=C,this._terminalClass=g++,this._rowElements=[],this._selectionRenderModel=(0,l.createSelectionRenderModel)(),this._lastSelectionColumnMode=!1,this._rowHasBlinkingCells=[],this._rowHasBlinkingCellsCount=0,this._onRequestRedraw=this._register(new p.Emitter),this.onRequestRedraw=this._onRequestRedraw.event,this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,h.createRenderDimensions)(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(e=>this._injectCss(e))),this._injectCss(this._themeService.colors),this._rowFactory=_.createInstance(o.DomRendererRowFactory,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(e=>this._handleLinkHover(e))),this._register(this._linkifier2.onHideLinkUnderline(e=>this._handleLinkLeave(e))),this._cursorBlinkStateManager=new S(this._rowContainer,this._coreBrowserService),this._register((0,v.addDisposableListener)(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register((0,u.toDisposable)(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new c.TextBlinkStateManager(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register((0,u.toDisposable)(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new n.WidthCache,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));const t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${_.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;const i=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,r=`blink_block_${this._terminalClass}`;t+=`@keyframes ${i} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${r} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(const[i,s]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${i} { color: ${s.css}; }${this._terminalSelector} .xterm-fg-${i}.xterm-dim { color: ${_.color.multiplyOpacity(s,.5).css}; }${this._terminalSelector} .xterm-bg-${i} { background-color: ${s.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR} { color: ${_.color.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${_.color.multiplyOpacity(_.color.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${a.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){const e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){const e=this._document.createElement("div");this._rowContainer.appendChild(e),this._rowElements.push(e),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,i){const s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,i);let r=0,o=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(r=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow));let n=0,a=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,i),this._selectionRenderModel.hasSelection){const s=this._selectionRenderModel.viewportStartRow,r=this._selectionRenderModel.viewportEndRow,o=this._selectionRenderModel.viewportCappedStartRow,h=this._selectionRenderModel.viewportCappedEndRow;n=o,a=h;const l=this._document.createDocumentFragment();if(i){const i=e[0]>t[0];l.appendChild(this._createSelectionElement(o,i?t[0]:e[0],i?e[0]:t[0],h-o+1))}else{const i=s===o?e[0]:0,n=o===r?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(o,i,n));const a=h-o-1;if(l.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,a)),o!==h){const e=r===h?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(h,0,e))}}this._selectionContainer.appendChild(l)}let h=Math.min(r,n),l=Math.max(o,a);if(l>=0){h=Math.max(h,0),l=Math.min(l,s-1);const e=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&e>=0&&ethis.dimensions.css.canvas.width&&(n=this.dimensions.css.canvas.width-o),r.style.height=s*this.dimensions.css.cell.height+"px",r.style.top=e*this.dimensions.css.cell.height+"px",r.style.left=`${o}px`,r.style.width=`${n}px`,r}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){const i=this._bufferService.buffer,s=i.ybase+i.y,r=Math.min(i.x,this._bufferService.cols-1),o=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,n=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,a=this._optionsService.rawOptions.cursorInactiveStyle,h={hasBlinkingCells:!1};for(let l=e;l<=t;l++){const e=l+i.ydisp,t=this._rowElements[l];if(!t)continue;const c=i.lines.get(e);c?(t.replaceChildren(...this._rowFactory.createRow(c,e,e===s,n,a,r,o,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,h)),this._setRowBlinkState(l,h.hasBlinkingCells)):(t.replaceChildren(),this._setRowBlinkState(l,!1))}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,i,s,r,o){i<0&&(e=0),s<0&&(t=0);const n=this._bufferService.rows-1;i=Math.max(Math.min(i,n),0),s=Math.max(Math.min(s,n),0),r=Math.min(r,this._bufferService.cols);const a=this._bufferService.buffer,h=a.ybase+a.y,l=Math.min(a.x,r-1),c=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,_=this._optionsService.rawOptions.cursorInactiveStyle,u={hasBlinkingCells:!1};for(let n=i;n<=s;++n){const f=n+a.ydisp,p=this._rowElements[n];if(!p)continue;const v=a.lines.get(f);v?(p.replaceChildren(...this._rowFactory.createRow(v,f,f===h,d,_,l,c,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,o?n===i?e:0:-1,o?(n===s?t:r)-1:-1,u)),this._setRowBlinkState(n,u.hasBlinkingCells)):(p.replaceChildren(),this._setRowBlinkState(n,!1))}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};t.DomRenderer=m,t.DomRenderer=m=s([r(7,f.IInstantiationService),r(8,d.ICharSizeService),r(9,f.IOptionsService),r(10,f.IBufferService),r(11,f.ICoreService),r(12,d.ICoreBrowserService),r(13,d.IThemeService)],m);class S{constructor(e,t){this._rowContainer=e,this._coreBrowserService=t,this._isIdlePaused=!1,this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){void 0!==this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}}},1433(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=void 0;const o=i(9176),n=i(8938),a=i(3055),h=i(6501),l=i(4103),c=i(7098),d=i(945),_=i(6181),u=i(5451);let f=class{constructor(e,t,i,s,r,o,n){this._document=e,this._characterJoinerService=t,this._optionsService=i,this._coreBrowserService=s,this._coreService=r,this._decorationService=o,this._themeService=n,this._workCell=new a.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,i){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=i}createRow(e,t,i,s,r,a,h,c,_,f,p,v,g){const m=[];g&&(g.hasBlinkingCells=!1);const S=this._characterJoinerService.getJoinedCharacters(t),b=this._themeService.colors;let w,y=e.getNoBgTrimmedLength();i&&y=P,F=I,W=this._workCell;if(S.length>0&&I===S[0][0]&&N){const s=S.shift(),r=this._isCellInSelection(s[0],t);for(C=s[0]+1;C=s[1],N?(H=!0,W=new d.JoinedCellData(this._workCell,e.translateToString(!0,s[0],s[1]),s[1]-s[0]),F=s[1]-1,y=W.getWidth()):P=s[1]}const z=this._isCellInSelection(I,t),K=i&&I===a,U=O&&I>=p&&I<=v;g&&W.isBlink()&&(g.hasBlinkingCells=!0),!c&&W.isBlink()&&T.push("xterm-blink-hidden");let j=!1;this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{j=!0});let $=W.getChars()||n.WHITESPACE_CELL_CHAR;if(" "===$&&(W.isUnderline()||W.isOverline())&&($=" "),k=y*_-f.get($,W.isBold(),W.isItalic()),w){if(D&&(z&&A||!z&&!A&&W.bg===L)&&(z&&A&&b.selectionForeground||W.fg===x)&&W.extended.ext===R&&U===M&&k===B&&!K&&!H&&!j&&N){W.isInvisible()?E+=n.WHITESPACE_CELL_CHAR:E+=$,D++;continue}D&&(w.textContent=E),w=this._document.createElement("span"),D=0,E=""}else w=this._document.createElement("span");if(L=W.bg,x=W.fg,R=W.extended.ext,M=U,B=k,A=z,H&&a>=I&&a<=F&&(a=I),!this._coreService.isCursorHidden&&K&&this._coreService.isCursorInitialized)if(T.push("xterm-cursor"),this._coreBrowserService.isFocused)h&&T.push("xterm-cursor-blink"),T.push("bar"===s?"xterm-cursor-bar":"underline"===s?"xterm-cursor-underline":"xterm-cursor-block");else if(r)switch(r){case"outline":T.push("xterm-cursor-outline");break;case"block":T.push("xterm-cursor-block");break;case"bar":T.push("xterm-cursor-bar");break;case"underline":T.push("xterm-cursor-underline")}if(W.isBold()&&T.push("xterm-bold"),W.isItalic()&&T.push("xterm-italic"),W.isDim()&&T.push("xterm-dim"),E=W.isInvisible()?n.WHITESPACE_CELL_CHAR:W.getChars()||n.WHITESPACE_CELL_CHAR,W.isUnderline()&&(T.push(`xterm-underline-${W.extended.underlineStyle}`)," "===E&&(E=" "),!W.isUnderlineColorDefault()))if(W.isUnderlineColorRGB())w.style.textDecorationColor=`rgb(${u.AttributeData.toColorRGB(W.getUnderlineColor()).join(",")})`;else{let e=W.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&W.isBold()&&e<8&&(e+=8),w.style.textDecorationColor=b.ansi[e].css}W.isOverline()&&(T.push("xterm-overline")," "===E&&(E=" ")),W.isStrikethrough()&&T.push("xterm-strikethrough"),U&&(w.style.textDecoration="underline");let V=W.getFgColor(),q=W.getFgColorMode(),X=W.getBgColor(),Y=W.getBgColorMode();const G=!!W.isInverse();if(G){const e=V;V=X,X=e;const t=q;q=Y,Y=t}let J,Z,Q,ee=!1;switch(this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{"top"!==e.options.layer&&ee||(e.backgroundColorRGB&&(Y=50331648,X=e.backgroundColorRGB.rgba>>8&16777215,J=e.backgroundColorRGB),e.foregroundColorRGB&&(q=50331648,V=e.foregroundColorRGB.rgba>>8&16777215,Z=e.foregroundColorRGB),ee="top"===e.options.layer)}),!ee&&z&&(J=this._coreBrowserService.isFocused?b.selectionBackgroundOpaque:b.selectionInactiveBackgroundOpaque,X=J.rgba>>8&16777215,Y=50331648,ee=!0,b.selectionForeground&&(q=50331648,V=b.selectionForeground.rgba>>8&16777215,Z=b.selectionForeground)),ee&&T.push("xterm-decoration-top"),Y){case 16777216:case 33554432:Q=b.ansi[X],T.push(`xterm-bg-${X}`);break;case 50331648:Q=l.channels.toColor(X>>16,X>>8&255,255&X),this._addStyle(w,`background-color:#${(X>>>0).toString(16).padStart(6,"0")}`);break;default:G?(Q=b.foreground,T.push(`xterm-bg-${o.INVERTED_DEFAULT_COLOR}`)):Q=b.background}switch(J||W.isDim()&&(J=l.color.multiplyOpacity(Q,.5)),q){case 16777216:case 33554432:W.isBold()&&V<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(V+=8),this._applyMinimumContrast(w,Q,b.ansi[V],W,J,void 0)||T.push(`xterm-fg-${V}`);break;case 50331648:const e=l.channels.toColor(V>>16&255,V>>8&255,255&V);this._applyMinimumContrast(w,Q,e,W,J,Z)||this._addStyle(w,`color:#${V.toString(16).padStart(6,"0")}`);break;default:this._applyMinimumContrast(w,Q,b.foreground,W,J,Z)||G&&T.push(`xterm-fg-${o.INVERTED_DEFAULT_COLOR}`)}T.length&&(w.className=T.join(" "),T.length=0),K||H||j||!N?w.textContent=E:D++,k!==this.defaultSpacing&&(w.style.letterSpacing=`${k}px`),m.push(w),I=F}return w&&D&&(w.textContent=E),m}_applyMinimumContrast(e,t,i,s,r,o){if(1===this._optionsService.rawOptions.minimumContrastRatio||(0,_.treatGlyphAsBackgroundColor)(s.getCode()))return!1;const n=this._getContrastCache(s);let a;if(r||o||(a=n.getColor(t.rgba,i.rgba)),void 0===a){const e=this._optionsService.rawOptions.minimumContrastRatio/(s.isDim()?2:1);a=l.color.ensureContrastRatio(r??t,o??i,e),n.setColor((r??t).rgba,(o??i).rgba,a??null)}return!!a&&(this._addStyle(e,`color:${a.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute("style",`${e.getAttribute("style")||""}${t};`)}_isCellInSelection(e,t){const i=this._selectionStart,s=this._selectionEnd;return!(!i||!s)&&(this._columnSelectMode?i[0]<=s[0]?e>=i[0]&&t>=i[1]&&e=i[1]&&e>=s[0]&&t<=s[1]:t>i[1]&&t=i[0]&&e=i[0])}};t.DomRendererRowFactory=f,t.DomRendererRowFactory=f=s([r(1,c.ICharacterJoinerService),r(2,h.IOptionsService),r(3,c.ICoreBrowserService),r(4,h.ICoreService),r(5,h.IDecorationService),r(6,c.IThemeService)],f)},2744(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WidthCache=void 0;const s=i(6181);t.WidthCache=class{constructor(e=()=>new r){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._canvasElements=[],this._canvasElements=[e(),e(),e(),e()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,i,s){e===this._font&&t===this._fontSize&&i===this._weight&&s===this._weightBold||(this._font=e,this._fontSize=t,this._weight=i,this._weightBold=s,this._canvasElements[0].setFont(e,t,i,!1),this._canvasElements[1].setFont(e,t,s,!1),this._canvasElements[2].setFont(e,t,i,!0),this._canvasElements[3].setFont(e,t,s,!0),this.clear())}get(e,t,i){let s;if(!t&&!i&&1===e.length&&(s=e.charCodeAt(0))<256){if(-9999!==this._flat[s])return this._flat[s];const t=this._measure(e,0);return t>0&&(this._flat[s]=t),t}let r=e;t&&(r+="B"),i&&(r+="I");let o=this._holey.get(r);if(void 0===o){let s=0;t&&(s|=1),i&&(s|=2),o=this._measure(e,s),o>0&&this._holey.set(r,o)}return o}_measure(e,t){return this._canvasElements[t].measure(e)}};class r{constructor(){"undefined"!=typeof OffscreenCanvas?(this._canvas=new OffscreenCanvas(1,1),this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d")))}setFont(e,t,i,s){const r=s?"italic":"";this._ctx.font=`${r} ${i} ${t}px ${e}`.trim()}measure(e){return this._ctx.measureText(e).width}}},9176(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.INVERTED_DEFAULT_COLOR=void 0,t.INVERTED_DEFAULT_COLOR=257},6181(e,t){function i(e){return 57508<=e&&e<=57558}function s(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e},t.isPowerlineGlyph=i,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=s,t.allowRescaling=function(e,t,r,o){return 1===t&&r>Math.ceil(1.5*o)&&void 0!==e&&e>255&&!s(e)&&!i(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return i(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,i=0){return(e-(2*Math.round(t)-i))%(2*Math.round(t))}},2274(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,i,s=!1){if(this.selectionStart=t,this.selectionEnd=i,!t||!i||t[0]===i[0]&&t[1]===i[1])return void this.clear();const r=e.buffers.active.ydisp,o=t[1]-r,n=i[1]-r,a=Math.max(o,0),h=Math.min(n,e.rows-1);a>=e.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=o,this.viewportEndRow=n,this.viewportCappedStartRow=a,this.viewportCappedEndRow=h,this.startCol=t[0],this.endCol=i[0])}isCellSelected(e,t,i){return!!this.hasSelection&&(i-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&i>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&t=this.startCol)}}},654(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.TextBlinkStateManager=void 0;const s=i(4812);class r extends s.Disposable{constructor(e,t,i){super(),this._renderCallback=e,this._coreBrowserService=t,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",e=>{this.setIntervalDuration(e)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const e=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(e||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}t.TextBlinkStateManager=r},8501(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._domNodePointerDown(e)))}_createArrow(e){const t=this._register(new c.ScrollbarArrow(e));return this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode),t}_createSlider(e,t,i,s){this.slider=new h.FastDomNode(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"==typeof i&&this.slider.setWidth(i),"number"==typeof s&&this.slider.setHeight(s),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(a.addDisposableListener(this.slider.domNode,a.eventType.POINTER_DOWN,e=>{0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))})),this._onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_handleElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._handlePointerDown(e)}delegatePointerDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),s=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),r=this._sliderPointerPosition(e);i<=r&&r<=s?0===e.button&&(e.preventDefault(),this._sliderPointerDown(e)):this._handlePointerDown(e)}_handlePointerDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"==typeof e.offsetX&&"number"==typeof e.offsetY)t=e.offsetX,i=e.offsetY;else{const s=a.getDomNodePagePosition(this.domNode.domNode);t=e.pageX-s.left,i=e.pageY-s.top}const s=this._pointerDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(s):this._scrollbarState.getDesiredScrollPositionFromOffset(s)),0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!(e.target&&e.target instanceof Element))return;const t=this._sliderPointerPosition(e),i=this._sliderOrthogonalPointerPosition(e),s=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{const r=this._sliderOrthogonalPointerPosition(e),o=Math.abs(r-i);if(u.isWindows&&o>140)return void this._setDesiredScrollPositionNow(s.getScrollPosition());const n=this._sliderPointerPosition(e)-t;this._setDesiredScrollPositionNow(s.getDesiredScrollPositionFromDelta(n))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}t.AbstractScrollbar=f},1203(e,t){function i(e){return"number"==typeof e?`${e}px`:e}Object.defineProperty(t,"__esModule",{value:!0}),t.FastDomNode=void 0,t.FastDomNode=class{constructor(e){this.domNode=e,this._width="",this._height="",this._top="",this._left="",this._bottom="",this._right="",this._className="",this._position="",this._layerHint=!1,this._contain="none"}setWidth(e){const t=i(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){const t=i(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){const t=i(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){const t=i(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){const t=i(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){const t=i(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=e?"translate3d(0px, 0px, 0px)":"")}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}}},928(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{try{e.releasePointerCapture(t)}catch{}}))}catch{o=a.getWindow(e)}this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_MOVE,e=>{e.buttons===i?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)})),this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_UP,e=>this.stopMonitoring(!0)))}}},9699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.HorizontalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(t.horizontalHasArrows?t.horizontalScrollbarSize:0,2===t.horizontal?0:t.horizontalScrollbarSize,2===t.vertical?0:t.verticalScrollbarSize,s.width,s.scrollWidth,o.scrollLeft),visibility:t.horizontal,extraScrollbarClassName:"xterm-horizontal",scrollable:e,scrollByPage:t.scrollByPage}),t.horizontalHasArrows)throw new Error("horizontalHasArrows is not supported in xterm.js");this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._handleElementSize(e.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return e}_sliderPointerPosition(e){return e.pageX}_sliderOrthogonalPointerPosition(e){return e.pageY}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}updateOptions(e){this.updateScrollbarSize(2===e.horizontal?0:e.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._visibilityController.setVisibility(e.horizontal),this._scrollByPage=e.scrollByPage}}t.HorizontalScrollbar=o},3988(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;ni&&(s=i-t),s<0&&(s=0),r<0&&(r=0),n+r>o&&(n=o-r),n<0&&(n=0),this.width=t,this.scrollWidth=i,this.scrollLeft=s,this.height=r,this.scrollHeight=o,this.scrollTop=n}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new o(this._forceIntegerValues,void 0!==e.width?e.width:this.width,void 0!==e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,void 0!==e.height?e.height:this.height,void 0!==e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new o(this._forceIntegerValues,this.width,this.scrollWidth,void 0!==e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,void 0!==e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){const i=this.width!==e.width,s=this.scrollWidth!==e.scrollWidth,r=this.scrollLeft!==e.scrollLeft,o=this.height!==e.height,n=this.scrollHeight!==e.scrollHeight,a=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:s,scrollLeftChanged:r,heightChanged:o,scrollHeightChanged:n,scrollTopChanged:a}}}t.ScrollState=o;class n extends r.Disposable{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new s.Emitter),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new o(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){const i=this._state.withScrollDimensions(e,t);this._setState(i,Boolean(this._smoothScrolling)),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0!==this._smoothScrollDuration){if(this._smoothScrolling){e={scrollLeft:void 0===e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:void 0===e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop};const i=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let s;s=t?new l(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):l.start(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=l.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}else this.setScrollPositionNow(e)}hasPendingScrollAnimation(){return Boolean(this._smoothScrolling)}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}t.Scrollable=n;class a{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function h(e,t){const i=t-e;return function(t){return e+i*(1-(s=1-t,Math.pow(s,3)));var s}}class l{constructor(e,t,i,s){this.from=e,this.to=t,this.duration=s,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this._scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this._scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(e,t,i){if(Math.abs(e-t)>2.5*i){let n,a;return e0&&Math.abs(e.deltaY)>0)return 1;let i=.5;if(this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(i+=.25),t){const s=Math.abs(e.deltaX),r=Math.abs(e.deltaY),o=Math.abs(t.deltaX),n=Math.abs(t.deltaY),a=Math.max(Math.min(s,o),1),h=Math.max(Math.min(r,n),1),l=Math.max(s,o),c=Math.max(r,n);l%a===0&&c%h===0&&(i-=.5)}return Math.min(Math.max(i,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}}S.INSTANCE=new S;class b extends _.Widget{get options(){return this._options}constructor(e,t,i){let s;super(),this._onScroll=this._register(new f.Emitter),this.onScroll=this._onScroll.event,t=t??{};const r=!i;i?s=i:(t.mouseWheelSmoothScroll=!1,s=new g.Scrollable({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:t=>a.scheduleAtNextAnimationFrame(a.getWindow(e),t)})),this._options=function(e){const t={lazyRender:void 0!==e.lazyRender&&e.lazyRender,className:void 0!==e.className?e.className:"",useShadows:void 0===e.useShadows||e.useShadows,handleMouseWheel:void 0===e.handleMouseWheel||e.handleMouseWheel,flipAxes:void 0!==e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:void 0!==e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:void 0!==e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:void 0!==e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:void 0!==e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:void 0!==e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:void 0===e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:void 0===e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,listenOnDomNode:void 0!==e.listenOnDomNode?e.listenOnDomNode:null,horizontal:void 0!==e.horizontal?e.horizontal:1,horizontalScrollbarSize:void 0!==e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:void 0!==e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:void 0!==e.horizontalHasArrows&&e.horizontalHasArrows,vertical:void 0!==e.vertical?e.vertical:1,verticalScrollbarSize:void 0!==e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:void 0!==e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:void 0!==e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:void 0!==e.scrollByPage&&e.scrollByPage};return t.horizontalSliderSize=void 0!==e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=void 0!==e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,v.isMac&&(t.className+=" xterm-mac"),t}(t),this._scrollable=s,this._register(this._scrollable.onScroll(e=>{this._handleScroll(e),this._onScroll.fire(e)})),r&&this._register(this._scrollable);const o={handleMouseWheel:e=>this._handleMouseWheel(e),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new d.VerticalScrollbar(this._scrollable,this._options,o)),this._horizontalScrollbar=this._register(new c.HorizontalScrollbar(this._scrollable,this._options,o)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,e=>this._handleMouseOver(e)),this._onmouseleave(this._listenOnDomNode,e=>this._handleMouseLeave(e)),this._hideTimeout=this._register(new u.TimeoutTimer),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,v.isMac&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){void 0!==e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),void 0!==e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),void 0!==e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),void 0!==e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),void 0!==e.horizontal&&(this._options.horizontal=e.horizontal),void 0!==e.vertical&&(this._options.vertical=e.vertical),void 0!==e.horizontalHasArrows&&(this._options.horizontalHasArrows=e.horizontalHasArrows),void 0!==e.verticalHasArrows&&(this._options.verticalHasArrows=e.verticalHasArrows),void 0!==e.horizontalScrollbarSize&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),void 0!==e.verticalScrollbarSize&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),void 0!==e.scrollByPage&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new l.StandardWheelEvent(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),e)){const e=e=>{this._handleMouseWheel(new l.StandardWheelEvent(e))};this._mouseWheelToDispose.push(a.addDisposableListener(this._listenOnDomNode,a.eventType.MOUSE_WHEEL,e,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;const t=S.INSTANCE;t.acceptStandardWheelEvent(e);let i=!1;if(e.deltaY||e.deltaX){let s=e.deltaY*this._options.mouseWheelScrollSensitivity,r=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&r+s===0?r=s=0:Math.abs(s)>=Math.abs(r)?r=0:s=0),this._options.flipAxes&&([s,r]=[r,s]);const o=!v.isMac&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!o||r||(r=s,s=0),e.browserEvent&&e.browserEvent.altKey&&(r*=this._options.fastScrollSensitivity,s*=this._options.fastScrollSensitivity);const n=this._scrollable.getFutureScrollPosition();let a={};if(s){const e=50*s,t=n.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(a,t)}if(r){const e=50*r,t=n.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(a,t)}a=this._scrollable.validateScrollPosition(a),(n.scrollLeft!==a.scrollLeft||n.scrollTop!==a.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),i=!0)}let s=i;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0,s=i?" xterm-shadow-left":"",r=t?" xterm-shadow-top":"",o=i||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${r}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${o}${r}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet(()=>this._hide(),500)}}t.SmoothScrollableElement=b},9594(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._arrowPointerDown(e))),this._register(c.addStandardDisposableListener(this.domNode,c.eventType.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new c.WindowIntervalTimer),this._pointerdownScheduleRepeatTimer=this._register(new l.TimeoutTimer)}_arrowPointerDown(e){e.target&&e.target instanceof Element&&(this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,c.getWindow(e))},200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),e.preventDefault())}}t.ScrollbarArrow=d},1270(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollbarState=void 0;class i{constructor(e,t,i,s,r,o){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=s,this._scrollSize=r,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new i(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setArrowSize(e){const t=Math.round(e);this._arrowSize!==t&&(this._arrowSize=t,this._refreshComputedValues())}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,i,s,r){const o=Math.max(0,i-e),n=Math.max(0,o-2*t),a=s>0&&s>i;if(!a)return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(n),computedSliderRatio:0,computedSliderPosition:0};const h=Math.round(Math.max(20,Math.floor(i*n/s))),l=(n-h)/(s-i),c=r*l;return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(h),computedSliderRatio:l,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){const e=i._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize;let i=this._scrollPosition;return t{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(e?" xterm-fade":"")))}}t.ScrollbarVisibilityController=o},2650(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{s||(s=!0,this._remove(i))}}_remove(e){if(e.prev!==_.Undefined&&e.next!==_.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===_.Undefined&&e.next===_.Undefined?(this._first=_.Undefined,this._last=_.Undefined):e.next===_.Undefined?(this._last=this._last.prev,this._last.next=_.Undefined):e.prev===_.Undefined&&(this._first=this._first.next,this._first.prev=_.Undefined)}*[Symbol.iterator](){let e=this._first;for(;e!==_.Undefined;)yield e.element,e=e.next}}var f;!function(e){e.TAP="-xterm-gesturetap",e.CHANGE="-xterm-gesturechange",e.START="-xterm-gesturestart",e.END="-xterm-gesturesend",e.CONTEXT_MENU="-xterm-gesturecontextmenu"}(f||(t.EventType=f={}));class p extends l.Disposable{constructor(){super(),this._dispatched=!1,this._targets=new u,this._ignoreTargets=new u,this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;const e=c;this._register(h.addDisposableListener(e.document,"touchstart",e=>this._handleTouchStart(e),{passive:!1})),this._register(h.addDisposableListener(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(h.addDisposableListener(e.document,"touchmove",e=>this._handleTouchMove(e),{passive:!1}))}static addTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._targets.push(e);return(0,l.toDisposable)(t)}static ignoreTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._ignoreTargets.push(e);return(0,l.toDisposable)(t)}static isTouchDevice(){return"ontouchstart"in c||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){const t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let i=0,s=e.targetTouches.length;i=p._holdDelay&&Math.abs(n.initialPageX-d(n.rollingPageX))<30&&Math.abs(n.initialPageY-d(n.rollingPageY))<30){const e=this._newGestureEvent(f.CONTEXT_MENU,n.initialTarget);e.pageX=d(n.rollingPageX),e.pageY=d(n.rollingPageY),this._dispatchEvent(e)}else if(1===s){const t=d(n.rollingPageX),s=d(n.rollingPageY),r=d(n.rollingTimestamps)-n.rollingTimestamps[0],o=t-n.rollingPageX[0],a=s-n.rollingPageY[0],h=[...this._targets].filter(e=>n.initialTarget instanceof Node&&e.contains(n.initialTarget));this._inertia(e,h,i,Math.abs(o)/r,o>0?1:-1,t,Math.abs(a)/r,a>0?1:-1,s)}this._dispatchEvent(this._newGestureEvent(f.END,n.initialTarget)),delete this._activeTouches[o.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){const i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}_dispatchEvent(e){if(e.type===f.TAP){const t=(new Date).getTime();let i;i=t-this._lastSetTapCountTime>p._clearTapCountTime?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==f.CHANGE&&e.type!==f.CONTEXT_MENU||(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(const t of this._ignoreTargets)if(t.contains(e.initialTarget))return;const t=[];for(const i of this._targets)if(i.contains(e.initialTarget)){let s=0,r=e.initialTarget;for(;r&&r!==i;)s++,r=r.parentElement;t.push([s,i])}t.sort((e,t)=>e[0]-t[0]);for(const[,i]of t)i.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,i,s,r,o,n,a,l){this._handle=h.scheduleAtNextAnimationFrame(e,()=>{const h=Date.now(),c=h-i;let d=0,_=0,u=!0;s+=p._scrollFriction*c,n+=p._scrollFriction*c,s>0&&(u=!1,d=r*s*c),n>0&&(u=!1,_=a*n*c);const v=this._newGestureEvent(f.CHANGE);v.translationX=d,v.translationY=_,t.forEach(e=>e.dispatchEvent(v)),u||this._inertia(e,t,h,s,r,o+d,n,a,l+_)})}_handleTouchMove(e){const t=Date.now();for(let i=0,s=e.changedTouches.length;i3&&(r.rollingPageX.shift(),r.rollingPageY.shift(),r.rollingTimestamps.shift()),r.rollingPageX.push(s.pageX),r.rollingPageY.push(s.pageY),r.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}}t.Gesture=p,p._scrollFriction=-.005,p._holdDelay=700,p._clearTapCountTime=400,n([function(e,t,i){let s=null,r=null;if("function"==typeof i.value?(s="value",r=i.value,0!==r.length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"==typeof i.get&&(s="get",r=i.get),!r||!s)throw new Error("not supported");const o=`$memoize$${t}`;i[s]=function(...e){return this.hasOwnProperty(o)||Object.defineProperty(this,o,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,e)}),this[o]}}],p,"isTouchDevice",null)},8997(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.VerticalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition(),n=t.verticalHasArrows;super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(n?t.verticalScrollbarSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,s.height,s.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"xterm-vertical",scrollable:e,scrollByPage:t.scrollByPage}),this._arrowScrollDelta=0,this._setArrows(n,t.verticalScrollbarSize),this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._handleElementSize(e.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return t}_sliderPointerPosition(e){return e.pageY}_sliderOrthogonalPointerPosition(e){return e.pageX}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}_arrowScroll(e){const t=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollTop:t.scrollTop+e})}_setArrows(e,t){if(this._arrowScrollDelta=t,!this._arrowUp||!this._arrowDown){const e=0;this._arrowUp=this._createArrow({className:"xterm-scra xterm-arrow-up",top:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})}if(this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;const i=e?"":"none";this._arrowUp.bgDomNode.style.display=i,this._arrowUp.domNode.style.display=i,this._arrowDown.bgDomNode.style.display=i,this._arrowDown.domNode.style.display=i}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){const t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}}t.VerticalScrollbar=o},7741(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nt(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseover(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_OVER,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseleave(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_LEAVE,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}}t.Widget=c},5959(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):!!(this.selectionStart&&this.selectionStart[1]<0)&&(this.selectionStart=[0,0],!0)}}},4792(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;const o=i(6501),n=i(4812),a=i(8636);let h=class extends n.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,i){super(),this._optionsService=i,this.width=0,this.height=0,this._onCharSizeChange=this._register(new a.Emitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new d(this._optionsService))}catch{this._measureStrategy=this._register(new c(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=h,t.CharSizeService=h=s([r(2,o.IOptionsService)],h);class l extends n.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){void 0!==e&&e>0&&void 0!==t&&t>0&&(this._result.width=e,this._result.height=t)}}class c extends l{constructor(e,t,i){super(),this._document=e,this._parentElement=t,this._optionsService=i,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends l{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");const t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},945(e,t,i){var s,r=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},o=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;const n=i(5451),a=i(8938),h=i(3055),l=i(6501);class c extends n.AttributeData{constructor(e,t,i){super(),this.content=0,this.combinedData="",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=c;let d=s=class{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new h.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;tthis._screenDprMonitor.setWindow(e))),this._register(s.EventUtils.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register((0,r.addDisposableListener)(this._textarea,"focus",()=>this._isFocused=!0)),this._register((0,r.addDisposableListener)(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return void 0===this._cachedIsFocused&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}}t.CoreBrowserService=n;class a extends o.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this._register(new o.MutableDisposable),this._onDprChange=this._register(new s.Emitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register((0,o.toDisposable)(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,r.addDisposableListener)(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},2136(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.KeyboardService=void 0;const o=i(706),n=i(7241),a=i(9249),h=i(701),l=i(6501);let c=class{constructor(e,t){this._coreService=e,this._optionsService=t}_getWin32InputMode(){return this._win32InputMode??=new a.Win32InputMode,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new n.KittyKeyboard,this._kittyKeyboard}evaluateKeyDown(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!0);const t=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(e,t,e.repeat?2:1,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):(0,o.evaluateKeyboardEvent)(e,this._coreService.decPrivateModes.applicationCursorKeys,h.isMac,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!1);const t=this._coreService.kittyKeyboard.flags;return this.useKitty&&2&t?this._getKittyKeyboard().evaluate(e,t,3,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):void 0}get useKitty(){const e=this._coreService.kittyKeyboard.flags;return!(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard||!n.KittyKeyboard.shouldUseProtocol(e))}get useWin32InputMode(){return!(!this._optionsService.rawOptions.vtExtensions?.win32InputMode||!this._coreService.decPrivateModes.win32InputMode)}};t.KeyboardService=c,t.KeyboardService=c=s([r(0,l.ICoreService),r(1,l.IOptionsService)],c)},9820(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.LinkProviderService=void 0;const s=i(4812);class r extends s.Disposable{constructor(){super(),this.linkProviders=[],this._register((0,s.toDisposable)(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{const t=this.linkProviders.indexOf(e);-1!==t&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=r},8294(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseCoordsService=void 0;const o=i(4159),n=i(5251),a=i(7098);let h=class{constructor(e,t){this._charSizeService=e,this._renderService=t}getCoords(e,t,i,s,r){return(0,n.getCoords)((0,o.getWindow)(t),e,t,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,r)}getMouseReportCoords(e,t){const i=(0,n.getCoordsRelativeToElement)((0,o.getWindow)(t),e,t);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};t.MouseCoordsService=h,t.MouseCoordsService=h=s([r(0,a.ICharSizeService),r(1,a.IRenderService)],h)},9784(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.AltMouseCursorController=t.MouseService=void 0;const o=i(4159),n=i(6501),a=i(4812),h=i(7098),l=i(2650);let c=class{constructor(e,t,i,s,r,o,n,a,h){this._renderService=e,this._mouseCoordsService=t,this._mouseStateService=i,this._coreService=s,this._bufferService=r,this._optionsService=o,this._selectionService=n,this._logService=a,this._coreBrowserService=h,this._lastEvent=null,this._wheelPartialScroll=0,this._touchScrollAccumulator=0}bindMouse(e,t,i){const{element:s,document:r}=e,n=new a.MutableDisposable,h=new a.MutableDisposable;t(n),t(h);const c={target:e,focus:i,requestedEvents:{mouseup:null,wheel:null,mousedrag:null,mousemove:null},mouseupListener:n,mousedragListener:h},_={mouseup:e=>this._handleMouseUp(c,e),wheel:e=>this._handleWheel(c,e),mousedrag:e=>this._handleMouseDrag(c,e),mousemove:e=>this._handleMouseMove(c,e)};this._altMouseCursor=new d(s,r,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),t(this._altMouseCursor),t(this._mouseStateService.onProtocolChange(e=>{this._handleProtocolChange(c,_,e)})),t(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(s),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,t((0,o.addDisposableListener)(s,"mousedown",e=>this._handleMouseDown(c,e))),t((0,o.addDisposableListener)(s,"wheel",e=>this._handlePassiveWheel(c,e),{passive:!1})),t(l.Gesture.addTarget(e.screenElement)),t((0,o.addDisposableListener)(e.screenElement,l.EventType.START,()=>this._handleTouchStart())),t((0,o.addDisposableListener)(e.screenElement,l.EventType.CHANGE,e=>this._handleTouchChange(c,e)))}_sendEvent(e,t){const i=this._mouseCoordsService.getMouseReportCoords(t,e.target.screenElement);if(!i)return!1;let s,r;switch(t.overrideType||t.type){case"mousemove":r=32,void 0===t.buttons?(s=3,void 0!==t.button&&(s=t.button<3?t.button:3)):s=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case"mouseup":r=0,s=t.button<3?t.button:3;break;case"mousedown":r=1,s=t.button<3?t.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;const e=t.deltaY;if(0===e)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return!1;r=e<0?0:1,s=4;break;default:return!1}if(void 0===r||void 0===s||s>4)return!1;if(4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!t.altKey)return!1;const o=4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:i.col,row:i.row,x:i.x,y:i.y,button:s,action:r,ctrl:t.ctrlKey,alt:!o&&t.altKey,shift:t.shiftKey})}_handleMouseUp(e,t){this._sendEvent(e,t),t.buttons||(e.mouseupListener.clear(),e.mousedragListener.clear())}_handleWheel(e,t){return this._sendEvent(e,t),t.preventDefault(),t.stopPropagation(),!1}_handleMouseDrag(e,t){t.buttons&&this._sendEvent(e,t)}_handleMouseMove(e,t){t.buttons||this._sendEvent(e,t)}_handleMouseDown(e,t){if(t.preventDefault(),e.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(t))return;this._sendEvent(e,t);const{element:i,document:s}=e.target,r=i.ownerDocument??s;e.requestedEvents.mouseup&&(e.mouseupListener.value=(0,o.addDisposableListener)(r,"mouseup",e.requestedEvents.mouseup)),e.requestedEvents.mousedrag&&(e.mousedragListener.value=(0,o.addDisposableListener)(r,"mousemove",e.requestedEvents.mousedrag))}_handlePassiveWheel(e,t){if(!e.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;if(!this._bufferService.buffer.hasScrollback){if(0===t.deltaY)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return t.preventDefault(),t.stopPropagation(),!1;const e=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(e,!0),t.preventDefault(),t.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(e,t){t.preventDefault(),t.stopPropagation(),e.requestedEvents.wheel?this._handleTouchScrollAsWheel(e,t):this._bufferService.buffer.hasScrollback?e.target.handleTouchScroll?.(t.translationY):this._handleTouchScrollAsKeys(t)}_handleTouchScrollAsKeys(e){const t=this._renderService?.dimensions.css.cell.height;if(!t)return;this._touchScrollAccumulator-=e.translationY;const i=Math.trunc(this._touchScrollAccumulator/t);if(0===i)return;this._touchScrollAccumulator-=i*t;const s=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(i<0?"A":"B");for(let e=0;e0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(r*=this._bufferService.rows),r}_triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._mouseStateService.isPixelEncoding))return!1;if(!this._mouseStateService.restrictMouseEvent(e))return!1;const t=this._mouseStateService.encodeMouseEvent(e);return t&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}_explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.MouseService=c,t.MouseService=c=s([r(0,h.IRenderService),r(1,h.IMouseCoordsService),r(2,n.IMouseStateService),r(3,n.ICoreService),r(4,n.IBufferService),r(5,n.IOptionsService),r(6,h.ISelectionService),r(7,n.ILogService),r(8,h.ICoreBrowserService)],c);class d{constructor(e,t,i){this._element=e,this._document=t,this._isActive=i,this._listeners=new a.MutableDisposable}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;const e=new a.DisposableStore,t=e=>this.syncFromModifier(e);e.add((0,o.addDisposableListener)(this._document,"keydown",t)),e.add((0,o.addDisposableListener)(this._document,"keyup",t)),e.add((0,o.addDisposableListener)(this._element,"mousemove",t));const i=this._element.ownerDocument?.defaultView;i&&e.add((0,o.addDisposableListener)(i,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=e}resetClass(){this._updateClass(!1)}syncFromModifier(e){this._isActive()&&this._updateClass(e.getModifierState("Alt"))}_updateClass(e){e?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}}t.AltMouseCursorController=d},5783(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;const o=i(4852),n=i(7098),a=i(4812),h=i(6168),l=i(6501),c=i(8636);let d=class extends a.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,i,s,r,n,l,d,u,f){super(),this._rowCount=e,this._optionsService=i,this._logService=s,this._charSizeService=r,this._coreService=n,this._coreBrowserService=u,this._renderer=this._register(new a.MutableDisposable),this._observerDisposable=this._register(new a.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this._register(new c.Emitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this._register(new c.Emitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this._register(new c.Emitter),this.onRender=this._onRender.event,this._onRefreshRequest=this._register(new c.Emitter),this.onRefreshRequest=this._onRefreshRequest.event,this._pausedResizeTask=this._register(new h.DebouncedIdleTask(this._logService)),this._renderDebouncer=new o.RenderDebouncer((e,t)=>this._renderRows(e,t),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new _(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register((0,a.toDisposable)(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(d.onResize(()=>this._fullRefresh())),this._register(d.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(d.cols,d.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(d.buffer.y,d.buffer.y,void 0,!0))),this._register(f.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(e=>this._registerIntersectionObserver(e,t)))}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){const i=new e.IntersectionObserver(e=>this._handleIntersectionChange(e[e.length-1]),{threshold:0});this._observerDisposable.value=(0,a.toDisposable)(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=i,i.observe(t)}}_handleIntersectionChange(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,i=!1,s=!1){if(this._isPaused)return void(this._needsFullRefresh=!0);if(this._coreService.decPrivateModes.synchronizedOutput)return void this._syncOutputHandler.bufferRows(e,t);const r=this._syncOutputHandler.flush();r&&(e=Math.min(e,r.start),t=Math.max(t,r.end)),s||(this._isNextRenderRedrawOnly=!1),i?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){this._renderer.value&&(this._coreService.decPrivateModes.synchronizedOutput?this._syncOutputHandler.bufferRows(e,t):(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0))}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(e=>this.refreshRows(e.start,e.end,e.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,i){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=i,this._renderer.value?.handleSelectionChanged(e,t,i)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d,t.RenderService=d=s([r(2,l.IOptionsService),r(3,l.ILogService),r(4,n.ICharSizeService),r(5,l.ICoreService),r(6,l.IDecorationService),r(7,l.IBufferService),r(8,n.ICoreBrowserService),r(9,n.IThemeService)],d);class _{constructor(e,t,i){this._coreBrowserService=e,this._coreService=t,this._onTimeout=i,this._start=0,this._end=0,this._isBuffering=!1}bufferRows(e,t){this._isBuffering?(this._start=Math.min(this._start,e),this._end=Math.max(this._end,t)):(this._start=e,this._end=t,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;const e={start:this._start,end:this._end};return this._isBuffering=!1,e}dispose(){void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}}},2079(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(e=>this._handleTrim(e)),this._register(this._bufferService.buffers.onBufferActivate(e=>this._handleBufferActivate(e))),this.enable(),this._model=new d.SelectionModel(this._bufferService),this._activeSelectionMode=0,this._register((0,u.toDisposable)(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(e=>{e.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";const i=this._bufferService.buffer,s=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";const r=e[0]e.replace(b," ")).join(f.isWindows?"\r\n":"\n")}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),f.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})}_isClickInSelection(e){const t=this._getMouseBufferCoords(e),i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!!(i&&s&&t)&&this._areCoordsInSelection(t,i,s)}isCellInSelection(e,t){const i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!(!i||!s)&&this._areCoordsInSelection([e,t],i,s)}_areCoordsInSelection(e,t,i){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){const i=this._linkifier.currentLink?.link?.range;if(i)return this._model.selectionStart=[i.start.x-1,i.start.y-1],this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const s=this._getMouseBufferCoords(e);return!!s&&(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){const t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=(0,l.getCoordsRelativeToElement)(this._coreBrowserService.window,e,this._screenElement)[1];const i=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=i?0:(t>i&&(t-=i),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(14*t))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:f.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(2===e.button&&this.hasSelection||0!==e.button||this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):1===e.detail?this._handleSingleClick(e):2===e.detail?this._handleDoubleClick(e):3===e.detail&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){const t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);const i=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);i&&i.length!==this._model.selectionStart[0]&&0===i.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){const t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return(!this._optionsService.rawOptions.mouseEventsRequireAlt||!this._mouseStateService.areMouseEventsActive)&&e.altKey&&!(f.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;const t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd)return void this.refresh(!0);2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const i=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){const t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const t=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(t&&void 0!==t[0]&&void 0!==t[1]){const e=(0,c.moveToCellSequence)(t[0]-1,t[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(e,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,i=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);i?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,i)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,i)}_fireOnSelectionChange(e,t,i){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=i,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(e=>this._handleTrim(e))}_convertViewportColToCharacterIndex(e,t){let i=t;for(let s=0;t>=s;s++){const r=e.loadCell(s,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:r>1&&t!==s&&(i+=r-1)}return i}setSelection(e,t,i){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=i,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,i=!0,s=!0){if(e[0]>=this._bufferService.cols)return;const r=this._bufferService.buffer,o=r.lines.get(e[1]);if(!o)return;const n=r.translateBufferLineToString(e[1],!1);let a=this._convertViewportColToCharacterIndex(o,e[0]),h=a;const l=e[0]-a;let c=0,d=0,_=0,u=0;if(" "===n.charAt(a)){for(;a>0&&" "===n.charAt(a-1);)a--;for(;h1&&(u+=s-1,h+=s-1);t>0&&a>0&&!this._isCharWordSeparator(o.loadCell(t-1,this._workCell));){o.loadCell(t-1,this._workCell);const e=this._workCell.getChars().length;0===this._workCell.getWidth()?(c++,t--):e>1&&(_+=e-1,a-=e-1),a--,t--}for(;i1&&(u+=e-1,h+=e-1),h++,i++}}h++;let f=a+l-c+_,p=Math.min(this._bufferService.cols,h-a+c+d-_-u);if(t||""!==n.slice(a,h).trim()){if(i&&0===f&&32!==o.getCodePoint(0)){const t=r.lines.get(e[1]-1);if(t&&o.isWrapped&&32!==t.getCodePoint(this._bufferService.cols-1)){const t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){const e=this._bufferService.cols-t.start;f-=e,p+=e}}}if(s&&f+p===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){const t=r.lines.get(e[1]+1);if(t?.isWrapped&&32!==t.getCodePoint(0)){const t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(p+=t.length)}}return{start:f,length:p}}}_selectWordAt(e,t){const i=this._getWordAt(e,t);if(i){for(;i.start<0;)i.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[i.start,e[1]],this._model.selectionStartLength=i.length}}_selectToWordAt(e){const t=this._getWordAt(e,!0);if(t){let i=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,i--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}}_isCharWordSeparator(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){const t=this._bufferService.buffer.getWrappedRangeForLine(e),i={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols)}};t.SelectionService=w,t.SelectionService=w=n([h(3,g.IBufferService),h(4,g.ICoreService),h(5,_.IMouseCoordsService),h(6,g.IOptionsService),h(7,g.IMouseStateService),h(8,_.IRenderService),h(9,_.ICoreBrowserService)],w)},7098(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IKeyboardService=t.ILinkProviderService=t.IThemeService=t.ICharacterJoinerService=t.ISelectionService=t.IRenderService=t.IMouseService=t.IMouseCoordsService=t.ICoreBrowserService=t.ICharSizeService=void 0;const s=i(6201);t.ICharSizeService=(0,s.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,s.createDecorator)("CoreBrowserService"),t.IMouseCoordsService=(0,s.createDecorator)("MouseCoordsService"),t.IMouseService=(0,s.createDecorator)("MouseService"),t.IRenderService=(0,s.createDecorator)("RenderService"),t.ISelectionService=(0,s.createDecorator)("SelectionService"),t.ICharacterJoinerService=(0,s.createDecorator)("CharacterJoinerService"),t.IThemeService=(0,s.createDecorator)("ThemeService"),t.ILinkProviderService=(0,s.createDecorator)("LinkProviderService"),t.IKeyboardService=(0,s.createDecorator)("KeyboardService")},9078(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.ThemeService=void 0;const o=i(7174),n=i(9302),a=i(4103),h=i(4812),l=i(6501),c=i(8636),d=a.css.toColor("#ffffff"),_=a.css.toColor("#000000"),u=a.css.toColor("#ffffff"),f=_,p={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},v=d;let g=class extends h.Disposable{get colors(){return this._colors}constructor(e){super(),this._optionsService=e,this._contrastCache=new o.ColorContrastCache,this._halfContrastCache=new o.ColorContrastCache,this._onChangeColors=this._register(new c.Emitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:d,background:_,cursor:u,cursorAccent:f,selectionForeground:void 0,selectionBackgroundTransparent:p,selectionBackgroundOpaque:a.color.blend(_,p),selectionInactiveBackgroundTransparent:p,selectionInactiveBackgroundOpaque:a.color.blend(_,p),scrollbarSliderBackground:a.color.opacity(d,.2),scrollbarSliderHoverBackground:a.color.opacity(d,.4),scrollbarSliderActiveBackground:a.color.opacity(d,.5),overviewRulerBorder:d,ansi:n.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}_setTheme(e={}){const t=this._colors;if(t.foreground=m(e.foreground,d),t.background=m(e.background,_),t.cursor=a.color.blend(t.background,m(e.cursor,u)),t.cursorAccent=a.color.blend(t.background,m(e.cursorAccent,f)),t.selectionBackgroundTransparent=m(e.selectionBackground,p),t.selectionBackgroundOpaque=a.color.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=m(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=a.color.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?m(e.selectionForeground,a.NULL_COLOR):void 0,t.selectionForeground===a.NULL_COLOR&&(t.selectionForeground=void 0),a.color.isOpaque(t.selectionBackgroundTransparent)){const e=.3;t.selectionBackgroundTransparent=a.color.opacity(t.selectionBackgroundTransparent,e)}if(a.color.isOpaque(t.selectionInactiveBackgroundTransparent)){const e=.3;t.selectionInactiveBackgroundTransparent=a.color.opacity(t.selectionInactiveBackgroundTransparent,e)}if(t.scrollbarSliderBackground=m(e.scrollbarSliderBackground,a.color.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=m(e.scrollbarSliderHoverBackground,a.color.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=m(e.scrollbarSliderActiveBackground,a.color.opacity(t.foreground,.5)),t.overviewRulerBorder=m(e.overviewRulerBorder,v),t.ansi=n.DEFAULT_ANSI_COLORS.slice(),t.ansi[0]=m(e.black,n.DEFAULT_ANSI_COLORS[0]),t.ansi[1]=m(e.red,n.DEFAULT_ANSI_COLORS[1]),t.ansi[2]=m(e.green,n.DEFAULT_ANSI_COLORS[2]),t.ansi[3]=m(e.yellow,n.DEFAULT_ANSI_COLORS[3]),t.ansi[4]=m(e.blue,n.DEFAULT_ANSI_COLORS[4]),t.ansi[5]=m(e.magenta,n.DEFAULT_ANSI_COLORS[5]),t.ansi[6]=m(e.cyan,n.DEFAULT_ANSI_COLORS[6]),t.ansi[7]=m(e.white,n.DEFAULT_ANSI_COLORS[7]),t.ansi[8]=m(e.brightBlack,n.DEFAULT_ANSI_COLORS[8]),t.ansi[9]=m(e.brightRed,n.DEFAULT_ANSI_COLORS[9]),t.ansi[10]=m(e.brightGreen,n.DEFAULT_ANSI_COLORS[10]),t.ansi[11]=m(e.brightYellow,n.DEFAULT_ANSI_COLORS[11]),t.ansi[12]=m(e.brightBlue,n.DEFAULT_ANSI_COLORS[12]),t.ansi[13]=m(e.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),t.ansi[14]=m(e.brightCyan,n.DEFAULT_ANSI_COLORS[14]),t.ansi[15]=m(e.brightWhite,n.DEFAULT_ANSI_COLORS[15]),e.extendedAnsi){const i=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;ssetTimeout(t,e))},t.disposableTimeout=function(e,t=0,i){const r=setTimeout(()=>{e(),i&&o.dispose()},t),o=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(o),o};const s=i(4812);t.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}},t.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(e){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,e())}))}},t.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(e,t,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{e()},t);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},5639(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;const s=i(4812),r=i(8636);class o extends s.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this._register(new r.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new r.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new r.Emitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;ithis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+i<0)throw new Error("Cannot shift elements in list beyond index 0");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>>0},e.toColor=function(t,i,s,r){return{css:e.toCss(t,i,s,r),rgba:e.toRgba(t,i,s,r)}}}(n||(t.channels=n={})),function(e){function t(e,t){return o=Math.round(255*t),[i,s,r]=c.toChannels(e.rgba),{css:n.toCss(i,s,r,o),rgba:n.toRgba(i,s,r,o)}}e.blend=function(e,t){if(o=(255&t.rgba)/255,1===o)return{css:t.css,rgba:t.rgba};const a=t.rgba>>24&255,h=t.rgba>>16&255,l=t.rgba>>8&255,c=e.rgba>>24&255,d=e.rgba>>16&255,_=e.rgba>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),{css:n.toCss(i,s,r),rgba:n.toRgba(i,s,r)}},e.isOpaque=function(e){return!(255&~e.rgba)},e.ensureContrastRatio=function(e,t,i){const s=c.ensureContrastRatio(e.rgba,t.rgba,i);if(s)return n.toColor(s>>24&255,s>>16&255,s>>8&255)},e.opaque=function(e){const t=(255|e.rgba)>>>0;return[i,s,r]=c.toChannels(t),{css:n.toCss(i,s,r),rgba:t}},e.opacity=t,e.multiplyOpacity=function(e,i){return o=255&e.rgba,t(e,o*i/255)},e.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}}(a||(t.color=a={})),function(e){let t,a;try{const e=document.createElement("canvas");e.width=1,e.height=1;const i=e.getContext("2d",{willReadFrequently:!0});i&&(t=i,t.globalCompositeOperation="copy",a=t.createLinearGradient(0,0,1,1))}catch{}e.toColor=function(e){if(e.match(/#[\da-f]{3,8}/i))switch(e.length){case 4:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),n.toColor(i,s,r);case 5:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),o=parseInt(e.slice(4,5).repeat(2),16),n.toColor(i,s,r,o);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}const h=e.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),o=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),n.toColor(i,s,r,o);if("transparent"===e)return{css:"transparent",rgba:0};if(!t||!a)throw new Error("css.toColor: Unsupported css format");if(t.fillStyle=a,t.fillStyle=e,"string"!=typeof t.fillStyle)throw new Error("css.toColor: Unsupported css format");if(t.fillRect(0,0,1,1),[i,s,r,o]=t.getImageData(0,0,1,1).data,255!==o)throw new Error("css.toColor: Unsupported css format");return{rgba:n.toRgba(i,s,r,o),css:e}}}(h||(t.css=h={})),function(e){function t(e,t,i){const s=e/255,r=t/255,o=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(l||(t.rgb=l={})),function(e){function t(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c0||a>0||h>0);)n-=Math.max(0,Math.ceil(.1*n)),a-=Math.max(0,Math.ceil(.1*a)),h-=Math.max(0,Math.ceil(.1*h)),c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));return(n<<24|a<<16|h<<8|255)>>>0}function a(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c>>0}e.blend=function(e,t){if(o=(255&t)/255,1===o)return t;const a=t>>24&255,h=t>>16&255,l=t>>8&255,c=e>>24&255,d=e>>16&255,_=e>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),n.toRgba(i,s,r)},e.ensureContrastRatio=function(e,i,s){const r=l.relativeLuminance(e>>8),o=l.relativeLuminance(i>>8);if(_(r,o)>8));if(n_(r,l.relativeLuminance(t>>8))?o:t}return o}const n=a(e,i,s),h=_(r,l.relativeLuminance(n>>8));if(h_(r,l.relativeLuminance(o>>8))?n:o}return n}},e.reduceLuminance=t,e.increaseLuminance=a,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}}(c||(t.rgba=c={}))},5777(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;const s=i(6501),r=i(6025),o=i(7276),n=i(9640),a=i(56),h=i(4071),l=i(6478),c=i(7428),d=i(6415),_=i(5746),u=i(5882),f=i(2486),p=i(3562),v=i(8811),g=i(8636),m=i(4812);let S=!1;class b extends m.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new g.Emitter),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this._register(new m.MutableDisposable),this._onBinary=this._register(new g.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new g.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new g.Emitter),this.onLineFeed=this._onLineFeed.event,this._onRender=this._register(new g.Emitter),this.onRender=this._onRender.event,this._onResize=this._register(new g.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new g.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new g.Emitter),this._instantiationService=new r.InstantiationService,this.optionsService=this._register(new a.OptionsService(e)),this._instantiationService.setService(s.IOptionsService,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(s.ILogService,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(n.BufferService)),this._instantiationService.setService(s.IBufferService,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(h.CoreService)),this._instantiationService.setService(s.ICoreService,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(l.MouseStateService)),this._instantiationService.setService(s.IMouseStateService,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(d.UnicodeService)),this.unicodeService.register(new c.UnicodeV6),this._instantiationService.setService(s.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(_.CharsetService),this._instantiationService.setService(s.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(v.OscLinkService),this._instantiationService.setService(s.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new f.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(g.EventUtils.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(g.EventUtils.forward(this._bufferService.onResize,this._onResize)),this._register(g.EventUtils.forward(this.coreService.onData,this._onData)),this._register(g.EventUtils.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new p.WriteBuffer((e,t)=>this._inputHandler.parse(e,t))),this._register(g.EventUtils.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.backend&&void 0!==t.buildNumber&&(e=!!("conpty"===t.backend&&t.buildNumber<21376)),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(u.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>((0,u.updateWindowsModeWrappedState)(this._bufferService),!1))),this._windowsWrappingHeuristics.value=(0,m.toDisposable)(()=>{for(const t of e)t.dispose()})}}}t.CoreTerminal=b},8636(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EventUtils=t.Emitter=void 0;const s=i(4812);var r;t.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(e,t,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(r);const o=(0,s.toDisposable)(()=>{const e=this._listeners.indexOf(r);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(o):i.add(o)),o}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,s=t.length;it.fire(e))},e.map=function(e,t){return(i,s,r)=>e(e=>i.call(s,t(e)),void 0,r)},e.any=function(...e){return(t,i,r)=>{const o=new s.DisposableStore;for(const s of e)o.add(s(e=>t.call(i,e)));return r&&(Array.isArray(r)?r.push(o):r.add(o)),o}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(r||(t.EventUtils=r={}))},2486(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0,t.isValidColorIndex=L;const o=i(6760),n=i(6717),a=i(4812),h=i(726),l=i(6107),c=i(8938),d=i(3055),_=i(5451),u=i(6501),f=i(6415),p=i(1346),v=i(9823),g=i(2607),m=i(8693),S=i(8636),b=i(7804),w={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function y(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var C;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(C||(t.WindowsOptionsReportType=C={}));let k=0;class D extends a.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,a,c,d,_=new n.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=a,this._mouseStateService=c,this._unicodeService=d,this._parser=_,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new h.StringToUtf32,this._utf8Decoder=new h.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new S.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new S.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new S.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new S.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new S.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new S.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new S.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new S.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new S.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new S.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new S.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new S.Emitter),this.onColor=this._onColor.event,this._onRequestColorSchemeQuery=this._register(new S.Emitter),this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new E(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(e=>this._activeBuffer=e.activeBuffer)),this._parser.setCsiHandlerFallback((e,t)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(e),params:t.toArray()})}),this._parser.setEscHandlerFallback(e=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(e)})}),this._parser.setExecuteHandlerFallback(e=>{this._logService.debug("Unknown EXECUTE code: ",{code:e})}),this._parser.setOscHandlerFallback((e,t,i)=>{this._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:i})}),this._parser.setDcsHandlerFallback((e,t,i)=>{"HOOK"===t&&(i=i.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setApcHandlerFallback((e,t,i)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setPrintHandler((e,t,i)=>this.print(e,t,i)),this._parser.registerCsiHandler({final:"@"},e=>this.insertChars(e)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},e=>this.scrollLeft(e)),this._parser.registerCsiHandler({final:"A"},e=>this.cursorUp(e)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},e=>this.scrollRight(e)),this._parser.registerCsiHandler({final:"B"},e=>this.cursorDown(e)),this._parser.registerCsiHandler({final:"C"},e=>this.cursorForward(e)),this._parser.registerCsiHandler({final:"D"},e=>this.cursorBackward(e)),this._parser.registerCsiHandler({final:"E"},e=>this.cursorNextLine(e)),this._parser.registerCsiHandler({final:"F"},e=>this.cursorPrecedingLine(e)),this._parser.registerCsiHandler({final:"G"},e=>this.cursorCharAbsolute(e)),this._parser.registerCsiHandler({final:"H"},e=>this.cursorPosition(e)),this._parser.registerCsiHandler({final:"I"},e=>this.cursorForwardTab(e)),this._parser.registerCsiHandler({final:"J"},e=>this.eraseInDisplay(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},e=>this.eraseInDisplay(e,!0)),this._parser.registerCsiHandler({final:"K"},e=>this.eraseInLine(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},e=>this.eraseInLine(e,!0)),this._parser.registerCsiHandler({final:"L"},e=>this.insertLines(e)),this._parser.registerCsiHandler({final:"M"},e=>this.deleteLines(e)),this._parser.registerCsiHandler({final:"P"},e=>this.deleteChars(e)),this._parser.registerCsiHandler({final:"S"},e=>this.scrollUp(e)),this._parser.registerCsiHandler({final:"T"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"X"},e=>this.eraseChars(e)),this._parser.registerCsiHandler({final:"Z"},e=>this.cursorBackwardTab(e)),this._parser.registerCsiHandler({final:"^"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"`"},e=>this.charPosAbsolute(e)),this._parser.registerCsiHandler({final:"a"},e=>this.hPositionRelative(e)),this._parser.registerCsiHandler({final:"b"},e=>this.repeatPrecedingCharacter(e)),this._parser.registerCsiHandler({final:"c"},e=>this.sendDeviceAttributesPrimary(e)),this._parser.registerCsiHandler({prefix:">",final:"c"},e=>this.sendDeviceAttributesSecondary(e)),this._parser.registerCsiHandler({final:"d"},e=>this.linePosAbsolute(e)),this._parser.registerCsiHandler({final:"e"},e=>this.vPositionRelative(e)),this._parser.registerCsiHandler({final:"f"},e=>this.hVPosition(e)),this._parser.registerCsiHandler({final:"g"},e=>this.tabClear(e)),this._parser.registerCsiHandler({final:"h"},e=>this.setMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"h"},e=>this.setModePrivate(e)),this._parser.registerCsiHandler({final:"l"},e=>this.resetMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"l"},e=>this.resetModePrivate(e)),this._parser.registerCsiHandler({final:"m"},e=>this.charAttributes(e)),this._parser.registerCsiHandler({final:"n"},e=>this.deviceStatus(e)),this._parser.registerCsiHandler({prefix:"?",final:"n"},e=>this.deviceStatusPrivate(e)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},e=>this.softReset(e)),this._parser.registerCsiHandler({prefix:">",final:"q"},e=>this.sendXtVersion(e)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},e=>this.setCursorStyle(e)),this._parser.registerCsiHandler({final:"r"},e=>this.setScrollRegion(e)),this._parser.registerCsiHandler({final:"s"},e=>this.saveCursor(e)),this._parser.registerCsiHandler({final:"t"},e=>this.windowOptions(e)),this._parser.registerCsiHandler({final:"u"},e=>this.restoreCursor(e)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},e=>this.insertColumns(e)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},e=>this.deleteColumns(e)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},e=>this.selectProtected(e)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},e=>this.requestMode(e,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},e=>this.requestMode(e,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},e=>this.kittyKeyboardSet(e)),this._parser.registerCsiHandler({prefix:"?",final:"u"},e=>this.kittyKeyboardQuery(e)),this._parser.registerCsiHandler({prefix:">",final:"u"},e=>this.kittyKeyboardPush(e)),this._parser.registerCsiHandler({prefix:"<",final:"u"},e=>this.kittyKeyboardPop(e)),this._parser.setExecuteHandler("",()=>this.bell()),this._parser.setExecuteHandler("\n",()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler("\t",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("„",()=>this.index()),this._parser.setExecuteHandler("…",()=>this.nextLine()),this._parser.setExecuteHandler("ˆ",()=>this.tabSet()),this._parser.registerOscHandler(0,new p.OscHandler(e=>(this.setTitle(e),this.setIconName(e),!0))),this._parser.registerOscHandler(1,new p.OscHandler(e=>this.setIconName(e))),this._parser.registerOscHandler(2,new p.OscHandler(e=>this.setTitle(e))),this._parser.registerOscHandler(4,new p.OscHandler(e=>this.setOrReportIndexedColor(e))),this._parser.registerOscHandler(8,new p.OscHandler(e=>this.setHyperlink(e))),this._parser.registerOscHandler(10,new p.OscHandler(e=>this.setOrReportFgColor(e))),this._parser.registerOscHandler(11,new p.OscHandler(e=>this.setOrReportBgColor(e))),this._parser.registerOscHandler(12,new p.OscHandler(e=>this.setOrReportCursorColor(e))),this._parser.registerOscHandler(104,new p.OscHandler(e=>this.restoreIndexedColor(e))),this._parser.registerOscHandler(110,new p.OscHandler(e=>this.restoreFgColor(e))),this._parser.registerOscHandler(111,new p.OscHandler(e=>this.restoreBgColor(e))),this._parser.registerOscHandler(112,new p.OscHandler(e=>this.restoreCursorColor(e))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(const e in o.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:e},()=>this.selectCharset("("+e)),this._parser.registerEscHandler({intermediates:")",final:e},()=>this.selectCharset(")"+e)),this._parser.registerEscHandler({intermediates:"*",final:e},()=>this.selectCharset("*"+e)),this._parser.registerEscHandler({intermediates:"+",final:e},()=>this.selectCharset("+"+e)),this._parser.registerEscHandler({intermediates:"-",final:e},()=>this.selectCharset("-"+e)),this._parser.registerEscHandler({intermediates:".",final:e},()=>this.selectCharset("."+e)),this._parser.registerEscHandler({intermediates:"/",final:e},()=>this.selectCharset("/"+e));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(e=>(this._logService.error("Parsing error: ",e),e)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new v.DcsHandler((e,t)=>this.requestStatusString(e,t)))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=u.LogLevelEnum.WARN){let t;const i=new Promise((e,i)=>{t=setTimeout(()=>i("#SLOW_TIMEOUT"),5e3)});Promise.race([e,i]).then(()=>{void 0!==t&&clearTimeout(t)},e=>{if(void 0!==t&&clearTimeout(t),"#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,o=0;const n=this._parseStack.paused;if(n){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(o=this._parseStack.position+131072)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+("string"==typeof e?` "${e}"`:` "${Array.prototype.map.call(e,e=>String.fromCharCode(e)).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)","string"==typeof e?e.split("").map(e=>e.charCodeAt(0)):e),this._parseBuffer.length131072)for(let t=o;t0&&2===p.getWidth(this._activeBuffer.x-1)&&p.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let v=this._parser.precedingJoinState;for(let g=t;ga)if(d){const e=p;let t=this._activeBuffer.x-m;if(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),p=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!p)return;for(m>0&&p instanceof l.BufferLine&&p.copyCellsFrom(e,t,0,m,!1);t=0;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(_&&(p.insertCells(this._activeBuffer.x,r-m,this._activeBuffer.getNullCell(u)),2===p.getWidth(a-1)&&p.setCellFromCodepoint(a-1,c.NULL_CELL_CODE,c.NULL_CELL_WIDTH,u)),p.setCellFromCodepoint(this._activeBuffer.x++,s,r,u),r>0)for(;--r;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=v,this._activeBuffer.x0&&0===p.getWidth(this._activeBuffer.x)&&!p.hasContent(this._activeBuffer.x)&&p.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,e=>!y(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new v.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new p.OscHandler(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new g.ApcHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const o=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);o&&(o.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(o.isWrapped=!1))}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i=this._bufferService.cols){const e=this._activeBuffer.lines.get(i+1);e&&(e.isWrapped=!1)}for(;i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(i=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,i-1);i--;){const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+i);if(e?.getTrimmedLength())break}for(;i>=0;i--)this._bufferService.scroll(this._eraseAttrData())}else{for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0)}break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let h=a;for(let e=1;e0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`P>|xterm.js(${b.XTERM_VERSION})\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(o.triggerDataEvent(`[${t?"":"?"}${e};${i}$y`),!0),_=e=>e?1:2,u=e.params[0];return t?d(u,2===u?4:4===u?_(o.modes.insertMode):12===u?3:20===u?_(c.convertEol):0):1===u?d(u,_(i.applicationCursorKeys)):3===u?d(u,c.windowOptions.setWinLines?80===a?2:132===a?1:0:0):6===u?d(u,_(i.origin)):7===u?d(u,_(i.wraparound)):8===u?d(u,3):9===u?d(u,_("X10"===s)):12===u?d(u,_(c.cursorBlink)):25===u?d(u,_(!o.isCursorHidden)):45===u?d(u,_(i.reverseWraparound)):66===u?d(u,_(i.applicationKeypad)):67===u?d(u,4):1e3===u?d(u,_("VT200"===s)):1002===u?d(u,_("DRAG"===s)):1003===u?d(u,_("ANY"===s)):1004===u?d(u,_(i.sendFocus)):1005===u?d(u,4):1006===u?d(u,_("SGR"===r)):1015===u?d(u,4):1016===u?d(u,_("SGR_PIXELS"===r)):1048===u?d(u,1):47===u||1047===u||1049===u?d(u,_(h===l)):2004===u?d(u,_(i.bracketedPasteMode)):2026===u?d(u,_(i.synchronizedOutput)):9001===u&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?d(u,_(i.win32InputMode)):d(u,0)}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=_.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-67108864,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,o=0;do{if(s[o+r]=e.params[t+o],e.hasSubParams(t+o)){const i=e.getSubParams(t+o);let n=0;do{5===s[1]&&(r=1),s[o+n+1+r]=i[n]}while(++n=2||2===s[1]&&o+r>=5)break;s[1]&&(r=1)}while(++o+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r=30&&i<=37?(s.fg&=-67108864,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-67108864,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-67108864,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-67108864,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:221===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.fg&=-134217729:222===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.bg&=-134217729:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("");break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[${e};${t}R`)}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[?${e};${t}R`);break;case 15:case 25:case 26:case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??1)&&this._onRequestColorSchemeQuery.fire()}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=0===e.length?1:e.params[0];if(0===t)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}const e=t%2==1;this._coreService.decPrivateModes.cursorBlink=e}return!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!y(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(C.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(C.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let e=0;e1;){const e=i.shift(),s=i.shift();if(/^\d+$/.exec(e)){const i=parseInt(e,10);if(L(i))if("?"===s)t.push({type:0,index:i});else{const e=(0,m.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.indexOf(";");if(-1===t)return!0;const i=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(i,s):!i.trim()&&this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(":");let s;const r=i.findIndex(e=>e.startsWith("id="));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(";");for(let e=0;e=this._specialColors.length);++e,++t)if("?"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,m.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(";");for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new d.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${e}\\`),!0))('"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}"q`:'"p'===e?'P1$r61;1"p':"r"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:"m"===e?"P1$r0m":" q"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(i){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;return s.length>=16&&s.shift(),s.push(i.flags),i.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=Math.max(1,e.params[0]||1),i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;for(let e=0;e0;e++)i.flags=s.pop();return 0===s.length&&t>0&&(i.flags=0),!0}}t.InputHandler=D;let E=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(k=e,e=t,t=k),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function L(e){return 0<=e&&e<256}E=s([r(0,u.IBufferService)],E)},4812(e,t){function i(e){return{dispose:e}}function s(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=s,t.combinedDisposable=function(...e){return i(()=>s(e))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=r;class o{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=o,o.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},7710(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.FourKeyMap=t.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(e,t,i){this._data[e]||(this._data[e]={}),this._data[e][t]=i}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}}t.TwoKeyMap=i,t.FourKeyMap=class{constructor(){this._data=new i}set(e,t,s,r,o){this._data.get(e,t)||this._data.set(e,t,new i),this._data.get(e,t).set(s,r,o)}get(e,t,i,s){return this._data.get(e,t)?.get(i,s)}clear(){this._data.clear()}}},701(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isMac=t.isSafari=t.isLegacyEdge=t.isChrome=t.isFirefox=t.isNode=void 0,t.getZoomFactor=function(e){return 1},t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\/(\d+)/);return null===e||e.length<2?0:parseInt(e[1],10)},t.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=t.isNode?"node":navigator.userAgent,s=t.isNode?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isChrome=i.includes("Chrome"),t.isLegacyEdge=i.includes("Edge"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),t.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),t.isLinux=s.indexOf("Linux")>=0,t.isChromeOS=/\bCrOS\b/.test(i)},3087(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SortedList=void 0;const s=i(6168);let r=0;t.SortedList=class{constructor(e,t){this._getKey=e,this._array=[],this._insertedValues=[],this._isFlushingInserted=!1,this._deletedIndices=[],this._isFlushingDeleted=!1,this._flushInsertedTask=new s.IdleTaskQueue(t),this._flushDeletedTask=new s.IdleTaskQueue(t)}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(e){this._flushCleanupDeleted(),0===this._insertedValues.length&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(e)}_flushInserted(){const e=this._insertedValues.sort((e,t)=>this._getKey(e)-this._getKey(t));let t=0,i=0;const s=new Array(this._array.length+this._insertedValues.length);for(let r=0;r=this._array.length||this._getKey(e[t])<=this._getKey(this._array[i])?(s[r]=e[t],t++):s[r]=this._array[i++];this._array=s,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(e){if(this._flushCleanupInserted(),0===this._array.length)return!1;const t=this._getKey(e);if(void 0===t)return!1;if(r=this._search(t),-1===r)return!1;if(this._getKey(this._array[r])!==t)return!1;do{if(this._array[r]===e)return 0===this._deletedIndices.length&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(r),!0}while(++re-t);let t=0;const i=new Array(this._array.length-e.length);let s=0;for(let r=0;r0&&this._flushDeletedTask.flush()}*getKeyIterator(e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),0!==this._array.length&&(r=this._search(e),!(r<0||r>=this._array.length)&&this._getKey(this._array[r])===e))do{yield this._array[r]}while(++r=this._array.length)&&this._getKey(this._array[r])===e))do{t(this._array[r])}while(++r=t;){let s=t+i>>1;const r=this._getKey(this._array[s]);if(r>e)i=s-1;else{if(!(r0&&this._getKey(this._array[s-1])===e;)s--;return s}t=s+1}}return t}}},4220(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.LimitedStringBuilder=t.StringBuilder=void 0;class i{constructor(){this._chunks=[],this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(e){this._chunks.push(e),this._length+=e.length}toString(){return this._chunks.join("")}}t.StringBuilder=i,t.LimitedStringBuilder=class{constructor(e){this._limit=e,this._builder=new i}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(e){return this._builder.append(e),this._builder.length>this._limit&&(this._builder.reset(),!0)}toString(){return this._builder.toString()}}},6168(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;class i{constructor(e){this._tasks=[],this._i=0,this._logService=e}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ii)return r-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-t))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}}t.PriorityTaskQueue=s,t.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:s,t.DebouncedIdleTask=class{constructor(e){this._queue=new t.IdleTaskQueue(e)}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},7804(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.XTERM_VERSION=void 0,t.XTERM_VERSION="6.1.0-beta.304"},5882(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)};const s=i(8938)},5451(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&void 0===this.payload}}t.ExtendedAttrs=s},1073(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(5639),r=i(4812),o=i(6168),n=i(5451),a=i(6107),h=i(732),l=i(3055),c=i(8938),d=i(8158),_=i(6760);t.MAX_BUFFER_SIZE=4294967295;class u extends r.Disposable{constructor(e,t,i,n){super(),this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this._logService=n,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=a.DEFAULT_ATTR_DATA.clone(),this.savedCharset=_.DEFAULT_CHARSET,this.savedCharsets=[],this.savedGlevel=0,this.savedOriginMode=!1,this.savedWraparoundMode=!0,this.markers=[],this._nullCell=l.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=l.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new o.IdleTaskQueue(this._logService),this._register((0,r.toDisposable)(()=>this._memoryCleanupQueue.clear())),this._register((0,r.toDisposable)(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new a.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){e??=a.DEFAULT_ATTR_DATA;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(a.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+o+1?(this.ybase--,o++,this.ydisp>0&&this.ydisp--):this.lines.push(new a.BufferLine(e,i,!1)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),o&&(this.y+=o),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t0){const e=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,e)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&"conpty"===e.backend&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=this._optionsService.rawOptions.reflowCursorLine,s=(0,h.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(a.DEFAULT_ATTR_DATA),i);if(s.length>0){const i=(0,h.reflowLargerCreateNewLayout)(this.lines,s);(0,h.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(a.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;n--){let l=this.lines.get(n);if(!l||!l.isWrapped&&l.getTrimmedLength()<=e)continue;const c=[l];for(;l.isWrapped&&n>0;)l=this.lines.get(--n),c.unshift(l);if(!i){const e=this.ybase+this.y;if(e>=n&&e0&&(r.push({start:n+c.length+o,newLines:p}),o+=p.length),c.push(...p);let v=_.length-1,g=_[v];0===g&&(v--,g=_[v]);let m=c.length-u-1,S=d;for(;m>=0;){const e=Math.min(S,g);if(void 0===c[v])break;if(c[v].copyCellsFrom(c[m],S-e,g-e,e,!0),g-=e,0===g&&(v--,g=_[v]),S-=e,0===S){m--;const e=Math.max(m,0);S=(0,h.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t0;)0===this.ybase?this.y0){const e=[],t=[];for(let e=0;e=0;l--)if(a&&a.start>s+h){for(let e=a.newLines.length-1;e>=0;e--)this.lines.set(l--,a.newLines[e]);l++,e.push({index:s+1,amount:a.newLines.length}),h+=a.newLines.length,a=r[++n]}else this.lines.set(l,t[s--]);let l=0;for(let t=e.length-1;t>=0;t--)e[t].index+=l,this.lines.onInsertEmitter.fire(e[t]),l+=e[t].amount;const c=Math.max(0,i+o-this.lines.maxLength);c>0&&this.lines.onTrimEmitter.fire(c)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):""}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(e=>{t.line>=e.index&&(t.line+=e.amount)})),t.register(this.lines.onDelete(e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}t.Buffer=u},6107(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(5451),r=i(3055),o=i(8938),n=i(726);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let a=0;const h=new r.CellData,l=t.DEFAULT_ATTR_DATA.extended.clone();class c{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._cacheValid=!1,this._cache="",this._cacheTrimmed=!1,this._data=new Uint32Array(3*e);const s=t??r.CellData.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]);for(let t=0;t>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._cacheValid=!1,this._data[3*e+1]=t[o.CHAR_DATA_ATTR_INDEX],t[o.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[o.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[o.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[o.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,n.stringFromCodePoint)(2097151&t):""}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return a=3*e,t.content=this._data[a+0],t.fg=this._data[a+1],t.bg=this._data[a+2],2097152&t.content?t.combinedData=this._combined[e]:t.combinedData="",t.extended=this.getExtended(e),t}getExtended(e){return a=3*e,268435456&this._data[a+2]?this._extendedAttrs[e]:(l._ext=0,l._urlId=0,l.payload=void 0,l)}setCell(e,t){this._cacheValid=!1,2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){this._cacheValid=!1,268435456&s.bg&&(this._extendedAttrs[e]=s.extended);const r=3*e;this._data[r+0]=t|i<<22,this._data[r+1]=s.fg,this._data[r+2]=s.bg}addCodepointToCell(e,t,i){this._cacheValid=!1;let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,n.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,n.stringFromCodePoint)(2097151&s)+(0,n.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if(this._cacheValid=!1,(e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t=0;--i)this.setCell(e+t+i,this.loadCell(e+i,h));for(let s=0;sthis.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){this._cacheValid=!1;const o=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=o[3*(t+r)+e];this._copyCellMapsFrom(e,t+r,i+r)}else for(let r=0;r>22||1}s&&s.push(t);const h=a.join("");return r&&(this._cache=h,this._cacheValid=!0,this._cacheTrimmed=!!e),h}_copyCellMapsFrom(e,t,i){const s=3*t;2097152&e._data[s+0]&&(this._combined[i]=e._combined[t]),268435456&e._data[s+2]&&(this._extendedAttrs[i]=e._extendedAttrs[t])}_copySparseMapsFrom(e){this._combined={},this._extendedAttrs={};for(let t=0;te.end.y)throw new Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},732(e,t){function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,"__esModule",{value:!0}),t.reflowLargerGetLinesToRemove=function(e,t,s,r,o,n){const a=[];for(let h=0;h=h&&r0&&(e>_||0===d[e].getTrimmedLength());e--)v++;v>0&&(a.push(h+d.length-v),a.push(v)),h+=d.length-1}return a},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],o=0;for(let n=0;nl&&(n-=l,a++);const c=2===e[a].getWidth(n-1);c&&n--;const d=c?s-1:s;r.push(d),h+=d}return r},t.getWrappedLineTrimmedLength=i},4097(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;const s=i(4812),r=i(1073),o=i(8636);class n extends s.Disposable{constructor(e,t,i){super(),this._optionsService=e,this._bufferService=t,this._logService=i,this._normalBuffer=this._register(new s.MutableDisposable),this._altBuffer=this._register(new s.MutableDisposable),this._onBufferActivate=this._register(new o.Emitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new r.Buffer(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new r.Buffer(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=n},3055(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;const s=i(726),r=i(8938),o=i(5451);class n extends o.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new o.ExtendedAttrs,this.combinedData=""}static fromCharData(e){const t=new n;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor())return!1;if(this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor())return!1;if(this.isInverse()!==e.isInverse())return!1;if(this.isBold()!==e.isBold())return!1;if(this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;const t=this.isUnderlineColorDefault(),i=e.isUnderlineColorDefault();if(!t||!i){if(t!==i)return!1;if(this.getUnderlineColor()!==e.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==e.getUnderlineColorMode())return!1}}return this.isOverline()===e.isOverline()&&this.isBlink()===e.isBlink()&&this.isInvisible()===e.isInvisible()&&this.isItalic()===e.isItalic()&&this.isDim()===e.isDim()&&this.isStrikethrough()===e.isStrikethrough()}}t.CellData=n},8938(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=t.DEFAULT_COLOR<<9|256,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},8158(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;const s=i(4812),r=i(8636);class o{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=o._nextId++,this._onDispose=this.register(new r.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,s.dispose)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=o,o._nextId=1},6760(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",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:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},706(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=function(e,t,s,r){const o={type:0,cancel:!1,key:void 0},n=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?o.key=t?"OA":"":"UIKeyInputLeftArrow"===e.key?o.key=t?"OD":"":"UIKeyInputRightArrow"===e.key?o.key=t?"OC":"":"UIKeyInputDownArrow"===e.key&&(o.key=t?"OB":"");break;case 8:o.key=e.ctrlKey?"\b":"",e.altKey&&(o.key=""+o.key);break;case 9:if(e.shiftKey){o.key="";break}o.key="\t",o.cancel=!0;break;case 13:"c"===e.key&&e.ctrlKey?o.key="":o.key=e.altKey?"\r":"\r",o.cancel=!0;break;case 27:o.key="",e.altKey&&(o.key=""),o.cancel=!0;break;case 37:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"D":t?"OD":"";break;case 39:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"C":t?"OC":"";break;case 38:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"A":t?"OA":"";break;case 40:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"B":t?"OB":"";break;case 45:e.shiftKey||e.ctrlKey||(o.key="[2~");break;case 46:o.key=n?"[3;"+(n+1)+"~":"[3~";break;case 36:o.key=n?"[1;"+(n+1)+"H":t?"OH":"";break;case 35:o.key=n?"[1;"+(n+1)+"F":t?"OF":"";break;case 33:e.shiftKey?o.type=2:e.ctrlKey?o.key="[5;"+(n+1)+"~":o.key="[5~";break;case 34:e.shiftKey?o.type=3:e.ctrlKey?o.key="[6;"+(n+1)+"~":o.key="[6~";break;case 112:o.key=n?"[1;"+(n+1)+"P":"OP";break;case 113:o.key=n?"[1;"+(n+1)+"Q":"OQ";break;case 114:o.key=n?"[1;"+(n+1)+"R":"OR";break;case 115:o.key=n?"[1;"+(n+1)+"S":"OS";break;case 116:o.key=n?"[15;"+(n+1)+"~":"[15~";break;case 117:o.key=n?"[17;"+(n+1)+"~":"[17~";break;case 118:o.key=n?"[18;"+(n+1)+"~":"[18~";break;case 119:o.key=n?"[19;"+(n+1)+"~":"[19~";break;case 120:o.key=n?"[20;"+(n+1)+"~":"[20~";break;case 121:o.key=n?"[21;"+(n+1)+"~":"[21~";break;case 122:o.key=n?"[23;"+(n+1)+"~":"[23~";break;case 123:o.key=n?"[24;"+(n+1)+"~":"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(s&&!r||!e.altKey||e.metaKey)if(!s||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey){if(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length)o.key=e.key;else if(e.key&&e.ctrlKey&&e.shiftKey)switch(e.code){case"Minus":o.key="";break;case"Digit2":o.key="\0";break;case"Digit6":o.key=""}}else 65===e.keyCode&&(o.type=1);else{const t=i[e.keyCode],s=t?.[e.shiftKey?1:0];if(s)o.key=""+s;else if(e.keyCode>=65&&e.keyCode<=90){const t=e.ctrlKey?e.keyCode-64:e.keyCode+32;let i=String.fromCharCode(t);e.shiftKey&&(i=i.toUpperCase()),o.key=""+i}else if(32===e.keyCode)o.key=""+(e.ctrlKey?"\0":" ");else if("Dead"===e.key&&e.code.startsWith("Key")){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),o.key=""+t,o.cancel=!0}}else e.keyCode>=65&&e.keyCode<=90?o.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?o.key="\0":e.keyCode>=51&&e.keyCode<=55?o.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?o.key="":"/"===e.key?o.key="":219===e.keyCode?o.key="":220===e.keyCode?o.key="":221===e.keyCode&&(o.key="")}return o};const i={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']}},7241(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyKeyboard=void 0,t.KittyKeyboard=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440},this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24},this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"},this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(e){if(e.code.startsWith("Numpad")){const t=e.code.slice(6);if(t>="0"&&t<="9")return 57399+parseInt(t,10);switch(t){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(e){switch(e.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(e){let t=0;return e.shiftKey&&(t|=1),e.altKey&&(t|=2),e.ctrlKey&&(t|=4),e.metaKey&&(t|=8),t>0?t+1:0}_getKeyCode(e,t){const i=this._getNumpadKeyCode(e);if(void 0!==i)return i;const s=this._getModifierKeyCode(e);if(void 0!==s)return s;const r=this._functionalKeyCodes[e.key];if(void 0!==r)return r;if((e.shiftKey||t&&e.altKey)&&e.code){if(e.code.startsWith("Digit")&&6===e.code.length){const t=e.code.charAt(5);if(t>="0"&&t<="9")return t.charCodeAt(0)}if(e.code.startsWith("Key")&&4===e.code.length)return e.code.charAt(3).toLowerCase().charCodeAt(0)}if(1===e.key.length){const t=e.key.codePointAt(0);return t>=65&&t<=90?t+32:t}}_isModifierKey(e){return"Shift"===e.key||"Control"===e.key||"Alt"===e.key||"Meta"===e.key}_isLockKey(e){return"CapsLock"===e.key||"NumLock"===e.key||"ScrollLock"===e.key}_buildCsiLetterSequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"["+e}_buildSs3Sequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"O"+e}_buildCsiTildeSequence(e,t,i,s){const r=s&&1!==i;let o="["+e;return(t>0||r)&&(o+=";"+(t>0?t:"1"),r&&(o+=":"+i)),o+="~",o}_buildCsiUSequence(e,t,i,s,r,o,n){const a=!!(2&r);let h,l="["+t;4&r&&e.shiftKey&&1===e.key.length&&!o&&!n&&(h=e.key.codePointAt(0),l+=":"+h);const c=16&r&&3!==s&&1===e.key.length&&!o&&!n&&!e.ctrlKey?e.key.codePointAt(0):void 0,d=a&&1!==s&&(3===s||void 0===c);return(i>0||d||void 0!==c)&&(l+=";",i>0?l+=i:d&&(l+="1"),d&&(l+=":"+s)),void 0!==c&&(l+=";"+c),l+="u",l}evaluate(e,t,i=1,s=!1){const r={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(e),n=this._isModifierKey(e),a=!!(2&t);if(!a&&3===i)return r;if(n&&!(8&t))return r;if(this._isLockKey(e)&&!(8&t))return r;const h=this._csiLetterKeys[e.key];if(h)return r.key=this._buildCsiLetterSequence(h,o,i,a),r.cancel=!0,r;const l=this._ss3FunctionKeys[e.key];if(l)return r.key=this._buildSs3Sequence(l,o,i,a),r.cancel=!0,r;const c=this._csiTildeKeys[e.key];if(void 0!==c)return r.key=this._buildCsiTildeSequence(c,o,i,a),r.cancel=!0,r;const d=this._getKeyCode(e,s);if(void 0===d)return r;const _=13===d||9===d||127===d;if(_&&3===i&&!(8&t))return r;const u=void 0!==this._functionalKeyCodes[e.key]||void 0!==this._getNumpadKeyCode(e);if(8&t||a&&3===i||(1&t||a)&&(u&&!_||o>0&&1!==e.key.length||o-1>1))r.key=this._buildCsiUSequence(e,d,o,i,t,u,n),r.cancel=!0;else{const t=13===d?"\r":9===d?"\t":127===d?"":void 0;t?r.key=t:1!==e.key.length||e.ctrlKey||e.altKey||e.metaKey||(r.key=e.key)}return r}static shouldUseProtocol(e){return e>0}}},726(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s="";for(let r=t;r65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let o=r;o=i)return this._interim=r,s;const n=e.charCodeAt(o);56320<=n&&n<=57343?t[s++]=1024*(r-55296)+n-56320+65536:(t[s++]=r,t[s++]=n);continue}65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,o,n,a,h=0,l=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let o,n=0;for(;(o=this.interim[++n])&&n<4;)r<<=6,r|=63&o;const a=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,c=a-n;for(;l=i)return 0;if(o=e[l++],128!=(192&o)){l--,s=!0;break}this.interim[n++]=o,r<<=6,r|=63&o}s||(2===a?r<128?l--:t[h++]=r:3===a?r<2048||r>=55296&&r<=57343||65279===r||(t[h++]=r):r<65536||r>1114111||(t[h++]=r)),this.interim.fill(0)}const c=i-4;let d=l;for(;d=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(a=(31&s)<<6|63&r,a<128){d--;continue}t[h++]=a}else if(224==(240&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(a=(15&s)<<12|(63&r)<<6|63&o,a<2048||a>=55296&&a<=57343||65279===a)continue;t[h++]=a}else if(240==(248&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=o,h;if(n=e[d++],128!=(192&n)){d--;continue}if(a=(7&s)<<18|(63&r)<<12|(63&o)<<6|63&n,a<65536||a>1114111)continue;t[h++]=a}}return h}}},7428(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;const s=i(6415),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],o=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let n;t.UnicodeV6=class{constructor(){if(this.version="6",!n){n=new Uint8Array(65536),n.fill(1),n[0]=0,n.fill(0,1,32),n.fill(0,127,160),n.fill(2,4352,4448),n[9001]=2,n[9002]=2,n.fill(2,11904,42192),n[12351]=1,n.fill(2,44032,55204),n.fill(2,63744,64256),n.fill(2,65040,65050),n.fill(2,65072,65136),n.fill(2,65280,65377),n.fill(2,65504,65511);for(let e=0;et[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},9249(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Win32InputMode=void 0,t.Win32InputMode=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226},this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40},this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]),this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(e){const t=this._codeToVk[e.code];return void 0!==t?t:e.keyCode||0}_getScanCode(e){return this._codeToScancode[e.code]||0}_getUnicodeChar(e){if(e.ctrlKey&&!e.altKey&&!e.metaKey){if("Enter"===e.key)return 10;if("Backspace"===e.key)return 127}const t=this._keyToControlChar[e.key];if(void 0!==t)return t;if(1===e.key.length){const t=e.key.codePointAt(0)||0;if(e.ctrlKey&&!e.altKey&&!e.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(e){let t=0;return e.shiftKey&&(t|=16),e.ctrlKey&&("ControlRight"===e.code?t|=4:t|=8),e.altKey&&("AltRight"===e.code?t|=1:t|=2),this._enhancedKeyCodes.has(e.code)&&(t|=256),t}evaluateKeyboardEvent(e,t){return{type:0,cancel:!0,key:`[${this._getVirtualKeyCode(e)};${this._getScanCode(e)};${this._getUnicodeChar(e)};${t?1:0};${this._getControlKeyState(e)};1_`}}}},3562(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;const s=i(3132),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._innerWriteTimer=this._register(new s.TimeoutTimer),this._onWriteParsed=this._register(new o.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._register((0,r.toDisposable)(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed)return;if(this._isSyncWriting)return;let e;this._isSyncWriting=!0;let t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);const i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;const i=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>{this._store.isDisposed||(performance.now()-i>=12?this._scheduleInnerWrite(0,e):this._innerWrite(i,e))};return void s.catch(e=>(queueMicrotask(()=>{throw e}),Promise.resolve(!1))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,performance.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},8693(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(t.startsWith("rgb:")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(t.startsWith("#")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,o]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(o,t)}`};const i=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,s=/^[\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?"0"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}},2607(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ApcHandler=t.ApcParser=void 0;const s=i(726),r=i(4220),o=[];t.ApcParser=class{constructor(){this._handlers=Object.create(null),this._active=o,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._ident=0}start(e){if(this.reset(),this._ident=e,this._active=this._handlers[e]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._ident,"START")}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}end(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"END",e);this._active=o,this._ident=0}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.ApcHandler=n,n._payloadLimit=1e7},9823(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(726),r=i(7262),o=i(4220),n=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=n,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=n,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,"HOOK",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"UNHOOK",e);this._active=n,this._ident=0}};const a=new r.Params;a.addParam(0);class h{constructor(e){this._handler=e,this._data=new o.LimitedStringBuilder(h._payloadLimit),this._params=a,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():a,this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString(),this._params),t instanceof Promise))return t.then(e=>(this._params=a,this._data.reset(),this._hitLimit=!1,e));return this._params=a,this._data.reset(),this._hitLimit=!1,t}}t.DcsHandler=h,h._payloadLimit=1e7},6717(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(4812),r=i(7262),o=i(1346),n=i(9823),a=i(2607);class h{constructor(e){this.table=new Uint16Array(e)}setDefault(e,t){this.table.fill(e<<8|t)}add(e,t,i,s){this.table[t<<8|e]=i<<8|s}addMany(e,t,i,s){for(let r=0;rt),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const o=i(0,17);e.setDefault(1,0),e.addMany(s,0,2,0);for(const t of o)e.addMany([24,26,153,154],t,3,0),e.addMany(i(128,144),t,3,0),e.addMany(i(144,152),t,3,0),e.add(156,t,0,0),e.add(27,t,11,1),e.add(157,t,4,8),e.addMany([152,158],t,0,7),e.add(159,t,11,14),e.add(155,t,11,3),e.add(144,t,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(95,1,11,14),e.addMany(r,14,0,14),e.add(127,14,0,14),e.addMany(i(32,48),14,9,15),e.addMany(i(48,127),14,15,16),e.addMany(i(48,127),15,15,16),e.addMany(r,15,0,15),e.addMany(i(32,48),15,9,15),e.add(127,15,0,15),e.addMany(s,16,16,16),e.addMany(r,16,0,16),e.addMany(i(8,14),16,16,16),e.add(127,16,0,16),e.addMany([27,156,24,26],16,17,0),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(l,0,2,0),e.add(l,8,5,8),e.add(l,6,0,6),e.add(l,11,0,11),e.add(l,13,13,13),e.add(l,16,16,16),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,s.toDisposable)(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new o.OscParser),this._dcsParser=this._register(new n.DcsParser),this._apcParser=this._register(new a.ApcParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(i=e.prefix.charCodeAt(0),i<60||i>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let t=0;ts||s>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");i<<=8,i|=s}}if(1!==e.final.length)throw new Error("final must be a single byte");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);this._escHandlers[i]??=[];const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){const i=e.charCodeAt(0);this._executeHandlers[i]=t,i<24&&(this._executeHandlersArr[i]=t)}clearExecuteHandler(e){const t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);this._csiHandlers[i]??=[];const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r,o,n=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,n=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");const t=this._parseStack.handlers;let r=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](this._params),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 4:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],o=this._dcsParser.unhook(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],o=this._oscParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],o=this._apcParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0}this._parseStack.state=0,n=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=255&this._parseStack.transition}for(let i=n;i=60&&n<=63&&(this._collect=n,s++);let a=!1;for(;s=48&&n<=57)this._params.addDigit(n-48);else if(59===n)this._params.addParam(0);else{if(58!==n){if(n>=64&&n<=126){const e=this._csiHandlers[this._collect<<8|n];let t=e?e.length-1:-1;for(;t>=0&&(o=e[t](this._params),!0!==o);t--)if(o instanceof Promise)return r=1792,this._preserveStack(3,e,t,r,s),o;t<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingJoinState=0,i=s,this.currentState=0,a=!0;break}break}this._params.addSubParam(-1)}a||(i=s-1,this.currentState=4);continue}switch(r=this._transitions.table[this.currentState<<8|(s>8){case 2:let n=i;const a=t-4;for(;n=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l););if(n>=a)for(;n=32&&(e[n]<=126||e[n]>=l);)n++;this._printHandler(e,i,n),i=n-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:i,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:const h=this._csiHandlers[this._collect<<8|s];let c=h?h.length-1:-1;for(;c>=0&&(o=h[c](this._params),!0!==o);c--)if(o instanceof Promise)return this._preserveStack(3,h,c,r,i),o;c<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do{switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}}while(++i47&&s<60);i--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:const d=this._escHandlers[this._collect<<8|s];let _=d?d.length-1:-1;for(;_>=0&&(o=d[_](),!0!==o);_--)if(o instanceof Promise)return this._preserveStack(4,d,_,r,i),o;_<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let r=i+1;;++r)if(r>=t||24===(s=e[r])||26===s||27===s||s>127&&s=t||(s=e[r])<32||s>127&&s=32&&e[s]<127||e[s]>=8&&e[s]<14||e[s]>=l))){this._apcParser.put(e,i,s),i=s-1;break}break;case 17:if(o=this._apcParser.end(24!==s&&26!==s),o)return this._preserveStack(7,[],0,r,i),o;27===s&&(r|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0}this.currentState=255&r}}}t.EscapeSequenceParser=c},1346(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(726),r=i(4220),o=[];t.OscParser=class{constructor(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,"PUT",(0,s.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.OscHandler=n,n._payloadLimit=1e7},7262(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;class i{static fromArray(e){const t=new i;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new i(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>2147483647?2147483647:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=e>2147483647?2147483647:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const i=this._digitIsSub?this._subParams:this.params,s=i[t-1];i[t-1]=~s?Math.min(10*s+e,2147483647):e}}t.Params=i},3027(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},5101(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(3235),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new o.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new s.BufferApiView(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=n},6097(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,i)=>t(e,i.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}registerApcHandler(e,t){return this._core.registerApcHandler(e,t)}}},4335(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},9640(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=void 0;const o=i(4812),n=i(4097),a=i(6501),h=i(8636);let l=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(e,t){super(),this.isUserScrolling=!1,this._onResize=this._register(new h.Emitter),this.onResize=this._onResize.event,this._onScroll=this._register(new h.Emitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new n.BufferSet(e,this,t)),this._register(this.buffers.onBufferActivate(e=>{this._onScroll.fire(e.activeBuffer.ydisp)}))}resize(e,t){const i=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:i,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;o===i.lines.length-1?e?i.lines.recycle().copyFrom(s,!0):i.lines.push(s.clone(!0)):i.lines.splice(o+1,0,s.clone(!0)),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=o-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(o,s.clone(!0))}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t){const i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);const s=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),s!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))}};t.BufferService=l,t.BufferService=l=s([r(0,a.IOptionsService),r(1,a.ILogService)],l)},5746(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},4071(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;const o=i(4812),n=i(6501),a=i(8636),h=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0});let c=class extends o.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorHidden=!1,this._onData=this._register(new a.Emitter),this.onData=this._onData.event,this._onUserInput=this._register(new a.Emitter),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new a.Emitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new a.Emitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.isCursorInitialized=i.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}reset(){this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onBinary.fire(e))}};t.CoreService=c,t.CoreService=c=s([r(0,n.IBufferService),r(1,n.ILogService),r(2,n.IOptionsService)],c)},4720(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DecorationLineCache=t.DecorationService=void 0;const o=i(3132),n=i(4103),a=i(4812),h=i(6501),l=i(3087),c=i(8636);let d=0,_=0,u=class extends a.Disposable{get decorations(){return this._decorations.values()}constructor(e,t){super(),this._logService=e,this._bufferService=t,this._lineCache=this._register(new f),this._onDecorationRegistered=this._register(new c.Emitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this._register(new c.Emitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this._decorations=new l.SortedList(e=>e?.marker.line,this._logService),this._register((0,a.toDisposable)(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}registerDecoration(e){if(e.marker.isDisposed)return;const t=new p(e);if(t){const e=t.marker.onDispose(()=>t.dispose()),i=t.onDispose(()=>{i.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),e.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,i){const s=this._lineCache.getDecorationsOnLine(t);if(s)for(const t of s)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&(yield t)}forEachDecorationAtCell(e,t,i,s){const r=this._lineCache.getDecorationsOnLine(t);if(r)for(const t of r)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&s(t)}};t.DecorationService=u,t.DecorationService=u=s([r(0,h.ILogService),r(1,h.IBufferService)],u);class f extends a.Disposable{constructor(){super(...arguments),this._decorationsByLine=new Map,this._decorations=new Set,this._bufferLineListeners=this._register(new a.MutableDisposable),this._lineIndexSyncTimer=this._register(new o.MicrotaskTimer),this._lineIndexSyncCallbacks=[]}clear(){this._lineIndexSyncCallbacks.length=0,this._lineIndexSyncTimer.cancel(),this._decorationsByLine.clear(),this._decorations.clear()}add(e){this._decorations.add(e),this._addToLineBuckets(e)}remove(e){this._decorations.delete(e),this._removeFromLineBuckets(e)}getDecorationsOnLine(e){return this._decorationsByLine.get(e)}attachToBufferLines(e){const t=new a.DisposableStore;this._bufferLineListeners.value=t,t.add(e.onTrim(e=>this._handleBufferLinesTrim(e))),t.add(e.onInsert(e=>this._handleBufferLinesInsert(e))),t.add(e.onDelete(e=>this._handleBufferLinesDelete(e)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){const t=e.marker.line;if(t<0)return;e._indexedStartLine=t;const i=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{const e=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(const t of e)t()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;const t=new Map;for(const[i,s]of this._decorationsByLine){const r=i-e;r<0||this._mergeLineBucket(t,r,s)}this._decorationsByLine.clear();for(const[e,i]of t)this._decorationsByLine.set(e,i);for(const t of this._decorations)t.marker.isDisposed||(t._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,i){const s=e.get(t);if(s)for(let e=0,t=i.length;et&&(s.push(e),this._removeFromLineBuckets(e))}const r=new Map;for(const[e,s]of this._decorationsByLine){const o=e>=t?e+i:e;this._mergeLineBucket(r,o,s)}this._decorationsByLine.clear();for(const[e,t]of r)this._decorationsByLine.set(e,t);for(const e of this._decorations)e.marker.isDisposed||e._indexedStartLine>=t&&(e._indexedStartLine=e.marker.line);for(const e of s)this._addToLineBuckets(e)}_applyBufferLinesDelete(e){const t=e.index+e.amount,i=new Map;for(const[s,r]of this._decorationsByLine){if(s>=e.index&&s=t?s-e.amount:s;this._mergeLineBucket(i,o,r)}this._decorationsByLine.clear();for(const[e,t]of i)this._decorationsByLine.set(e,t);const s=[];for(const i of this._decorations){if(i.marker.isDisposed)continue;const r=i._indexedStartLine,o=this._getDecorationHeight(i);r>=t?i._indexedStartLine=i.marker.line:rt&&s.push(i)}for(const e of s)this._reindexDecoration(e)}}t.DecorationLineCache=f;class p extends a.DisposableStore{get backgroundColorRGB(){return null===this._cachedBg&&(this.options.backgroundColor?this._cachedBg=n.css.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return null===this._cachedFg&&(this.options.foregroundColor?this._cachedFg=n.css.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}constructor(e){super(),this.options=e,this.onRenderEmitter=this.add(new c.Emitter),this.onRender=this.onRenderEmitter.event,this._onDispose=this.add(new c.Emitter),this.onDispose=this._onDispose.event,this._cachedBg=null,this._cachedFg=null,this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}dispose(){this._onDispose.fire(),super.dispose()}}},6025(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(6501),r=i(6201);class o{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=o,t.InstantiationService=class{constructor(){this._services=new o,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort((e,t)=>e.index-t.index),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id._id}.`);s.push(i)}const o=i.length>0?i[0].index:t.length;if(t.length!==o)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${o+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},7276(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LogService=void 0;const o=i(4812),n=i(6501),a={trace:n.LogLevelEnum.TRACE,debug:n.LogLevelEnum.DEBUG,info:n.LogLevelEnum.INFO,warn:n.LogLevelEnum.WARN,error:n.LogLevelEnum.ERROR,off:n.LogLevelEnum.OFF};let h=class extends o.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=n.LogLevelEnum.OFF,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}_updateLogLevel(){this._logLevel=a[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;t!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function n(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const a=String.fromCharCode,h={DEFAULT:e=>{const t=[n(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":`${a(t[0])}${a(t[1])}${a(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.x};${e.y}${t}`}};class l extends s.Disposable{constructor(){super(),this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=this._register(new r.Emitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(o))this.addProtocol(e,o[e]);for(const e of Object.keys(h))this.addEncoding(e,h[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return!this._customWheelEventHandler||!1!==this._customWheelEventHandler(e)}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return"DEFAULT"===this._activeEncoding}get isPixelEncoding(){return"SGR_PIXELS"===this._activeEncoding}}t.MouseStateService=l},56(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(4812),r=i(701),o=i(8636);t.DEFAULT_OPTIONS={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:r.isMac,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}};const n=["normal","bold","100","200","300","400","500","600","700","800","900"];class a extends s.Disposable{constructor(e){super(),this._onOptionChange=this._register(new o.Emitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this._register((0,s.toDisposable)(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(i=>{i===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(i=>{-1!==e.indexOf(i)&&t()})}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case"cursorStyle":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return"block"===e||"underline"===e||"bar"===e}(i))throw new Error(`"${i}" is not a valid value for ${e}`);break;case"wordSeparator":i||(i=t.DEFAULT_OPTIONS[e]);break;case"fontWeight":case"fontWeightBold":if("number"==typeof i&&1<=i&&i<=1e3)break;i=n.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case"blinkIntervalDuration":if((i=Math.floor(i))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"cursorWidth":i=Math.floor(i);case"lineHeight":case"tabStopWidth":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case"minimumContrastRatio":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case"scrollback":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case"rows":case"cols":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case"windowsPty":i=i??{}}return i}}t.OptionsService=a},8811(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkService=void 0;const o=i(6501);let n=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose(()=>this._removeMarkerFromLink(s,i)),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const o=t.addMarker(t.ybase+t.y),n={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(n,o)),this._entriesWithId.set(n.key,n),this._dataByLinkId.set(n.id,n),n.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every(e=>e.line!==t)){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose(()=>this._removeMarkerFromLink(i,e))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=n,t.OscLinkService=n=s([r(0,o.IBufferService)],n)},6201(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.serviceRegistry=void 0,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const i=function(e,t,s){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");!function(e,t,i){t.di$target===t?t.di$dependencies.push({id:e,index:i}):(t.di$dependencies=[{id:e,index:i}],t.di$target=t)}(i,e,s)};return i._id=e,t.serviceRegistry.set(e,i),i},t.serviceRegistry=new Map},6501(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.IMouseStateService=t.IBufferService=void 0;const s=i(6201);var r;t.IBufferService=(0,s.createDecorator)("BufferService"),t.IMouseStateService=(0,s.createDecorator)("MouseStateService"),t.ICoreService=(0,s.createDecorator)("CoreService"),t.ICharsetService=(0,s.createDecorator)("CharsetService"),t.IInstantiationService=(0,s.createDecorator)("InstantiationService"),function(e){e[e.TRACE=0]="TRACE",e[e.DEBUG=1]="DEBUG",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.OFF=5]="OFF"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)("LogService"),t.IOptionsService=(0,s.createDecorator)("OptionsService"),t.IOscLinkService=(0,s.createDecorator)("OscLinkService"),t.IUnicodeService=(0,s.createDecorator)("UnicodeService"),t.IDecorationService=(0,s.createDecorator)("DecorationService")},6415(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;const s=i(8636);class r{constructor(){this._providers=Object.create(null),this._active="",this._onChange=new s.Emitter,this.onChange=this._onChange.event}static extractShouldJoin(e){return!!(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version "${e}"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e,this._active||(this.activeVersion=e.version)}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let o=0;o=s)return t+this.wcwidth(n);const i=e.charCodeAt(o);56320<=i&&i<=57343?n=1024*(n-55296)+i-56320+65536:t+=this.wcwidth(i)}const a=this.charProperties(n,i);let h=r.extractWidth(a);r.extractShouldJoin(a)&&(h-=r.extractWidth(i)),t+=h,i=a}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=r}},t={};return function i(s){var r=t[s];if(void 0!==r)return r.exports;var o=t[s]={exports:{}};return e[s].call(o.exports,o,o.exports,i),o.exports}(6081)})()); ++!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)("object"==typeof exports?exports:e)[s]=i[s]}}(globalThis,()=>(()=>{"use strict";var e={2840(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=r.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new c.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(e=>this._handleResize(e.rows))),this._register(this._terminal.onRender(e=>this._refreshRows(e.start,e.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(e=>this._handleChar(e))),this._register(this._terminal.onLineFeed(()=>this._handleChar("\n"))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register((0,f.addDisposableListener)(r,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register((0,d.toDisposable)(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent=l.tooMuchOutput.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const i=this._terminal.buffer,s=i.lines.length.toString();for(let r=e;r<=t;r++){const e=i.lines.get(i.ydisp+r),t=[],o=e?.translateToString(!0,void 0,void 0,t)||"",n=(i.ydisp+r+1).toString(),a=this._rowElements[r];a&&(0===o.length?(a.textContent=" ",this._rowColumns.set(a,[0,1])):(a.textContent=o,this._rowColumns.set(a,t)),a.setAttribute("aria-posinset",n),a.setAttribute("aria-setsize",s),this._alignRowWidth(a))}this._announceCharacters()}_announceCharacters(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent===l.tooMuchOutput.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){const i=e.target,s=this._rowElements[0===t?1:this._rowElements.length-2];if(i.getAttribute("aria-posinset")===(0===t?"1":`${this._terminal.buffer.lines.length}`))return;if(e.relatedTarget!==s)return;let r,o;if(0===t?(r=i,o=this._rowElements.pop(),this._rowContainer.removeChild(o)):(r=this._rowElements.shift(),o=i,this._rowContainer.removeChild(r)),r.removeEventListener("focus",this._topBoundaryFocusListener),o.removeEventListener("focus",this._bottomBoundaryFocusListener),0===t){const e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement("afterbegin",e)}else{const e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(0===this._rowElements.length)return;const e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error("anchorNode and/or focusNode are null");let t={node:e.anchorNode,offset:e.anchorOffset},i={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===i.node&&t.offset>i.offset)&&([t,i]=[i,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const s=this._rowElements.slice(-1)[0];if(i.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(i={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(i.node))return;const r=({node:e,offset:t})=>{const i=e instanceof Text?e.parentNode:e;let s=parseInt(i?.getAttribute("aria-posinset"),10)-1;if(isNaN(s))return console.warn("row is invalid. Race condition?"),null;const r=this._rowColumns.get(i);if(!r)return console.warn("columns is null. Race condition?"),null;let o=t=this._terminal.cols&&(++s,o=0),{row:s,column:o}},o=r(t),n=r(i);if(o&&n){if(o.row>n.row||o.row===n.row&&o.column>=n.column)throw new Error("invalid range");this._terminal.select(o.column,o.row,(n.row-o.row)*this._terminal.cols-o.column+n.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;ethis._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(I.EventUtils.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(I.EventUtils.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(I.EventUtils.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(I.EventUtils.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register((0,N.toDisposable)(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}_handleColorEvent(e){if(this._themeService)for(const t of e){let e,i;switch(t.index){case 256:e="foreground",i="10";break;case 257:e="background",i="11";break;case 258:e="cursor",i="12";break;default:e="ansi",i="4;"+t.index}switch(t.type){case 0:const s=E.color.toColorRGB("ansi"===e?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`]${i};${(0,T.toRgbString)(s)}\\`);break;case 1:if("ansi"===e)this._themeService.modifyColors(e=>e.ansi[t.index]=E.channels.toColor(...t.color));else{const i=e;this._themeService.modifyColors(e=>e[i]=E.channels.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_reportColorScheme(){if(!this._themeService)return;const e=E.rgb.relativeLuminance(this._themeService.colors.background.rgba>>8)>8)?1:2;this.coreService.triggerDataEvent(`[?997;${e}n`)}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(A.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this._compositionHelper instanceof u.CompositionHelper&&this._compositionHelper.blur(),this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(""),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;const i=Math.min(this.buffer.x,this.cols-1),s=this._renderService.dimensions.css.cell.height,r=t.getWidth(i),o=this._renderService.dimensions.css.cell.width*r,n=this.buffer.y*this._renderService.dimensions.css.cell.height,a=i*this._renderService.dimensions.css.cell.width;this.textarea.style.left=a+"px",this.textarea.style.top=n+"px",this.textarea.style.width=o+"px",this.textarea.style.height=s+"px",this.textarea.style.lineHeight=s+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this._register((0,H.addDisposableListener)(this.element,"copy",e=>{this.hasSelection()&&(0,a.copyHandler)(e,this._selectionService)}));const e=e=>(0,a.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this._register((0,H.addDisposableListener)(this.textarea,"paste",e)),this._register((0,H.addDisposableListener)(this.element,"paste",e)),L.isFirefox?this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>{2===e.button&&(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register((0,H.addDisposableListener)(this.element,"contextmenu",e=>{(0,a.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),L.isLinux&&this._register((0,H.addDisposableListener)(this.element,"auxclick",e=>{1===e.button&&(0,a.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register((0,H.addDisposableListener)(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register((0,H.addDisposableListener)(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register((0,H.addDisposableListener)(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register((0,H.addDisposableListener)(this.textarea,"compositionend",e=>{this._compositionHelper instanceof u.CompositionHelper?this._compositionHelper.compositionend(e)&&this.textarea.dispatchEvent(new CustomEvent("xterm-composition-transaction-accepted",{bubbles:!0})):this._compositionHelper.compositionend()})),this._register((0,H.addDisposableListener)(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",e=>this.element.classList.toggle("allow-transparency",e))),e.appendChild(this.element);const t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register((0,H.addDisposableListener)(this.screenElement,"mousemove",e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);const i=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",h.promptLabel.get()),L.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>i.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(g.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??("undefined"!=typeof window?window.document:null))),this._instantiationService.setService(C.ICoreBrowserService,this._coreBrowserService),this._register((0,H.addDisposableListener)(this.textarea,"focus",e=>this._handleTextAreaFocus(e))),this._register((0,H.addDisposableListener)(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(p.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(C.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(k.ThemeService),this._instantiationService.setService(C.IThemeService,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(v.CharacterJoinerService),this._instantiationService.setService(C.ICharacterJoinerService,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(w.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(C.IRenderService,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this._register(this._renderService.onDimensionsChange(e=>this._onDimensionsChange.fire({css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(u.CompositionHelper,this.textarea,this._compositionView),this._register((0,N.toDisposable)(()=>{this._compositionHelper instanceof u.CompositionHelper&&this._compositionHelper.dispose()})),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(S.MouseCoordsService),this._instantiationService.setService(C.IMouseCoordsService,this._mouseCoordsService);const s=this._linkifier.value=this._register(this._instantiationService.createInstance(O.Linkifier,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(e){this._logService.error("onWillOpen handler threw an exception",e)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(c.Viewport,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(y.SelectionService,this.element,this.screenElement,s)),this._instantiationService.setService(C.ISelectionService,this._selectionService),this._mouseService=this._instantiationService.createInstance(b.MouseService),this._instantiationService.setService(C.IMouseService,this._mouseService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(I.EventUtils.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(d.BufferDecorationRenderer,this.screenElement)),this._register((0,H.addDisposableListener)(this.element,"mousedown",e=>this._selectionService.handleMouseDown(e))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(A.AccessibilityManager,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",e=>this._handleScreenReaderModeOptionChange(e)));const r=this.options.scrollbar?.showScrollbar??!0,o=this.options.scrollbar?.width;r&&o&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",e=>{const t=(e?.showScrollbar??!0)&&!!e?.width;!this._overviewRulerRenderer&&t&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(_.OverviewRulerRenderer,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:e=>this._viewport?.handleTouchScroll(e)},e=>this._register(e),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(f.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,i=!1){this._renderService?.refreshRows(e,t,i)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}paste(e){(0,a.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");const t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,i){this._selectionService.setSelection(e,t,i)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;const t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;t||"Dead"!==e.key&&"AltGraph"!==e.key||(this._unprocessedDeadKey=!0);const i=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),3===i.type||2===i.type){const t=this.rows-1;return this.scrollLines(2===i.type?-t:t),e.preventDefault(),e.stopPropagation(),!1}if(1===i.type&&this.selectAll(),this._isThirdLevelShift(this.browser,e))return!0;if(i.cancel&&(e.preventDefault(),e.stopPropagation()),!i.key)return!0;if(!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&1===e.key.length&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;""!==i.key&&"\r"!==i.key||(this.textarea.value="");const s=this._keyboardService.useWin32InputMode&&W(e);if(this._onKey.fire({key:i.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){const i=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return"keypress"===t.type?i:i&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return;W(e)||this.focus();const t=this._keyboardService.evaluateKeyUp(e);if(t?.key){const i=this._keyboardService.useWin32InputMode&&W(e);this.coreService.triggerDataEvent(t.key,!i)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this._compositionHelper.keypress?.(t)||this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&"insertText"===e.inputType&&!this.optionsService.rawOptions.screenReaderMode&&this._compositionHelper instanceof u.CompositionHelper&&this._compositionHelper.input(e.data))return!0;if(e.data&&"insertText"===e.inputType&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;efunction(e){const t=l(e);for(t.animFrameRequested=!1,t.current=t.next,t.next=[],t.inAnimationFrameRunner=!0;t.current.length>0;)t.current.sort(a.sort),t.current.shift().execute();t.inAnimationFrameRunner=!1}(e))),r};const s=i(3132);function r(e){const t=e;if(t?.ownerDocument?.defaultView)return t.ownerDocument.defaultView;const i=e;return i?.view?i.view:window}class o{constructor(e,t,i,s){this._node=e,this._type=t,this._handler=i,this._options=s,e.addEventListener(t,i,s)}dispose(){this._node&&this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function n(e,t,i,s){return new o(e,t,i,s)}t.eventType={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};class a{constructor(e,t){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){console.error(e)}}static sort(e,t){return t.priority-e.priority}}const h=new Map;function l(e){let t=h.get(e);return t||(t={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},h.set(e,t)),t}class c extends s.IntervalTimer{constructor(e){super(),this._defaultTarget=e?r(e):void 0}cancelAndSet(e,t,i){super.cancelAndSet(e,t,i??this._defaultTarget??window)}}t.WindowIntervalTimer=c},8906(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier=void 0;const o=i(4812),n=i(6501),a=i(7098),h=i(8636),l=i(4159);let c=class extends o.Disposable{get currentLink(){return this._currentLink}constructor(e,t,i,s,r){super(),this._element=e,this._mouseCoordsService=t,this._renderService=i,this._bufferService=s,this._linkProviderService=r,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this._register(new h.Emitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this._register(new h.Emitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this._register((0,o.toDisposable)(()=>{(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register((0,l.addDisposableListener)(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register((0,l.addDisposableListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register((0,l.addDisposableListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;const t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;const i=e.composedPath();for(let e=0;e{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let i=!1;for(const[s,r]of this._linkProviderService.linkProviders.entries())if(t){const t=this._activeProviderReplies?.get(s);t&&(i=this._checkLinkProviderResult(s,e,i))}else r.provideLinks(e.y,t=>{if(this._isMouseOut)return;const r=t?.map(e=>({link:e}));this._activeProviderReplies?.set(s,r),i=this._checkLinkProviderResult(s,e,i),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){const i=new Set;for(let s=0;se?this._bufferService.cols:s.link.range.end.x;for(let e=o;e<=n;e++){if(i.has(e)){r.splice(t--,1);break}i.add(e)}}}}_checkLinkProviderResult(e,t,i){if(!this._activeProviderReplies)return i;const s=this._activeProviderReplies.get(e);let r=!1;for(let t=0;tthis._linkAtPosition(e.link,t));e&&(i=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!i)for(let e=0;ethis._linkAtPosition(e.link,t));if(s){i=!0,this._handleNewLink(s);break}}return i}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;const t=this._positionFromMouseEvent(e,this._element);var i,s;t&&this._mouseDownLink&&(i=this._mouseDownLink.link,s=this._currentLink.link,i.text===s.text&&i.range.start.x===s.range.start.x&&i.range.start.y===s.range.start.y&&i.range.end.x===s.range.end.x&&i.range.end.y===s.range.end.y)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,o.dispose)(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;const t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;const t=0===e.start?0:e.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(t,i),this._lastMouseEvent)){const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(i,t.text)}_fireUnderlineEvent(e,t){const i=e.range,s=this._bufferService.buffer.ydisp,r=this._createLinkUnderlineEvent(i.start.x-1,i.start.y-s-1,i.end.x,i.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(r)}_linkLeave(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(i,t.text)}_linkAtPosition(e,t){const i=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,r=t.y*this._bufferService.cols+t.x;return i<=r&&r<=s}_positionFromMouseEvent(e,t){const i=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,i,s,r){return{x1:e,y1:t,x2:i,y2:s,cols:this._bufferService.cols,fg:r}}};t.Linkifier=c,t.Linkifier=c=s([r(1,a.IMouseCoordsService),r(2,a.IRenderService),r(3,n.IBufferService),r(4,a.ILinkProviderService)],c)},7721(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0;let i="Terminal input";const s={get:()=>i,set:e=>i=e};t.promptLabel=s;let r="Too much output to announce, navigate to rows manually to read";const o={get:()=>r,set:e=>r=e};t.tooMuchOutput=o},3285(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkProvider=void 0;const o=i(3055),n=i(6501);let a=class{constructor(e,t,i){this._bufferService=e,this._optionsService=t,this._oscLinkService=i,this._workCell=new o.CellData}provideLinks(e,t){const i=this._bufferService.buffer.lines.get(e-1);if(!i)return void t(void 0);const s=[],r=this._optionsService.rawOptions.linkHandler,o=this._workCell,n=i.getTrimmedLength();let a=-1,l=-1,c=!1;for(let t=0;tr?r.activate(e,t,d):h(0,t),hover:(e,t)=>r?.hover?.(e,t,d),leave:(e,t)=>r?.leave?.(e,t,d)})}c=!1,o.hasExtendedAttrs()&&o.extended.urlId?(l=t,a=o.extended.urlId):(l=-1,a=-1)}}t(s)}_getRangeWithLineWrap(e,t,i,s){let r=e,o=t,n=e,a=i;for(;0===o;){const e=this._bufferService.buffer.lines.get(r-1);if(!e?.isWrapped)break;const t=this._bufferService.buffer.lines.get(r-2);if(!t)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,i-1,s))break;let n=i-1;for(;n>0&&this._hasUrlId(t,n-1,s);)n--;r--,o=n}for(;;){const e=this._bufferService.buffer.lines.get(n-1);if(!e)break;if(a!==e.getTrimmedLength())break;const t=this._bufferService.buffer.lines.get(n);if(!t?.isWrapped)break;const i=t.getTrimmedLength();if(0===i||!this._hasUrlId(t,0,s))break;let r=1;for(;rthis._innerRefresh()),this._animationFrame}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return void this._runRefreshCallbacks();const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},4292(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(e,t,i){this._rowCount=i,e=e??0,t=t??this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;const s=performance.now();if(s-this._lastRefreshMs>=this._debounceThresholdMS)void 0!==this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=s,this._innerRefresh();else if(!this._additionalRefreshRequested){const e=s-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},t)}}_innerRefresh(){if(void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return;const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},9302(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_ANSI_COLORS=void 0;const s=i(4103);t.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const e=[s.css.toColor("#2e3436"),s.css.toColor("#cc0000"),s.css.toColor("#4e9a06"),s.css.toColor("#c4a000"),s.css.toColor("#3465a4"),s.css.toColor("#75507b"),s.css.toColor("#06989a"),s.css.toColor("#d3d7cf"),s.css.toColor("#555753"),s.css.toColor("#ef2929"),s.css.toColor("#8ae234"),s.css.toColor("#fce94f"),s.css.toColor("#729fcf"),s.css.toColor("#ad7fa8"),s.css.toColor("#34e2e2"),s.css.toColor("#eeeeec")],t=[0,95,135,175,215,255];for(let i=0;i<216;i++){const r=t[i/36%6|0],o=t[i/6%6|0],n=t[i%6];e.push({css:s.channels.toCss(r,o,n),rgba:s.channels.toRgba(r,o,n)})}for(let t=0;t<24;t++){const i=8+10*t;e.push({css:s.channels.toCss(i,i,i),rgba:s.channels.toRgba(i,i,i)})}return e})())},4017(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;const o=i(7098),n=i(4812),a=i(6501),h=i(4159),l=i(8566),c=i(8636),d=i(7880);let _=class extends n.Disposable{constructor(e,t,i,s,r,o,a,_,u){super(),this._bufferService=i,this._coreService=r,this._optionsService=_,this._renderService=u,this._onRequestScrollLines=this._register(new c.Emitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._isSyncing=!1,this._isHandlingScroll=!1,this._suppressOnScrollHandler=!1,this._needsSyncOnRender=!1;const f=this._register(new d.Scrollable({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:e=>(0,h.scheduleAtNextAnimationFrame)(s.window,e)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{f.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new l.SmoothScrollableElement(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},f)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(o.onProtocolChange(e=>{this._scrollableElement.updateOptions({handleMouseWheel:!(16&e)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{e.style.backgroundColor=a.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=a.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register((0,n.toDisposable)(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register((0,n.toDisposable)(()=>this._styleElement.remove())),this._register(c.EventUtils.runAndSubscribe(a.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${a.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${a.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${a.colors.scrollbarSliderActiveBackground.css};`,"}"].join("\n")})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(e=>this._handleScroll(e)))}scrollLines(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){const e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,i=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:i,verticalHasArrows:t}}queueSync(e){void 0!==e&&(this._latestYDisp=e),void 0===this._queuedAnimationFrame&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){this._renderService&&!this._isSyncing&&(this._coreService.decPrivateModes.synchronizedOutput?this._needsSyncOnRender=!0:(this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1))}_handleScroll(e){if(!this._renderService)return;if(this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;const t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),i=t-this._bufferService.buffer.ydisp;0!==i&&(this._latestYDisp=t,this._onRequestScrollLines.fire(i)),this._isHandlingScroll=!1}handleTouchScroll(e){const t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};t.Viewport=_,t.Viewport=_=s([r(2,a.IBufferService),r(3,o.ICoreBrowserService),r(4,a.ICoreService),r(5,a.IMouseStateService),r(6,o.IThemeService),r(7,a.IOptionsService),r(8,o.IRenderService)],_)},4196(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferDecorationRenderer=void 0;const o=i(7098),n=i(4812),a=i(6501);let h=class extends n.Disposable{constructor(e,t,i,s,r){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=i,this._decorationService=s,this._renderService=r,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(e=>this._removeDecoration(e))),this._register((0,n.toDisposable)(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){void 0===this._animationFrame&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){const t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer","top"===e?.options?.layer),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const i=e.options.x??0;return i&&i>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){const t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let i=this._decorationElements.get(e);i||(i=this._createElement(e),e.element=i,this._decorationElements.set(e,i),this._container.appendChild(i),e.onDispose(()=>{this._decorationElements.delete(e),i.remove()})),i.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(i.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",i.style.top=t*this._renderService.dimensions.css.cell.height+"px",i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(i)}}_refreshXPosition(e,t=e.element){if(!t)return;const i=e.options.x??0;"right"===(e.options.anchor||"left")?t.style.right=i?i*this._renderService.dimensions.css.cell.width+"px":"":t.style.left=i?i*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=h,t.BufferDecorationRenderer=h=s([r(1,a.IBufferService),r(2,o.ICoreBrowserService),r(3,a.IDecorationService),r(4,o.IRenderService)],h)},957(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(const t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,i){return t>=e.startBufferLine-this._linePadding[i||"full"]&&t<=e.endBufferLine+this._linePadding[i||"full"]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},9925(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OverviewRulerRenderer=void 0;const o=i(957),n=i(7098),a=i(4812),h=i(6501),l={full:0,left:0,center:0,right:0},c={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0};let _=class extends a.Disposable{get _width(){const e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??1?e?.width??0:0}constructor(e,t,i,s,r,n,h,l){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=i,this._decorationService=s,this._renderService=r,this._optionsService=n,this._themeService=h,this._coreBrowserService=l,this._colorZoneStore=new o.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register((0,a.toDisposable)(()=>this._canvas?.remove()));const c=this._canvas.getContext("2d");if(!c)throw new Error("Ctx cannot be null");this._ctx=c,this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register((0,a.toDisposable)(()=>{void 0!==this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}_refreshDrawConstants(){const e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);c.full=this._canvas.width,c.left=e,c.center=t,c.right=e,this._refreshDrawHeightConstants(),d.full=1,d.left=1,d.center=1+c.left,d.right=1+c.left+c.center}_refreshDrawHeightConstants(){l.full=Math.round(2*this._coreBrowserService.dpr);const e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);l.left=t,l.center=t,l.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*l.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;const e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1,this._renderRulerOutline();const e=this._colorZoneStore.zones;for(const t of e)"full"!==t.position&&this._renderColorZone(t);for(const t of e)"full"===t.position&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-l[e.position||"full"]/2),c[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+l[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=_,t.OverviewRulerRenderer=_=s([r(2,h.IBufferService),r(3,h.IDecorationService),r(4,n.IRenderService),r(5,h.IOptionsService),r(6,n.IThemeService),r(7,n.ICoreBrowserService)],_)},3618(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;const o=i(7098),n=i(6501),a=i(2744),h=i(4159),l=i(4812),c=i(4103),d="xterm-composition-session-end";let _=class{get isComposing(){return this._isComposing}get hasPendingCompositionFinalization(){return void 0!==this._pendingComposition}get _isSendingComposition(){return this.hasPendingCompositionFinalization}get _pendingKeypressData(){return this._pendingComposition?.keypressData??""}constructor(e,t,i,s,r,o,n,a){this._textarea=e,this._compositionView=t,this._bufferService=i,this._optionsService=s,this._coreService=r,this._renderService=o,this._themeService=n,this._unicodeService=a,this._isComposing=!1,this._isAwaitingCompositionEnd=!1,this._compositionPosition={start:0,end:0},this._compositionSuffix="",this._dataAlreadySent="",this._compositionInputData="",this._lastCompositionData="",this._compositionStartValue="",this._compositionStartSelection={start:0,end:0},this._compositionHasObservedProgress=!1,this._compositionTransactionId=0,this._compositionTimers=new Set,this._imeKeydownAwaitingCommit=!1}compositionstart(){this._cancelDeferredTimer(this._compositionPositionTimer),this._compositionPositionTimer=void 0,this._cancelDeferredTimer(this._compositionViewTimer),this._compositionViewTimer=void 0,this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,void 0!==this._textareaChangeTimer&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0);const e=this._textarea.selectionStart??this._textarea.value.length,t=this._textarea.selectionEnd??e;this._compositionPosition.start=Math.min(e,t),this._compositionPosition.end=Math.max(e,t),this._compositionStartValue=this._textarea.value,this._compositionStartSelection={start:e,end:t},this._compositionHasObservedProgress=!1,this._imeKeydownAwaitingCommit=!1,this._pendingComposition&&(this._pendingComposition.nextCompositionStart=this._compositionPosition.start),this._compositionTransactionId++,this._isComposing=!0,this._isAwaitingCompositionEnd=!0,this._compositionSuffix=this._textarea.value.substring(this._compositionPosition.end),this._resetCompositionView(),this._dataAlreadySent="",this._compositionInputData="",this._lastCompositionData="",this._compositionView.classList.add("active"),this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-session-start",{bubbles:!0,detail:{id:this._compositionTransactionId}}))}compositionupdate(e){e.data&&!this._isComposing&&this.compositionstart(),this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._compositionHasObservedProgress||=this._hasCompositionProgress(),e.data?.length>0&&(this._lastCompositionData=e.data),this._renderCompositionView(e.data??""),this._compositionView.classList.toggle("active",Boolean(e.data)),this.updateCompositionElements();const t=this._compositionTransactionId;this._cancelDeferredTimer(this._compositionPositionTimer),this._compositionPositionTimer=this._defer(()=>{if(this._isComposing&&this._compositionTransactionId===t){this._compositionHasObservedProgress||=this._hasCompositionProgress();const e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)}})}compositionend(e){if(!this._isAwaitingCompositionEnd)return!1;if(!this._isComposing){const t=this._pendingComposition;return t?.transactionId===this._compositionTransactionId&&(t.endData=e?.data??"",this._updatePostCompositionInputExpectation(t)),!1}const t=e?.data??"";if(this._compositionHasObservedProgress||=this._hasCompositionProgress(),!this._compositionEndBelongsToCurrentTransaction(t)){const e=this._pendingComposition;return e&&e.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(e),this._deferCompositionEnd(t),!1}return this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._finalizeComposition(!0,t),!0}blur(){if(this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._isComposing){const e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)}(this._isComposing||this.hasPendingCompositionFinalization)&&this._finalizeComposition(!1)}dispose(){void 0!==this._textareaChangeTimer&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0);for(const e of this._compositionTimers)clearTimeout(e);this._compositionTimers.clear(),this._compositionPositionTimer=void 0,this._compositionViewTimer=void 0,this._compositionEndTimer=void 0,this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionTransactionId++,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._preeditRenderer?.dispose(),this._preeditRenderer=void 0}keydown(e){if(this._canceledKey?.code===e.code&&this._canceledKey.timeStamp===e.timeStamp)return this._canceledKey=void 0,!1;if("Escape"===e.key&&(this._isComposing||this.hasPendingCompositionFinalization))return this._canceledKey={code:e.code,timeStamp:e.timeStamp},this._cancelComposition(),!1;if(this._isComposing||this.hasPendingCompositionFinalization){if(this._deferPreeditResync(this._composedRegionLength()>0),20===e.keyCode||229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return this._imeKeydownAwaitingCommit=229===e.keyCode,229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)}keypress(e){const t=this._pendingComposition;return!(!t||(t.keypressMayOverlapComposition?(t.keypressData+=e,0):t.expectsPostCompositionInput&&0===t.keypressData.length?(t.keypressData=e,0):(this._sendPendingComposition(t),1)))}input(e){if(this._isComposing)return this._compositionHasObservedProgress||=this._hasCompositionProgress(),this._compositionInputData+=e,!0;const t=this._pendingComposition;if(!t)return this._claimImeKeydownCommit(e);if(t.expectsPostCompositionInput)return t.inputData+=e,t.expectsPostCompositionInput=!1,this._sendPendingComposition(t),!0;const i=e.length>0&&this._getPendingTextareaInput(t)===e&&this._getPendingTextareaInput(t,!0)===e;return this._sendPendingComposition(t),i||this._coreService.triggerDataEvent(e,!0),!0}_claimImeKeydownCommit(e){return!!this._imeKeydownAwaitingCommit&&(this._imeKeydownAwaitingCommit=!1,void 0!==this._textareaChangeTimer&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0),this._coreService.triggerDataEvent(e,!0),!0)}_finalizeComposition(e,t=""){const i=this._isComposing;if(this._compositionView.classList.remove("active"),this._resetCompositionView(),this._isComposing=!1,!e||i)if(e){this._pendingComposition&&this._sendPendingComposition(this._pendingComposition);const e={transactionId:this._compositionTransactionId,lifecycleSettled:!1,sessionEnded:!1,position:{start:this._compositionPosition.start,end:this._compositionPosition.end},suffix:this._compositionSuffix,dataAlreadySent:this._dataAlreadySent,compositionData:this._lastCompositionData,endData:t,inputData:this._compositionInputData,keypressData:"",keypressMayOverlapComposition:0===this._lastCompositionData.length&&0===t.length,expectsPostCompositionInput:!1};this._updatePostCompositionInputExpectation(e),this._pendingComposition=e,e.finalizerTimer=this._defer(()=>{e.finalizerTimer=void 0,this._compositionTransactionId===e.transactionId&&(this._isAwaitingCompositionEnd=!1),this._pendingComposition===e&&this._sendPendingComposition(e,!0)})}else if(this._pendingComposition&&this._sendPendingComposition(this._pendingComposition,!0),i){const e=this._getCompositionInput(this._compositionPosition.start+this._dataAlreadySent.length,this._compositionSuffix);this._sendCompositionInput(this._compositionTransactionId,e)}}_sendPendingComposition(e,t=!1){this._cancelPendingFinalizer(e),this._pendingComposition===e&&(this._pendingComposition=void 0);const i=this._getPendingTextareaInput(e,t),s=this._removeAlreadySentData(e.inputData||e.keypressData,e.dataAlreadySent),r=this._mergeTextObservations(i||e.endData||(s?e.compositionData:""),s,e.keypressMayOverlapComposition);this._sendCompositionInput(e.transactionId,r,!e.sessionEnded),this._settlePendingComposition(e)}_cancelPendingFinalizer(e){void 0!==e.finalizerTimer&&(clearTimeout(e.finalizerTimer),this._compositionTimers.delete(e.finalizerTimer),e.finalizerTimer=void 0)}_settlePendingComposition(e){e.lifecycleSettled||(e.lifecycleSettled=!0,this._dispatchCompositionTransactionSettled())}_mergeTextObservations(e,t,i){if(!t||e.includes(t))return e;if(!e||t.includes(e))return t;if(i){let i=Math.min(e.length,t.length);for(;i>0&&!e.endsWith(t.substring(0,i));)i--;let s=Math.min(e.length,t.length);for(;s>0&&!t.endsWith(e.substring(0,s));)s--;return i>s?e+t.substring(i):t+e.substring(s)}let s=Math.min(e.length,t.length);for(;s>0&&!e.endsWith(t.substring(0,s));)s--;return e+t.substring(s)}_updatePostCompositionInputExpectation(e){e.expectsPostCompositionInput=(e.endData.length>0||e.compositionData.length>0)&&0===e.inputData.length&&0===this._getPendingTextareaInput(e).length}_getPendingTextareaInput(e,t=!1){const i=this._textarea.value,s=e.position.start+e.dataAlreadySent.length;if(void 0!==e.nextCompositionStart)return i.substring(s,Math.max(s,e.nextCompositionStart));const r=e.suffix.length>0&&i.endsWith(e.suffix)?i.length-e.suffix.length:i.length,o=(e.endData||e.compositionData).length,n=t?r:Math.max(e.position.end,s+o);return i.substring(s,Math.max(s,Math.min(r,n)))}_getCompositionInput(e,t){const i=this._textarea.value,s=t.length>0&&i.endsWith(t)?i.length-t.length:i.length;return i.substring(e,Math.max(e,s))}_removeAlreadySentData(e,t){return 0===t.length?e:e.startsWith(t)?e.substring(t.length):t.includes(e)?"":e}_cancelComposition(){const e=this._pendingComposition;e&&this._isComposing&&e.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(e);const t=this._isComposing?this._compositionTransactionId:this._pendingComposition?.transactionId??0,i=void 0!==e&&this._pendingComposition===e;this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._textarea.value=this._textarea.value.substring(0,this._compositionPosition.start)+this._compositionSuffix,this._sendCompositionInput(t,""),i&&e&&this._settlePendingComposition(e)}_sendCompositionInput(e,t,i=!0){let s=!1;if(i){const i=new CustomEvent(d,{bubbles:!0,cancelable:!0,detail:{id:e,data:t}});this._dispatchCompositionSessionEvent(i),s=i.defaultPrevented}t.length>0&&!s&&this._coreService.triggerDataEvent(t,!0)}_endPendingCompositionSession(e){if(e.sessionEnded)return;e.sessionEnded=!0;const t=this._getPendingTextareaInput(e)||e.endData||e.compositionData;this._dispatchCompositionSessionEvent(new CustomEvent(d,{bubbles:!0,cancelable:!0,detail:{id:e.transactionId,data:t,dataPendingReconciliation:!0}}))}_dispatchCompositionSessionEvent(e){"function"==typeof this._textarea.dispatchEvent&&this._textarea.dispatchEvent(e)}_dispatchCompositionTransactionSettled(){this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-transaction-settled",{bubbles:!0}))}_deferCompositionEnd(e){this._cancelDeferredTimer(this._compositionEndTimer);const t=this._compositionTransactionId,i=this._defer(()=>{if(this._compositionEndTimer!==i||!this._isComposing||this._compositionTransactionId!==t)return;if(this._compositionEndTimer=void 0,!this._compositionEndBelongsToCurrentTransaction(e))return void(0!==e.length||this._hasCompositionProgress()||this._cancelComposition());this._finalizeComposition(!0,e),this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-transaction-accepted",{bubbles:!0}));const s=this._pendingComposition;s?.transactionId===t&&this._sendPendingComposition(s,!0)});this._compositionEndTimer=i}_composedRegionLength(){const e=this._textarea.value.length-this._compositionSuffix.length;return Math.max(0,e-this._compositionPosition.start)}_deferPreeditResync(e){if(!e||!this._isComposing)return;const t=this._compositionTransactionId;this._defer(()=>{this._isComposing&&this._compositionTransactionId===t&&0===this._composedRegionLength()&&this._cancelComposition()})}_hasCompositionProgress(){const e=this._textarea.selectionStart??this._textarea.value.length,t=this._textarea.selectionEnd??e;return this._compositionHasObservedProgress||this._textarea.value!==this._compositionStartValue||e!==this._compositionStartSelection.start||t!==this._compositionStartSelection.end}_compositionEndBelongsToCurrentTransaction(e){return this._hasCompositionProgress()||e.length>0&&e===this._lastCompositionData}_defer(e){const t=setTimeout(()=>{this._compositionTimers.delete(t),e()},0);return this._compositionTimers.add(t),t}_cancelDeferredTimer(e){void 0!==e&&(clearTimeout(e),this._compositionTimers.delete(e))}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;const e=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){const t=this._textarea.value,i=t.replace(e,"");t!==e&&(this._imeKeydownAwaitingCommit=!1),this._dataAlreadySent=i,t.length>e.length?this._coreService.triggerDataEvent(i,!0):t.lengththis.updateCompositionElements(!0)),this._preeditRenderer.render(this._compositionPreedit));const r=this._bufferService.cols*this._renderService.dimensions.css.cell.width-s;this._compositionView.style.maxWidth=r+"px",this._compositionView.style.overflow="hidden";const o=(this._compositionPreedit??this._compositionView).getBoundingClientRect(),n=s+Math.min(0,r-o.width),a=Boolean(this._compositionRemainder)&&o.widththis.updateCompositionElements(!0)))}};t.CompositionHelper=_,t.CompositionHelper=_=s([r(2,n.IBufferService),r(3,n.IOptionsService),r(4,n.ICoreService),r(5,o.IRenderService),r(6,o.IThemeService),r(7,n.IUnicodeService)],_);const u=/^[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}\uac00-\ud7a3\u3131-\u318e\uff01-\uff60]$/u,f=/[\p{Mark}\p{Extended_Pictographic}]/u;class p extends l.Disposable{constructor(e,t,i){super(),this._unicodeService=e,this._segmenter=new Intl.Segmenter(void 0,{granularity:"grapheme"}),this._font="",t.fonts&&this._register((0,h.addDisposableListener)(t.fonts,"loadingdone",()=>{this._font="",this._preedit&&i()}))}clear(){this._preedit=void 0,this._font=""}dispose(){this.clear(),this._measure=void 0,super.dispose()}render(e){const t=e.ownerDocument,i=t.defaultView?.getComputedStyle(e);if(!i)return;const s=[i.fontFamily,i.fontSize,i.fontWeight,i.fontStyle,t.defaultView?.devicePixelRatio].join("|");if(this._preedit===e&&this._font===s)return;this._preedit=e,this._font=s;const r=(e.textContent??"").slice(1,-1),o=new Map,n=[t.createTextNode("‎")];let h,l=0,c=0;const d=e=>{if(e===l)return;const i=r.slice(l,e);if(void 0===h)n.push(t.createTextNode(i));else{const e=t.createElement("span");e.style.letterSpacing=h,e.style.fontKerning="none",e.style.textDecoration="inherit",e.textContent=i,n.push(e),c++}l=e};for(const{segment:e,index:t}of this._segmenter.segment(r)){if(c>=128){d(t),h=void 0;break}let s;const r=this._unicodeService.wcwidth(e.codePointAt(0));if(u.test(e)&&!f.test(e)&&(2===r||/^[\uff61-\uff9f]$/u.test(e))){let t=o.get(e);void 0===t&&(this._measure??=new a.WidthCacheFontVariantCanvas,this._measure.setFont(i.fontFamily,parseFloat(i.fontSize),parseFloat(i.fontWeight)||400,"italic"===i.fontStyle),t=this._measure.measure(e),o.set(e,t),c++),s=`calc(var(--xterm-composition-cell-width) * ${r} - ${t}px)`}s!==h&&(d(t),h=s)}d(r.length),n.push(t.createTextNode("‎")),e.replaceChildren(...n)}}},5251(e,t){function i(e,t,i){const s=i.getBoundingClientRect(),r=e.getComputedStyle(i),o=parseInt(r.getPropertyValue("padding-left"),10),n=parseInt(r.getPropertyValue("padding-top"),10);return[t.clientX-s.left-o,t.clientY-s.top-n]}Object.defineProperty(t,"__esModule",{value:!0}),t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,s,r,o,n,a,h,l){if(!n)return;const c=i(e,t,s);return c[0]=Math.ceil((c[0]+(l?a/2:0))/a),c[1]=Math.ceil(c[1]/h),c[0]=Math.min(Math.max(c[0],1),r+(l?1:0)),c[1]=Math.min(Math.max(c[1],1),o),c}},9686(e,t){function i(e,t,i,o){const h=e-s(e,i),l=t-s(t,i),c=Math.abs(h-l)-function(e,t,i){let o=0;const n=e-s(e,i),a=t-s(t,i);for(let s=0;s=0&&et?"A":"B"}function o(e,t,i,s,r,o){let n=e,a=t,h="";for(;(n!==i||a!==s)&&a>=0&&ao.cols-1?(h+=o.buffer.translateBufferLineToString(a,!1,e,n),n=0,e=0,a++):!r&&n<0&&(h+=o.buffer.translateBufferLineToString(a,!1,0,e+1),n=o.cols-1,e=n,a--);return h+o.buffer.translateBufferLineToString(a,!1,e,n)}function n(e,t){return""+(t?"O":"[")+e}function a(e,t){e=Math.floor(e);let i="";for(let s=0;s0?h-s(h,l):t;const _=h,u=function(e,t,r,o,n,a){let h;return h=i(t,o,n,a).length>0?o-s(o,n):t,e=r&&he?"D":"C",a(Math.abs(l-e),n(d,h));d=c>t?"D":"C";const _=Math.abs(c-t);return a(function(e,t){return t.cols-e}(c>t?e:l,r)+(_-1)*r.cols+1+((c>t?l:e)-1),n(d,h))}},6081(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(f.includes(e))throw new Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new _.ParserApi(this._core)}get unicode(){return this._checkProposedApi(),new u.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new d.BufferNamespaceApi(this._core))}get markers(){return this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t="none";switch(this._core.mouseStateService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:e.synchronizedOutput,win32InputMode:e.win32InputMode,wraparoundMode:e.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,i){this._verifyIntegers(e,t,i),this._core.select(e,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write("\r\n",t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return a.promptLabel.get()},set promptLabel(e){a.promptLabel.set(e)},get tooMuchOutput(){return a.tooMuchOutput.get()},set tooMuchOutput(e){a.tooMuchOutput.set(e)}}}_verifyIntegers(...e){for(p of e)if(p===1/0||isNaN(p)||p%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...e){for(p of e)if(p&&(p===1/0||isNaN(p)||p%1!=0||p<0))throw new Error("This API only accepts positive integers")}}t.Terminal=v},3955(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;const o=i(1433),n=i(2744),a=i(9176),h=i(6181),l=i(2274),c=i(654),d=i(7098),_=i(4103),u=i(4812),f=i(6501),p=i(8636),v=i(4159);let g=1,m=class extends u.Disposable{constructor(e,t,i,s,r,a,d,_,f,m,b,w,y,C){super(),this._terminal=e,this._document=t,this._element=i,this._screenElement=s,this._viewportElement=r,this._helperContainer=a,this._linkifier2=d,this._charSizeService=f,this._optionsService=m,this._bufferService=b,this._coreService=w,this._coreBrowserService=y,this._themeService=C,this._terminalClass=g++,this._rowElements=[],this._selectionRenderModel=(0,l.createSelectionRenderModel)(),this._lastSelectionColumnMode=!1,this._rowHasBlinkingCells=[],this._rowHasBlinkingCellsCount=0,this._onRequestRedraw=this._register(new p.Emitter),this.onRequestRedraw=this._onRequestRedraw.event,this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,h.createRenderDimensions)(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(e=>this._injectCss(e))),this._injectCss(this._themeService.colors),this._rowFactory=_.createInstance(o.DomRendererRowFactory,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(e=>this._handleLinkHover(e))),this._register(this._linkifier2.onHideLinkUnderline(e=>this._handleLinkLeave(e))),this._cursorBlinkStateManager=new S(this._rowContainer,this._coreBrowserService),this._register((0,v.addDisposableListener)(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register((0,u.toDisposable)(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new c.TextBlinkStateManager(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register((0,u.toDisposable)(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new n.WidthCache,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));const t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${_.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;const i=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,r=`blink_block_${this._terminalClass}`;t+=`@keyframes ${i} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${r} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(const[i,s]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${i} { color: ${s.css}; }${this._terminalSelector} .xterm-fg-${i}.xterm-dim { color: ${_.color.multiplyOpacity(s,.5).css}; }${this._terminalSelector} .xterm-bg-${i} { background-color: ${s.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR} { color: ${_.color.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${a.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${_.color.multiplyOpacity(_.color.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${a.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){const e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){const e=this._document.createElement("div");this._rowContainer.appendChild(e),this._rowElements.push(e),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,i){const s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,i);let r=0,o=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(r=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow));let n=0,a=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,i),this._selectionRenderModel.hasSelection){const s=this._selectionRenderModel.viewportStartRow,r=this._selectionRenderModel.viewportEndRow,o=this._selectionRenderModel.viewportCappedStartRow,h=this._selectionRenderModel.viewportCappedEndRow;n=o,a=h;const l=this._document.createDocumentFragment();if(i){const i=e[0]>t[0];l.appendChild(this._createSelectionElement(o,i?t[0]:e[0],i?e[0]:t[0],h-o+1))}else{const i=s===o?e[0]:0,n=o===r?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(o,i,n));const a=h-o-1;if(l.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,a)),o!==h){const e=r===h?t[0]:this._bufferService.cols;l.appendChild(this._createSelectionElement(h,0,e))}}this._selectionContainer.appendChild(l)}let h=Math.min(r,n),l=Math.max(o,a);if(l>=0){h=Math.max(h,0),l=Math.min(l,s-1);const e=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&e>=0&&ethis.dimensions.css.canvas.width&&(n=this.dimensions.css.canvas.width-o),r.style.height=s*this.dimensions.css.cell.height+"px",r.style.top=e*this.dimensions.css.cell.height+"px",r.style.left=`${o}px`,r.style.width=`${n}px`,r}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){const i=this._bufferService.buffer,s=i.ybase+i.y,r=Math.min(i.x,this._bufferService.cols-1),o=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,n=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,a=this._optionsService.rawOptions.cursorInactiveStyle,h={hasBlinkingCells:!1};for(let l=e;l<=t;l++){const e=l+i.ydisp,t=this._rowElements[l];if(!t)continue;const c=i.lines.get(e);c?(t.replaceChildren(...this._rowFactory.createRow(c,e,e===s,n,a,r,o,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,h)),this._setRowBlinkState(l,h.hasBlinkingCells)):(t.replaceChildren(),this._setRowBlinkState(l,!1))}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,i,s,r,o){i<0&&(e=0),s<0&&(t=0);const n=this._bufferService.rows-1;i=Math.max(Math.min(i,n),0),s=Math.max(Math.min(s,n),0),r=Math.min(r,this._bufferService.cols);const a=this._bufferService.buffer,h=a.ybase+a.y,l=Math.min(a.x,r-1),c=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,_=this._optionsService.rawOptions.cursorInactiveStyle,u={hasBlinkingCells:!1};for(let n=i;n<=s;++n){const f=n+a.ydisp,p=this._rowElements[n];if(!p)continue;const v=a.lines.get(f);v?(p.replaceChildren(...this._rowFactory.createRow(v,f,f===h,d,_,l,c,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,o?n===i?e:0:-1,o?(n===s?t:r)-1:-1,u)),this._setRowBlinkState(n,u.hasBlinkingCells)):(p.replaceChildren(),this._setRowBlinkState(n,!1))}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};t.DomRenderer=m,t.DomRenderer=m=s([r(7,f.IInstantiationService),r(8,d.ICharSizeService),r(9,f.IOptionsService),r(10,f.IBufferService),r(11,f.ICoreService),r(12,d.ICoreBrowserService),r(13,d.IThemeService)],m);class S{constructor(e,t){this._rowContainer=e,this._coreBrowserService=t,this._isIdlePaused=!1,this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){void 0!==this._idleTimeout&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}}},1433(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=void 0;const o=i(9176),n=i(8938),a=i(3055),h=i(6501),l=i(4103),c=i(7098),d=i(945),_=i(6181),u=i(5451);let f=class{constructor(e,t,i,s,r,o,n){this._document=e,this._characterJoinerService=t,this._optionsService=i,this._coreBrowserService=s,this._coreService=r,this._decorationService=o,this._themeService=n,this._workCell=new a.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,i){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=i}createRow(e,t,i,s,r,a,h,c,_,f,p,v,g){const m=[];g&&(g.hasBlinkingCells=!1);const S=this._characterJoinerService.getJoinedCharacters(t),b=this._themeService.colors;let w,y=e.getNoBgTrimmedLength();i&&y=B,F=I,W=this._workCell;if(S.length>0&&I===S[0][0]&&N){const s=S.shift(),r=this._isCellInSelection(s[0],t);for(C=s[0]+1;C=s[1],N?(H=!0,W=new d.JoinedCellData(this._workCell,e.translateToString(!0,s[0],s[1]),s[1]-s[0]),F=s[1]-1,y=W.getWidth()):B=s[1]}const z=this._isCellInSelection(I,t),K=i&&I===a,U=O&&I>=p&&I<=v;g&&W.isBlink()&&(g.hasBlinkingCells=!0),!c&&W.isBlink()&&A.push("xterm-blink-hidden");let j=!1;this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{j=!0});let V=W.getChars()||n.WHITESPACE_CELL_CHAR;if(" "===V&&(W.isUnderline()||W.isOverline())&&(V=" "),k=y*_-f.get(V,W.isBold(),W.isItalic()),w){if(D&&(z&&P||!z&&!P&&W.bg===x)&&(z&&P&&b.selectionForeground||W.fg===L)&&W.extended.ext===R&&U===T&&k===M&&!K&&!H&&!j&&N){W.isInvisible()?E+=n.WHITESPACE_CELL_CHAR:E+=V,D++;continue}D&&(w.textContent=E),w=this._document.createElement("span"),D=0,E=""}else w=this._document.createElement("span");if(x=W.bg,L=W.fg,R=W.extended.ext,T=U,M=k,P=z,H&&a>=I&&a<=F&&(a=I),!this._coreService.isCursorHidden&&K&&this._coreService.isCursorInitialized)if(A.push("xterm-cursor"),this._coreBrowserService.isFocused)h&&A.push("xterm-cursor-blink"),A.push("bar"===s?"xterm-cursor-bar":"underline"===s?"xterm-cursor-underline":"xterm-cursor-block");else if(r)switch(r){case"outline":A.push("xterm-cursor-outline");break;case"block":A.push("xterm-cursor-block");break;case"bar":A.push("xterm-cursor-bar");break;case"underline":A.push("xterm-cursor-underline")}if(W.isBold()&&A.push("xterm-bold"),W.isItalic()&&A.push("xterm-italic"),W.isDim()&&A.push("xterm-dim"),E=W.isInvisible()?n.WHITESPACE_CELL_CHAR:W.getChars()||n.WHITESPACE_CELL_CHAR,W.isUnderline()&&(A.push(`xterm-underline-${W.extended.underlineStyle}`)," "===E&&(E=" "),!W.isUnderlineColorDefault()))if(W.isUnderlineColorRGB())w.style.textDecorationColor=`rgb(${u.AttributeData.toColorRGB(W.getUnderlineColor()).join(",")})`;else{let e=W.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&W.isBold()&&e<8&&(e+=8),w.style.textDecorationColor=b.ansi[e].css}W.isOverline()&&(A.push("xterm-overline")," "===E&&(E=" ")),W.isStrikethrough()&&A.push("xterm-strikethrough"),U&&(w.style.textDecoration="underline");let $=W.getFgColor(),q=W.getFgColorMode(),X=W.getBgColor(),Y=W.getBgColorMode();const G=!!W.isInverse();if(G){const e=$;$=X,X=e;const t=q;q=Y,Y=t}let J,Z,Q,ee=!1;switch(this._decorationService.forEachDecorationAtCell(I,t,void 0,e=>{"top"!==e.options.layer&&ee||(e.backgroundColorRGB&&(Y=50331648,X=e.backgroundColorRGB.rgba>>8&16777215,J=e.backgroundColorRGB),e.foregroundColorRGB&&(q=50331648,$=e.foregroundColorRGB.rgba>>8&16777215,Z=e.foregroundColorRGB),ee="top"===e.options.layer)}),!ee&&z&&(J=this._coreBrowserService.isFocused?b.selectionBackgroundOpaque:b.selectionInactiveBackgroundOpaque,X=J.rgba>>8&16777215,Y=50331648,ee=!0,b.selectionForeground&&(q=50331648,$=b.selectionForeground.rgba>>8&16777215,Z=b.selectionForeground)),ee&&A.push("xterm-decoration-top"),Y){case 16777216:case 33554432:Q=b.ansi[X],A.push(`xterm-bg-${X}`);break;case 50331648:Q=l.channels.toColor(X>>16,X>>8&255,255&X),this._addStyle(w,`background-color:#${(X>>>0).toString(16).padStart(6,"0")}`);break;default:G?(Q=b.foreground,A.push(`xterm-bg-${o.INVERTED_DEFAULT_COLOR}`)):Q=b.background}switch(J||W.isDim()&&(J=l.color.multiplyOpacity(Q,.5)),q){case 16777216:case 33554432:W.isBold()&&$<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&($+=8),this._applyMinimumContrast(w,Q,b.ansi[$],W,J,void 0)||A.push(`xterm-fg-${$}`);break;case 50331648:const e=l.channels.toColor($>>16&255,$>>8&255,255&$);this._applyMinimumContrast(w,Q,e,W,J,Z)||this._addStyle(w,`color:#${$.toString(16).padStart(6,"0")}`);break;default:this._applyMinimumContrast(w,Q,b.foreground,W,J,Z)||G&&A.push(`xterm-fg-${o.INVERTED_DEFAULT_COLOR}`)}A.length&&(w.className=A.join(" "),A.length=0),K||H||j||!N?w.textContent=E:D++,k!==this.defaultSpacing&&(w.style.letterSpacing=`${k}px`),m.push(w),I=F}return w&&D&&(w.textContent=E),m}_applyMinimumContrast(e,t,i,s,r,o){if(1===this._optionsService.rawOptions.minimumContrastRatio||(0,_.treatGlyphAsBackgroundColor)(s.getCode()))return!1;const n=this._getContrastCache(s);let a;if(r||o||(a=n.getColor(t.rgba,i.rgba)),void 0===a){const e=this._optionsService.rawOptions.minimumContrastRatio/(s.isDim()?2:1);a=l.color.ensureContrastRatio(r??t,o??i,e),n.setColor((r??t).rgba,(o??i).rgba,a??null)}return!!a&&(this._addStyle(e,`color:${a.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute("style",`${e.getAttribute("style")||""}${t};`)}_isCellInSelection(e,t){const i=this._selectionStart,s=this._selectionEnd;return!(!i||!s)&&(this._columnSelectMode?i[0]<=s[0]?e>=i[0]&&t>=i[1]&&e=i[1]&&e>=s[0]&&t<=s[1]:t>i[1]&&t=i[0]&&e=i[0])}};t.DomRendererRowFactory=f,t.DomRendererRowFactory=f=s([r(1,c.ICharacterJoinerService),r(2,h.IOptionsService),r(3,c.ICoreBrowserService),r(4,h.ICoreService),r(5,h.IDecorationService),r(6,c.IThemeService)],f)},2744(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WidthCacheFontVariantCanvas=t.WidthCache=void 0;const s=i(6181);t.WidthCache=class{constructor(e=()=>new r){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._canvasElements=[],this._canvasElements=[e(),e(),e(),e()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,i,s){e===this._font&&t===this._fontSize&&i===this._weight&&s===this._weightBold||(this._font=e,this._fontSize=t,this._weight=i,this._weightBold=s,this._canvasElements[0].setFont(e,t,i,!1),this._canvasElements[1].setFont(e,t,s,!1),this._canvasElements[2].setFont(e,t,i,!0),this._canvasElements[3].setFont(e,t,s,!0),this.clear())}get(e,t,i){let s;if(!t&&!i&&1===e.length&&(s=e.charCodeAt(0))<256){if(-9999!==this._flat[s])return this._flat[s];const t=this._measure(e,0);return t>0&&(this._flat[s]=t),t}let r=e;t&&(r+="B"),i&&(r+="I");let o=this._holey.get(r);if(void 0===o){let s=0;t&&(s|=1),i&&(s|=2),o=this._measure(e,s),o>0&&this._holey.set(r,o)}return o}_measure(e,t){return this._canvasElements[t].measure(e)}};class r{constructor(){"undefined"!=typeof OffscreenCanvas?(this._canvas=new OffscreenCanvas(1,1),this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=(0,s.throwIfFalsy)(this._canvas.getContext("2d")))}setFont(e,t,i,s){const r=s?"italic":"";this._ctx.font=`${r} ${i} ${t}px ${e}`.trim()}measure(e){return this._ctx.measureText(e).width}}t.WidthCacheFontVariantCanvas=r},9176(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.INVERTED_DEFAULT_COLOR=void 0,t.INVERTED_DEFAULT_COLOR=257},6181(e,t){function i(e){return 57508<=e&&e<=57558}function s(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e},t.isPowerlineGlyph=i,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=s,t.allowRescaling=function(e,t,r,o){return 1===t&&r>Math.ceil(1.5*o)&&void 0!==e&&e>255&&!s(e)&&!i(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return i(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,i=0){return(e-(2*Math.round(t)-i))%(2*Math.round(t))}},2274(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.createSelectionRenderModel=function(){return new i};class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,i,s=!1){if(this.selectionStart=t,this.selectionEnd=i,!t||!i||t[0]===i[0]&&t[1]===i[1])return void this.clear();const r=e.buffers.active.ydisp,o=t[1]-r,n=i[1]-r,a=Math.max(o,0),h=Math.min(n,e.rows-1);a>=e.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=o,this.viewportEndRow=n,this.viewportCappedStartRow=a,this.viewportCappedEndRow=h,this.startCol=t[0],this.endCol=i[0])}isCellSelected(e,t,i){return!!this.hasSelection&&(i-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&i>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&t=this.startCol)}}},654(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.TextBlinkStateManager=void 0;const s=i(4812);class r extends s.Disposable{constructor(e,t,i){super(),this._renderCallback=e,this._coreBrowserService=t,this._optionsService=i,this._intervalDuration=0,this._blinkOn=!0,this._needsBlinkInViewport=!1,this._isViewportVisible=!0,this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",e=>{this.setIntervalDuration(e)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register((0,s.toDisposable)(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(void 0!==this._interval)return;const e=this._blinkOn;return this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),void(e||this._renderCallback())}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){void 0!==this._interval&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}}t.TextBlinkStateManager=r},8501(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._domNodePointerDown(e)))}_createArrow(e){const t=this._register(new c.ScrollbarArrow(e));return this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode),t}_createSlider(e,t,i,s){this.slider=new h.FastDomNode(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"==typeof i&&this.slider.setWidth(i),"number"==typeof s&&this.slider.setHeight(s),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(a.addDisposableListener(this.slider.domNode,a.eventType.POINTER_DOWN,e=>{0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))})),this._onclick(this.slider.domNode,e=>{e.leftButton&&e.stopPropagation()})}_handleElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._handlePointerDown(e)}delegatePointerDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),s=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),r=this._sliderPointerPosition(e);i<=r&&r<=s?0===e.button&&(e.preventDefault(),this._sliderPointerDown(e)):this._handlePointerDown(e)}_handlePointerDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"==typeof e.offsetX&&"number"==typeof e.offsetY)t=e.offsetX,i=e.offsetY;else{const s=a.getDomNodePagePosition(this.domNode.domNode);t=e.pageX-s.left,i=e.pageY-s.top}const s=this._pointerDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(s):this._scrollbarState.getDesiredScrollPositionFromOffset(s)),0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!(e.target&&e.target instanceof Element))return;const t=this._sliderPointerPosition(e),i=this._sliderOrthogonalPointerPosition(e),s=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{const r=this._sliderOrthogonalPointerPosition(e),o=Math.abs(r-i);if(u.isWindows&&o>140)return void this._setDesiredScrollPositionNow(s.getScrollPosition());const n=this._sliderPointerPosition(e)-t;this._setDesiredScrollPositionNow(s.getDesiredScrollPositionFromDelta(n))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}t.AbstractScrollbar=f},1203(e,t){function i(e){return"number"==typeof e?`${e}px`:e}Object.defineProperty(t,"__esModule",{value:!0}),t.FastDomNode=void 0,t.FastDomNode=class{constructor(e){this.domNode=e,this._width="",this._height="",this._top="",this._left="",this._bottom="",this._right="",this._className="",this._position="",this._layerHint=!1,this._contain="none"}setWidth(e){const t=i(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){const t=i(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){const t=i(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){const t=i(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){const t=i(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){const t=i(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=e?"translate3d(0px, 0px, 0px)":"")}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}}},928(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{try{e.releasePointerCapture(t)}catch{}}))}catch{o=a.getWindow(e)}this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_MOVE,e=>{e.buttons===i?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)})),this._hooks.add(a.addDisposableListener(o,a.eventType.POINTER_UP,e=>this.stopMonitoring(!0)))}}},9699(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.HorizontalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(t.horizontalHasArrows?t.horizontalScrollbarSize:0,2===t.horizontal?0:t.horizontalScrollbarSize,2===t.vertical?0:t.verticalScrollbarSize,s.width,s.scrollWidth,o.scrollLeft),visibility:t.horizontal,extraScrollbarClassName:"xterm-horizontal",scrollable:e,scrollByPage:t.scrollByPage}),t.horizontalHasArrows)throw new Error("horizontalHasArrows is not supported in xterm.js");this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._handleElementSize(e.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return e}_sliderPointerPosition(e){return e.pageX}_sliderOrthogonalPointerPosition(e){return e.pageY}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}updateOptions(e){this.updateScrollbarSize(2===e.horizontal?0:e.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._visibilityController.setVisibility(e.horizontal),this._scrollByPage=e.scrollByPage}}t.HorizontalScrollbar=o},3988(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;ni&&(s=i-t),s<0&&(s=0),r<0&&(r=0),n+r>o&&(n=o-r),n<0&&(n=0),this.width=t,this.scrollWidth=i,this.scrollLeft=s,this.height=r,this.scrollHeight=o,this.scrollTop=n}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new o(this._forceIntegerValues,void 0!==e.width?e.width:this.width,void 0!==e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,void 0!==e.height?e.height:this.height,void 0!==e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new o(this._forceIntegerValues,this.width,this.scrollWidth,void 0!==e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,void 0!==e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){const i=this.width!==e.width,s=this.scrollWidth!==e.scrollWidth,r=this.scrollLeft!==e.scrollLeft,o=this.height!==e.height,n=this.scrollHeight!==e.scrollHeight,a=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:s,scrollLeftChanged:r,heightChanged:o,scrollHeightChanged:n,scrollTopChanged:a}}}t.ScrollState=o;class n extends r.Disposable{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new s.Emitter),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new o(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){const i=this._state.withScrollDimensions(e,t);this._setState(i,Boolean(this._smoothScrolling)),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0!==this._smoothScrollDuration){if(this._smoothScrolling){e={scrollLeft:void 0===e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:void 0===e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop};const i=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let s;s=t?new l(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):l.start(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=l.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}else this.setScrollPositionNow(e)}hasPendingScrollAnimation(){return Boolean(this._smoothScrolling)}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}t.Scrollable=n;class a{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function h(e,t){const i=t-e;return function(t){return e+i*(1-(s=1-t,Math.pow(s,3)));var s}}class l{constructor(e,t,i,s){this.from=e,this.to=t,this.duration=s,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this._scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this._scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(e,t,i){if(Math.abs(e-t)>2.5*i){let n,a;return e0&&Math.abs(e.deltaY)>0)return 1;let i=.5;if(this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(i+=.25),t){const s=Math.abs(e.deltaX),r=Math.abs(e.deltaY),o=Math.abs(t.deltaX),n=Math.abs(t.deltaY),a=Math.max(Math.min(s,o),1),h=Math.max(Math.min(r,n),1),l=Math.max(s,o),c=Math.max(r,n);l%a===0&&c%h===0&&(i-=.5)}return Math.min(Math.max(i,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}}S.INSTANCE=new S;class b extends _.Widget{get options(){return this._options}constructor(e,t,i){let s;super(),this._onScroll=this._register(new f.Emitter),this.onScroll=this._onScroll.event,t=t??{};const r=!i;i?s=i:(t.mouseWheelSmoothScroll=!1,s=new g.Scrollable({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:t=>a.scheduleAtNextAnimationFrame(a.getWindow(e),t)})),this._options=function(e){const t={lazyRender:void 0!==e.lazyRender&&e.lazyRender,className:void 0!==e.className?e.className:"",useShadows:void 0===e.useShadows||e.useShadows,handleMouseWheel:void 0===e.handleMouseWheel||e.handleMouseWheel,flipAxes:void 0!==e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:void 0!==e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:void 0!==e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:void 0!==e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:void 0!==e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:void 0!==e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:void 0===e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:void 0===e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,listenOnDomNode:void 0!==e.listenOnDomNode?e.listenOnDomNode:null,horizontal:void 0!==e.horizontal?e.horizontal:1,horizontalScrollbarSize:void 0!==e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:void 0!==e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:void 0!==e.horizontalHasArrows&&e.horizontalHasArrows,vertical:void 0!==e.vertical?e.vertical:1,verticalScrollbarSize:void 0!==e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:void 0!==e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:void 0!==e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:void 0!==e.scrollByPage&&e.scrollByPage};return t.horizontalSliderSize=void 0!==e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=void 0!==e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,v.isMac&&(t.className+=" xterm-mac"),t}(t),this._scrollable=s,this._register(this._scrollable.onScroll(e=>{this._handleScroll(e),this._onScroll.fire(e)})),r&&this._register(this._scrollable);const o={handleMouseWheel:e=>this._handleMouseWheel(e),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new d.VerticalScrollbar(this._scrollable,this._options,o)),this._horizontalScrollbar=this._register(new c.HorizontalScrollbar(this._scrollable,this._options,o)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new h.FastDomNode(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,e=>this._handleMouseOver(e)),this._onmouseleave(this._listenOnDomNode,e=>this._handleMouseLeave(e)),this._hideTimeout=this._register(new u.TimeoutTimer),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,v.isMac&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){void 0!==e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),void 0!==e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),void 0!==e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),void 0!==e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),void 0!==e.horizontal&&(this._options.horizontal=e.horizontal),void 0!==e.vertical&&(this._options.vertical=e.vertical),void 0!==e.horizontalHasArrows&&(this._options.horizontalHasArrows=e.horizontalHasArrows),void 0!==e.verticalHasArrows&&(this._options.verticalHasArrows=e.verticalHasArrows),void 0!==e.horizontalScrollbarSize&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),void 0!==e.verticalScrollbarSize&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),void 0!==e.scrollByPage&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new l.StandardWheelEvent(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=(0,p.dispose)(this._mouseWheelToDispose),e)){const e=e=>{this._handleMouseWheel(new l.StandardWheelEvent(e))};this._mouseWheelToDispose.push(a.addDisposableListener(this._listenOnDomNode,a.eventType.MOUSE_WHEEL,e,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;const t=S.INSTANCE;t.acceptStandardWheelEvent(e);let i=!1;if(e.deltaY||e.deltaX){let s=e.deltaY*this._options.mouseWheelScrollSensitivity,r=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&r+s===0?r=s=0:Math.abs(s)>=Math.abs(r)?r=0:s=0),this._options.flipAxes&&([s,r]=[r,s]);const o=!v.isMac&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!o||r||(r=s,s=0),e.browserEvent&&e.browserEvent.altKey&&(r*=this._options.fastScrollSensitivity,s*=this._options.fastScrollSensitivity);const n=this._scrollable.getFutureScrollPosition();let a={};if(s){const e=50*s,t=n.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(a,t)}if(r){const e=50*r,t=n.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(a,t)}a=this._scrollable.validateScrollPosition(a),(n.scrollLeft!==a.scrollLeft||n.scrollTop!==a.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),i=!0)}let s=i;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0,s=i?" xterm-shadow-left":"",r=t?" xterm-shadow-top":"",o=i||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${r}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${o}${r}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet(()=>this._hide(),500)}}t.SmoothScrollableElement=b},9594(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._arrowPointerDown(e))),this._register(c.addStandardDisposableListener(this.domNode,c.eventType.POINTER_DOWN,e=>this._arrowPointerDown(e))),this._pointerdownRepeatTimer=this._register(new c.WindowIntervalTimer),this._pointerdownScheduleRepeatTimer=this._register(new l.TimeoutTimer)}_arrowPointerDown(e){e.target&&e.target instanceof Element&&(this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,c.getWindow(e))},200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,e=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),e.preventDefault())}}t.ScrollbarArrow=d},1270(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollbarState=void 0;class i{constructor(e,t,i,s,r,o){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=s,this._scrollSize=r,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new i(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setArrowSize(e){const t=Math.round(e);this._arrowSize!==t&&(this._arrowSize=t,this._refreshComputedValues())}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,i,s,r){const o=Math.max(0,i-e),n=Math.max(0,o-2*t),a=s>0&&s>i;if(!a)return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(n),computedSliderRatio:0,computedSliderPosition:0};const h=Math.round(Math.max(20,Math.floor(i*n/s))),l=(n-h)/(s-i),c=r*l;return{computedAvailableSize:Math.round(o),computedIsNeeded:a,computedSliderSize:Math.round(h),computedSliderRatio:l,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){const e=i._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize;let i=this._scrollPosition;return t{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(e?" xterm-fade":"")))}}t.ScrollbarVisibilityController=o},2650(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;n{s||(s=!0,this._remove(i))}}_remove(e){if(e.prev!==_.Undefined&&e.next!==_.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===_.Undefined&&e.next===_.Undefined?(this._first=_.Undefined,this._last=_.Undefined):e.next===_.Undefined?(this._last=this._last.prev,this._last.next=_.Undefined):e.prev===_.Undefined&&(this._first=this._first.next,this._first.prev=_.Undefined)}*[Symbol.iterator](){let e=this._first;for(;e!==_.Undefined;)yield e.element,e=e.next}}var f;!function(e){e.TAP="-xterm-gesturetap",e.CHANGE="-xterm-gesturechange",e.START="-xterm-gesturestart",e.END="-xterm-gesturesend",e.CONTEXT_MENU="-xterm-gesturecontextmenu"}(f||(t.EventType=f={}));class p extends l.Disposable{constructor(){super(),this._dispatched=!1,this._targets=new u,this._ignoreTargets=new u,this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;const e=c;this._register(h.addDisposableListener(e.document,"touchstart",e=>this._handleTouchStart(e),{passive:!1})),this._register(h.addDisposableListener(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(h.addDisposableListener(e.document,"touchmove",e=>this._handleTouchMove(e),{passive:!1}))}static addTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._targets.push(e);return(0,l.toDisposable)(t)}static ignoreTarget(e){if(!p.isTouchDevice())return l.Disposable.None;p._instance||(p._instance=new p);const t=p._instance._ignoreTargets.push(e);return(0,l.toDisposable)(t)}static isTouchDevice(){return"ontouchstart"in c||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){const t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let i=0,s=e.targetTouches.length;i=p._holdDelay&&Math.abs(n.initialPageX-d(n.rollingPageX))<30&&Math.abs(n.initialPageY-d(n.rollingPageY))<30){const e=this._newGestureEvent(f.CONTEXT_MENU,n.initialTarget);e.pageX=d(n.rollingPageX),e.pageY=d(n.rollingPageY),this._dispatchEvent(e)}else if(1===s){const t=d(n.rollingPageX),s=d(n.rollingPageY),r=d(n.rollingTimestamps)-n.rollingTimestamps[0],o=t-n.rollingPageX[0],a=s-n.rollingPageY[0],h=[...this._targets].filter(e=>n.initialTarget instanceof Node&&e.contains(n.initialTarget));this._inertia(e,h,i,Math.abs(o)/r,o>0?1:-1,t,Math.abs(a)/r,a>0?1:-1,s)}this._dispatchEvent(this._newGestureEvent(f.END,n.initialTarget)),delete this._activeTouches[o.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){const i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}_dispatchEvent(e){if(e.type===f.TAP){const t=(new Date).getTime();let i;i=t-this._lastSetTapCountTime>p._clearTapCountTime?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==f.CHANGE&&e.type!==f.CONTEXT_MENU||(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(const t of this._ignoreTargets)if(t.contains(e.initialTarget))return;const t=[];for(const i of this._targets)if(i.contains(e.initialTarget)){let s=0,r=e.initialTarget;for(;r&&r!==i;)s++,r=r.parentElement;t.push([s,i])}t.sort((e,t)=>e[0]-t[0]);for(const[,i]of t)i.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,i,s,r,o,n,a,l){this._handle=h.scheduleAtNextAnimationFrame(e,()=>{const h=Date.now(),c=h-i;let d=0,_=0,u=!0;s+=p._scrollFriction*c,n+=p._scrollFriction*c,s>0&&(u=!1,d=r*s*c),n>0&&(u=!1,_=a*n*c);const v=this._newGestureEvent(f.CHANGE);v.translationX=d,v.translationY=_,t.forEach(e=>e.dispatchEvent(v)),u||this._inertia(e,t,h,s,r,o+d,n,a,l+_)})}_handleTouchMove(e){const t=Date.now();for(let i=0,s=e.changedTouches.length;i3&&(r.rollingPageX.shift(),r.rollingPageY.shift(),r.rollingTimestamps.shift()),r.rollingPageX.push(s.pageX),r.rollingPageY.push(s.pageY),r.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}}t.Gesture=p,p._scrollFriction=-.005,p._holdDelay=700,p._clearTapCountTime=400,n([function(e,t,i){let s=null,r=null;if("function"==typeof i.value?(s="value",r=i.value,0!==r.length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"==typeof i.get&&(s="get",r=i.get),!r||!s)throw new Error("not supported");const o=`$memoize$${t}`;i[s]=function(...e){return this.hasOwnProperty(o)||Object.defineProperty(this,o,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,e)}),this[o]}}],p,"isTouchDevice",null)},8997(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.VerticalScrollbar=void 0;const s=i(8501),r=i(1270);class o extends s.AbstractScrollbar{constructor(e,t,i){const s=e.getScrollDimensions(),o=e.getCurrentScrollPosition(),n=t.verticalHasArrows;super({lazyRender:t.lazyRender,host:i,scrollbarState:new r.ScrollbarState(n?t.verticalScrollbarSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,s.height,s.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"xterm-vertical",scrollable:e,scrollByPage:t.scrollByPage}),this._arrowScrollDelta=0,this._setArrows(n,t.verticalScrollbarSize),this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}handleScroll(e){return this._shouldRender=this._handleElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._handleElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._handleElementSize(e.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return t}_sliderPointerPosition(e){return e.pageY}_sliderOrthogonalPointerPosition(e){return e.pageX}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}_arrowScroll(e){const t=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollTop:t.scrollTop+e})}_setArrows(e,t){if(this._arrowScrollDelta=t,!this._arrowUp||!this._arrowDown){const e=0;this._arrowUp=this._createArrow({className:"xterm-scra xterm-arrow-up",top:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:e,left:e,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})}if(this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;const i=e?"":"none";this._arrowUp.bgDomNode.style.display=i,this._arrowUp.domNode.style.display=i,this._arrowDown.bgDomNode.style.display=i,this._arrowDown.domNode.style.display=i}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){const t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}}t.VerticalScrollbar=o},7741(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nt(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseover(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_OVER,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}_onmouseleave(e,t){this._register(a.addDisposableListener(e,a.eventType.MOUSE_LEAVE,i=>t(new h.StandardMouseEvent(a.getWindow(e),i))))}}t.Widget=c},5959(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):!!(this.selectionStart&&this.selectionStart[1]<0)&&(this.selectionStart=[0,0],!0)}}},4792(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;const o=i(6501),n=i(4812),a=i(8636);let h=class extends n.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,i){super(),this._optionsService=i,this.width=0,this.height=0,this._onCharSizeChange=this._register(new a.Emitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new d(this._optionsService))}catch{this._measureStrategy=this._register(new c(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=h,t.CharSizeService=h=s([r(2,o.IOptionsService)],h);class l extends n.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){void 0!==e&&e>0&&void 0!==t&&t>0&&(this._result.width=e,this._result.height=t)}}class c extends l{constructor(e,t,i){super(),this._document=e,this._parentElement=t,this._optionsService=i,this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends l{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");const t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},945(e,t,i){var s,r=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},o=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;const n=i(5451),a=i(8938),h=i(3055),l=i(6501);class c extends n.AttributeData{constructor(e,t,i){super(),this.content=0,this.combinedData="",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=c;let d=s=class{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new h.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;t1){const e=this._getJoinedRanges(s,h,n,t,o);for(let t=0;tthis._screenDprMonitor.setWindow(e))),this._register(s.EventUtils.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register((0,r.addDisposableListener)(this._textarea,"focus",()=>this._isFocused=!0)),this._register((0,r.addDisposableListener)(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return void 0===this._cachedIsFocused&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}}t.CoreBrowserService=n;class a extends o.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this._register(new o.MutableDisposable),this._onDprChange=this._register(new s.Emitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register((0,o.toDisposable)(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,r.addDisposableListener)(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},2136(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.KeyboardService=void 0;const o=i(706),n=i(7241),a=i(9249),h=i(701),l=i(6501);let c=class{constructor(e,t){this._coreService=e,this._optionsService=t}_getWin32InputMode(){return this._win32InputMode??=new a.Win32InputMode,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new n.KittyKeyboard,this._kittyKeyboard}evaluateKeyDown(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!0);const t=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(e,t,e.repeat?2:1,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):(0,o.evaluateKeyboardEvent)(e,this._coreService.decPrivateModes.applicationCursorKeys,h.isMac,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(e){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(e,!1);const t=this._coreService.kittyKeyboard.flags;return this.useKitty&&2&t?this._getKittyKeyboard().evaluate(e,t,3,h.isMac&&this._optionsService.rawOptions.macOptionIsMeta):void 0}get useKitty(){const e=this._coreService.kittyKeyboard.flags;return!(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard||!n.KittyKeyboard.shouldUseProtocol(e))}get useWin32InputMode(){return!(!this._optionsService.rawOptions.vtExtensions?.win32InputMode||!this._coreService.decPrivateModes.win32InputMode)}};t.KeyboardService=c,t.KeyboardService=c=s([r(0,l.ICoreService),r(1,l.IOptionsService)],c)},9820(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.LinkProviderService=void 0;const s=i(4812);class r extends s.Disposable{constructor(){super(),this.linkProviders=[],this._register((0,s.toDisposable)(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{const t=this.linkProviders.indexOf(e);-1!==t&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=r},8294(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseCoordsService=void 0;const o=i(4159),n=i(5251),a=i(7098);let h=class{constructor(e,t){this._charSizeService=e,this._renderService=t}getCoords(e,t,i,s,r){return(0,n.getCoords)((0,o.getWindow)(t),e,t,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,r)}getMouseReportCoords(e,t){const i=(0,n.getCoordsRelativeToElement)((0,o.getWindow)(t),e,t);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};t.MouseCoordsService=h,t.MouseCoordsService=h=s([r(0,a.ICharSizeService),r(1,a.IRenderService)],h)},9784(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.AltMouseCursorController=t.MouseService=void 0;const o=i(4159),n=i(6501),a=i(4812),h=i(7098),l=i(2650);let c=class{constructor(e,t,i,s,r,o,n,a,h){this._renderService=e,this._mouseCoordsService=t,this._mouseStateService=i,this._coreService=s,this._bufferService=r,this._optionsService=o,this._selectionService=n,this._logService=a,this._coreBrowserService=h,this._lastEvent=null,this._wheelPartialScroll=0,this._touchScrollAccumulator=0}bindMouse(e,t,i){const{element:s,document:r}=e,n=new a.MutableDisposable,h=new a.MutableDisposable;t(n),t(h);const c={target:e,focus:i,requestedEvents:{mouseup:null,wheel:null,mousedrag:null,mousemove:null},mouseupListener:n,mousedragListener:h},_={mouseup:e=>this._handleMouseUp(c,e),wheel:e=>this._handleWheel(c,e),mousedrag:e=>this._handleMouseDrag(c,e),mousemove:e=>this._handleMouseMove(c,e)};this._altMouseCursor=new d(s,r,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),t(this._altMouseCursor),t(this._mouseStateService.onProtocolChange(e=>{this._handleProtocolChange(c,_,e)})),t(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(s),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,t((0,o.addDisposableListener)(s,"mousedown",e=>this._handleMouseDown(c,e))),t((0,o.addDisposableListener)(s,"wheel",e=>this._handlePassiveWheel(c,e),{passive:!1})),t(l.Gesture.addTarget(e.screenElement)),t((0,o.addDisposableListener)(e.screenElement,l.EventType.START,()=>this._handleTouchStart())),t((0,o.addDisposableListener)(e.screenElement,l.EventType.CHANGE,e=>this._handleTouchChange(c,e)))}_sendEvent(e,t){const i=this._mouseCoordsService.getMouseReportCoords(t,e.target.screenElement);if(!i)return!1;let s,r;switch(t.overrideType||t.type){case"mousemove":r=32,void 0===t.buttons?(s=3,void 0!==t.button&&(s=t.button<3?t.button:3)):s=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case"mouseup":r=0,s=t.button<3?t.button:3;break;case"mousedown":r=1,s=t.button<3?t.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;const e=t.deltaY;if(0===e)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return!1;r=e<0?0:1,s=4;break;default:return!1}if(void 0===r||void 0===s||s>4)return!1;if(4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!t.altKey)return!1;const o=4!==s&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:i.col,row:i.row,x:i.x,y:i.y,button:s,action:r,ctrl:t.ctrlKey,alt:!o&&t.altKey,shift:t.shiftKey})}_handleMouseUp(e,t){this._sendEvent(e,t),t.buttons||(e.mouseupListener.clear(),e.mousedragListener.clear())}_handleWheel(e,t){return this._sendEvent(e,t),t.preventDefault(),t.stopPropagation(),!1}_handleMouseDrag(e,t){t.buttons&&this._sendEvent(e,t)}_handleMouseMove(e,t){t.buttons||this._sendEvent(e,t)}_handleMouseDown(e,t){if(t.preventDefault(),e.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(t))return;this._sendEvent(e,t);const{element:i,document:s}=e.target,r=i.ownerDocument??s;e.requestedEvents.mouseup&&(e.mouseupListener.value=(0,o.addDisposableListener)(r,"mouseup",e.requestedEvents.mouseup)),e.requestedEvents.mousedrag&&(e.mousedragListener.value=(0,o.addDisposableListener)(r,"mousemove",e.requestedEvents.mousedrag))}_handlePassiveWheel(e,t){if(!e.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(t))return!1;if(!this._bufferService.buffer.hasScrollback){if(0===t.deltaY)return!1;if(0===this._consumeWheelEvent(t,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr))return t.preventDefault(),t.stopPropagation(),!1;const e=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(e,!0),t.preventDefault(),t.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(e,t){t.preventDefault(),t.stopPropagation(),e.requestedEvents.wheel?this._handleTouchScrollAsWheel(e,t):this._bufferService.buffer.hasScrollback?e.target.handleTouchScroll?.(t.translationY):this._handleTouchScrollAsKeys(t)}_handleTouchScrollAsKeys(e){const t=this._renderService?.dimensions.css.cell.height;if(!t)return;this._touchScrollAccumulator-=e.translationY;const i=Math.trunc(this._touchScrollAccumulator/t);if(0===i)return;this._touchScrollAccumulator-=i*t;const s=""+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(i<0?"A":"B");for(let e=0;e0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(r*=this._bufferService.rows),r}_triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,this._mouseStateService.isPixelEncoding))return!1;if(!this._mouseStateService.restrictMouseEvent(e))return!1;const t=this._mouseStateService.encodeMouseEvent(e);return t&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}_explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.MouseService=c,t.MouseService=c=s([r(0,h.IRenderService),r(1,h.IMouseCoordsService),r(2,n.IMouseStateService),r(3,n.ICoreService),r(4,n.IBufferService),r(5,n.IOptionsService),r(6,h.ISelectionService),r(7,n.ILogService),r(8,h.ICoreBrowserService)],c);class d{constructor(e,t,i){this._element=e,this._document=t,this._isActive=i,this._listeners=new a.MutableDisposable}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;const e=new a.DisposableStore,t=e=>this.syncFromModifier(e);e.add((0,o.addDisposableListener)(this._document,"keydown",t)),e.add((0,o.addDisposableListener)(this._document,"keyup",t)),e.add((0,o.addDisposableListener)(this._element,"mousemove",t));const i=this._element.ownerDocument?.defaultView;i&&e.add((0,o.addDisposableListener)(i,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=e}resetClass(){this._updateClass(!1)}syncFromModifier(e){this._isActive()&&this._updateClass(e.getModifierState("Alt"))}_updateClass(e){e?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}}t.AltMouseCursorController=d},5783(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;const o=i(4852),n=i(7098),a=i(4812),h=i(6168),l=i(6501),c=i(8636);let d=class extends a.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,i,s,r,n,l,d,u,f){super(),this._rowCount=e,this._optionsService=i,this._logService=s,this._charSizeService=r,this._coreService=n,this._coreBrowserService=u,this._renderer=this._register(new a.MutableDisposable),this._observerDisposable=this._register(new a.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this._register(new c.Emitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this._register(new c.Emitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this._register(new c.Emitter),this.onRender=this._onRender.event,this._onRefreshRequest=this._register(new c.Emitter),this.onRefreshRequest=this._onRefreshRequest.event,this._pausedResizeTask=this._register(new h.DebouncedIdleTask(this._logService)),this._renderDebouncer=new o.RenderDebouncer((e,t)=>this._renderRows(e,t),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new _(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register((0,a.toDisposable)(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(d.onResize(()=>this._fullRefresh())),this._register(d.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(d.cols,d.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(d.buffer.y,d.buffer.y,void 0,!0))),this._register(f.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(e=>this._registerIntersectionObserver(e,t)))}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){const i=new e.IntersectionObserver(e=>this._handleIntersectionChange(e[e.length-1]),{threshold:0});this._observerDisposable.value=(0,a.toDisposable)(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=i,i.observe(t)}}_handleIntersectionChange(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,i=!1,s=!1){if(this._isPaused)return void(this._needsFullRefresh=!0);if(this._coreService.decPrivateModes.synchronizedOutput)return void this._syncOutputHandler.bufferRows(e,t);const r=this._syncOutputHandler.flush();r&&(e=Math.min(e,r.start),t=Math.max(t,r.end)),s||(this._isNextRenderRedrawOnly=!1),i?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){this._renderer.value&&(this._coreService.decPrivateModes.synchronizedOutput?this._syncOutputHandler.bufferRows(e,t):(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0))}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(e=>this.refreshRows(e.start,e.end,e.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,i){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=i,this._renderer.value?.handleSelectionChanged(e,t,i)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d,t.RenderService=d=s([r(2,l.IOptionsService),r(3,l.ILogService),r(4,n.ICharSizeService),r(5,l.ICoreService),r(6,l.IDecorationService),r(7,l.IBufferService),r(8,n.ICoreBrowserService),r(9,n.IThemeService)],d);class _{constructor(e,t,i){this._coreBrowserService=e,this._coreService=t,this._onTimeout=i,this._start=0,this._end=0,this._isBuffering=!1}bufferRows(e,t){this._isBuffering?(this._start=Math.min(this._start,e),this._end=Math.max(this._end,t)):(this._start=e,this._end=t,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;const e={start:this._start,end:this._end};return this._isBuffering=!1,e}dispose(){void 0!==this._timeout&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}}},2079(e,t,i){var s,r=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(t,i);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,r)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},a=this&&this.__importStar||(s=function(e){return s=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},s(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i=s(e),n=0;nthis._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(e=>this._handleTrim(e)),this._register(this._bufferService.buffers.onBufferActivate(e=>this._handleBufferActivate(e))),this.enable(),this._model=new d.SelectionModel(this._bufferService),this._activeSelectionMode=0,this._register((0,u.toDisposable)(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(e=>{e.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";const i=this._bufferService.buffer,s=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";const r=e[0]e.replace(b," ")).join(f.isWindows?"\r\n":"\n")}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),f.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})}_isClickInSelection(e){const t=this._getMouseBufferCoords(e),i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!!(i&&s&&t)&&this._areCoordsInSelection(t,i,s)}isCellInSelection(e,t){const i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!(!i||!s)&&this._areCoordsInSelection([e,t],i,s)}_areCoordsInSelection(e,t,i){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){const i=this._linkifier.currentLink?.link?.range;if(i)return this._model.selectionStart=[i.start.x-1,i.start.y-1],this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const s=this._getMouseBufferCoords(e);return!!s&&(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){const t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=(0,l.getCoordsRelativeToElement)(this._coreBrowserService.window,e,this._screenElement)[1];const i=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=i?0:(t>i&&(t-=i),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(14*t))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:f.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(2===e.button&&this.hasSelection||0!==e.button||this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):1===e.detail?this._handleSingleClick(e):2===e.detail?this._handleDoubleClick(e):3===e.detail&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){const t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);const i=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);i&&i.length!==this._model.selectionStart[0]&&0===i.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){const t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return(!this._optionsService.rawOptions.mouseEventsRequireAlt||!this._mouseStateService.areMouseEventsActive)&&e.altKey&&!(f.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;const t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd)return void this.refresh(!0);2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const i=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){const t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const t=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(t&&void 0!==t[0]&&void 0!==t[1]){const e=(0,c.moveToCellSequence)(t[0]-1,t[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(e,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,i=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);i?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,i)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,i)}_fireOnSelectionChange(e,t,i){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=i,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(e=>this._handleTrim(e))}_convertViewportColToCharacterIndex(e,t){let i=t;for(let s=0;t>=s;s++){const r=e.loadCell(s,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:r>1&&t!==s&&(i+=r-1)}return i}setSelection(e,t,i){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=i,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,i=!0,s=!0){if(e[0]>=this._bufferService.cols)return;const r=this._bufferService.buffer,o=r.lines.get(e[1]);if(!o)return;const n=r.translateBufferLineToString(e[1],!1);let a=this._convertViewportColToCharacterIndex(o,e[0]),h=a;const l=e[0]-a;let c=0,d=0,_=0,u=0;if(" "===n.charAt(a)){for(;a>0&&" "===n.charAt(a-1);)a--;for(;h1&&(u+=s-1,h+=s-1);t>0&&a>0&&!this._isCharWordSeparator(o.loadCell(t-1,this._workCell));){o.loadCell(t-1,this._workCell);const e=this._workCell.getChars().length;0===this._workCell.getWidth()?(c++,t--):e>1&&(_+=e-1,a-=e-1),a--,t--}for(;i1&&(u+=e-1,h+=e-1),h++,i++}}h++;let f=a+l-c+_,p=Math.min(this._bufferService.cols,h-a+c+d-_-u);if(t||""!==n.slice(a,h).trim()){if(i&&0===f&&32!==o.getCodePoint(0)){const t=r.lines.get(e[1]-1);if(t&&o.isWrapped&&32!==t.getCodePoint(this._bufferService.cols-1)){const t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){const e=this._bufferService.cols-t.start;f-=e,p+=e}}}if(s&&f+p===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){const t=r.lines.get(e[1]+1);if(t?.isWrapped&&32!==t.getCodePoint(0)){const t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(p+=t.length)}}return{start:f,length:p}}}_selectWordAt(e,t){const i=this._getWordAt(e,t);if(i){for(;i.start<0;)i.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[i.start,e[1]],this._model.selectionStartLength=i.length}}_selectToWordAt(e){const t=this._getWordAt(e,!0);if(t){let i=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,i--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}}_isCharWordSeparator(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){const t=this._bufferService.buffer.getWrappedRangeForLine(e),i={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,p.getRangeLength)(i,this._bufferService.cols)}};t.SelectionService=w,t.SelectionService=w=n([h(3,g.IBufferService),h(4,g.ICoreService),h(5,_.IMouseCoordsService),h(6,g.IOptionsService),h(7,g.IMouseStateService),h(8,_.IRenderService),h(9,_.ICoreBrowserService)],w)},7098(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IKeyboardService=t.ILinkProviderService=t.IThemeService=t.ICharacterJoinerService=t.ISelectionService=t.IRenderService=t.IMouseService=t.IMouseCoordsService=t.ICoreBrowserService=t.ICharSizeService=void 0;const s=i(6201);t.ICharSizeService=(0,s.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,s.createDecorator)("CoreBrowserService"),t.IMouseCoordsService=(0,s.createDecorator)("MouseCoordsService"),t.IMouseService=(0,s.createDecorator)("MouseService"),t.IRenderService=(0,s.createDecorator)("RenderService"),t.ISelectionService=(0,s.createDecorator)("SelectionService"),t.ICharacterJoinerService=(0,s.createDecorator)("CharacterJoinerService"),t.IThemeService=(0,s.createDecorator)("ThemeService"),t.ILinkProviderService=(0,s.createDecorator)("LinkProviderService"),t.IKeyboardService=(0,s.createDecorator)("KeyboardService")},9078(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.ThemeService=void 0;const o=i(7174),n=i(9302),a=i(4103),h=i(4812),l=i(6501),c=i(8636),d=a.css.toColor("#ffffff"),_=a.css.toColor("#000000"),u=a.css.toColor("#ffffff"),f=_,p={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},v=d;let g=class extends h.Disposable{get colors(){return this._colors}constructor(e){super(),this._optionsService=e,this._contrastCache=new o.ColorContrastCache,this._halfContrastCache=new o.ColorContrastCache,this._onChangeColors=this._register(new c.Emitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:d,background:_,cursor:u,cursorAccent:f,selectionForeground:void 0,selectionBackgroundTransparent:p,selectionBackgroundOpaque:a.color.blend(_,p),selectionInactiveBackgroundTransparent:p,selectionInactiveBackgroundOpaque:a.color.blend(_,p),scrollbarSliderBackground:a.color.opacity(d,.2),scrollbarSliderHoverBackground:a.color.opacity(d,.4),scrollbarSliderActiveBackground:a.color.opacity(d,.5),overviewRulerBorder:d,ansi:n.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}_setTheme(e={}){const t=this._colors;if(t.foreground=m(e.foreground,d),t.background=m(e.background,_),t.cursor=a.color.blend(t.background,m(e.cursor,u)),t.cursorAccent=a.color.blend(t.background,m(e.cursorAccent,f)),t.selectionBackgroundTransparent=m(e.selectionBackground,p),t.selectionBackgroundOpaque=a.color.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=m(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=a.color.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?m(e.selectionForeground,a.NULL_COLOR):void 0,t.selectionForeground===a.NULL_COLOR&&(t.selectionForeground=void 0),a.color.isOpaque(t.selectionBackgroundTransparent)){const e=.3;t.selectionBackgroundTransparent=a.color.opacity(t.selectionBackgroundTransparent,e)}if(a.color.isOpaque(t.selectionInactiveBackgroundTransparent)){const e=.3;t.selectionInactiveBackgroundTransparent=a.color.opacity(t.selectionInactiveBackgroundTransparent,e)}if(t.scrollbarSliderBackground=m(e.scrollbarSliderBackground,a.color.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=m(e.scrollbarSliderHoverBackground,a.color.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=m(e.scrollbarSliderActiveBackground,a.color.opacity(t.foreground,.5)),t.overviewRulerBorder=m(e.overviewRulerBorder,v),t.ansi=n.DEFAULT_ANSI_COLORS.slice(),t.ansi[0]=m(e.black,n.DEFAULT_ANSI_COLORS[0]),t.ansi[1]=m(e.red,n.DEFAULT_ANSI_COLORS[1]),t.ansi[2]=m(e.green,n.DEFAULT_ANSI_COLORS[2]),t.ansi[3]=m(e.yellow,n.DEFAULT_ANSI_COLORS[3]),t.ansi[4]=m(e.blue,n.DEFAULT_ANSI_COLORS[4]),t.ansi[5]=m(e.magenta,n.DEFAULT_ANSI_COLORS[5]),t.ansi[6]=m(e.cyan,n.DEFAULT_ANSI_COLORS[6]),t.ansi[7]=m(e.white,n.DEFAULT_ANSI_COLORS[7]),t.ansi[8]=m(e.brightBlack,n.DEFAULT_ANSI_COLORS[8]),t.ansi[9]=m(e.brightRed,n.DEFAULT_ANSI_COLORS[9]),t.ansi[10]=m(e.brightGreen,n.DEFAULT_ANSI_COLORS[10]),t.ansi[11]=m(e.brightYellow,n.DEFAULT_ANSI_COLORS[11]),t.ansi[12]=m(e.brightBlue,n.DEFAULT_ANSI_COLORS[12]),t.ansi[13]=m(e.brightMagenta,n.DEFAULT_ANSI_COLORS[13]),t.ansi[14]=m(e.brightCyan,n.DEFAULT_ANSI_COLORS[14]),t.ansi[15]=m(e.brightWhite,n.DEFAULT_ANSI_COLORS[15]),e.extendedAnsi){const i=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;ssetTimeout(t,e))},t.disposableTimeout=function(e,t=0,i){const r=setTimeout(()=>{e(),i&&o.dispose()},t),o=(0,s.toDisposable)(()=>{clearTimeout(r)});return i?.add(o),o};const s=i(4812);t.TimeoutTimer=class{constructor(){this._token=-1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,e()},t)}setIfNotSet(e,t){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");-1===this._token&&(this._token=setTimeout(()=>{this._token=-1,e()},t))}},t.MicrotaskTimer=class{constructor(){this._isScheduled=!1,this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(e){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,e())}))}},t.IntervalTimer=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(e,t,i=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();const s=i.setInterval(()=>{e()},t);this._disposable={dispose:()=>{i.clearInterval(s),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}}},5639(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;const s=i(4812),r=i(8636);class o extends s.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this._register(new r.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new r.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new r.Emitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;ithis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+i<0)throw new Error("Cannot shift elements in list beyond index 0");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>>0},e.toColor=function(t,i,s,r){return{css:e.toCss(t,i,s,r),rgba:e.toRgba(t,i,s,r)}}}(n||(t.channels=n={})),function(e){function t(e,t){return o=Math.round(255*t),[i,s,r]=c.toChannels(e.rgba),{css:n.toCss(i,s,r,o),rgba:n.toRgba(i,s,r,o)}}e.blend=function(e,t){if(o=(255&t.rgba)/255,1===o)return{css:t.css,rgba:t.rgba};const a=t.rgba>>24&255,h=t.rgba>>16&255,l=t.rgba>>8&255,c=e.rgba>>24&255,d=e.rgba>>16&255,_=e.rgba>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),{css:n.toCss(i,s,r),rgba:n.toRgba(i,s,r)}},e.isOpaque=function(e){return!(255&~e.rgba)},e.ensureContrastRatio=function(e,t,i){const s=c.ensureContrastRatio(e.rgba,t.rgba,i);if(s)return n.toColor(s>>24&255,s>>16&255,s>>8&255)},e.opaque=function(e){const t=(255|e.rgba)>>>0;return[i,s,r]=c.toChannels(t),{css:n.toCss(i,s,r),rgba:t}},e.opacity=t,e.multiplyOpacity=function(e,i){return o=255&e.rgba,t(e,o*i/255)},e.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}}(a||(t.color=a={})),function(e){let t,a;try{const e=document.createElement("canvas");e.width=1,e.height=1;const i=e.getContext("2d",{willReadFrequently:!0});i&&(t=i,t.globalCompositeOperation="copy",a=t.createLinearGradient(0,0,1,1))}catch{}e.toColor=function(e){if(e.match(/#[\da-f]{3,8}/i))switch(e.length){case 4:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),n.toColor(i,s,r);case 5:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),o=parseInt(e.slice(4,5).repeat(2),16),n.toColor(i,s,r,o);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}const h=e.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(h)return i=parseInt(h[1],10),s=parseInt(h[2],10),r=parseInt(h[3],10),o=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),n.toColor(i,s,r,o);if("transparent"===e)return{css:"transparent",rgba:0};if(!t||!a)throw new Error("css.toColor: Unsupported css format");if(t.fillStyle=a,t.fillStyle=e,"string"!=typeof t.fillStyle)throw new Error("css.toColor: Unsupported css format");if(t.fillRect(0,0,1,1),[i,s,r,o]=t.getImageData(0,0,1,1).data,255!==o)throw new Error("css.toColor: Unsupported css format");return{rgba:n.toRgba(i,s,r,o),css:e}}}(h||(t.css=h={})),function(e){function t(e,t,i){const s=e/255,r=t/255,o=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(l||(t.rgb=l={})),function(e){function t(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c0||a>0||h>0);)n-=Math.max(0,Math.ceil(.1*n)),a-=Math.max(0,Math.ceil(.1*a)),h-=Math.max(0,Math.ceil(.1*h)),c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));return(n<<24|a<<16|h<<8|255)>>>0}function a(e,t,i){const s=e>>24&255,r=e>>16&255,o=e>>8&255;let n=t>>24&255,a=t>>16&255,h=t>>8&255,c=_(l.relativeLuminance2(n,a,h),l.relativeLuminance2(s,r,o));for(;c>>0}e.blend=function(e,t){if(o=(255&t)/255,1===o)return t;const a=t>>24&255,h=t>>16&255,l=t>>8&255,c=e>>24&255,d=e>>16&255,_=e>>8&255;return i=c+Math.round((a-c)*o),s=d+Math.round((h-d)*o),r=_+Math.round((l-_)*o),n.toRgba(i,s,r)},e.ensureContrastRatio=function(e,i,s){const r=l.relativeLuminance(e>>8),o=l.relativeLuminance(i>>8);if(_(r,o)>8));if(n_(r,l.relativeLuminance(t>>8))?o:t}return o}const n=a(e,i,s),h=_(r,l.relativeLuminance(n>>8));if(h_(r,l.relativeLuminance(o>>8))?n:o}return n}},e.reduceLuminance=t,e.increaseLuminance=a,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}}(c||(t.rgba=c={}))},5777(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;const s=i(6501),r=i(6025),o=i(7276),n=i(9640),a=i(56),h=i(4071),l=i(6478),c=i(7428),d=i(6415),_=i(5746),u=i(5882),f=i(2486),p=i(3562),v=i(8811),g=i(8636),m=i(4812);let S=!1;class b extends m.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new g.Emitter),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this._register(new m.MutableDisposable),this._onBinary=this._register(new g.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new g.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new g.Emitter),this.onLineFeed=this._onLineFeed.event,this._onRender=this._register(new g.Emitter),this.onRender=this._onRender.event,this._onResize=this._register(new g.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new g.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new g.Emitter),this._instantiationService=new r.InstantiationService,this.optionsService=this._register(new a.OptionsService(e)),this._instantiationService.setService(s.IOptionsService,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(s.ILogService,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(n.BufferService)),this._instantiationService.setService(s.IBufferService,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(h.CoreService)),this._instantiationService.setService(s.ICoreService,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(l.MouseStateService)),this._instantiationService.setService(s.IMouseStateService,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(d.UnicodeService)),this.unicodeService.register(new c.UnicodeV6),this._instantiationService.setService(s.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(_.CharsetService),this._instantiationService.setService(s.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(v.OscLinkService),this._instantiationService.setService(s.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new f.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(g.EventUtils.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(g.EventUtils.forward(this._bufferService.onResize,this._onResize)),this._register(g.EventUtils.forward(this.coreService.onData,this._onData)),this._register(g.EventUtils.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new p.WriteBuffer((e,t)=>this._inputHandler.parse(e,t))),this._register(g.EventUtils.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.backend&&void 0!==t.buildNumber&&(e=!!("conpty"===t.backend&&t.buildNumber<21376)),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(u.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>((0,u.updateWindowsModeWrappedState)(this._bufferService),!1))),this._windowsWrappingHeuristics.value=(0,m.toDisposable)(()=>{for(const t of e)t.dispose()})}}}t.CoreTerminal=b},8636(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EventUtils=t.Emitter=void 0;const s=i(4812);var r;t.Emitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=(e,t,i)=>{if(this._disposed)return(0,s.toDisposable)(()=>{});const r={fn:e,thisArgs:t};this._listeners=this._listeners.slice(),this._listeners.push(r);const o=(0,s.toDisposable)(()=>{const e=this._listeners.indexOf(r);-1!==e&&(this._listeners=this._listeners.slice(),this._listeners.splice(e,1))});return i&&(Array.isArray(i)?i.push(o):i.add(o)),o}),this._event}fire(e){if(this._disposed||!this._listeners.length)return;if(1===this._listeners.length)return void this._listeners[0].fn.call(this._listeners[0].thisArgs,e);const t=this._listeners;for(let i=0,s=t.length;it.fire(e))},e.map=function(e,t){return(i,s,r)=>e(e=>i.call(s,t(e)),void 0,r)},e.any=function(...e){return(t,i,r)=>{const o=new s.DisposableStore;for(const s of e)o.add(s(e=>t.call(i,e)));return r&&(Array.isArray(r)?r.push(o):r.add(o)),o}},e.runAndSubscribe=function(e,t,i){return t(i),e(e=>t(e))}}(r||(t.EventUtils=r={}))},2486(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0,t.isValidColorIndex=x;const o=i(6760),n=i(6717),a=i(4812),h=i(726),l=i(6107),c=i(8938),d=i(3055),_=i(5451),u=i(6501),f=i(6415),p=i(1346),v=i(9823),g=i(2607),m=i(8693),S=i(8636),b=i(7804),w={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function y(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var C;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(C||(t.WindowsOptionsReportType=C={}));let k=0;class D extends a.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,a,c,d,_=new n.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=a,this._mouseStateService=c,this._unicodeService=d,this._parser=_,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new h.StringToUtf32,this._utf8Decoder=new h.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new S.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new S.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new S.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new S.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new S.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new S.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new S.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new S.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new S.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new S.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new S.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new S.Emitter),this.onColor=this._onColor.event,this._onRequestColorSchemeQuery=this._register(new S.Emitter),this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new E(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(e=>this._activeBuffer=e.activeBuffer)),this._parser.setCsiHandlerFallback((e,t)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(e),params:t.toArray()})}),this._parser.setEscHandlerFallback(e=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(e)})}),this._parser.setExecuteHandlerFallback(e=>{this._logService.debug("Unknown EXECUTE code: ",{code:e})}),this._parser.setOscHandlerFallback((e,t,i)=>{this._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:i})}),this._parser.setDcsHandlerFallback((e,t,i)=>{"HOOK"===t&&(i=i.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setApcHandlerFallback((e,t,i)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(e),action:t,payload:i})}),this._parser.setPrintHandler((e,t,i)=>this.print(e,t,i)),this._parser.registerCsiHandler({final:"@"},e=>this.insertChars(e)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},e=>this.scrollLeft(e)),this._parser.registerCsiHandler({final:"A"},e=>this.cursorUp(e)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},e=>this.scrollRight(e)),this._parser.registerCsiHandler({final:"B"},e=>this.cursorDown(e)),this._parser.registerCsiHandler({final:"C"},e=>this.cursorForward(e)),this._parser.registerCsiHandler({final:"D"},e=>this.cursorBackward(e)),this._parser.registerCsiHandler({final:"E"},e=>this.cursorNextLine(e)),this._parser.registerCsiHandler({final:"F"},e=>this.cursorPrecedingLine(e)),this._parser.registerCsiHandler({final:"G"},e=>this.cursorCharAbsolute(e)),this._parser.registerCsiHandler({final:"H"},e=>this.cursorPosition(e)),this._parser.registerCsiHandler({final:"I"},e=>this.cursorForwardTab(e)),this._parser.registerCsiHandler({final:"J"},e=>this.eraseInDisplay(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},e=>this.eraseInDisplay(e,!0)),this._parser.registerCsiHandler({final:"K"},e=>this.eraseInLine(e,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},e=>this.eraseInLine(e,!0)),this._parser.registerCsiHandler({final:"L"},e=>this.insertLines(e)),this._parser.registerCsiHandler({final:"M"},e=>this.deleteLines(e)),this._parser.registerCsiHandler({final:"P"},e=>this.deleteChars(e)),this._parser.registerCsiHandler({final:"S"},e=>this.scrollUp(e)),this._parser.registerCsiHandler({final:"T"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"X"},e=>this.eraseChars(e)),this._parser.registerCsiHandler({final:"Z"},e=>this.cursorBackwardTab(e)),this._parser.registerCsiHandler({final:"^"},e=>this.scrollDown(e)),this._parser.registerCsiHandler({final:"`"},e=>this.charPosAbsolute(e)),this._parser.registerCsiHandler({final:"a"},e=>this.hPositionRelative(e)),this._parser.registerCsiHandler({final:"b"},e=>this.repeatPrecedingCharacter(e)),this._parser.registerCsiHandler({final:"c"},e=>this.sendDeviceAttributesPrimary(e)),this._parser.registerCsiHandler({prefix:">",final:"c"},e=>this.sendDeviceAttributesSecondary(e)),this._parser.registerCsiHandler({final:"d"},e=>this.linePosAbsolute(e)),this._parser.registerCsiHandler({final:"e"},e=>this.vPositionRelative(e)),this._parser.registerCsiHandler({final:"f"},e=>this.hVPosition(e)),this._parser.registerCsiHandler({final:"g"},e=>this.tabClear(e)),this._parser.registerCsiHandler({final:"h"},e=>this.setMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"h"},e=>this.setModePrivate(e)),this._parser.registerCsiHandler({final:"l"},e=>this.resetMode(e)),this._parser.registerCsiHandler({prefix:"?",final:"l"},e=>this.resetModePrivate(e)),this._parser.registerCsiHandler({final:"m"},e=>this.charAttributes(e)),this._parser.registerCsiHandler({final:"n"},e=>this.deviceStatus(e)),this._parser.registerCsiHandler({prefix:"?",final:"n"},e=>this.deviceStatusPrivate(e)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},e=>this.softReset(e)),this._parser.registerCsiHandler({prefix:">",final:"q"},e=>this.sendXtVersion(e)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},e=>this.setCursorStyle(e)),this._parser.registerCsiHandler({final:"r"},e=>this.setScrollRegion(e)),this._parser.registerCsiHandler({final:"s"},e=>this.saveCursor(e)),this._parser.registerCsiHandler({final:"t"},e=>this.windowOptions(e)),this._parser.registerCsiHandler({final:"u"},e=>this.restoreCursor(e)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},e=>this.insertColumns(e)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},e=>this.deleteColumns(e)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},e=>this.selectProtected(e)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},e=>this.requestMode(e,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},e=>this.requestMode(e,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},e=>this.kittyKeyboardSet(e)),this._parser.registerCsiHandler({prefix:"?",final:"u"},e=>this.kittyKeyboardQuery(e)),this._parser.registerCsiHandler({prefix:">",final:"u"},e=>this.kittyKeyboardPush(e)),this._parser.registerCsiHandler({prefix:"<",final:"u"},e=>this.kittyKeyboardPop(e)),this._parser.setExecuteHandler("",()=>this.bell()),this._parser.setExecuteHandler("\n",()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler("\t",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("„",()=>this.index()),this._parser.setExecuteHandler("…",()=>this.nextLine()),this._parser.setExecuteHandler("ˆ",()=>this.tabSet()),this._parser.registerOscHandler(0,new p.OscHandler(e=>(this.setTitle(e),this.setIconName(e),!0))),this._parser.registerOscHandler(1,new p.OscHandler(e=>this.setIconName(e))),this._parser.registerOscHandler(2,new p.OscHandler(e=>this.setTitle(e))),this._parser.registerOscHandler(4,new p.OscHandler(e=>this.setOrReportIndexedColor(e))),this._parser.registerOscHandler(8,new p.OscHandler(e=>this.setHyperlink(e))),this._parser.registerOscHandler(10,new p.OscHandler(e=>this.setOrReportFgColor(e))),this._parser.registerOscHandler(11,new p.OscHandler(e=>this.setOrReportBgColor(e))),this._parser.registerOscHandler(12,new p.OscHandler(e=>this.setOrReportCursorColor(e))),this._parser.registerOscHandler(104,new p.OscHandler(e=>this.restoreIndexedColor(e))),this._parser.registerOscHandler(110,new p.OscHandler(e=>this.restoreFgColor(e))),this._parser.registerOscHandler(111,new p.OscHandler(e=>this.restoreBgColor(e))),this._parser.registerOscHandler(112,new p.OscHandler(e=>this.restoreCursorColor(e))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(const e in o.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:e},()=>this.selectCharset("("+e)),this._parser.registerEscHandler({intermediates:")",final:e},()=>this.selectCharset(")"+e)),this._parser.registerEscHandler({intermediates:"*",final:e},()=>this.selectCharset("*"+e)),this._parser.registerEscHandler({intermediates:"+",final:e},()=>this.selectCharset("+"+e)),this._parser.registerEscHandler({intermediates:"-",final:e},()=>this.selectCharset("-"+e)),this._parser.registerEscHandler({intermediates:".",final:e},()=>this.selectCharset("."+e)),this._parser.registerEscHandler({intermediates:"/",final:e},()=>this.selectCharset("/"+e));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(e=>(this._logService.error("Parsing error: ",e),e)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new v.DcsHandler((e,t)=>this.requestStatusString(e,t)))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=u.LogLevelEnum.WARN){let t;const i=new Promise((e,i)=>{t=setTimeout(()=>i("#SLOW_TIMEOUT"),5e3)});Promise.race([e,i]).then(()=>{void 0!==t&&clearTimeout(t)},e=>{if(void 0!==t&&clearTimeout(t),"#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,o=0;const n=this._parseStack.paused;if(n){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(o=this._parseStack.position+131072)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+("string"==typeof e?` "${e}"`:` "${Array.prototype.map.call(e,e=>String.fromCharCode(e)).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)","string"==typeof e?e.split("").map(e=>e.charCodeAt(0)):e),this._parseBuffer.length131072)for(let t=o;t0&&2===p.getWidth(this._activeBuffer.x-1)&&p.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let v=this._parser.precedingJoinState;for(let g=t;ga)if(d){const e=p;let t=this._activeBuffer.x-m;if(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),p=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!p)return;for(m>0&&p instanceof l.BufferLine&&p.copyCellsFrom(e,t,0,m,!1);t=0;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(_&&(p.insertCells(this._activeBuffer.x,r-m,this._activeBuffer.getNullCell(u)),2===p.getWidth(a-1)&&p.setCellFromCodepoint(a-1,c.NULL_CELL_CODE,c.NULL_CELL_WIDTH,u)),p.setCellFromCodepoint(this._activeBuffer.x++,s,r,u),r>0)for(;--r;)p.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=v,this._activeBuffer.x0&&0===p.getWidth(this._activeBuffer.x)&&!p.hasContent(this._activeBuffer.x)&&p.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,e=>!y(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new v.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new p.OscHandler(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new g.ApcHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const o=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);o&&(o.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(o.isWrapped=!1))}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i=this._bufferService.cols){const e=this._activeBuffer.lines.get(i+1);e&&(e.isWrapped=!1)}for(;i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(i=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,i-1);i--;){const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+i);if(e?.getTrimmedLength())break}for(;i>=0;i--)this._bufferService.scroll(this._eraseAttrData())}else{for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0)}break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let h=a;for(let e=1;e0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`P>|xterm.js(${b.XTERM_VERSION})\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(o.triggerDataEvent(`[${t?"":"?"}${e};${i}$y`),!0),_=e=>e?1:2,u=e.params[0];return t?d(u,2===u?4:4===u?_(o.modes.insertMode):12===u?3:20===u?_(c.convertEol):0):1===u?d(u,_(i.applicationCursorKeys)):3===u?d(u,c.windowOptions.setWinLines?80===a?2:132===a?1:0:0):6===u?d(u,_(i.origin)):7===u?d(u,_(i.wraparound)):8===u?d(u,3):9===u?d(u,_("X10"===s)):12===u?d(u,_(c.cursorBlink)):25===u?d(u,_(!o.isCursorHidden)):45===u?d(u,_(i.reverseWraparound)):66===u?d(u,_(i.applicationKeypad)):67===u?d(u,4):1e3===u?d(u,_("VT200"===s)):1002===u?d(u,_("DRAG"===s)):1003===u?d(u,_("ANY"===s)):1004===u?d(u,_(i.sendFocus)):1005===u?d(u,4):1006===u?d(u,_("SGR"===r)):1015===u?d(u,4):1016===u?d(u,_("SGR_PIXELS"===r)):1048===u?d(u,1):47===u||1047===u||1049===u?d(u,_(h===l)):2004===u?d(u,_(i.bracketedPasteMode)):2026===u?d(u,_(i.synchronizedOutput)):9001===u&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?d(u,_(i.win32InputMode)):d(u,0)}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=_.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-67108864,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,o=0;do{if(s[o+r]=e.params[t+o],e.hasSubParams(t+o)){const i=e.getSubParams(t+o);let n=0;do{5===s[1]&&(r=1),s[o+n+1+r]=i[n]}while(++n=2||2===s[1]&&o+r>=5)break;s[1]&&(r=1)}while(++o+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r=30&&i<=37?(s.fg&=-67108864,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-67108864,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-67108864,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-67108864,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:221===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.fg&=-134217729:222===i&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??1)?s.bg&=-134217729:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("");break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[${e};${t}R`)}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`[?${e};${t}R`);break;case 15:case 25:case 26:case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??1)&&this._onRequestColorSchemeQuery.fire()}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=0===e.length?1:e.params[0];if(0===t)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}const e=t%2==1;this._coreService.decPrivateModes.cursorBlink=e}return!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!y(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(C.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(C.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let e=0;e1;){const e=i.shift(),s=i.shift();if(/^\d+$/.exec(e)){const i=parseInt(e,10);if(x(i))if("?"===s)t.push({type:0,index:i});else{const e=(0,m.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.indexOf(";");if(-1===t)return!0;const i=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(i,s):!i.trim()&&this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(":");let s;const r=i.findIndex(e=>e.startsWith("id="));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(";");for(let e=0;e=this._specialColors.length);++e,++t)if("?"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,m.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(";");for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new d.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${e}\\`),!0))('"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}"q`:'"p'===e?'P1$r61;1"p':"r"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:"m"===e?"P1$r0m":" q"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(i){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=e.params[0]||0,i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;return s.length>=16&&s.shift(),s.push(i.flags),i.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;const t=Math.max(1,e.params[0]||1),i=this._coreService.kittyKeyboard,s=this._bufferService.buffer===this._bufferService.buffers.alt?i.altStack:i.mainStack;for(let e=0;e0;e++)i.flags=s.pop();return 0===s.length&&t>0&&(i.flags=0),!0}}t.InputHandler=D;let E=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(k=e,e=t,t=k),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function x(e){return 0<=e&&e<256}E=s([r(0,u.IBufferService)],E)},4812(e,t){function i(e){return{dispose:e}}function s(e){if(!e)return e;if(Array.isArray(e)){for(const t of e)t.dispose();return[]}return e.dispose(),e}Object.defineProperty(t,"__esModule",{value:!0}),t.MutableDisposable=t.Disposable=t.DisposableStore=void 0,t.toDisposable=i,t.dispose=s,t.combinedDisposable=function(...e){return i(()=>s(e))};class r{constructor(){this._disposables=new Set,this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(e){return this._isDisposed?e.dispose():this._disposables.add(e),e}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.clear()}}clear(){for(const e of this._disposables)e.dispose();this._disposables.clear()}}t.DisposableStore=r;class o{constructor(){this._store=new r}dispose(){this._store.dispose()}_register(e){return this._store.add(e)}}t.Disposable=o,o.None=Object.freeze({dispose(){}}),t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}}},7710(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.FourKeyMap=t.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(e,t,i){this._data[e]||(this._data[e]={}),this._data[e][t]=i}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}}t.TwoKeyMap=i,t.FourKeyMap=class{constructor(){this._data=new i}set(e,t,s,r,o){this._data.get(e,t)||this._data.set(e,t,new i),this._data.get(e,t).set(s,r,o)}get(e,t,i,s){return this._data.get(e,t)?.get(i,s)}clear(){this._data.clear()}}},701(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isMac=t.isSafari=t.isLegacyEdge=t.isChrome=t.isFirefox=t.isNode=void 0,t.getZoomFactor=function(e){return 1},t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\/(\d+)/);return null===e||e.length<2?0:parseInt(e[1],10)},t.isNode=!("undefined"==typeof process||!("title"in process)||"undefined"!=typeof navigator&&!navigator.userAgent.startsWith("Node.js/"));const i=t.isNode?"node":navigator.userAgent,s=t.isNode?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isChrome=i.includes("Chrome"),t.isLegacyEdge=i.includes("Edge"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(s),t.isWindows=["Windows","Win16","Win32","WinCE"].includes(s),t.isLinux=s.indexOf("Linux")>=0,t.isChromeOS=/\bCrOS\b/.test(i)},3087(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.SortedList=void 0;const s=i(6168);let r=0;t.SortedList=class{constructor(e,t){this._getKey=e,this._array=[],this._insertedValues=[],this._isFlushingInserted=!1,this._deletedIndices=new Set,this._indicesByValue=new Map,this._isFlushingDeleted=!1,this._flushInsertedTask=new s.IdleTaskQueue(t),this._flushDeletedTask=new s.IdleTaskQueue(t)}clear(){this._array.length=0,this._indicesByValue.clear(),this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.clear(),this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(e){this._flushCleanupDeleted(),0===this._insertedValues.length&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(e)}_flushInserted(){const e=this._insertedValues.sort((e,t)=>this._getKey(e)-this._getKey(t));let t=0,i=0;const s=new Array(this._array.length+this._insertedValues.length);for(let r=0;r=this._array.length||this._getKey(e[t])<=this._getKey(this._array[i])?(s[r]=e[t],t++):s[r]=this._array[i++];this._array=s,this._rebuildIdentityIndex(),this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}_rebuildIdentityIndex(){this._indicesByValue.clear();for(let e=this._array.length-1;e>=0;e--){const t=this._array[e],i=this._indicesByValue.get(t);void 0===i?this._indicesByValue.set(t,e):"number"==typeof i?this._indicesByValue.set(t,[i,e]):i.push(e)}}delete(e){this._flushCleanupInserted();const t=this._indicesByValue.get(e);if(void 0===t)return!1;const i="number"==typeof t?t:t.pop();return void 0!==i&&("number"!=typeof t&&0!==t.length||this._indicesByValue.delete(e),0===this._deletedIndices.size&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.add(i),!0)}_flushDeleted(){this._isFlushingDeleted=!0;const e=new Array(this._array.length-this._deletedIndices.size);let t=0;for(let i=0;i0&&this._flushDeletedTask.flush()}*getKeyIterator(e){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),0!==this._array.length&&(r=this._search(e),!(r<0||r>=this._array.length)&&this._getKey(this._array[r])===e))do{yield this._array[r]}while(++r=this._array.length)&&this._getKey(this._array[r])===e))do{t(this._array[r])}while(++r=t;){let s=t+i>>1;const r=this._getKey(this._array[s]);if(r>e)i=s-1;else{if(!(r0&&this._getKey(this._array[s-1])===e;)s--;return s}t=s+1}}return t}}},4220(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.LimitedStringBuilder=t.StringBuilder=void 0;class i{constructor(){this._chunks=[],this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(e){this._chunks.push(e),this._length+=e.length}toString(){return this._chunks.join("")}}t.StringBuilder=i,t.LimitedStringBuilder=class{constructor(e){this._limit=e,this._builder=new i}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(e){return this._builder.append(e),this._builder.length>this._limit&&(this._builder.reset(),!0)}toString(){return this._builder.toString()}}},6168(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;class i{constructor(e){this._tasks=[],this._i=0,this._logService=e}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ii)return r-t<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-t))}ms`),void this._start();r=i}this.clear()}}class s extends i{_requestCallback(e){return setTimeout(()=>e(this._createDeadline(16)))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=performance.now()+e;return{timeRemaining:()=>Math.max(0,t-performance.now())}}}t.PriorityTaskQueue=s,t.IdleTaskQueue="requestIdleCallback"in globalThis?class extends i{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:s,t.DebouncedIdleTask=class{constructor(e){this._queue=new t.IdleTaskQueue(e)}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}dispose(){this._queue.clear()}}},7804(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.XTERM_VERSION=void 0,t.XTERM_VERSION="6.1.0-beta.304"},5882(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)};const s=i(8938)},5451(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId&&void 0===this.payload}}t.ExtendedAttrs=s},1073(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(5639),r=i(4812),o=i(6168),n=i(5451),a=i(6107),h=i(732),l=i(3055),c=i(8938),d=i(8158),_=i(6760);t.MAX_BUFFER_SIZE=4294967295;class u extends r.Disposable{constructor(e,t,i,n){super(),this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this._logService=n,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=a.DEFAULT_ATTR_DATA.clone(),this.savedCharset=_.DEFAULT_CHARSET,this.savedCharsets=[],this.savedGlevel=0,this.savedOriginMode=!1,this.savedWraparoundMode=!0,this.markers=[],this._nullCell=l.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=l.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new o.IdleTaskQueue(this._logService),this._register((0,r.toDisposable)(()=>this._memoryCleanupQueue.clear())),this._register((0,r.toDisposable)(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new a.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){e??=a.DEFAULT_ATTR_DATA;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(a.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+o+1?(this.ybase--,o++,this.ydisp>0&&this.ydisp--):this.lines.push(new a.BufferLine(e,i,!1)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),o&&(this.y+=o),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t0){const e=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,e)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&"conpty"===e.backend&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=this._optionsService.rawOptions.reflowCursorLine,s=(0,h.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(a.DEFAULT_ATTR_DATA),i);if(s.length>0){const i=(0,h.reflowLargerCreateNewLayout)(this.lines,s);(0,h.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(a.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;n--){let l=this.lines.get(n);if(!l||!l.isWrapped&&l.getTrimmedLength()<=e)continue;const c=[l];for(;l.isWrapped&&n>0;)l=this.lines.get(--n),c.unshift(l);if(!i){const e=this.ybase+this.y;if(e>=n&&e0&&(r.push({start:n+c.length+o,newLines:p}),o+=p.length),c.push(...p);let v=_.length-1,g=_[v];0===g&&(v--,g=_[v]);let m=c.length-u-1,S=d;for(;m>=0;){const e=Math.min(S,g);if(void 0===c[v])break;if(c[v].copyCellsFrom(c[m],S-e,g-e,e,!0),g-=e,0===g&&(v--,g=_[v]),S-=e,0===S){m--;const e=Math.max(m,0);S=(0,h.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t0;)0===this.ybase?this.y0){const e=[],t=[];for(let e=0;e=0;l--)if(a&&a.start>s+h){for(let e=a.newLines.length-1;e>=0;e--)this.lines.set(l--,a.newLines[e]);l++,e.push({index:s+1,amount:a.newLines.length}),h+=a.newLines.length,a=r[++n]}else this.lines.set(l,t[s--]);let l=0;for(let t=e.length-1;t>=0;t--)e[t].index+=l,this.lines.onInsertEmitter.fire(e[t]),l+=e[t].amount;const c=Math.max(0,i+o-this.lines.maxLength);c>0&&this.lines.onTrimEmitter.fire(c)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):""}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(e=>{t.line>=e.index&&(t.line+=e.amount)})),t.register(this.lines.onDelete(e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}t.Buffer=u},6107(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(5451),r=i(3055),o=i(8938),n=i(726);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let a=0;const h=new r.CellData,l=t.DEFAULT_ATTR_DATA.extended.clone();class c{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._cacheValid=!1,this._cache="",this._cacheTrimmed=!1,this._data=new Uint32Array(3*e);const s=t??r.CellData.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]);for(let t=0;t>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._cacheValid=!1,this._data[3*e+1]=t[o.CHAR_DATA_ATTR_INDEX],t[o.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[o.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[o.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[o.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,n.stringFromCodePoint)(2097151&t):""}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return a=3*e,t.content=this._data[a+0],t.fg=this._data[a+1],t.bg=this._data[a+2],2097152&t.content?t.combinedData=this._combined[e]:t.combinedData="",t.extended=this.getExtended(e),t}getExtended(e){return a=3*e,268435456&this._data[a+2]?this._extendedAttrs[e]:(l._ext=0,l._urlId=0,l.payload=void 0,l)}setCell(e,t){this._cacheValid=!1,2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){this._cacheValid=!1,268435456&s.bg&&(this._extendedAttrs[e]=s.extended);const r=3*e;this._data[r+0]=t|i<<22,this._data[r+1]=s.fg,this._data[r+2]=s.bg}addCodepointToCell(e,t,i){this._cacheValid=!1;let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,n.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,n.stringFromCodePoint)(2097151&s)+(0,n.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if(this._cacheValid=!1,(e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t=0;--i)this.setCell(e+t+i,this.loadCell(e+i,h));for(let s=0;sthis.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){this._cacheValid=!1;const o=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=o[3*(t+r)+e];this._copyCellMapsFrom(e,t+r,i+r)}else for(let r=0;r>22||1}s&&s.push(t);const h=a.join("");return r&&(this._cache=h,this._cacheValid=!0,this._cacheTrimmed=!!e),h}_copyCellMapsFrom(e,t,i){const s=3*t;2097152&e._data[s+0]&&(this._combined[i]=e._combined[t]),268435456&e._data[s+2]&&(this._extendedAttrs[i]=e._extendedAttrs[t])}_copySparseMapsFrom(e){this._combined={},this._extendedAttrs={};for(let t=0;te.end.y)throw new Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},732(e,t){function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,"__esModule",{value:!0}),t.reflowLargerGetLinesToRemove=function(e,t,s,r,o,n){const a=[];for(let h=0;h=h&&r0&&(e>_||0===d[e].getTrimmedLength());e--)v++;v>0&&(a.push(h+d.length-v),a.push(v)),h+=d.length-1}return a},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],o=0;for(let n=0;nl&&(n-=l,a++);const c=2===e[a].getWidth(n-1);c&&n--;const d=c?s-1:s;r.push(d),h+=d}return r},t.getWrappedLineTrimmedLength=i},4097(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;const s=i(4812),r=i(1073),o=i(8636);class n extends s.Disposable{constructor(e,t,i){super(),this._optionsService=e,this._bufferService=t,this._logService=i,this._normalBuffer=this._register(new s.MutableDisposable),this._altBuffer=this._register(new s.MutableDisposable),this._onBufferActivate=this._register(new o.Emitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new r.Buffer(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new r.Buffer(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=n},3055(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;const s=i(726),r=i(8938),o=i(5451);class n extends o.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new o.ExtendedAttrs,this.combinedData=""}static fromCharData(e){const t=new n;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor())return!1;if(this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor())return!1;if(this.isInverse()!==e.isInverse())return!1;if(this.isBold()!==e.isBold())return!1;if(this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;const t=this.isUnderlineColorDefault(),i=e.isUnderlineColorDefault();if(!t||!i){if(t!==i)return!1;if(this.getUnderlineColor()!==e.getUnderlineColor())return!1;if(this.getUnderlineColorMode()!==e.getUnderlineColorMode())return!1}}return this.isOverline()===e.isOverline()&&this.isBlink()===e.isBlink()&&this.isInvisible()===e.isInvisible()&&this.isItalic()===e.isItalic()&&this.isDim()===e.isDim()&&this.isStrikethrough()===e.isStrikethrough()}}t.CellData=n},8938(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=t.DEFAULT_COLOR<<9|256,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},8158(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;const s=i(4812),r=i(8636);class o{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=o._nextId++,this._onDispose=this.register(new r.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,s.dispose)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=o,o._nextId=1},6760(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",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:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},706(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=function(e,t,s,r){const o={type:0,cancel:!1,key:void 0},n=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?o.key=t?"OA":"":"UIKeyInputLeftArrow"===e.key?o.key=t?"OD":"":"UIKeyInputRightArrow"===e.key?o.key=t?"OC":"":"UIKeyInputDownArrow"===e.key&&(o.key=t?"OB":"");break;case 8:o.key=e.ctrlKey?"\b":"",e.altKey&&(o.key=""+o.key);break;case 9:if(e.shiftKey){o.key="";break}o.key="\t",o.cancel=!0;break;case 13:"c"===e.key&&e.ctrlKey?o.key="":o.key=e.altKey?"\r":"\r",o.cancel=!0;break;case 27:o.key="",e.altKey&&(o.key=""),o.cancel=!0;break;case 37:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"D":t?"OD":"";break;case 39:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"C":t?"OC":"";break;case 38:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"A":t?"OA":"";break;case 40:if(e.metaKey)break;o.key=n?"[1;"+(n+1)+"B":t?"OB":"";break;case 45:e.shiftKey||e.ctrlKey||(o.key="[2~");break;case 46:o.key=n?"[3;"+(n+1)+"~":"[3~";break;case 36:o.key=n?"[1;"+(n+1)+"H":t?"OH":"";break;case 35:o.key=n?"[1;"+(n+1)+"F":t?"OF":"";break;case 33:e.shiftKey?o.type=2:e.ctrlKey?o.key="[5;"+(n+1)+"~":o.key="[5~";break;case 34:e.shiftKey?o.type=3:e.ctrlKey?o.key="[6;"+(n+1)+"~":o.key="[6~";break;case 112:o.key=n?"[1;"+(n+1)+"P":"OP";break;case 113:o.key=n?"[1;"+(n+1)+"Q":"OQ";break;case 114:o.key=n?"[1;"+(n+1)+"R":"OR";break;case 115:o.key=n?"[1;"+(n+1)+"S":"OS";break;case 116:o.key=n?"[15;"+(n+1)+"~":"[15~";break;case 117:o.key=n?"[17;"+(n+1)+"~":"[17~";break;case 118:o.key=n?"[18;"+(n+1)+"~":"[18~";break;case 119:o.key=n?"[19;"+(n+1)+"~":"[19~";break;case 120:o.key=n?"[20;"+(n+1)+"~":"[20~";break;case 121:o.key=n?"[21;"+(n+1)+"~":"[21~";break;case 122:o.key=n?"[23;"+(n+1)+"~":"[23~";break;case 123:o.key=n?"[24;"+(n+1)+"~":"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(s&&!r||!e.altKey||e.metaKey)if(!s||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey){if(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length)o.key=e.key;else if(e.key&&e.ctrlKey&&e.shiftKey)switch(e.code){case"Minus":o.key="";break;case"Digit2":o.key="\0";break;case"Digit6":o.key=""}}else 65===e.keyCode&&(o.type=1);else{const t=i[e.keyCode],s=t?.[e.shiftKey?1:0];if(s)o.key=""+s;else if(e.keyCode>=65&&e.keyCode<=90){const t=e.ctrlKey?e.keyCode-64:e.keyCode+32;let i=String.fromCharCode(t);e.shiftKey&&(i=i.toUpperCase()),o.key=""+i}else if(32===e.keyCode)o.key=""+(e.ctrlKey?"\0":" ");else if("Dead"===e.key&&e.code.startsWith("Key")){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),o.key=""+t,o.cancel=!0}}else e.keyCode>=65&&e.keyCode<=90?o.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?o.key="\0":e.keyCode>=51&&e.keyCode<=55?o.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?o.key="":"/"===e.key?o.key="":219===e.keyCode?o.key="":220===e.keyCode?o.key="":221===e.keyCode&&(o.key="")}return o};const i={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']}},7241(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.KittyKeyboard=void 0,t.KittyKeyboard=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440},this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24},this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"},this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(e){if(e.code.startsWith("Numpad")){const t=e.code.slice(6);if(t>="0"&&t<="9")return 57399+parseInt(t,10);switch(t){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(e){switch(e.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(e){let t=0;return e.shiftKey&&(t|=1),e.altKey&&(t|=2),e.ctrlKey&&(t|=4),e.metaKey&&(t|=8),t>0?t+1:0}_getKeyCode(e,t){const i=this._getNumpadKeyCode(e);if(void 0!==i)return i;const s=this._getModifierKeyCode(e);if(void 0!==s)return s;const r=this._functionalKeyCodes[e.key];if(void 0!==r)return r;if((e.shiftKey||t&&e.altKey)&&e.code){if(e.code.startsWith("Digit")&&6===e.code.length){const t=e.code.charAt(5);if(t>="0"&&t<="9")return t.charCodeAt(0)}if(e.code.startsWith("Key")&&4===e.code.length)return e.code.charAt(3).toLowerCase().charCodeAt(0)}if(1===e.key.length){const t=e.key.codePointAt(0);return t>=65&&t<=90?t+32:t}}_isModifierKey(e){return"Shift"===e.key||"Control"===e.key||"Alt"===e.key||"Meta"===e.key}_isLockKey(e){return"CapsLock"===e.key||"NumLock"===e.key||"ScrollLock"===e.key}_buildCsiLetterSequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"["+e}_buildSs3Sequence(e,t,i,s){const r=s&&1!==i;if(t>0||r){let s="[1;"+(t>0?t:"1");return r&&(s+=":"+i),s+=e,s}return"O"+e}_buildCsiTildeSequence(e,t,i,s){const r=s&&1!==i;let o="["+e;return(t>0||r)&&(o+=";"+(t>0?t:"1"),r&&(o+=":"+i)),o+="~",o}_buildCsiUSequence(e,t,i,s,r,o,n){const a=!!(2&r);let h,l="["+t;4&r&&e.shiftKey&&1===e.key.length&&!o&&!n&&(h=e.key.codePointAt(0),l+=":"+h);const c=16&r&&3!==s&&1===e.key.length&&!o&&!n&&!e.ctrlKey?e.key.codePointAt(0):void 0,d=a&&1!==s&&(3===s||void 0===c);return(i>0||d||void 0!==c)&&(l+=";",i>0?l+=i:d&&(l+="1"),d&&(l+=":"+s)),void 0!==c&&(l+=";"+c),l+="u",l}evaluate(e,t,i=1,s=!1){const r={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(e),n=this._isModifierKey(e),a=!!(2&t);if(!a&&3===i)return r;if(n&&!(8&t))return r;if(this._isLockKey(e)&&!(8&t))return r;const h=this._csiLetterKeys[e.key];if(h)return r.key=this._buildCsiLetterSequence(h,o,i,a),r.cancel=!0,r;const l=this._ss3FunctionKeys[e.key];if(l)return r.key=this._buildSs3Sequence(l,o,i,a),r.cancel=!0,r;const c=this._csiTildeKeys[e.key];if(void 0!==c)return r.key=this._buildCsiTildeSequence(c,o,i,a),r.cancel=!0,r;const d=this._getKeyCode(e,s);if(void 0===d)return r;const _=13===d||9===d||127===d;if(_&&3===i&&!(8&t))return r;const u=void 0!==this._functionalKeyCodes[e.key]||void 0!==this._getNumpadKeyCode(e);if(8&t||a&&3===i||(1&t||a)&&(u&&!_||o>0&&1!==e.key.length||o-1>1))r.key=this._buildCsiUSequence(e,d,o,i,t,u,n),r.cancel=!0;else{const t=13===d?"\r":9===d?"\t":127===d?"":void 0;t?r.key=t:1!==e.key.length||e.ctrlKey||e.altKey||e.metaKey||(r.key=e.key)}return r}static shouldUseProtocol(e){return e>0}}},726(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s="";for(let r=t;r65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let o=r;o=i)return this._interim=r,s;const n=e.charCodeAt(o);56320<=n&&n<=57343?t[s++]=1024*(r-55296)+n-56320+65536:(t[s++]=r,t[s++]=n);continue}65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,o,n,a,h=0,l=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let o,n=0;for(;(o=this.interim[++n])&&n<4;)r<<=6,r|=63&o;const a=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,c=a-n;for(;l=i)return 0;if(o=e[l++],128!=(192&o)){l--,s=!0;break}this.interim[n++]=o,r<<=6,r|=63&o}s||(2===a?r<128?l--:t[h++]=r:3===a?r<2048||r>=55296&&r<=57343||65279===r||(t[h++]=r):r<65536||r>1114111||(t[h++]=r)),this.interim.fill(0)}const c=i-4;let d=l;for(;d=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(a=(31&s)<<6|63&r,a<128){d--;continue}t[h++]=a}else if(224==(240&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(a=(15&s)<<12|(63&r)<<6|63&o,a<2048||a>=55296&&a<=57343||65279===a)continue;t[h++]=a}else if(240==(248&s)){if(d>=i)return this.interim[0]=s,h;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,h;if(o=e[d++],128!=(192&o)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=o,h;if(n=e[d++],128!=(192&n)){d--;continue}if(a=(7&s)<<18|(63&r)<<12|(63&o)<<6|63&n,a<65536||a>1114111)continue;t[h++]=a}}return h}}},7428(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;const s=i(6415),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],o=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let n;t.UnicodeV6=class{constructor(){if(this.version="6",!n){n=new Uint8Array(65536),n.fill(1),n[0]=0,n.fill(0,1,32),n.fill(0,127,160),n.fill(2,4352,4448),n[9001]=2,n[9002]=2,n.fill(2,11904,42192),n[12351]=1,n.fill(2,44032,55204),n.fill(2,63744,64256),n.fill(2,65040,65050),n.fill(2,65072,65136),n.fill(2,65280,65377),n.fill(2,65504,65511);for(let e=0;et[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},9249(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Win32InputMode=void 0,t.Win32InputMode=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226},this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40},this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]),this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(e){const t=this._codeToVk[e.code];return void 0!==t?t:e.keyCode||0}_getScanCode(e){return this._codeToScancode[e.code]||0}_getUnicodeChar(e){if(e.ctrlKey&&!e.altKey&&!e.metaKey){if("Enter"===e.key)return 10;if("Backspace"===e.key)return 127}const t=this._keyToControlChar[e.key];if(void 0!==t)return t;if(1===e.key.length){const t=e.key.codePointAt(0)||0;if(e.ctrlKey&&!e.altKey&&!e.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(e){let t=0;return e.shiftKey&&(t|=16),e.ctrlKey&&("ControlRight"===e.code?t|=4:t|=8),e.altKey&&("AltRight"===e.code?t|=1:t|=2),this._enhancedKeyCodes.has(e.code)&&(t|=256),t}evaluateKeyboardEvent(e,t){return{type:0,cancel:!0,key:`[${this._getVirtualKeyCode(e)};${this._getScanCode(e)};${this._getUnicodeChar(e)};${t?1:0};${this._getControlKeyState(e)};1_`}}}},3562(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;const s=i(3132),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._innerWriteTimer=this._register(new s.TimeoutTimer),this._onWriteParsed=this._register(new o.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._register((0,r.toDisposable)(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed)return;if(this._isSyncWriting)return;let e;this._isSyncWriting=!0;let t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);const i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;const i=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>{this._store.isDisposed||(performance.now()-i>=12?this._scheduleInnerWrite(0,e):this._innerWrite(i,e))};return void s.catch(e=>(queueMicrotask(()=>{throw e}),Promise.resolve(!1))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,performance.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},8693(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(t.startsWith("rgb:")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(t.startsWith("#")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,o]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(o,t)}`};const i=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,s=/^[\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?"0"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}},2607(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.ApcHandler=t.ApcParser=void 0;const s=i(726),r=i(4220),o=[];t.ApcParser=class{constructor(){this._handlers=Object.create(null),this._active=o,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._ident=0}start(e){if(this.reset(),this._ident=e,this._active=this._handlers[e]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._ident,"START")}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}end(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"END",e);this._active=o,this._ident=0}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.ApcHandler=n,n._payloadLimit=1e7},9823(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(726),r=i(7262),o=i(4220),n=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=n,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=n,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,"HOOK",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,"PUT",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"UNHOOK",e);this._active=n,this._ident=0}};const a=new r.Params;a.addParam(0);class h{constructor(e){this._handler=e,this._data=new o.LimitedStringBuilder(h._payloadLimit),this._params=a,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():a,this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString(),this._params),t instanceof Promise))return t.then(e=>(this._params=a,this._data.reset(),this._hitLimit=!1,e));return this._params=a,this._data.reset(),this._hitLimit=!1,t}}t.DcsHandler=h,h._payloadLimit=1e7},6717(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(4812),r=i(7262),o=i(1346),n=i(9823),a=i(2607);class h{constructor(e){this.table=new Uint16Array(e)}setDefault(e,t){this.table.fill(e<<8|t)}add(e,t,i,s){this.table[t<<8|e]=i<<8|s}addMany(e,t,i,s){for(let r=0;rt),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const o=i(0,17);e.setDefault(1,0),e.addMany(s,0,2,0);for(const t of o)e.addMany([24,26,153,154],t,3,0),e.addMany(i(128,144),t,3,0),e.addMany(i(144,152),t,3,0),e.add(156,t,0,0),e.add(27,t,11,1),e.add(157,t,4,8),e.addMany([152,158],t,0,7),e.add(159,t,11,14),e.add(155,t,11,3),e.add(144,t,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(95,1,11,14),e.addMany(r,14,0,14),e.add(127,14,0,14),e.addMany(i(32,48),14,9,15),e.addMany(i(48,127),14,15,16),e.addMany(i(48,127),15,15,16),e.addMany(r,15,0,15),e.addMany(i(32,48),15,9,15),e.add(127,15,0,15),e.addMany(s,16,16,16),e.addMany(r,16,0,16),e.addMany(i(8,14),16,16,16),e.add(127,16,0,16),e.addMany([27,156,24,26],16,17,0),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(l,0,2,0),e.add(l,8,5,8),e.add(l,6,0,6),e.add(l,11,0,11),e.add(l,13,13,13),e.add(l,16,16,16),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,s.toDisposable)(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new o.OscParser),this._dcsParser=this._register(new n.DcsParser),this._apcParser=this._register(new a.ApcParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(i=e.prefix.charCodeAt(0),i<60||i>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let t=0;ts||s>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");i<<=8,i|=s}}if(1!==e.final.length)throw new Error("final must be a single byte");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);this._escHandlers[i]??=[];const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){const i=e.charCodeAt(0);this._executeHandlers[i]=t,i<24&&(this._executeHandlersArr[i]=t)}clearExecuteHandler(e){const t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);this._csiHandlers[i]??=[];const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r,o,n=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,n=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");const t=this._parseStack.handlers;let r=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](this._params),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 4:if(!1===i&&r>-1)for(;r>=0&&(o=t[r](),!0!==o);r--)if(o instanceof Promise)return this._parseStack.handlerPos=r,o;this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],o=this._dcsParser.unhook(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],o=this._oscParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],o=this._apcParser.end(24!==s&&26!==s,i),o)return o;27===s&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0}this._parseStack.state=0,n=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=255&this._parseStack.transition}for(let i=n;i=60&&n<=63&&(this._collect=n,s++);let a=!1;for(;s=48&&n<=57)this._params.addDigit(n-48);else if(59===n)this._params.addParam(0);else{if(58!==n){if(n>=64&&n<=126){const e=this._csiHandlers[this._collect<<8|n];let t=e?e.length-1:-1;for(;t>=0&&(o=e[t](this._params),!0!==o);t--)if(o instanceof Promise)return r=1792,this._preserveStack(3,e,t,r,s),o;t<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingJoinState=0,i=s,this.currentState=0,a=!0;break}break}this._params.addSubParam(-1)}a||(i=s-1,this.currentState=4);continue}switch(r=this._transitions.table[this.currentState<<8|(s>8){case 2:let n=i;const a=t-4;for(;n=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l)&&e[++n]>=32&&(e[n]<=126||e[n]>=l););if(n>=a)for(;n=32&&(e[n]<=126||e[n]>=l);)n++;this._printHandler(e,i,n),i=n-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:i,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:const h=this._csiHandlers[this._collect<<8|s];let c=h?h.length-1:-1;for(;c>=0&&(o=h[c](this._params),!0!==o);c--)if(o instanceof Promise)return this._preserveStack(3,h,c,r,i),o;c<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do{switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}}while(++i47&&s<60);i--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:const d=this._escHandlers[this._collect<<8|s];let _=d?d.length-1:-1;for(;_>=0&&(o=d[_](),!0!==o);_--)if(o instanceof Promise)return this._preserveStack(4,d,_,r,i),o;_<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let r=i+1;;++r)if(r>=t||24===(s=e[r])||26===s||27===s||s>127&&s=t||(s=e[r])<32||s>127&&s=32&&e[s]<127||e[s]>=8&&e[s]<14||e[s]>=l))){this._apcParser.put(e,i,s),i=s-1;break}break;case 17:if(o=this._apcParser.end(24!==s&&26!==s),o)return this._preserveStack(7,[],0,r,i),o;27===s&&(r|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0}this.currentState=255&r}}}t.EscapeSequenceParser=c},1346(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(726),r=i(4220),o=[];t.OscParser=class{constructor(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){this._handlers[e]??=[];const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,"PUT",(0,s.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}}};class n{constructor(e){this._handler=e,this._data=new r.LimitedStringBuilder(n._payloadLimit),this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(e,t,i){this._hitLimit||this._data.append((0,s.utf32ToString)(e,t,i))&&(this._hitLimit=!0)}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data.toString()),t instanceof Promise))return t.then(e=>(this._data.reset(),this._hitLimit=!1,e));return this._data.reset(),this._hitLimit=!1,t}}t.OscHandler=n,n._payloadLimit=1e7},7262(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;class i{static fromArray(e){const t=new i;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new i(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>2147483647?2147483647:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=e>2147483647?2147483647:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const i=this._digitIsSub?this._subParams:this.params,s=i[t-1];i[t-1]=~s?Math.min(10*s+e,2147483647):e}}t.Params=i},3027(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},5101(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(3235),r=i(4812),o=i(8636);class n extends r.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new o.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new s.BufferApiView(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=n},6097(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,i)=>t(e,i.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}registerApcHandler(e,t){return this._core.registerApcHandler(e,t)}}},4335(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},9640(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=void 0;const o=i(4812),n=i(4097),a=i(6501),h=i(8636);let l=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(e,t){super(),this.isUserScrolling=!1,this._onResize=this._register(new h.Emitter),this.onResize=this._onResize.event,this._onScroll=this._register(new h.Emitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new n.BufferSet(e,this,t)),this._register(this.buffers.onBufferActivate(e=>{this._onScroll.fire(e.activeBuffer.ydisp)}))}resize(e,t){const i=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:i,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;o===i.lines.length-1?e?i.lines.recycle().copyFrom(s,!0):i.lines.push(s.clone(!0)):i.lines.splice(o+1,0,s.clone(!0)),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=o-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(o,s.clone(!0))}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t){const i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);const s=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),s!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))}};t.BufferService=l,t.BufferService=l=s([r(0,a.IOptionsService),r(1,a.ILogService)],l)},5746(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},4071(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;const o=i(4812),n=i(6501),a=i(8636),h=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0});let c=class extends o.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorHidden=!1,this._onData=this._register(new a.Emitter),this.onData=this._onData.event,this._onUserInput=this._register(new a.Emitter),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new a.Emitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new a.Emitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.isCursorInitialized=i.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}reset(){this.modes=structuredClone(h),this.decPrivateModes=structuredClone(l),this.kittyKeyboard={flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(e=>e.charCodeAt(0))),this._onBinary.fire(e))}};t.CoreService=c,t.CoreService=c=s([r(0,n.IBufferService),r(1,n.ILogService),r(2,n.IOptionsService)],c)},4720(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DecorationLineCache=t.DecorationService=void 0;const o=i(3132),n=i(4103),a=i(4812),h=i(6501),l=i(3087),c=i(8636);let d=0,_=0,u=class extends a.Disposable{get decorations(){return this._decorations.values()}constructor(e,t){super(),this._logService=e,this._bufferService=t,this._lineCache=this._register(new f),this._onDecorationRegistered=this._register(new c.Emitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this._register(new c.Emitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this._decorations=new l.SortedList(e=>e?.marker.line,this._logService),this._register((0,a.toDisposable)(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}registerDecoration(e){if(e.marker.isDisposed)return;const t=new p(e);if(t){const e=t.marker.onDispose(()=>t.dispose()),i=t.onDispose(()=>{i.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),e.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,i){const s=this._lineCache.getDecorationsOnLine(t);if(s)for(const t of s)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&(yield t)}forEachDecorationAtCell(e,t,i,s){const r=this._lineCache.getDecorationsOnLine(t);if(r)for(const t of r)d=t.options.x??0,_=d+(t.options.width??1),e>=d&&e<_&&(!i||(t.options.layer??"bottom")===i)&&s(t)}};t.DecorationService=u,t.DecorationService=u=s([r(0,h.ILogService),r(1,h.IBufferService)],u);class f extends a.Disposable{constructor(){super(...arguments),this._decorationsByLine=new Map,this._decorations=new Set,this._bufferLineListeners=this._register(new a.MutableDisposable),this._lineIndexSyncTimer=this._register(new o.MicrotaskTimer),this._lineIndexSyncCallbacks=[]}clear(){this._lineIndexSyncCallbacks.length=0,this._lineIndexSyncTimer.cancel(),this._decorationsByLine.clear(),this._decorations.clear()}add(e){this._decorations.add(e),this._addToLineBuckets(e)}remove(e){this._decorations.delete(e),this._removeFromLineBuckets(e)}getDecorationsOnLine(e){return this._decorationsByLine.get(e)}attachToBufferLines(e){const t=new a.DisposableStore;this._bufferLineListeners.value=t,t.add(e.onTrim(e=>this._handleBufferLinesTrim(e))),t.add(e.onInsert(e=>this._handleBufferLinesInsert(e))),t.add(e.onDelete(e=>this._handleBufferLinesDelete(e)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){const t=e.marker.line;if(t<0)return;e._indexedStartLine=t;const i=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{const e=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(const t of e)t()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;const t=new Map;for(const[i,s]of this._decorationsByLine){const r=i-e;r<0||this._mergeLineBucket(t,r,s)}this._decorationsByLine.clear();for(const[e,i]of t)this._decorationsByLine.set(e,i);for(const t of this._decorations)t.marker.isDisposed||(t._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,i){const s=e.get(t);if(s)for(let e=0,t=i.length;et&&(s.push(e),this._removeFromLineBuckets(e))}const r=new Map;for(const[e,s]of this._decorationsByLine){const o=e>=t?e+i:e;this._mergeLineBucket(r,o,s)}this._decorationsByLine.clear();for(const[e,t]of r)this._decorationsByLine.set(e,t);for(const e of this._decorations)e.marker.isDisposed||e._indexedStartLine>=t&&(e._indexedStartLine=e.marker.line);for(const e of s)this._addToLineBuckets(e)}_applyBufferLinesDelete(e){const t=e.index+e.amount,i=new Map;for(const[s,r]of this._decorationsByLine){if(s>=e.index&&s=t?s-e.amount:s;this._mergeLineBucket(i,o,r)}this._decorationsByLine.clear();for(const[e,t]of i)this._decorationsByLine.set(e,t);const s=[];for(const i of this._decorations){if(i.marker.isDisposed)continue;const r=i._indexedStartLine,o=this._getDecorationHeight(i);r>=t?i._indexedStartLine=i.marker.line:rt&&s.push(i)}for(const e of s)this._reindexDecoration(e)}}t.DecorationLineCache=f;class p extends a.DisposableStore{get backgroundColorRGB(){return null===this._cachedBg&&(this.options.backgroundColor?this._cachedBg=n.css.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return null===this._cachedFg&&(this.options.foregroundColor?this._cachedFg=n.css.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}constructor(e){super(),this.options=e,this.onRenderEmitter=this.add(new c.Emitter),this.onRender=this.onRenderEmitter.event,this._onDispose=this.add(new c.Emitter),this.onDispose=this._onDispose.event,this._cachedBg=null,this._cachedFg=null,this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}dispose(){this._onDispose.fire(),super.dispose()}}},6025(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(6501),r=i(6201);class o{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=o,t.InstantiationService=class{constructor(){this._services=new o,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort((e,t)=>e.index-t.index),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id._id}.`);s.push(i)}const o=i.length>0?i[0].index:t.length;if(t.length!==o)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${o+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},7276(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LogService=void 0;const o=i(4812),n=i(6501),a={trace:n.LogLevelEnum.TRACE,debug:n.LogLevelEnum.DEBUG,info:n.LogLevelEnum.INFO,warn:n.LogLevelEnum.WARN,error:n.LogLevelEnum.ERROR,off:n.LogLevelEnum.OFF};let h=class extends o.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=n.LogLevelEnum.OFF,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}_updateLogLevel(){this._logLevel=a[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;t!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function n(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const a=String.fromCharCode,h={DEFAULT:e=>{const t=[n(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":`${a(t[0])}${a(t[1])}${a(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?"m":"M";return`[<${n(e,!0)};${e.x};${e.y}${t}`}};class l extends s.Disposable{constructor(){super(),this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=this._register(new r.Emitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(o))this.addProtocol(e,o[e]);for(const e of Object.keys(h))this.addEncoding(e,h[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return!this._customWheelEventHandler||!1!==this._customWheelEventHandler(e)}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return"DEFAULT"===this._activeEncoding}get isPixelEncoding(){return"SGR_PIXELS"===this._activeEncoding}}t.MouseStateService=l},56(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(4812),r=i(701),o=i(8636);t.DEFAULT_OPTIONS={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:r.isMac,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}};const n=["normal","bold","100","200","300","400","500","600","700","800","900"];class a extends s.Disposable{constructor(e){super(),this._onOptionChange=this._register(new o.Emitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this._register((0,s.toDisposable)(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(i=>{i===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(i=>{-1!==e.indexOf(i)&&t()})}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key "${e}"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case"cursorStyle":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return"block"===e||"underline"===e||"bar"===e}(i))throw new Error(`"${i}" is not a valid value for ${e}`);break;case"wordSeparator":i||(i=t.DEFAULT_OPTIONS[e]);break;case"fontWeight":case"fontWeightBold":if("number"==typeof i&&1<=i&&i<=1e3)break;i=n.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case"blinkIntervalDuration":if((i=Math.floor(i))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"cursorWidth":i=Math.floor(i);case"lineHeight":case"tabStopWidth":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case"minimumContrastRatio":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case"scrollback":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case"rows":case"cols":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case"windowsPty":i=i??{}}return i}}t.OptionsService=a},8811(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,o=arguments.length,n=o<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(o<3?r(n):o>3?r(t,i,n):r(t,i))||n);return o>3&&n&&Object.defineProperty(t,i,n),n},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.OscLinkService=void 0;const o=i(6501);let n=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose(()=>this._removeMarkerFromLink(s,i)),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const o=t.addMarker(t.ybase+t.y),n={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(n,o)),this._entriesWithId.set(n.key,n),this._dataByLinkId.set(n.id,n),n.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every(e=>e.line!==t)){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose(()=>this._removeMarkerFromLink(i,e))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=n,t.OscLinkService=n=s([r(0,o.IBufferService)],n)},6201(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.serviceRegistry=void 0,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const i=function(e,t,s){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");!function(e,t,i){t.di$target===t?t.di$dependencies.push({id:e,index:i}):(t.di$dependencies=[{id:e,index:i}],t.di$target=t)}(i,e,s)};return i._id=e,t.serviceRegistry.set(e,i),i},t.serviceRegistry=new Map},6501(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.IMouseStateService=t.IBufferService=void 0;const s=i(6201);var r;t.IBufferService=(0,s.createDecorator)("BufferService"),t.IMouseStateService=(0,s.createDecorator)("MouseStateService"),t.ICoreService=(0,s.createDecorator)("CoreService"),t.ICharsetService=(0,s.createDecorator)("CharsetService"),t.IInstantiationService=(0,s.createDecorator)("InstantiationService"),function(e){e[e.TRACE=0]="TRACE",e[e.DEBUG=1]="DEBUG",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.OFF=5]="OFF"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)("LogService"),t.IOptionsService=(0,s.createDecorator)("OptionsService"),t.IOscLinkService=(0,s.createDecorator)("OscLinkService"),t.IUnicodeService=(0,s.createDecorator)("UnicodeService"),t.IDecorationService=(0,s.createDecorator)("DecorationService")},6415(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;const s=i(8636);class r{constructor(){this._providers=Object.create(null),this._active="",this._onChange=new s.Emitter,this.onChange=this._onChange.event}static extractShouldJoin(e){return!!(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version "${e}"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e,this._active||(this.activeVersion=e.version)}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let o=0;o=s)return t+this.wcwidth(n);const i=e.charCodeAt(o);56320<=i&&i<=57343?n=1024*(n-55296)+i-56320+65536:t+=this.wcwidth(i)}const a=this.charProperties(n,i);let h=r.extractWidth(a);r.extractShouldJoin(a)&&(h-=r.extractWidth(i)),t+=h,i=a}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=r}},t={};return function i(s){var r=t[s];if(void 0!==r)return r.exports;var o=t[s]={exports:{}};return e[s].call(o.exports,o,o.exports,i),o.exports}(6081)})()); //# sourceMappingURL=xterm.js.map \ No newline at end of file diff --git a/lib/xterm.js.map b/lib/xterm.js.map -index 0b1e449edf51c1629cfab178ca10c7b0cc405feb..7f5f89296256edfab1ffaa8b21a504c72fb2a89e 100644 +index e523569126147055fa1c6b3de9bf123670d12da4..a1423ac76ac9eaa9ef463b6a47e14dbe4fa9270f 100644 --- a/lib/xterm.js.map +++ b/lib/xterm.js.map @@ -1 +1 @@ --{"version":3,"file":"xterm.js","mappings":"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Q,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MA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","sources":["webpack://@xterm/xterm/webpack/universalModuleDefinition","webpack://@xterm/xterm/./src/browser/AccessibilityManager.ts","webpack://@xterm/xterm/./src/browser/Clipboard.ts","webpack://@xterm/xterm/./src/browser/ColorContrastCache.ts","webpack://@xterm/xterm/./src/browser/CoreBrowserTerminal.ts","webpack://@xterm/xterm/./src/browser/Dom.ts","webpack://@xterm/xterm/./src/browser/Linkifier.ts","webpack://@xterm/xterm/./src/browser/LocalizableStrings.ts","webpack://@xterm/xterm/./src/browser/OscLinkProvider.ts","webpack://@xterm/xterm/./src/browser/RenderDebouncer.ts","webpack://@xterm/xterm/./src/browser/TimeBasedDebouncer.ts","webpack://@xterm/xterm/./src/browser/Types.ts","webpack://@xterm/xterm/./src/browser/Viewport.ts","webpack://@xterm/xterm/./src/browser/decorations/BufferDecorationRenderer.ts","webpack://@xterm/xterm/./src/browser/decorations/ColorZoneStore.ts","webpack://@xterm/xterm/./src/browser/decorations/OverviewRulerRenderer.ts","webpack://@xterm/xterm/./src/browser/input/CompositionHelper.ts","webpack://@xterm/xterm/./src/browser/input/Mouse.ts","webpack://@xterm/xterm/./src/browser/input/MoveToCell.ts","webpack://@xterm/xterm/./src/browser/public/Terminal.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRenderer.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRendererRowFactory.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/WidthCache.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/Constants.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/RendererUtils.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/SelectionRenderModel.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://@xterm/xterm/./src/browser/scrollable/abstractScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/fastDomNode.ts","webpack://@xterm/xterm/./src/browser/scrollable/globalPointerMoveMonitor.ts","webpack://@xterm/xterm/./src/browser/scrollable/horizontalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/mouseEvent.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollable.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollableElement.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarArrow.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarState.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarVisibilityController.ts","webpack://@xterm/xterm/./src/browser/scrollable/touch.ts","webpack://@xterm/xterm/./src/browser/scrollable/verticalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/widget.ts","webpack://@xterm/xterm/./src/browser/selection/SelectionModel.ts","webpack://@xterm/xterm/./src/browser/services/CharSizeService.ts","webpack://@xterm/xterm/./src/browser/services/CharacterJoinerService.ts","webpack://@xterm/xterm/./src/browser/services/CoreBrowserService.ts","webpack://@xterm/xterm/./src/browser/services/KeyboardService.ts","webpack://@xterm/xterm/./src/browser/services/LinkProviderService.ts","webpack://@xterm/xterm/./src/browser/services/MouseCoordsService.ts","webpack://@xterm/xterm/./src/browser/services/MouseService.ts","webpack://@xterm/xterm/./src/browser/services/RenderService.ts","webpack://@xterm/xterm/./src/browser/services/SelectionService.ts","webpack://@xterm/xterm/./src/browser/services/Services.ts","webpack://@xterm/xterm/./src/browser/services/ThemeService.ts","webpack://@xterm/xterm/./src/common/Async.ts","webpack://@xterm/xterm/./src/common/CircularList.ts","webpack://@xterm/xterm/./src/common/Color.ts","webpack://@xterm/xterm/./src/common/CoreTerminal.ts","webpack://@xterm/xterm/./src/common/Event.ts","webpack://@xterm/xterm/./src/common/InputHandler.ts","webpack://@xterm/xterm/./src/common/Lifecycle.ts","webpack://@xterm/xterm/./src/common/MultiKeyMap.ts","webpack://@xterm/xterm/./src/common/Platform.ts","webpack://@xterm/xterm/./src/common/SortedList.ts","webpack://@xterm/xterm/./src/common/StringBuilder.ts","webpack://@xterm/xterm/./src/common/TaskQueue.ts","webpack://@xterm/xterm/./src/common/Version.ts","webpack://@xterm/xterm/./src/common/WindowsMode.ts","webpack://@xterm/xterm/./src/common/buffer/AttributeData.ts","webpack://@xterm/xterm/./src/common/buffer/Buffer.ts","webpack://@xterm/xterm/./src/common/buffer/BufferLine.ts","webpack://@xterm/xterm/./src/common/buffer/BufferRange.ts","webpack://@xterm/xterm/./src/common/buffer/BufferReflow.ts","webpack://@xterm/xterm/./src/common/buffer/BufferSet.ts","webpack://@xterm/xterm/./src/common/buffer/CellData.ts","webpack://@xterm/xterm/./src/common/buffer/Constants.ts","webpack://@xterm/xterm/./src/common/buffer/Marker.ts","webpack://@xterm/xterm/./src/common/data/Charsets.ts","webpack://@xterm/xterm/./src/common/input/Keyboard.ts","webpack://@xterm/xterm/./src/common/input/KittyKeyboard.ts","webpack://@xterm/xterm/./src/common/input/TextDecoder.ts","webpack://@xterm/xterm/./src/common/input/UnicodeV6.ts","webpack://@xterm/xterm/./src/common/input/Win32InputMode.ts","webpack://@xterm/xterm/./src/common/input/WriteBuffer.ts","webpack://@xterm/xterm/./src/common/input/XParseColor.ts","webpack://@xterm/xterm/./src/common/parser/ApcParser.ts","webpack://@xterm/xterm/./src/common/parser/DcsParser.ts","webpack://@xterm/xterm/./src/common/parser/EscapeSequenceParser.ts","webpack://@xterm/xterm/./src/common/parser/OscParser.ts","webpack://@xterm/xterm/./src/common/parser/Params.ts","webpack://@xterm/xterm/./src/common/public/AddonManager.ts","webpack://@xterm/xterm/./src/common/public/BufferApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferLineApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferNamespaceApi.ts","webpack://@xterm/xterm/./src/common/public/ParserApi.ts","webpack://@xterm/xterm/./src/common/public/UnicodeApi.ts","webpack://@xterm/xterm/./src/common/services/BufferService.ts","webpack://@xterm/xterm/./src/common/services/CharsetService.ts","webpack://@xterm/xterm/./src/common/services/CoreService.ts","webpack://@xterm/xterm/./src/common/services/DecorationService.ts","webpack://@xterm/xterm/./src/common/services/InstantiationService.ts","webpack://@xterm/xterm/./src/common/services/LogService.ts","webpack://@xterm/xterm/./src/common/services/MouseStateService.ts","webpack://@xterm/xterm/./src/common/services/OptionsService.ts","webpack://@xterm/xterm/./src/common/services/OscLinkService.ts","webpack://@xterm/xterm/./src/common/services/ServiceRegistry.ts","webpack://@xterm/xterm/./src/common/services/Services.ts","webpack://@xterm/xterm/./src/common/services/UnicodeService.ts","webpack://@xterm/xterm/webpack/bootstrap","webpack://@xterm/xterm/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (␛).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', () => this._compositionHelper!.compositionend()));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n this.coreService.triggerDataEvent(key, true);\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n","/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService } from '../../common/services/Services';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private _isSendingComposition: boolean;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n this._isComposing = false;\n this._isSendingComposition = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._isComposing = true;\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._compositionView.textContent = '';\n this._dataAlreadySent = '';\n this._compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n // Mark text as LTR, direction=rtl is used in CSS so the end of the text is followed for long\n // compositions\n this._compositionView.textContent = `\\u200E${ev.data}\\u200E`;\n this.updateCompositionElements();\n setTimeout(() => {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max( this._compositionPosition.start, end);\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(): void {\n this._finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._isComposing || this._isSendingComposition) {\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean): void {\n this._compositionView.classList.remove('active');\n this._isComposing = false;\n\n if (!waitForPropagation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this._isSendingComposition = false;\n const input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);\n this._coreService.triggerDataEvent(input, true);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n };\n const currentCompositionSuffix = this._compositionSuffix;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this._isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this._isSendingComposition) {\n this._isSendingComposition = false;\n let input;\n // Add length of data already sent due to keydown event,\n // otherwise input characters can be duplicated. (Issue #3191)\n currentCompositionPosition.start += this._dataAlreadySent.length;\n if (this._isComposing) {\n // Use the start position of the new composition to get the string\n // if a new composition has started.\n input = this._textarea.value.substring(currentCompositionPosition.start, this._compositionPosition.start);\n } else {\n // Keep support for non-composition characters typed immediately after composition end\n // while avoiding re-sending the trailing text that was already present\n // before composition started.\n const value = this._textarea.value;\n const valueEnd = currentCompositionSuffix.length > 0 && value.endsWith(currentCompositionSuffix)\n ? value.length - currentCompositionSuffix.length\n : value.length;\n input = value.substring(currentCompositionPosition.start, Math.max(currentCompositionPosition.start, valueEnd));\n }\n if (input.length > 0) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n if (!this._isComposing) {\n return;\n }\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n this._compositionView.style.direction = 'rtl';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this._compositionView.getBoundingClientRect();\n this._textarea.style.left = cursorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(compositionViewBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(compositionViewBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n","/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nclass WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n","import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices: number[] = [];\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.length = 0;\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n if (this._array.length === 0) {\n return false;\n }\n const key = this._getKey(value);\n if (key === undefined) {\n return false;\n }\n i = this._search(key);\n if (i === -1) {\n return false;\n }\n if (this._getKey(this._array[i]) !== key) {\n return false;\n }\n do {\n if (this._array[i] === value) {\n if (this._deletedIndices.length === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.push(i);\n return true;\n }\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n return false;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const sortedDeletedIndices = this._deletedIndices.sort((a, b) => a - b);\n let sortedDeletedIndicesIndex = 0;\n const newArray = new Array(this._array.length - sortedDeletedIndices.length);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (sortedDeletedIndices[sortedDeletedIndicesIndex] === i) {\n sortedDeletedIndicesIndex++;\n } else {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._deletedIndices.length = 0;\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.length > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n²) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.303';\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n cell.extended = this._extendedAttrs[index]!;\n } else {\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n cell.extended = $extended;\n }\n return cell;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u2409', // '␉' (HT)\n 'c': '\\u240c', // '␌' (FF)\n 'd': '\\u240d', // '␍' (CR)\n 'e': '\\u240a', // '␊' (LF)\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '␤' (NL)\n 'i': '\\u240b', // '␋' (VT)\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec § \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" — i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(6081);\n"],"names":["root","factory","exports","module","define","amd","a","i","globalThis","Strings","__importStar","__webpack_require__","TimeBasedDebouncer_1","Lifecycle_1","Services_1","Services_2","Dom_1","AccessibilityManager","Disposable","constructor","_terminal","instantiationService","_coreBrowserService","_renderService","super","this","_rowColumns","WeakMap","_liveRegionLineCount","_charsToConsume","_charsToAnnounce","doc","mainDocument","_accessibilityContainer","createElement","classList","add","_rowContainer","setAttribute","_rowElements","rows","_createAccessibilityTreeNode","appendChild","_topBoundaryFocusListener","e","_handleBoundaryFocus","_bottomBoundaryFocusListener","addEventListener","length","_liveRegion","_liveRegionDebouncer","_register","TimeBasedDebouncer","_renderRows","bind","element","Error","insertAdjacentElement","onResize","_handleResize","onRender","_refreshRows","start","end","onScroll","onA11yChar","char","_handleChar","onLineFeed","onA11yTab","spaceCount","_handleTab","onKey","_handleKey","key","onBlur","_clearLiveRegion","onDimensionsChange","_refreshRowsDimensions","addDisposableListener","_handleSelectionChange","onDprChange","toDisposable","remove","shift","textContent","tooMuchOutput","get","keyChar","test","push","refresh","buffer","setSize","lines","toString","line","ydisp","columns","lineData","translateToString","undefined","posInSet","set","_alignRowWidth","_announceCharacters","position","boundaryElement","target","beforeBoundaryElement","getAttribute","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","removeChild","removeEventListener","newElement","unshift","scrollLines","focus","preventDefault","stopImmediatePropagation","selection","getSelection","isCollapsed","contains","anchorNode","clearSelection","focusNode","console","error","begin","node","offset","anchorOffset","focusOffset","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_FOLLOWING","childNodes","lastRowElement","slice","toRowColumn","rowElement","Text","parentNode","row","parseInt","isNaN","warn","column","cols","beginRowColumn","endRowColumn","select","children","tabIndex","_refreshRowDimensions","dimensions","css","cell","height","Object","assign","style","width","canvas","fontSize","options","transform","getBoundingClientRect","lastColumn","targetWidth","__decorate","__param","IInstantiationService","ICoreBrowserService","IRenderService","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","paste","textarea","coreService","optionsService","decPrivateModes","rawOptions","ignoreBracketedPasteMode","triggerDataEvent","value","moveTextAreaUnderMouseCursor","ev","screenElement","pos","left","clientX","top","clientY","zIndex","selectionService","clipboardData","setData","selectionText","stopPropagation","getData","shouldSelectWord","rightClickSelect","MultiKeyMap_1","_color","TwoKeyMap","_css","setCss","bg","fg","getCss","setColor","getColor","clear","Clipboard_1","OscLinkProvider_1","Viewport_1","BufferDecorationRenderer_1","OverviewRulerRenderer_1","CompositionHelper_1","DomRenderer_1","CharSizeService_1","CharacterJoinerService_1","CoreBrowserService_1","LinkProviderService_1","MouseCoordsService_1","MouseService_1","RenderService_1","SelectionService_1","ThemeService_1","KeyboardService_1","Color_1","CoreTerminal_1","Browser","BufferLine_1","XParseColor_1","DecorationService_1","InputHandler_1","AccessibilityManager_1","Linkifier_1","Event_1","CoreBrowserTerminal","CoreTerminal","linkifier","_linkifier","onFocus","_onFocus","event","_onBlur","_onA11yCharEmitter","_onA11yTabEmitter","onWillOpen","_onWillOpen","device","MutableDisposable","browser","_keyDownHandled","_keyDownSeen","_keyPressHandled","_unprocessedDeadKey","_accessibilityManager","_onCursorMove","Emitter","onCursorMove","_onKey","_onSelectionChange","onSelectionChange","_onTitleChange","onTitleChange","_onBell","onBell","_onDimensionsChange","_setup","_decorationService","_instantiationService","createInstance","DecorationService","setService","IDecorationService","_keyboardService","KeyboardService","IKeyboardService","_linkProviderService","LinkProviderService","ILinkProviderService","registerLinkProvider","OscLinkProvider","_inputHandler","onRequestBell","fire","onRequestRefreshRows","onRequestSendFocus","_reportFocus","onRequestReset","reset","onRequestWindowsOptionsReport","type","_reportWindowsOptions","onColor","_handleColorEvent","EventUtils","forward","_bufferService","_afterResize","_customKeyEventHandler","_themeService","req","acc","ident","index","colorRgb","color","toColorRGB","colors","ansi","toRgbString","modifyColors","channels","toColor","narrowedAcc","restoreColor","_reportColorScheme","colorSchemeMode","rgb","relativeLuminance","background","rgba","foreground","buffers","active","preventScroll","_handleScreenReaderModeOptionChange","_handleTextAreaFocus","sendFocus","_showCursor","blur","_handleTextAreaBlur","y","_syncTextArea","isCursorInViewport","_compositionHelper","isComposing","cursorY","ybase","bufferLine","cursorX","Math","min","x","cellHeight","getWidth","cellWidth","cursorTop","cursorLeft","lineHeight","_initGlobal","_bindKeys","hasSelection","copyHandler","_selectionService","pasteHandlerWrapper","handlePasteEvent","isFirefox","button","rightClickHandler","rightClickSelectsWord","isLinux","_keyUp","_keyDown","_keyPress","compositionstart","updateCompositionElements","compositionupdate","compositionend","_inputEvent","open","parent","isConnected","_logService","debug","ownerDocument","defaultView","window","_document","documentOverride","Document","dir","toggle","allowTransparency","onSpecificOptionChange","fragment","createDocumentFragment","_viewportElement","updateCursorStyle","_helperContainer","promptLabel","isChromeOS","readOnly","disableStdin","CoreBrowserService","document","_charSizeService","CharSizeService","ICharSizeService","ThemeService","IThemeService","onRequestColorSchemeQuery","onChangeColors","colorSchemeUpdates","_characterJoinerService","CharacterJoinerService","ICharacterJoinerService","RenderService","onRenderedViewportChange","_onRender","resize","_compositionView","CompositionHelper","_mouseCoordsService","MouseCoordsService","IMouseCoordsService","Linkifier","hasRenderer","setRenderer","_createRenderer","handleCursorMove","handleResize","handleBlur","handleFocus","_viewport","Viewport","onRequestScrollLines","SelectionService","ISelectionService","_mouseService","MouseService","IMouseService","amount","suppressScrollEvent","onRequestRedraw","handleSelectionChanged","columnSelectMode","onLinuxMouseSelection","any","_onScroll","queueSync","BufferDecorationRenderer","handleMouseDown","mouseStateService","areMouseEventsActive","mouseEventsRequireAlt","disable","enable","screenReaderMode","showScrollbar","scrollbar","overviewRulerWidth","_overviewRulerRenderer","OverviewRulerRenderer","shouldShow","measure","bindMouse","handleTouchScroll","disposable","DomRenderer","sync","refreshRows","shouldColumnSelect","isCursorInitialized","disp","scrollPages","pageCount","scrollToTop","scrollToBottom","disableSmoothScroll","scrollToLine","scrollAmount","data","attachCustomKeyEventHandler","customKeyEventHandler","attachCustomWheelEventHandler","customWheelEventHandler","setCustomWheelEventHandler","linkProvider","registerCharacterJoiner","handler","joinerId","register","deregisterCharacterJoiner","deregister","markers","registerMarker","cursorYOffset","addMarker","registerDecoration","decorationOptions","setSelection","getSelectionPosition","selectionStart","selectionEnd","selectAll","selectLines","shouldIgnoreComposition","isMac","macOptionIsMeta","altKey","keydown","scrollOnUserInput","result","evaluateKeyDown","scrollCount","_isThirdLevelShift","cancel","useKitty","useWin32InputMode","ctrlKey","metaKey","charCodeAt","wasModifierOnly","wasModifierKeyOnlyEvent","domEvent","thirdLevelKey","isWindows","getModifierState","keyCode","evaluateKeyUp","charCode","which","String","fromCharCode","inputType","composed","hasValidSize","clearAllMarkers","getBlankLine","DEFAULT_ATTR_DATA","clearTextureAtlas","WindowsOptionsReportType","GET_WIN_SIZE_PIXELS","canvasWidth","toFixed","canvasHeight","GET_CELL_SIZE_PIXELS","useCapture","domNode","bb","win","getWindow","scrollX","scrollY","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","sort","execute","animationFrameRunner","Async_1","candidateNode","candidateEvent","view","DomListener","_node","_type","_handler","_options","dispose","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","b","animationFrameState","Map","WindowIntervalTimer","IntervalTimer","_defaultTarget","cancelAndSet","interval","currentLink","_currentLink","_element","_linkCacheDisposables","_isMouseOut","_wasResized","_activeLine","_onShowLinkUnderline","onShowLinkUnderline","_onHideLinkUnderline","onHideLinkUnderline","_lastMouseEvent","_activeProviderReplies","_clearCurrentLink","_handleMouseMove","_handleMouseDown","_handleMouseUp","_positionFromMouseEvent","composedPath","_lastBufferCell","_handleHover","_askForLink","_linkAtPosition","link","useLineCache","forEach","reply","linkWithState","linkProvided","linkProviders","entries","existingReply","_checkLinkProviderResult","provideLinks","links","linksWithState","map","size","_removeIntersectingLinks","replies","occupiedCells","Set","providerReply","startX","range","endX","has","splice","hasLinkBefore","j","linkAtPosition","find","_handleNewLink","_mouseDownLink","activate","startRow","endRow","_linkLeave","decorations","underline","pointerCursor","isHovered","_linkHover","defineProperties","v","_fireUnderlineEvent","hover","showEvent","scrollOffset","_createLinkUnderlineEvent","leave","lower","upper","coords","getCoords","x1","y1","x2","y2","IBufferService","promptLabelInternal","tooMuchOutputInternal","CellData_1","_optionsService","_oscLinkService","_workCell","CellData","callback","linkHandler","lineLength","getTrimmedLength","currentLinkId","currentStart","finishLink","hasContent","loadCell","hasExtendedAttrs","extended","urlId","getLinkData","uri","_getRangeWithLineWrap","ignoreLink","allowNonHttpProtocols","parsed","URL","includes","protocol","defaultActivate","linkId","startY","finalStartX","endY","finalEndX","currentLine","isWrapped","previousLine","previousLineLength","_hasUrlId","previousStartX","nextLine","nextLineLength","nextEndX","confirm","newWindow","opener","location","href","IOptionsService","IOscLinkService","_renderCallback","_refreshCallbacks","_animationFrame","cancelAnimationFrame","addRefreshCallback","_innerRefresh","rowStart","rowEnd","rowCount","_rowCount","_rowStart","_rowEnd","max","_runRefreshCallbacks","_debounceThresholdMS","_lastRefreshMs","_additionalRefreshRequested","_refreshTimeoutID","clearTimeout","refreshRequestTime","performance","now","elapsed","waitPeriodBeforeTrailingRefresh","setTimeout","DEFAULT_ANSI_COLORS","freeze","r","g","toCss","toRgba","c","scrollableElement_1","scrollable_1","coreBrowserService","_coreService","themeService","_onRequestScrollLines","_isSyncing","_isHandlingScroll","_suppressOnScrollHandler","_needsSyncOnRender","scrollable","Scrollable","forceIntegerValues","smoothScrollDuration","scheduleAtNextAnimationFrame","cb","setSmoothScrollDuration","_scrollableElement","SmoothScrollableElement","vertical","horizontal","useShadows","mouseWheelSmoothScroll","verticalHasArrows","showArrows","_getChangeOptions","onMultipleOptionChange","updateOptions","onProtocolChange","handleMouseWheel","setScrollDimensions","scrollHeight","runAndSubscribe","backgroundColor","getDomNode","_styleElement","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","join","onBufferActivate","_latestYDisp","_sync","_handleScroll","getScrollPosition","setScrollPosition","reuseAnimation","scrollTop","verticalScrollbarSize","mouseWheelScrollSensitivity","scrollSensitivity","fastScrollSensitivity","_queuedAnimationFrame","synchronizedOutput","newRow","round","diff","translationY","ICoreService","IMouseStateService","_screenElement","_decorationElements","_altBufferIsActive","_dimensionsChanged","_container","_doRefreshDecorations","_queueRefresh","alt","onDecorationRegistered","onDecorationRemoved","decoration","_removeDecoration","_renderDecoration","_refreshStyle","_refreshXPosition","_createElement","layer","marker","display","onRenderEmitter","onDispose","delete","anchor","right","_zones","_zonePool","_zonePoolIndex","_linePadding","full","center","zones","addDecoration","overviewRulerOptions","z","_lineIntersectsZone","_lineAdjacentToZone","_addLineToZone","startBufferLine","endBufferLine","setPadding","padding","zone","ColorZoneStore_1","drawHeight","drawWidth","drawX","_width","_colorZoneStore","ColorZoneStore","_shouldUpdateDimensions","_shouldUpdateAnchor","_lastKnownBufferLength","_canvas","_refreshCanvasDimensions","parentElement","insertBefore","ctx","getContext","_ctx","normal","_refreshDrawHeightConstants","_refreshColorZonePadding","_refreshDrawConstants","outerWidth","floor","innerWidth","ceil","dpr","pixelsPerLine","nonFullHeight","_store","isDisposed","cssCanvasHeight","deviceCanvasHeight","_refreshDecorations","clearRect","lineWidth","_renderRulerOutline","_renderColorZone","fillStyle","overviewRulerBorder","fillRect","overviewRuler","showTopBorder","showBottomBorder","updateCanvasDimensions","updateAnchor","_isComposing","_textarea","_isSendingComposition","_compositionPosition","_compositionSuffix","_dataAlreadySent","substring","_finalizeComposition","_handleAnyTextareaChanges","waitForPropagation","currentCompositionPosition","currentCompositionSuffix","input","valueEnd","endsWith","_textareaChangeTimer","oldValue","newValue","dontRecurse","fontFamily","maxWidth","overflow","direction","compositionViewBounds","getCoordsRelativeToElement","rect","elementStyle","getComputedStyle","leftPadding","getPropertyValue","topPadding","colCount","hasValidCharSize","cssCellWidth","cssCellHeight","isSelection","moveToRequestedRow","targetY","bufferService","applicationCursor","wrappedRowsForRow","rowsToMove","abs","wrappedRows","verticalDirection","wrappedRowsCount","repeat","sequence","currentRow","lineWraps","startCol","endCol","currentCol","bufferStr","translateBufferLineToString","count","str","rpt","targetX","hasScrollback","resetStartingRow","horizontalDirection","moveToRequestedCol","rowDifference","currX","colsFromRowEnd","CoreBrowserTerminal_1","AddonManager_1","BufferNamespaceApi_1","ParserApi_1","UnicodeApi_1","CONSTRUCTOR_ONLY_OPTIONS","$value","Terminal","_core","_addonManager","AddonManager","_publicOptions","getter","propName","setter","_checkReadonlyOptions","desc","defineProperty","_checkProposedApi","allowProposedApi","onBinary","onData","onWriteParsed","parser","_parser","ParserApi","unicode","UnicodeApi","_buffer","BufferNamespaceApi","modes","m","mouseTrackingMode","activeProtocol","applicationCursorKeysMode","applicationCursorKeys","applicationKeypadMode","applicationKeypad","insertMode","originMode","origin","reverseWraparoundMode","reverseWraparound","sendFocusMode","showCursor","isCursorHidden","synchronizedOutputMode","win32InputMode","wraparoundMode","wraparound","wasUserInput","_verifyIntegers","_verifyPositiveIntegers","write","writeln","loadAddon","addon","strings","values","Infinity","DomRendererRowFactory_1","WidthCache_1","Constants_1","RendererUtils_1","SelectionRenderModel_1","TextBlinkStateManager_1","nextTerminalId","_linkifier2","_terminalClass","_selectionRenderModel","createSelectionRenderModel","_lastSelectionColumnMode","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_onRequestRedraw","_refreshRowElements","_selectionContainer","createRenderDimensions","_updateDimensions","onOptionChange","_handleOptionsChanged","_injectCss","_rowFactory","DomRendererRowFactory","_handleLinkHover","_handleLinkLeave","_cursorBlinkStateManager","CursorBlinkStateManager","restartBlinkAnimation","_textBlinkStateManager","TextBlinkStateManager","_widthCache","_themeStyleElement","_dimensionsStyleElement","WidthCache","setFont","fontWeight","fontWeightBold","_setDefaultSpacing","letterSpacing","styles","_terminalSelector","multiplyOpacity","blinkAnimationUnderlineId","blinkAnimationBarId","blinkAnimationBlockId","cursor","cursorAccent","cursorWidth","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","INVERTED_DEFAULT_COLOR","opaque","spacing","defaultSpacing","handleDevicePixelRatioChange","handleCharSizeChanged","pause","renderRows","resume","handleViewportVisibilityChange","isVisible","setViewportVisible","replaceChildren","oldViewportStart","oldViewportEnd","_lastSelectionStart","_lastSelectionEnd","update","viewportCappedStartRow","viewportCappedEndRow","newViewportStart","newViewportEnd","viewportStartRow","viewportEndRow","documentFragment","isXFlipped","_createSelectionElement","middleRowsCount","finalEndCol","renderStartRow","renderEndRow","cursorViewportRow","colStart","colEnd","fill","setNeedsBlinkInViewport","cursorAbsoluteY","cursorBlink","cursorStyle","cursorInactiveStyle","rowInfo","hasBlinkingCells","createRow","isBlinkOn","_setRowBlinkState","_updateTextBlinkState","_setCellUnderline","enabled","maxY","bufferline","_isIdlePaused","isFocused","_resetIdleTimer","_clearIdleTimer","_idleTimeout","_stopBlinkingDueToIdle","Constants_2","AttributeData_1","_columnSelectMode","_selectionStart","_selectionEnd","isCursorRow","blinkOn","widthCache","linkStart","linkEnd","elements","joinedRanges","getJoinedCharacters","charElement","getNoBgTrimmedLength","cellAmount","oldBg","oldFg","oldExt","oldLinkHover","oldSpacing","oldIsInSelection","skipJoinedCheckUntilX","classes","hasHover","isJoined","isValidJoinRange","lastCharX","firstSelectionState","_isCellInSelection","JoinedCellData","isInSelection","isCursorCell","isLinkHover","isBlink","isDecorated","forEachDecorationAtCell","d","chars","getChars","WHITESPACE_CELL_CHAR","isUnderline","isOverline","isBold","isItalic","selectionForeground","ext","isInvisible","isDim","underlineStyle","isUnderlineColorDefault","isUnderlineColorRGB","textDecorationColor","AttributeData","getUnderlineColor","drawBoldTextInBrightColors","isStrikethrough","textDecoration","getFgColor","fgColorMode","getFgColorMode","getBgColor","bgColorMode","getBgColorMode","isInverse","temp","temp2","bgOverride","fgOverride","resolvedBg","isTop","backgroundColorRGB","foregroundColorRGB","_addStyle","padStart","_applyMinimumContrast","className","minimumContrastRatio","treatGlyphAsBackgroundColor","getCode","cache","_getContrastCache","adjustedColor","ratio","ensureContrastRatio","halfContrastCache","contrastCache","canvasFactory","WidthCacheFontVariantCanvas","_flat","Float32Array","_font","_fontSize","_weight","_weightBold","_canvasElements","_holey","font","weight","weightBold","bold","italic","cp","_measure","variant","OffscreenCanvas","throwIfFalsy","fontStyle","trim","measureText","isPowerlineGlyph","codepoint","isEmoji","glyphSizeX","deviceCellWidth","isNerdFontGlyph","isBoxOrBlockGlyph","currentOffset","SelectionRenderModel","terminal","viewportY","isCellSelected","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","duration","setIntervalDuration","blinkIntervalDuration","_clearInterval","isEnabled","needsBlinkInViewport","_updateIntervalState","_interval","wasBlinkOn","setInterval","clearInterval","dom","fastDomNode_1","globalPointerMoveMonitor_1","scrollbarArrow_1","scrollbarVisibilityController_1","widget_1","platform","AbstractScrollbar","Widget","opts","_lazyRender","lazyRender","_host","host","_scrollable","_scrollByPage","scrollByPage","_scrollbarState","scrollbarState","_visibilityController","ScrollbarVisibilityController","visibility","extraScrollbarClassName","setIsNeeded","isNeeded","_pointerMoveMonitor","GlobalPointerMoveMonitor","_shouldRender","FastDomNode","setDomNode","setPosition","_domNodePointerDown","_createArrow","arrow","ScrollbarArrow","bgDomNode","_createSlider","slider","setClassName","setTop","setLeft","setWidth","setHeight","setLayerHinting","setContain","_sliderPointerDown","_onclick","leftButton","_handleElementSize","visibleSize","setVisibleSize","render","_handleElementScrollSize","elementScrollSize","setScrollSize","_handleElementScrollPosition","elementScrollPosition","beginReveal","setShouldBeVisible","beginHide","_renderDomNode","getRectangleLargeSize","getRectangleSmallSize","_updateSlider","getSliderSize","getArrowSize","getSliderPosition","_handlePointerDown","delegatePointerDown","domTop","getClientRects","sliderStart","sliderStop","pointerPos","_sliderPointerPosition","offsetX","offsetY","domNodePosition","getDomNodePagePosition","pageX","pageY","_pointerDownRelativePosition","_setDesiredScrollPositionNow","getDesiredScrollPositionFromOffsetPaged","getDesiredScrollPositionFromOffset","Element","initialPointerPosition","initialPointerOrthogonalPosition","_sliderOrthogonalPointerPosition","initialScrollbarState","clone","toggleClassName","startMonitoring","pointerId","buttons","pointerMoveData","pointerOrthogonalPosition","pointerOrthogonalDelta","pointerDelta","getDesiredScrollPositionFromDelta","handleDragEnd","handleDragStart","_desiredScrollPosition","desiredScrollPosition","writeScrollPosition","setScrollPositionNow","updateScrollbarSize","scrollbarSize","_updateScrollbarSize","setScrollbarSize","numberAsPixels","_height","_top","_left","_bottom","_right","_className","_position","_layerHint","_contain","setBottom","bottom","setRight","shouldHaveIt","layerHint","contain","name","_hooks","DisposableStore","_pointerMoveCallback","_onStopCallback","stopMonitoring","invokeStopCallback","isMonitoring","onStopCallback","initialElement","initialButtons","pointerMoveCallback","eventSource","setPointerCapture","releasePointerCapture","abstractScrollbar_1","scrollbarState_1","HorizontalScrollbar","scrollDimensions","getScrollDimensions","scrollPosition","getCurrentScrollPosition","ScrollbarState","horizontalHasArrows","horizontalScrollbarSize","scrollWidth","scrollLeft","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","handleScroll","setOppositeScrollbarSize","setVisibility","sameOriginWindowChainCache","getParentWindowIfSameOrigin","w","parentLocation","IframeUtils","_getSameOriginWindowChain","windowChainCache","WeakRef","iframeElement","frameElement","getPositionOfChildWindowRelativeToAncestorWindow","childWindow","ancestorWindow","windowChain","windowChainEl","windowInChain","deref","boundingRect","timestamp","Date","browserEvent","middleButton","rightButton","detail","shiftKey","posx","posy","body","documentElement","iframeOffsets","deltaX","deltaY","targetNode","srcElement","shouldFactorDPR","isChrome","chromeVersionMatch","navigator","userAgent","match","e1","e2","devicePixelRatio","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","wheelDeltaX","isSafari","HORIZONTAL_AXIS","wheelDelta","ScrollState","_forceIntegerValues","_scrollStateBrand","rawScrollLeft","rawScrollTop","equals","other","withScrollDimensions","useRawScrollPositions","withScrollPosition","createScrollEvent","previous","inSmoothScrolling","widthChanged","scrollWidthChanged","scrollLeftChanged","heightChanged","scrollHeightChanged","scrollTopChanged","oldWidth","oldScrollWidth","oldScrollLeft","oldHeight","oldScrollHeight","oldScrollTop","_scrollableBrand","_smoothScrollDuration","_scheduleAtNextAnimationFrame","_state","_smoothScrolling","validateScrollPosition","newState","_setState","Boolean","acceptScrollDimensions","getFutureScrollPosition","to","setScrollPositionSmooth","validTarget","newSmoothScrolling","SmoothScrollingOperation","from","startTime","animationFrameDisposable","_performSmoothScrolling","hasPendingScrollAnimation","tick","isDone","oldState","SmoothScrollingUpdate","createEaseOutCubic","delta","completion","t","pow","_initAnimations","_scrollLeft","_initAnimation","_scrollTop","viewportSize","stop1","stop2","cut","_tick","newScrollLeft","newScrollTop","mouseEvent_1","horizontalScrollbar_1","verticalScrollbar_1","MouseWheelClassifierItem","score","MouseWheelClassifier","_capacity","_memory","_front","_rear","isPhysicalMouseWheel","remainingInfluence","iteration","influence","acceptStandardWheelEvent","pageZoomFactor","getZoomFactor","accept","previousItem","_computeScore","_isAlmostInt","absDeltaX","absDeltaY","absPreviousDeltaX","absPreviousDeltaY","minDeltaX","minDeltaY","maxDeltaX","maxDeltaY","INSTANCE","resolvedScrollable","ownsScrollable","flipAxes","consumeMouseWheelIfScrollbarIsNeeded","alwaysConsumeMouseWheel","scrollYToX","scrollPredominantAxis","listenOnDomNode","verticalSliderSize","resolveOptions","scrollbarHost","mouseWheelEvent","_handleMouseWheel","_handleDragStart","_handleDragEnd","_verticalScrollbar","VerticalScrollbar","_horizontalScrollbar","_domNode","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","_onmouseover","_handleMouseOver","_onmouseleave","_handleMouseLeave","_hideTimeout","TimeoutTimer","_isDragging","_mouseIsOver","_revealOnScroll","updateClassName","newClassName","newOptions","_render","delegateScrollFromMouseWheelEvent","StandardWheelEvent","shouldListen","onMouseWheel","passive","defaultPrevented","classifier","didScroll","shiftConvert","futureScrollPosition","deltaScrollTop","desiredScrollTop","deltaScrollLeft","desiredScrollLeft","consumeMouseWheel","_reveal","renderNow","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","_hide","_scheduleHide","_handleActivate","handleActivate","bgWidth","bgHeight","arrowSize","addStandardDisposableListener","_arrowPointerDown","_pointerdownRepeatTimer","_pointerdownScheduleRepeatTimer","oppositeScrollbarSize","scrollSize","_scrollbarSize","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","iVisibleSize","iScrollSize","iScrollPosition","setArrowSize","iArrowSize","_computeValues","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","desiredSliderPosition","correctedOffset","visibleClassName","invisibleClassName","_visibility","_visibleClassName","_invisibleClassName","_isVisible","_isNeeded","_rawShouldBeVisible","_shouldBeVisible","_revealTimer","_updateShouldBeVisible","rawShouldBeVisible","_applyVisibilitySetting","shouldBeVisible","ensureVisibility","setIfNotSet","withFadeAway","DomUtils","mainWindow","tail","array","n","LinkedListNode","Undefined","prev","LinkedList","_first","_last","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","Symbol","iterator","EventType","TAP","START","END","CONTEXT_MENU","Gesture","_dispatched","_targets","_ignoreTargets","_activeTouches","_handle","_lastSetTapCountTime","_handleTouchStart","_handleTouchEnd","_handleTouchMove","addTarget","isTouchDevice","None","_instance","ignoreTarget","maxTouchPoints","len","targetTouches","touch","identifier","id","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","evt","_newGestureEvent","_dispatchEvent","activeTouchCount","keys","changedTouches","hasOwnProperty","holdTime","_holdDelay","finalX","finalY","deltaT","dispatchTo","filter","_inertia","createEvent","initEvent","tapCount","currentTime","getTime","setTapCount","_clearTapCountTime","targets","depth","dispatchEvent","t1","vX","dirX","vY","dirY","deltaPosX","deltaPosY","stopped","_scrollFriction","translationX","_target","descriptor","fnKey","fn","memoizeKey","args","configurable","enumerable","writable","apply","hasArrows","_arrowScrollDelta","_setArrows","_arrowScroll","currentPosition","_arrowUp","_arrowDown","arrowDelta","_updateArrowSize","listener","StandardMouseEvent","isSelectAllActive","selectionStartLength","finalSelectionStart","areSelectionValuesReversed","finalSelectionEnd","startPlusLength","handleTrim","_onCharSizeChange","onCharSizeChange","_measureStrategy","TextMetricsMeasureStrategy","DomMeasureStrategy","BaseMeasureStategy","_result","_validateAndSet","_parentElement","_measureElement","whiteSpace","fontKerning","Number","offsetWidth","offsetHeight","metrics","fontBoundingBoxAscent","fontBoundingBoxDescent","firstCell","content","combinedData","isCombined","setFromCharData","getAsCharData","_characterJoiners","_nextCharacterJoinerId","joiner","ranges","lineStr","trimmedLength","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","getFg","rangeAttrBG","getBg","_getJoinedRanges","startIndex","endIndex","allJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","getString","newRange","inRange","_window","_isFocused","_cachedIsFocused","_onDprChange","_onWindowChange","onWindowChange","_screenDprMonitor","ScreenDprMonitor","setWindow","hasFocus","queueMicrotask","_parentWindow","_windowResizeListener","_outerListener","_setDprAndFireIfDiffers","_currentDevicePixelRatio","_updateDpr","_setWindowResizeListener","clearListener","parentWindow","_resolutionMediaMatchList","removeListener","matchMedia","addListener","Keyboard_1","KittyKeyboard_1","Win32InputMode_1","Platform_1","_getWin32InputMode","_win32InputMode","Win32InputMode","_getKittyKeyboard","_kittyKeyboard","KittyKeyboard","evaluateKeyboardEvent","kittyFlags","kittyKeyboard","flags","evaluate","vtExtensions","shouldUseProtocol","providerIndex","indexOf","Mouse_1","getMouseReportCoords","col","touch_1","_mouseStateService","_lastEvent","_wheelPartialScroll","_touchScrollAccumulator","mouseupListener","mousedragListener","requestedEvents","mouseup","wheel","mousedrag","mousemove","eventListeners","_handleWheel","_handleMouseDrag","_altMouseCursor","AltMouseCursorController","events","_handleProtocolChange","_syncMouseModeState","_handlePassiveWheel","_handleTouchChange","_sendEvent","but","action","overrideType","allowCustomWheelEvent","_consumeWheelEvent","stripAltFromReport","_triggerMouseEvent","ctrl","shouldForceSelection","targetDocument","listenerDocument","_handleTouchScrollAsWheel","_handleTouchScrollAsKeys","trunc","resetClass","logLevel","_explainEvents","_applyScrollModifier","targetWheelEventPixels","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_PAGE","_equalEvents","isPixelEncoding","restrictMouseEvent","report","encodeMouseEvent","isDefaultEncoding","triggerBinaryEvent","down","up","drag","move","pixels","ILogService","_isActive","_listeners","store","syncFromModifier","_updateClass","altHeld","RenderDebouncer_1","TaskQueue_1","_renderer","decorationService","_observerDisposable","_isPaused","_needsFullRefresh","_isNextRenderRedrawOnly","_needsSelectionRefresh","_canvasWidth","_canvasHeight","_selectionState","_onRenderedViewportChange","_onRefreshRequest","onRefreshRequest","_pausedResizeTask","DebouncedIdleTask","_renderDebouncer","RenderDebouncer","_syncOutputHandler","SynchronizedOutputHandler","_fullRefresh","_registerIntersectionObserver","observer","IntersectionObserver","_handleIntersectionChange","threshold","_intersectionObserver","disconnect","observe","entry","isIntersecting","intersectionRatio","flush","isRedrawOnly","bufferRows","buffered","_fireOnCanvasResize","renderer","_onTimeout","_start","_end","_isBuffering","_timeout","MoveToCell_1","SelectionModel_1","BufferRange_1","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","RegExp","_dragScrollAmount","_enabled","_trimListener","_mouseDownTimeStamp","_oldHasSelection","_oldSelectionStart","_oldSelectionEnd","_onLinuxMouseSelection","_onRedrawRequest","_mouseMoveListener","_mouseUpListener","onUserInput","onTrim","_handleTrim","_handleBufferActivate","_model","SelectionModel","_activeSelectionMode","_removeMouseDownListeners","rowsChanged","lineText","startRowEndCol","isLinuxMouseSelection","_refreshAnimationFrame","_refresh","_isClickInSelection","_getMouseBufferCoords","_areCoordsInSelection","isCellInSelection","_selectWordAtCursor","allowWhitespaceOnlySelection","getRangeLength","_selectWordAt","_getMouseEventScrollAmount","terminalHeight","macOptionClickForcesSelection","timeStamp","_handleIncrementalClick","_handleSingleClick","_handleDoubleClick","_handleTripleClick","_addMouseDownListeners","_dragScrollIntervalTimer","_dragScroll","hadSelection","_fireOnSelectionChange","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","altClickMovesCursor","coordinates","moveToCellSequence","_fireEventIfSelectionChanged","activeBuffer","_convertViewportColToCharacterIndex","charIndex","_getWordAt","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","_isCharWordSeparator","getCodePoint","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","wordSeparator","wrappedRange","getWrappedRangeForLine","first","last","ServiceRegistry_1","createDecorator","ColorContrastCache_1","Types_1","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","DEFAULT_OVERVIEW_RULER_BORDER","_colors","_contrastCache","ColorContrastCache","_halfContrastCache","_onChangeColors","selectionBackgroundTransparent","blend","selectionInactiveBackgroundTransparent","opacity","_updateRestoreColors","_setTheme","theme","parseColor","selectionBackground","selectionInactiveBackground","NULL_COLOR","isOpaque","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","extendedAnsi","colorCount","slot","_restoreColor","_restoreColors","cssString","fallback","millis","Promise","resolve","timeout","timer","_token","_isDisposed","_isScheduled","_disposable","context","handle","CircularList","_maxLength","onDeleteEmitter","onDelete","onInsertEmitter","onInsert","onTrimEmitter","_array","Array","_startIndex","_length","maxLength","newMaxLength","newArray","_getCyclicIndex","newLength","recycle","isFull","deleteCount","items","countToTrim","trimStart","shiftElements","expandListBy","$r","$g","$b","$a","toPaddedHex","s","contrastRatio","l1","l2","color_1","toChannels","fgR","fgG","fgB","bgR","bgG","bgB","rgbaColor","factor","css_1","$ctx","$litmusColor","willReadFrequently","globalCompositeOperation","createLinearGradient","rgbaMatch","parseFloat","getImageData","rgb_1","relativeLuminance2","rs","gs","bs","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","InstantiationService_1","LogService_1","BufferService_1","OptionsService_1","CoreService_1","MouseStateService_1","UnicodeV6_1","UnicodeService_1","CharsetService_1","WindowsMode_1","WriteBuffer_1","OscLinkService_1","hasWriteSyncWarnHappened","_onScrollApi","_windowsWrappingHeuristics","_onBinary","_onData","_onLineFeed","_onResize","_onWriteParsed","InstantiationService","OptionsService","LogService","BufferService","CoreService","MouseStateService","unicodeService","UnicodeService","UnicodeV6","IUnicodeService","_charsetService","CharsetService","ICharsetService","OscLinkService","InputHandler","onRequestScrollToBottom","_writeBuffer","handleUserInput","_handleWindowsPtyOptionChange","markRangeDirty","scrollBottom","WriteBuffer","promiseResult","parse","writeSync","maxSubsequentCalls","LogLevelEnum","WARN","flushSync","scroll","eraseAttr","registerEscHandler","registerDcsHandler","registerCsiHandler","registerOscHandler","registerApcHandler","windowsPty","backend","buildNumber","_enableWindowsWrappingHeuristics","disposables","updateWindowsModeWrappedState","final","_disposed","_event","thisArgs","idx","isArray","call","listeners","initial","Charsets_1","EscapeSequenceParser_1","TextDecoder_1","OscParser_1","DcsParser_1","ApcParser_1","Version_1","GLEVEL","paramToWindowOption","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","$temp","getAttrData","_curAttrData","_unicodeService","EscapeSequenceParser","_parseBuffer","Uint32Array","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","_eraseAttrDataInternal","_onRequestBell","_onRequestRefreshRows","_onRequestReset","_onRequestSendFocus","_onRequestSyncScrollBar","onRequestSyncScrollBar","_onRequestWindowsOptionsReport","_onA11yChar","_onA11yTab","_onColor","_onRequestColorSchemeQuery","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","_dirtyRowTracker","DirtyRowTracker","_activeBuffer","setCsiHandlerFallback","params","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","code","setOscHandlerFallback","setDcsHandlerFallback","payload","setApcHandlerFallback","setPrintHandler","print","insertChars","intermediates","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","sendXtVersion","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","selectProtected","requestMode","kittyKeyboardSet","kittyKeyboardQuery","kittyKeyboardPush","kittyKeyboardPop","setExecuteHandler","bell","lineFeed","carriageReturn","backspace","tab","shiftOut","shiftIn","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setHyperlink","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","CHARSETS","selectCharset","screenAlignmentPattern","setErrorHandler","DcsHandler","requestStatusString","_preserveStack","_logSlowResolvingAsync","p","slowTimeout","slowPromise","_res","rej","race","then","err","_getCurrentLinkId","wasPaused","DEBUG","prototype","TRACE","trace","split","clearRange","decode","subarray","viewportEnd","viewportStart","chWidth","charset","curAttr","bufferRow","markDirty","setCellFromCodepoint","precedingJoinState","ch","currentInfo","charProperties","extractWidth","shouldJoin","extractShouldJoin","stringFromCodePoint","addLineToLink","oldRow","oldCol","_eraseAttrData","BufferLine","copyCellsFrom","addCodepointToCell","insertCells","getNullCell","NULL_CELL_CODE","NULL_CELL_WIDTH","ApcHandler","convertEol","_restrictCursor","originalX","nextStop","maxCol","_setCursor","_moveCursor","diffToTop","diffToBottom","param","tabs","prevStop","_eraseInBufferLine","clearWrap","respectProtect","replaceCells","_resetBufferLine","clearMarkers","scrollOnEraseInDisplay","scrollBackSize","isUserScrolling","scrollBottomRowsOffset","scrollBottomAbsolute","deleteCells","joinState","idata","itext","codePointAt","tlength","copyWithin","_is","XTERM_VERSION","term","termName","startsWith","setgCharset","DEFAULT_CHARSET","quirks","allowSetCursorBlink","activeEncoding","mainFlags","altFlags","activateAltBuffer","colorSchemeQuery","activateNormalBuffer","dm","mouseProtocol","mouseEncoding","cs","f","b2v","_updateAttrColor","mode","c1","c2","c3","fromColorRGB","_extractColor","attr","accu","cSpace","advance","hasSubParams","subparams","getSubParams","underlineColor","_processUnderline","updateExtended","_processSGR0","l","kittySgrBoldFaintControl","savedX","savedY","savedCurAttrData","savedCharset","isBlinking","second","savedCharsets","charsets","savedGlevel","glevel","savedOriginMode","savedWraparoundMode","slots","spec","exec","isValidColorIndex","_createHyperlink","_finishHyperlink","parsedParams","idParamIndex","findIndex","registerLink","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","level","yOffset","markAllDirty","isProtected","block","bar","stack","altStack","mainStack","arg","_disposables","o","_value","_data","third","fourth","_targetWindow","majorVersion","isNode","process","isLegacyEdge","_getKey","logService","_insertedValues","_isFlushingInserted","_deletedIndices","_isFlushingDeleted","_flushInsertedTask","IdleTaskQueue","_flushDeletedTask","insert","_flushCleanupDeleted","enqueue","_flushInserted","sortedAddedValues","sortedAddedValuesIndex","arrayIndex","newArrayIndex","_flushCleanupInserted","_search","_flushDeleted","sortedDeletedIndices","sortedDeletedIndicesIndex","getKeyIterator","forEachByKey","mid","midKey","StringBuilder","_chunks","append","chunk","_limit","_builder","limit","TaskQueue","_tasks","_i","task","_idleCallback","_cancelCallback","_requestCallback","_process","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","PriorityTaskQueue","_createDeadline","requestIdleCallback","cancelIdleCallback","_queue","lastChar","CHAR_DATA_CODE_INDEX","WHITESPACE_CELL_CODE","ExtendedAttrs","newObj","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","isEmpty","getUnderlineColorMode","isUnderlineColorPalette","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","_urlId","_ext","val","CircularList_1","BufferReflow_1","Marker_1","MAX_BUFFER_SIZE","Buffer","_hasScrollback","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_WIDTH","_isClearing","_memoryCleanupPosition","_cols","_rows","_getCorrectBufferLength","setupTabStops","_memoryCleanupQueue","getWhitespaceCell","relativeY","correctBufferLength","scrollback","fillViewportRows","fillAttr","newCols","newRows","nullCell","dirtyMemoryLines","addToY","amountToTrim","_isReflowEnabled","_reflow","_batchedMemoryCleanup","normalRun","counted","cleanupMemory","_reflowLarger","_reflowSmaller","reflowCursorLine","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","tabStopWidth","Marker","_removeMarker","$startIndex","$workCell","$extended","fillCellData","_combined","_extendedAttrs","_cacheValid","_cache","_cacheTrimmed","CHAR_DATA_ATTR_INDEX","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","codePoint","attrs","$idx","byteLength","uint32Cells","extKeys","copyFrom","blank","_copySparseMapsFrom","src","applyInReverse","srcData","_copyCellMapsFrom","outColumns","isCanonical","trimEnd","cellContents","srcStart","bufferCols","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","Buffer_1","BufferSet","_normalBuffer","_altBuffer","_onBufferActivate","_normal","_alt","inactiveBuffer","obj","combined","attributesEquals","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","_id","_nextId","_onDispose","h","k","q","u","A","B","C","R","Q","K","Y","E","Z","H","_","applicationCursorMode","modifiers","keyMapping","KEYCODE_KEY_MAPPINGS","keyString","toUpperCase","toLowerCase","_functionalKeyCodes","Escape","Enter","Tab","Backspace","CapsLock","ScrollLock","NumLock","PrintScreen","Pause","ContextMenu","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","F25","KP_0","KP_1","KP_2","KP_3","KP_4","KP_5","KP_6","KP_7","KP_8","KP_9","KP_Decimal","KP_Divide","KP_Multiply","KP_Subtract","KP_Add","KP_Enter","KP_Equal","ShiftLeft","ShiftRight","ControlLeft","ControlRight","AltLeft","AltRight","MetaLeft","MetaRight","MediaPlayPause","MediaStop","MediaTrackNext","MediaTrackPrevious","AudioVolumeDown","AudioVolumeUp","AudioVolumeMute","_csiTildeKeys","Insert","Delete","PageUp","PageDown","F5","F6","F7","F8","F9","F10","F11","F12","_csiLetterKeys","ArrowUp","ArrowDown","ArrowRight","ArrowLeft","Home","End","_ss3FunctionKeys","F1","F2","F3","F4","_getNumpadKeyCode","suffix","_getModifierKeyCode","_encodeModifiers","mods","_getKeyCode","macOptionAsAlt","numpadCode","modifierCode","funcCode","digit","_isModifierKey","_isLockKey","_buildCsiLetterSequence","letter","reportEventTypes","needsEventType","seq","_buildSs3Sequence","_buildCsiTildeSequence","number","_buildCsiUSequence","isFunc","isMod","shiftedKey","textCode","csiLetter","ss3Letter","tildeCode","specialKey","legacyByte","_interim","startPos","interim","Uint8Array","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","BMP_COMBINING","HIGH_COMBINING","table","version","wcwidth","num","ucs","bisearch","preceding","createPropertyValue","_codeToVk","KeyA","KeyB","KeyC","KeyD","KeyE","KeyF","KeyG","KeyH","KeyI","KeyJ","KeyK","KeyL","KeyM","KeyN","KeyO","KeyP","KeyQ","KeyR","KeyS","KeyT","KeyU","KeyV","KeyW","KeyX","KeyY","KeyZ","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","Numpad0","Numpad1","Numpad2","Numpad3","Numpad4","Numpad5","Numpad6","Numpad7","Numpad8","Numpad9","NumpadMultiply","NumpadAdd","NumpadSeparator","NumpadSubtract","NumpadDecimal","NumpadDivide","NumpadEnter","Space","Semicolon","Equal","Comma","Minus","Period","Slash","Backquote","BracketLeft","Backslash","BracketRight","Quote","IntlBackslash","_codeToScancode","_enhancedKeyCodes","_keyToControlChar","_getVirtualKeyCode","vk","_getScanCode","_getUnicodeChar","controlChar","_getControlKeyState","isKeyDown","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","_didUserInput","_innerWriteTimer","didProcess","_innerWrite","_scheduleInnerWrite","lastTime","continuation","catch","low","RGB_REX","base","HASH_REX","adv","bits","pad","s2","StringBuilder_1","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","registerHandler","handlerList","handlerIndex","clearHandler","setHandlerFallback","put","utf32ToString","success","handlerResult","LimitedStringBuilder","_payloadLimit","_hitLimit","ret","res","Params_1","unhook","hook","EMPTY_PARAMS","Params","addParam","_params","TransitionTable","Uint16Array","setDefault","addMany","codes","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","unused","PRINTABLES","EXECUTABLES","states","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_executeHandlersArr","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","DcsParser","_apcParser","ApcParser","_errorHandler","_identifier","finalRange","intermediate","finalCode","reverse","clearPrintHandler","clearEscHandler","clearExecuteHandler","clearCsiHandler","clearDcsHandler","clearOscHandler","clearApcHandler","clearErrorHandler","resetZdm","csiDone","addDigit","addSubParam","l4","collect","abort","handlersEsc","jj","_put","fromArray","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","_rejectDigits","_rejectSubDigits","_digitIsSub","newParams","getSubParamsAll","cur","_addons","instance","loadedAddon","_wrappedAddonDispose","BufferLineApiView_1","init","baseY","getLine","BufferLineApiView","_line","getCell","startColumn","endColumn","BufferApiView_1","_onBufferChange","onBufferChange","BufferApiView","_alternate","alternate","addCsiHandler","addDcsHandler","addEscHandler","addOscHandler","provider","versions","activeVersion","BufferSet_1","colsChanged","_cachedBlankLine","topRow","bottomRow","willBufferBeTrimmed","oldYdisp","_charsets","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_onRequestScrollToBottom","showCursorImmediately","structuredClone","SortedList_1","$xmin","$xmax","_decorations","_lineCache","DecorationLineCache","_onDecorationRegistered","_onDecorationRemoved","SortedList","attachToBufferLines","Decoration","markerDispose","getDecorationsAtCell","bucket","getDecorationsOnLine","_decorationsByLine","_bufferLineListeners","_lineIndexSyncTimer","MicrotaskTimer","_lineIndexSyncCallbacks","_addToLineBuckets","_removeFromLineBuckets","_handleBufferLinesTrim","_handleBufferLinesInsert","_handleBufferLinesDelete","_getDecorationHeight","_indexedStartLine","_reindexDecoration","_scheduleLineIndexSync","callbacks","newMap","_mergeLineBucket","_applyBufferLinesInsert","_applyBufferLinesDelete","existing","spanCrossers","deleteEnd","toReindex","_cachedBg","_cachedFg","foregroundColor","ServiceCollection","_entries","service","_services","getService","ctor","serviceDependencies","getServiceDependencies","serviceArgs","dependency","firstServiceArgPos","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_logLevel","_updateLogLevel","_evalLazyOptionalParams","optionalParams","_log","message","logger","log","DEFAULT_PROTOCOLS","NONE","restrict","X10","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","SGR","SGR_PIXELS","_protocols","_encodings","_activeProtocol","_activeEncoding","_onProtocolChange","addProtocol","addEncoding","encoding","_customWheelEventHandler","DEFAULT_OPTIONS","rescaleOverlappingGlyphs","FONT_WEIGHT_OPTIONS","_onOptionChange","defaultOptions","_sanitizeAndValidateOption","_setupOptions","eventKey","isCursorStyle","_entriesWithId","_dataByLinkId","_removeMarkerFromLink","castData","_getEntryIdKey","every","linkData","serviceRegistry","decorator","arguments","storeServiceDependency","_providers","_onChange","onChange","extractCharKind","_activeProvider","getStringCellWidth","precedingInfo","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} +-{"version":3,"file":"xterm.js","mappings":"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AAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,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","sources":["webpack://@xterm/xterm/webpack/universalModuleDefinition","webpack://@xterm/xterm/./src/browser/AccessibilityManager.ts","webpack://@xterm/xterm/./src/browser/Clipboard.ts","webpack://@xterm/xterm/./src/browser/ColorContrastCache.ts","webpack://@xterm/xterm/./src/browser/CoreBrowserTerminal.ts","webpack://@xterm/xterm/./src/browser/Dom.ts","webpack://@xterm/xterm/./src/browser/Linkifier.ts","webpack://@xterm/xterm/./src/browser/LocalizableStrings.ts","webpack://@xterm/xterm/./src/browser/OscLinkProvider.ts","webpack://@xterm/xterm/./src/browser/RenderDebouncer.ts","webpack://@xterm/xterm/./src/browser/TimeBasedDebouncer.ts","webpack://@xterm/xterm/./src/browser/Types.ts","webpack://@xterm/xterm/./src/browser/Viewport.ts","webpack://@xterm/xterm/./src/browser/decorations/BufferDecorationRenderer.ts","webpack://@xterm/xterm/./src/browser/decorations/ColorZoneStore.ts","webpack://@xterm/xterm/./src/browser/decorations/OverviewRulerRenderer.ts","webpack://@xterm/xterm/./src/browser/input/CompositionHelper.ts","webpack://@xterm/xterm/./src/browser/input/Mouse.ts","webpack://@xterm/xterm/./src/browser/input/MoveToCell.ts","webpack://@xterm/xterm/./src/browser/public/Terminal.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRenderer.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRendererRowFactory.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/WidthCache.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/Constants.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/RendererUtils.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/SelectionRenderModel.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://@xterm/xterm/./src/browser/scrollable/abstractScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/fastDomNode.ts","webpack://@xterm/xterm/./src/browser/scrollable/globalPointerMoveMonitor.ts","webpack://@xterm/xterm/./src/browser/scrollable/horizontalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/mouseEvent.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollable.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollableElement.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarArrow.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarState.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarVisibilityController.ts","webpack://@xterm/xterm/./src/browser/scrollable/touch.ts","webpack://@xterm/xterm/./src/browser/scrollable/verticalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/widget.ts","webpack://@xterm/xterm/./src/browser/selection/SelectionModel.ts","webpack://@xterm/xterm/./src/browser/services/CharSizeService.ts","webpack://@xterm/xterm/./src/browser/services/CharacterJoinerService.ts","webpack://@xterm/xterm/./src/browser/services/CoreBrowserService.ts","webpack://@xterm/xterm/./src/browser/services/KeyboardService.ts","webpack://@xterm/xterm/./src/browser/services/LinkProviderService.ts","webpack://@xterm/xterm/./src/browser/services/MouseCoordsService.ts","webpack://@xterm/xterm/./src/browser/services/MouseService.ts","webpack://@xterm/xterm/./src/browser/services/RenderService.ts","webpack://@xterm/xterm/./src/browser/services/SelectionService.ts","webpack://@xterm/xterm/./src/browser/services/Services.ts","webpack://@xterm/xterm/./src/browser/services/ThemeService.ts","webpack://@xterm/xterm/./src/common/Async.ts","webpack://@xterm/xterm/./src/common/CircularList.ts","webpack://@xterm/xterm/./src/common/Color.ts","webpack://@xterm/xterm/./src/common/CoreTerminal.ts","webpack://@xterm/xterm/./src/common/Event.ts","webpack://@xterm/xterm/./src/common/InputHandler.ts","webpack://@xterm/xterm/./src/common/Lifecycle.ts","webpack://@xterm/xterm/./src/common/MultiKeyMap.ts","webpack://@xterm/xterm/./src/common/Platform.ts","webpack://@xterm/xterm/./src/common/SortedList.ts","webpack://@xterm/xterm/./src/common/StringBuilder.ts","webpack://@xterm/xterm/./src/common/TaskQueue.ts","webpack://@xterm/xterm/./src/common/Version.ts","webpack://@xterm/xterm/./src/common/WindowsMode.ts","webpack://@xterm/xterm/./src/common/buffer/AttributeData.ts","webpack://@xterm/xterm/./src/common/buffer/Buffer.ts","webpack://@xterm/xterm/./src/common/buffer/BufferLine.ts","webpack://@xterm/xterm/./src/common/buffer/BufferRange.ts","webpack://@xterm/xterm/./src/common/buffer/BufferReflow.ts","webpack://@xterm/xterm/./src/common/buffer/BufferSet.ts","webpack://@xterm/xterm/./src/common/buffer/CellData.ts","webpack://@xterm/xterm/./src/common/buffer/Constants.ts","webpack://@xterm/xterm/./src/common/buffer/Marker.ts","webpack://@xterm/xterm/./src/common/data/Charsets.ts","webpack://@xterm/xterm/./src/common/input/Keyboard.ts","webpack://@xterm/xterm/./src/common/input/KittyKeyboard.ts","webpack://@xterm/xterm/./src/common/input/TextDecoder.ts","webpack://@xterm/xterm/./src/common/input/UnicodeV6.ts","webpack://@xterm/xterm/./src/common/input/Win32InputMode.ts","webpack://@xterm/xterm/./src/common/input/WriteBuffer.ts","webpack://@xterm/xterm/./src/common/input/XParseColor.ts","webpack://@xterm/xterm/./src/common/parser/ApcParser.ts","webpack://@xterm/xterm/./src/common/parser/DcsParser.ts","webpack://@xterm/xterm/./src/common/parser/EscapeSequenceParser.ts","webpack://@xterm/xterm/./src/common/parser/OscParser.ts","webpack://@xterm/xterm/./src/common/parser/Params.ts","webpack://@xterm/xterm/./src/common/public/AddonManager.ts","webpack://@xterm/xterm/./src/common/public/BufferApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferLineApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferNamespaceApi.ts","webpack://@xterm/xterm/./src/common/public/ParserApi.ts","webpack://@xterm/xterm/./src/common/public/UnicodeApi.ts","webpack://@xterm/xterm/./src/common/services/BufferService.ts","webpack://@xterm/xterm/./src/common/services/CharsetService.ts","webpack://@xterm/xterm/./src/common/services/CoreService.ts","webpack://@xterm/xterm/./src/common/services/DecorationService.ts","webpack://@xterm/xterm/./src/common/services/InstantiationService.ts","webpack://@xterm/xterm/./src/common/services/LogService.ts","webpack://@xterm/xterm/./src/common/services/MouseStateService.ts","webpack://@xterm/xterm/./src/common/services/OptionsService.ts","webpack://@xterm/xterm/./src/common/services/OscLinkService.ts","webpack://@xterm/xterm/./src/common/services/ServiceRegistry.ts","webpack://@xterm/xterm/./src/common/services/Services.ts","webpack://@xterm/xterm/./src/common/services/UnicodeService.ts","webpack://@xterm/xterm/webpack/bootstrap","webpack://@xterm/xterm/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (␛).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', () => this._compositionHelper!.compositionend()));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n this.coreService.triggerDataEvent(key, true);\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n","/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService } from '../../common/services/Services';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private _isSendingComposition: boolean;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n this._isComposing = false;\n this._isSendingComposition = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._isComposing = true;\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._compositionView.textContent = '';\n this._dataAlreadySent = '';\n this._compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n // Mark text as LTR, direction=rtl is used in CSS so the end of the text is followed for long\n // compositions\n this._compositionView.textContent = `\\u200E${ev.data}\\u200E`;\n this.updateCompositionElements();\n setTimeout(() => {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max( this._compositionPosition.start, end);\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(): void {\n this._finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._isComposing || this._isSendingComposition) {\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean): void {\n this._compositionView.classList.remove('active');\n this._isComposing = false;\n\n if (!waitForPropagation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this._isSendingComposition = false;\n const input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);\n this._coreService.triggerDataEvent(input, true);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n };\n const currentCompositionSuffix = this._compositionSuffix;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this._isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this._isSendingComposition) {\n this._isSendingComposition = false;\n let input;\n // Add length of data already sent due to keydown event,\n // otherwise input characters can be duplicated. (Issue #3191)\n currentCompositionPosition.start += this._dataAlreadySent.length;\n if (this._isComposing) {\n // Use the start position of the new composition to get the string\n // if a new composition has started.\n input = this._textarea.value.substring(currentCompositionPosition.start, this._compositionPosition.start);\n } else {\n // Keep support for non-composition characters typed immediately after composition end\n // while avoiding re-sending the trailing text that was already present\n // before composition started.\n const value = this._textarea.value;\n const valueEnd = currentCompositionSuffix.length > 0 && value.endsWith(currentCompositionSuffix)\n ? value.length - currentCompositionSuffix.length\n : value.length;\n input = value.substring(currentCompositionPosition.start, Math.max(currentCompositionPosition.start, valueEnd));\n }\n if (input.length > 0) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n if (!this._isComposing) {\n return;\n }\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n this._compositionView.style.direction = 'rtl';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this._compositionView.getBoundingClientRect();\n this._textarea.style.left = cursorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(compositionViewBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(compositionViewBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n","/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nclass WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n","import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices: number[] = [];\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.length = 0;\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n if (this._array.length === 0) {\n return false;\n }\n const key = this._getKey(value);\n if (key === undefined) {\n return false;\n }\n i = this._search(key);\n if (i === -1) {\n return false;\n }\n if (this._getKey(this._array[i]) !== key) {\n return false;\n }\n do {\n if (this._array[i] === value) {\n if (this._deletedIndices.length === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.push(i);\n return true;\n }\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n return false;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const sortedDeletedIndices = this._deletedIndices.sort((a, b) => a - b);\n let sortedDeletedIndicesIndex = 0;\n const newArray = new Array(this._array.length - sortedDeletedIndices.length);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (sortedDeletedIndices[sortedDeletedIndicesIndex] === i) {\n sortedDeletedIndicesIndex++;\n } else {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._deletedIndices.length = 0;\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.length > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n²) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.304';\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n cell.extended = this.getExtended(index);\n return cell;\n }\n\n public getExtended(index: number): IExtendedAttrs {\n $startIndex = index * Constants.CELL_INDICIES;\n if (this._data[$startIndex + Cell.BG] & BgFlags.HAS_EXTENDED) {\n return this._extendedAttrs[index]!;\n }\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n $extended.payload = undefined;\n return $extended;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u2409', // '␉' (HT)\n 'c': '\\u240c', // '␌' (FF)\n 'd': '\\u240d', // '␍' (CR)\n 'e': '\\u240a', // '␊' (LF)\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '␤' (NL)\n 'i': '\\u240b', // '␋' (VT)\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec § \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" — i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(6081);\n"],"names":["root","factory","exports","module","define","amd","a","i","globalThis","Strings","__importStar","__webpack_require__","TimeBasedDebouncer_1","Lifecycle_1","Services_1","Services_2","Dom_1","AccessibilityManager","Disposable","constructor","_terminal","instantiationService","_coreBrowserService","_renderService","super","this","_rowColumns","WeakMap","_liveRegionLineCount","_charsToConsume","_charsToAnnounce","doc","mainDocument","_accessibilityContainer","createElement","classList","add","_rowContainer","setAttribute","_rowElements","rows","_createAccessibilityTreeNode","appendChild","_topBoundaryFocusListener","e","_handleBoundaryFocus","_bottomBoundaryFocusListener","addEventListener","length","_liveRegion","_liveRegionDebouncer","_register","TimeBasedDebouncer","_renderRows","bind","element","Error","insertAdjacentElement","onResize","_handleResize","onRender","_refreshRows","start","end","onScroll","onA11yChar","char","_handleChar","onLineFeed","onA11yTab","spaceCount","_handleTab","onKey","_handleKey","key","onBlur","_clearLiveRegion","onDimensionsChange","_refreshRowsDimensions","addDisposableListener","_handleSelectionChange","onDprChange","toDisposable","remove","shift","textContent","tooMuchOutput","get","keyChar","test","push","refresh","buffer","setSize","lines","toString","line","ydisp","columns","lineData","translateToString","undefined","posInSet","set","_alignRowWidth","_announceCharacters","position","boundaryElement","target","beforeBoundaryElement","getAttribute","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","removeChild","removeEventListener","newElement","unshift","scrollLines","focus","preventDefault","stopImmediatePropagation","selection","getSelection","isCollapsed","contains","anchorNode","clearSelection","focusNode","console","error","begin","node","offset","anchorOffset","focusOffset","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_FOLLOWING","childNodes","lastRowElement","slice","toRowColumn","rowElement","Text","parentNode","row","parseInt","isNaN","warn","column","cols","beginRowColumn","endRowColumn","select","children","tabIndex","_refreshRowDimensions","dimensions","css","cell","height","Object","assign","style","width","canvas","fontSize","options","transform","getBoundingClientRect","lastColumn","targetWidth","__decorate","__param","IInstantiationService","ICoreBrowserService","IRenderService","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","paste","textarea","coreService","optionsService","decPrivateModes","rawOptions","ignoreBracketedPasteMode","triggerDataEvent","value","moveTextAreaUnderMouseCursor","ev","screenElement","pos","left","clientX","top","clientY","zIndex","selectionService","clipboardData","setData","selectionText","stopPropagation","getData","shouldSelectWord","rightClickSelect","MultiKeyMap_1","_color","TwoKeyMap","_css","setCss","bg","fg","getCss","setColor","getColor","clear","Clipboard_1","OscLinkProvider_1","Viewport_1","BufferDecorationRenderer_1","OverviewRulerRenderer_1","CompositionHelper_1","DomRenderer_1","CharSizeService_1","CharacterJoinerService_1","CoreBrowserService_1","LinkProviderService_1","MouseCoordsService_1","MouseService_1","RenderService_1","SelectionService_1","ThemeService_1","KeyboardService_1","Color_1","CoreTerminal_1","Browser","BufferLine_1","XParseColor_1","DecorationService_1","InputHandler_1","AccessibilityManager_1","Linkifier_1","Event_1","CoreBrowserTerminal","CoreTerminal","linkifier","_linkifier","onFocus","_onFocus","event","_onBlur","_onA11yCharEmitter","_onA11yTabEmitter","onWillOpen","_onWillOpen","device","MutableDisposable","browser","_keyDownHandled","_keyDownSeen","_keyPressHandled","_unprocessedDeadKey","_accessibilityManager","_onCursorMove","Emitter","onCursorMove","_onKey","_onSelectionChange","onSelectionChange","_onTitleChange","onTitleChange","_onBell","onBell","_onDimensionsChange","_setup","_decorationService","_instantiationService","createInstance","DecorationService","setService","IDecorationService","_keyboardService","KeyboardService","IKeyboardService","_linkProviderService","LinkProviderService","ILinkProviderService","registerLinkProvider","OscLinkProvider","_inputHandler","onRequestBell","fire","onRequestRefreshRows","onRequestSendFocus","_reportFocus","onRequestReset","reset","onRequestWindowsOptionsReport","type","_reportWindowsOptions","onColor","_handleColorEvent","EventUtils","forward","_bufferService","_afterResize","_customKeyEventHandler","_themeService","req","acc","ident","index","colorRgb","color","toColorRGB","colors","ansi","toRgbString","modifyColors","channels","toColor","narrowedAcc","restoreColor","_reportColorScheme","colorSchemeMode","rgb","relativeLuminance","background","rgba","foreground","buffers","active","preventScroll","_handleScreenReaderModeOptionChange","_handleTextAreaFocus","sendFocus","_showCursor","blur","_handleTextAreaBlur","y","_syncTextArea","isCursorInViewport","_compositionHelper","isComposing","cursorY","ybase","bufferLine","cursorX","Math","min","x","cellHeight","getWidth","cellWidth","cursorTop","cursorLeft","lineHeight","_initGlobal","_bindKeys","hasSelection","copyHandler","_selectionService","pasteHandlerWrapper","handlePasteEvent","isFirefox","button","rightClickHandler","rightClickSelectsWord","isLinux","_keyUp","_keyDown","_keyPress","compositionstart","updateCompositionElements","compositionupdate","compositionend","_inputEvent","open","parent","isConnected","_logService","debug","ownerDocument","defaultView","window","_document","documentOverride","Document","dir","toggle","allowTransparency","onSpecificOptionChange","fragment","createDocumentFragment","_viewportElement","updateCursorStyle","_helperContainer","promptLabel","isChromeOS","readOnly","disableStdin","CoreBrowserService","document","_charSizeService","CharSizeService","ICharSizeService","ThemeService","IThemeService","onRequestColorSchemeQuery","onChangeColors","colorSchemeUpdates","_characterJoinerService","CharacterJoinerService","ICharacterJoinerService","RenderService","onRenderedViewportChange","_onRender","resize","_compositionView","CompositionHelper","_mouseCoordsService","MouseCoordsService","IMouseCoordsService","Linkifier","hasRenderer","setRenderer","_createRenderer","handleCursorMove","handleResize","handleBlur","handleFocus","_viewport","Viewport","onRequestScrollLines","SelectionService","ISelectionService","_mouseService","MouseService","IMouseService","amount","suppressScrollEvent","onRequestRedraw","handleSelectionChanged","columnSelectMode","onLinuxMouseSelection","any","_onScroll","queueSync","BufferDecorationRenderer","handleMouseDown","mouseStateService","areMouseEventsActive","mouseEventsRequireAlt","disable","enable","screenReaderMode","showScrollbar","scrollbar","overviewRulerWidth","_overviewRulerRenderer","OverviewRulerRenderer","shouldShow","measure","bindMouse","handleTouchScroll","disposable","DomRenderer","sync","refreshRows","shouldColumnSelect","isCursorInitialized","disp","scrollPages","pageCount","scrollToTop","scrollToBottom","disableSmoothScroll","scrollToLine","scrollAmount","data","attachCustomKeyEventHandler","customKeyEventHandler","attachCustomWheelEventHandler","customWheelEventHandler","setCustomWheelEventHandler","linkProvider","registerCharacterJoiner","handler","joinerId","register","deregisterCharacterJoiner","deregister","markers","registerMarker","cursorYOffset","addMarker","registerDecoration","decorationOptions","setSelection","getSelectionPosition","selectionStart","selectionEnd","selectAll","selectLines","shouldIgnoreComposition","isMac","macOptionIsMeta","altKey","keydown","scrollOnUserInput","result","evaluateKeyDown","scrollCount","_isThirdLevelShift","cancel","useKitty","useWin32InputMode","ctrlKey","metaKey","charCodeAt","wasModifierOnly","wasModifierKeyOnlyEvent","domEvent","thirdLevelKey","isWindows","getModifierState","keyCode","evaluateKeyUp","charCode","which","String","fromCharCode","inputType","composed","hasValidSize","clearAllMarkers","getBlankLine","DEFAULT_ATTR_DATA","clearTextureAtlas","WindowsOptionsReportType","GET_WIN_SIZE_PIXELS","canvasWidth","toFixed","canvasHeight","GET_CELL_SIZE_PIXELS","useCapture","domNode","bb","win","getWindow","scrollX","scrollY","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","sort","execute","animationFrameRunner","Async_1","candidateNode","candidateEvent","view","DomListener","_node","_type","_handler","_options","dispose","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","b","animationFrameState","Map","WindowIntervalTimer","IntervalTimer","_defaultTarget","cancelAndSet","interval","currentLink","_currentLink","_element","_linkCacheDisposables","_isMouseOut","_wasResized","_activeLine","_onShowLinkUnderline","onShowLinkUnderline","_onHideLinkUnderline","onHideLinkUnderline","_lastMouseEvent","_activeProviderReplies","_clearCurrentLink","_handleMouseMove","_handleMouseDown","_handleMouseUp","_positionFromMouseEvent","composedPath","_lastBufferCell","_handleHover","_askForLink","_linkAtPosition","link","useLineCache","forEach","reply","linkWithState","linkProvided","linkProviders","entries","existingReply","_checkLinkProviderResult","provideLinks","links","linksWithState","map","size","_removeIntersectingLinks","replies","occupiedCells","Set","providerReply","startX","range","endX","has","splice","hasLinkBefore","j","linkAtPosition","find","_handleNewLink","_mouseDownLink","activate","startRow","endRow","_linkLeave","decorations","underline","pointerCursor","isHovered","_linkHover","defineProperties","v","_fireUnderlineEvent","hover","showEvent","scrollOffset","_createLinkUnderlineEvent","leave","lower","upper","coords","getCoords","x1","y1","x2","y2","IBufferService","promptLabelInternal","tooMuchOutputInternal","CellData_1","_optionsService","_oscLinkService","_workCell","CellData","callback","linkHandler","lineLength","getTrimmedLength","currentLinkId","currentStart","finishLink","hasContent","loadCell","hasExtendedAttrs","extended","urlId","getLinkData","uri","_getRangeWithLineWrap","ignoreLink","allowNonHttpProtocols","parsed","URL","includes","protocol","defaultActivate","linkId","startY","finalStartX","endY","finalEndX","currentLine","isWrapped","previousLine","previousLineLength","_hasUrlId","previousStartX","nextLine","nextLineLength","nextEndX","confirm","newWindow","opener","location","href","IOptionsService","IOscLinkService","_renderCallback","_refreshCallbacks","_animationFrame","cancelAnimationFrame","addRefreshCallback","_innerRefresh","rowStart","rowEnd","rowCount","_rowCount","_rowStart","_rowEnd","max","_runRefreshCallbacks","_debounceThresholdMS","_lastRefreshMs","_additionalRefreshRequested","_refreshTimeoutID","clearTimeout","refreshRequestTime","performance","now","elapsed","waitPeriodBeforeTrailingRefresh","setTimeout","DEFAULT_ANSI_COLORS","freeze","r","g","toCss","toRgba","c","scrollableElement_1","scrollable_1","coreBrowserService","_coreService","themeService","_onRequestScrollLines","_isSyncing","_isHandlingScroll","_suppressOnScrollHandler","_needsSyncOnRender","scrollable","Scrollable","forceIntegerValues","smoothScrollDuration","scheduleAtNextAnimationFrame","cb","setSmoothScrollDuration","_scrollableElement","SmoothScrollableElement","vertical","horizontal","useShadows","mouseWheelSmoothScroll","verticalHasArrows","showArrows","_getChangeOptions","onMultipleOptionChange","updateOptions","onProtocolChange","handleMouseWheel","setScrollDimensions","scrollHeight","runAndSubscribe","backgroundColor","getDomNode","_styleElement","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","join","onBufferActivate","_latestYDisp","_sync","_handleScroll","getScrollPosition","setScrollPosition","reuseAnimation","scrollTop","verticalScrollbarSize","mouseWheelScrollSensitivity","scrollSensitivity","fastScrollSensitivity","_queuedAnimationFrame","synchronizedOutput","newRow","round","diff","translationY","ICoreService","IMouseStateService","_screenElement","_decorationElements","_altBufferIsActive","_dimensionsChanged","_container","_doRefreshDecorations","_queueRefresh","alt","onDecorationRegistered","onDecorationRemoved","decoration","_removeDecoration","_renderDecoration","_refreshStyle","_refreshXPosition","_createElement","layer","marker","display","onRenderEmitter","onDispose","delete","anchor","right","_zones","_zonePool","_zonePoolIndex","_linePadding","full","center","zones","addDecoration","overviewRulerOptions","z","_lineIntersectsZone","_lineAdjacentToZone","_addLineToZone","startBufferLine","endBufferLine","setPadding","padding","zone","ColorZoneStore_1","drawHeight","drawWidth","drawX","_width","_colorZoneStore","ColorZoneStore","_shouldUpdateDimensions","_shouldUpdateAnchor","_lastKnownBufferLength","_canvas","_refreshCanvasDimensions","parentElement","insertBefore","ctx","getContext","_ctx","normal","_refreshDrawHeightConstants","_refreshColorZonePadding","_refreshDrawConstants","outerWidth","floor","innerWidth","ceil","dpr","pixelsPerLine","nonFullHeight","_store","isDisposed","cssCanvasHeight","deviceCanvasHeight","_refreshDecorations","clearRect","lineWidth","_renderRulerOutline","_renderColorZone","fillStyle","overviewRulerBorder","fillRect","overviewRuler","showTopBorder","showBottomBorder","updateCanvasDimensions","updateAnchor","_isComposing","_textarea","_isSendingComposition","_compositionPosition","_compositionSuffix","_dataAlreadySent","substring","_finalizeComposition","_handleAnyTextareaChanges","waitForPropagation","currentCompositionPosition","currentCompositionSuffix","input","valueEnd","endsWith","_textareaChangeTimer","oldValue","newValue","dontRecurse","fontFamily","maxWidth","overflow","direction","compositionViewBounds","getCoordsRelativeToElement","rect","elementStyle","getComputedStyle","leftPadding","getPropertyValue","topPadding","colCount","hasValidCharSize","cssCellWidth","cssCellHeight","isSelection","moveToRequestedRow","targetY","bufferService","applicationCursor","wrappedRowsForRow","rowsToMove","abs","wrappedRows","verticalDirection","wrappedRowsCount","repeat","sequence","currentRow","lineWraps","startCol","endCol","currentCol","bufferStr","translateBufferLineToString","count","str","rpt","targetX","hasScrollback","resetStartingRow","horizontalDirection","moveToRequestedCol","rowDifference","currX","colsFromRowEnd","CoreBrowserTerminal_1","AddonManager_1","BufferNamespaceApi_1","ParserApi_1","UnicodeApi_1","CONSTRUCTOR_ONLY_OPTIONS","$value","Terminal","_core","_addonManager","AddonManager","_publicOptions","getter","propName","setter","_checkReadonlyOptions","desc","defineProperty","_checkProposedApi","allowProposedApi","onBinary","onData","onWriteParsed","parser","_parser","ParserApi","unicode","UnicodeApi","_buffer","BufferNamespaceApi","modes","m","mouseTrackingMode","activeProtocol","applicationCursorKeysMode","applicationCursorKeys","applicationKeypadMode","applicationKeypad","insertMode","originMode","origin","reverseWraparoundMode","reverseWraparound","sendFocusMode","showCursor","isCursorHidden","synchronizedOutputMode","win32InputMode","wraparoundMode","wraparound","wasUserInput","_verifyIntegers","_verifyPositiveIntegers","write","writeln","loadAddon","addon","strings","values","Infinity","DomRendererRowFactory_1","WidthCache_1","Constants_1","RendererUtils_1","SelectionRenderModel_1","TextBlinkStateManager_1","nextTerminalId","_linkifier2","_terminalClass","_selectionRenderModel","createSelectionRenderModel","_lastSelectionColumnMode","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_onRequestRedraw","_refreshRowElements","_selectionContainer","createRenderDimensions","_updateDimensions","onOptionChange","_handleOptionsChanged","_injectCss","_rowFactory","DomRendererRowFactory","_handleLinkHover","_handleLinkLeave","_cursorBlinkStateManager","CursorBlinkStateManager","restartBlinkAnimation","_textBlinkStateManager","TextBlinkStateManager","_widthCache","_themeStyleElement","_dimensionsStyleElement","WidthCache","setFont","fontWeight","fontWeightBold","_setDefaultSpacing","letterSpacing","styles","_terminalSelector","multiplyOpacity","blinkAnimationUnderlineId","blinkAnimationBarId","blinkAnimationBlockId","cursor","cursorAccent","cursorWidth","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","INVERTED_DEFAULT_COLOR","opaque","spacing","defaultSpacing","handleDevicePixelRatioChange","handleCharSizeChanged","pause","renderRows","resume","handleViewportVisibilityChange","isVisible","setViewportVisible","replaceChildren","oldViewportStart","oldViewportEnd","_lastSelectionStart","_lastSelectionEnd","update","viewportCappedStartRow","viewportCappedEndRow","newViewportStart","newViewportEnd","viewportStartRow","viewportEndRow","documentFragment","isXFlipped","_createSelectionElement","middleRowsCount","finalEndCol","renderStartRow","renderEndRow","cursorViewportRow","colStart","colEnd","fill","setNeedsBlinkInViewport","cursorAbsoluteY","cursorBlink","cursorStyle","cursorInactiveStyle","rowInfo","hasBlinkingCells","createRow","isBlinkOn","_setRowBlinkState","_updateTextBlinkState","_setCellUnderline","enabled","maxY","bufferline","_isIdlePaused","isFocused","_resetIdleTimer","_clearIdleTimer","_idleTimeout","_stopBlinkingDueToIdle","Constants_2","AttributeData_1","_columnSelectMode","_selectionStart","_selectionEnd","isCursorRow","blinkOn","widthCache","linkStart","linkEnd","elements","joinedRanges","getJoinedCharacters","charElement","getNoBgTrimmedLength","cellAmount","oldBg","oldFg","oldExt","oldLinkHover","oldSpacing","oldIsInSelection","skipJoinedCheckUntilX","classes","hasHover","isJoined","isValidJoinRange","lastCharX","firstSelectionState","_isCellInSelection","JoinedCellData","isInSelection","isCursorCell","isLinkHover","isBlink","isDecorated","forEachDecorationAtCell","d","chars","getChars","WHITESPACE_CELL_CHAR","isUnderline","isOverline","isBold","isItalic","selectionForeground","ext","isInvisible","isDim","underlineStyle","isUnderlineColorDefault","isUnderlineColorRGB","textDecorationColor","AttributeData","getUnderlineColor","drawBoldTextInBrightColors","isStrikethrough","textDecoration","getFgColor","fgColorMode","getFgColorMode","getBgColor","bgColorMode","getBgColorMode","isInverse","temp","temp2","bgOverride","fgOverride","resolvedBg","isTop","backgroundColorRGB","foregroundColorRGB","_addStyle","padStart","_applyMinimumContrast","className","minimumContrastRatio","treatGlyphAsBackgroundColor","getCode","cache","_getContrastCache","adjustedColor","ratio","ensureContrastRatio","halfContrastCache","contrastCache","canvasFactory","WidthCacheFontVariantCanvas","_flat","Float32Array","_font","_fontSize","_weight","_weightBold","_canvasElements","_holey","font","weight","weightBold","bold","italic","cp","_measure","variant","OffscreenCanvas","throwIfFalsy","fontStyle","trim","measureText","isPowerlineGlyph","codepoint","isEmoji","glyphSizeX","deviceCellWidth","isNerdFontGlyph","isBoxOrBlockGlyph","currentOffset","SelectionRenderModel","terminal","viewportY","isCellSelected","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","duration","setIntervalDuration","blinkIntervalDuration","_clearInterval","isEnabled","needsBlinkInViewport","_updateIntervalState","_interval","wasBlinkOn","setInterval","clearInterval","dom","fastDomNode_1","globalPointerMoveMonitor_1","scrollbarArrow_1","scrollbarVisibilityController_1","widget_1","platform","AbstractScrollbar","Widget","opts","_lazyRender","lazyRender","_host","host","_scrollable","_scrollByPage","scrollByPage","_scrollbarState","scrollbarState","_visibilityController","ScrollbarVisibilityController","visibility","extraScrollbarClassName","setIsNeeded","isNeeded","_pointerMoveMonitor","GlobalPointerMoveMonitor","_shouldRender","FastDomNode","setDomNode","setPosition","_domNodePointerDown","_createArrow","arrow","ScrollbarArrow","bgDomNode","_createSlider","slider","setClassName","setTop","setLeft","setWidth","setHeight","setLayerHinting","setContain","_sliderPointerDown","_onclick","leftButton","_handleElementSize","visibleSize","setVisibleSize","render","_handleElementScrollSize","elementScrollSize","setScrollSize","_handleElementScrollPosition","elementScrollPosition","beginReveal","setShouldBeVisible","beginHide","_renderDomNode","getRectangleLargeSize","getRectangleSmallSize","_updateSlider","getSliderSize","getArrowSize","getSliderPosition","_handlePointerDown","delegatePointerDown","domTop","getClientRects","sliderStart","sliderStop","pointerPos","_sliderPointerPosition","offsetX","offsetY","domNodePosition","getDomNodePagePosition","pageX","pageY","_pointerDownRelativePosition","_setDesiredScrollPositionNow","getDesiredScrollPositionFromOffsetPaged","getDesiredScrollPositionFromOffset","Element","initialPointerPosition","initialPointerOrthogonalPosition","_sliderOrthogonalPointerPosition","initialScrollbarState","clone","toggleClassName","startMonitoring","pointerId","buttons","pointerMoveData","pointerOrthogonalPosition","pointerOrthogonalDelta","pointerDelta","getDesiredScrollPositionFromDelta","handleDragEnd","handleDragStart","_desiredScrollPosition","desiredScrollPosition","writeScrollPosition","setScrollPositionNow","updateScrollbarSize","scrollbarSize","_updateScrollbarSize","setScrollbarSize","numberAsPixels","_height","_top","_left","_bottom","_right","_className","_position","_layerHint","_contain","setBottom","bottom","setRight","shouldHaveIt","layerHint","contain","name","_hooks","DisposableStore","_pointerMoveCallback","_onStopCallback","stopMonitoring","invokeStopCallback","isMonitoring","onStopCallback","initialElement","initialButtons","pointerMoveCallback","eventSource","setPointerCapture","releasePointerCapture","abstractScrollbar_1","scrollbarState_1","HorizontalScrollbar","scrollDimensions","getScrollDimensions","scrollPosition","getCurrentScrollPosition","ScrollbarState","horizontalHasArrows","horizontalScrollbarSize","scrollWidth","scrollLeft","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","handleScroll","setOppositeScrollbarSize","setVisibility","sameOriginWindowChainCache","getParentWindowIfSameOrigin","w","parentLocation","IframeUtils","_getSameOriginWindowChain","windowChainCache","WeakRef","iframeElement","frameElement","getPositionOfChildWindowRelativeToAncestorWindow","childWindow","ancestorWindow","windowChain","windowChainEl","windowInChain","deref","boundingRect","timestamp","Date","browserEvent","middleButton","rightButton","detail","shiftKey","posx","posy","body","documentElement","iframeOffsets","deltaX","deltaY","targetNode","srcElement","shouldFactorDPR","isChrome","chromeVersionMatch","navigator","userAgent","match","e1","e2","devicePixelRatio","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","wheelDeltaX","isSafari","HORIZONTAL_AXIS","wheelDelta","ScrollState","_forceIntegerValues","_scrollStateBrand","rawScrollLeft","rawScrollTop","equals","other","withScrollDimensions","useRawScrollPositions","withScrollPosition","createScrollEvent","previous","inSmoothScrolling","widthChanged","scrollWidthChanged","scrollLeftChanged","heightChanged","scrollHeightChanged","scrollTopChanged","oldWidth","oldScrollWidth","oldScrollLeft","oldHeight","oldScrollHeight","oldScrollTop","_scrollableBrand","_smoothScrollDuration","_scheduleAtNextAnimationFrame","_state","_smoothScrolling","validateScrollPosition","newState","_setState","Boolean","acceptScrollDimensions","getFutureScrollPosition","to","setScrollPositionSmooth","validTarget","newSmoothScrolling","SmoothScrollingOperation","from","startTime","animationFrameDisposable","_performSmoothScrolling","hasPendingScrollAnimation","tick","isDone","oldState","SmoothScrollingUpdate","createEaseOutCubic","delta","completion","t","pow","_initAnimations","_scrollLeft","_initAnimation","_scrollTop","viewportSize","stop1","stop2","cut","_tick","newScrollLeft","newScrollTop","mouseEvent_1","horizontalScrollbar_1","verticalScrollbar_1","MouseWheelClassifierItem","score","MouseWheelClassifier","_capacity","_memory","_front","_rear","isPhysicalMouseWheel","remainingInfluence","iteration","influence","acceptStandardWheelEvent","pageZoomFactor","getZoomFactor","accept","previousItem","_computeScore","_isAlmostInt","absDeltaX","absDeltaY","absPreviousDeltaX","absPreviousDeltaY","minDeltaX","minDeltaY","maxDeltaX","maxDeltaY","INSTANCE","resolvedScrollable","ownsScrollable","flipAxes","consumeMouseWheelIfScrollbarIsNeeded","alwaysConsumeMouseWheel","scrollYToX","scrollPredominantAxis","listenOnDomNode","verticalSliderSize","resolveOptions","scrollbarHost","mouseWheelEvent","_handleMouseWheel","_handleDragStart","_handleDragEnd","_verticalScrollbar","VerticalScrollbar","_horizontalScrollbar","_domNode","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","_onmouseover","_handleMouseOver","_onmouseleave","_handleMouseLeave","_hideTimeout","TimeoutTimer","_isDragging","_mouseIsOver","_revealOnScroll","updateClassName","newClassName","newOptions","_render","delegateScrollFromMouseWheelEvent","StandardWheelEvent","shouldListen","onMouseWheel","passive","defaultPrevented","classifier","didScroll","shiftConvert","futureScrollPosition","deltaScrollTop","desiredScrollTop","deltaScrollLeft","desiredScrollLeft","consumeMouseWheel","_reveal","renderNow","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","_hide","_scheduleHide","_handleActivate","handleActivate","bgWidth","bgHeight","arrowSize","addStandardDisposableListener","_arrowPointerDown","_pointerdownRepeatTimer","_pointerdownScheduleRepeatTimer","oppositeScrollbarSize","scrollSize","_scrollbarSize","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","iVisibleSize","iScrollSize","iScrollPosition","setArrowSize","iArrowSize","_computeValues","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","desiredSliderPosition","correctedOffset","visibleClassName","invisibleClassName","_visibility","_visibleClassName","_invisibleClassName","_isVisible","_isNeeded","_rawShouldBeVisible","_shouldBeVisible","_revealTimer","_updateShouldBeVisible","rawShouldBeVisible","_applyVisibilitySetting","shouldBeVisible","ensureVisibility","setIfNotSet","withFadeAway","DomUtils","mainWindow","tail","array","n","LinkedListNode","Undefined","prev","LinkedList","_first","_last","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","Symbol","iterator","EventType","TAP","START","END","CONTEXT_MENU","Gesture","_dispatched","_targets","_ignoreTargets","_activeTouches","_handle","_lastSetTapCountTime","_handleTouchStart","_handleTouchEnd","_handleTouchMove","addTarget","isTouchDevice","None","_instance","ignoreTarget","maxTouchPoints","len","targetTouches","touch","identifier","id","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","evt","_newGestureEvent","_dispatchEvent","activeTouchCount","keys","changedTouches","hasOwnProperty","holdTime","_holdDelay","finalX","finalY","deltaT","dispatchTo","filter","_inertia","createEvent","initEvent","tapCount","currentTime","getTime","setTapCount","_clearTapCountTime","targets","depth","dispatchEvent","t1","vX","dirX","vY","dirY","deltaPosX","deltaPosY","stopped","_scrollFriction","translationX","_target","descriptor","fnKey","fn","memoizeKey","args","configurable","enumerable","writable","apply","hasArrows","_arrowScrollDelta","_setArrows","_arrowScroll","currentPosition","_arrowUp","_arrowDown","arrowDelta","_updateArrowSize","listener","StandardMouseEvent","isSelectAllActive","selectionStartLength","finalSelectionStart","areSelectionValuesReversed","finalSelectionEnd","startPlusLength","handleTrim","_onCharSizeChange","onCharSizeChange","_measureStrategy","TextMetricsMeasureStrategy","DomMeasureStrategy","BaseMeasureStategy","_result","_validateAndSet","_parentElement","_measureElement","whiteSpace","fontKerning","Number","offsetWidth","offsetHeight","metrics","fontBoundingBoxAscent","fontBoundingBoxDescent","firstCell","content","combinedData","isCombined","setFromCharData","getAsCharData","_characterJoiners","_nextCharacterJoinerId","joiner","ranges","lineStr","trimmedLength","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","getFg","rangeAttrBG","getBg","_getJoinedRanges","startIndex","endIndex","allJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","getString","newRange","inRange","_window","_isFocused","_cachedIsFocused","_onDprChange","_onWindowChange","onWindowChange","_screenDprMonitor","ScreenDprMonitor","setWindow","hasFocus","queueMicrotask","_parentWindow","_windowResizeListener","_outerListener","_setDprAndFireIfDiffers","_currentDevicePixelRatio","_updateDpr","_setWindowResizeListener","clearListener","parentWindow","_resolutionMediaMatchList","removeListener","matchMedia","addListener","Keyboard_1","KittyKeyboard_1","Win32InputMode_1","Platform_1","_getWin32InputMode","_win32InputMode","Win32InputMode","_getKittyKeyboard","_kittyKeyboard","KittyKeyboard","evaluateKeyboardEvent","kittyFlags","kittyKeyboard","flags","evaluate","vtExtensions","shouldUseProtocol","providerIndex","indexOf","Mouse_1","getMouseReportCoords","col","touch_1","_mouseStateService","_lastEvent","_wheelPartialScroll","_touchScrollAccumulator","mouseupListener","mousedragListener","requestedEvents","mouseup","wheel","mousedrag","mousemove","eventListeners","_handleWheel","_handleMouseDrag","_altMouseCursor","AltMouseCursorController","events","_handleProtocolChange","_syncMouseModeState","_handlePassiveWheel","_handleTouchChange","_sendEvent","but","action","overrideType","allowCustomWheelEvent","_consumeWheelEvent","stripAltFromReport","_triggerMouseEvent","ctrl","shouldForceSelection","targetDocument","listenerDocument","_handleTouchScrollAsWheel","_handleTouchScrollAsKeys","trunc","resetClass","logLevel","_explainEvents","_applyScrollModifier","targetWheelEventPixels","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_PAGE","_equalEvents","isPixelEncoding","restrictMouseEvent","report","encodeMouseEvent","isDefaultEncoding","triggerBinaryEvent","down","up","drag","move","pixels","ILogService","_isActive","_listeners","store","syncFromModifier","_updateClass","altHeld","RenderDebouncer_1","TaskQueue_1","_renderer","decorationService","_observerDisposable","_isPaused","_needsFullRefresh","_isNextRenderRedrawOnly","_needsSelectionRefresh","_canvasWidth","_canvasHeight","_selectionState","_onRenderedViewportChange","_onRefreshRequest","onRefreshRequest","_pausedResizeTask","DebouncedIdleTask","_renderDebouncer","RenderDebouncer","_syncOutputHandler","SynchronizedOutputHandler","_fullRefresh","_registerIntersectionObserver","observer","IntersectionObserver","_handleIntersectionChange","threshold","_intersectionObserver","disconnect","observe","entry","isIntersecting","intersectionRatio","flush","isRedrawOnly","bufferRows","buffered","_fireOnCanvasResize","renderer","_onTimeout","_start","_end","_isBuffering","_timeout","MoveToCell_1","SelectionModel_1","BufferRange_1","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","RegExp","_dragScrollAmount","_enabled","_trimListener","_mouseDownTimeStamp","_oldHasSelection","_oldSelectionStart","_oldSelectionEnd","_onLinuxMouseSelection","_onRedrawRequest","_mouseMoveListener","_mouseUpListener","onUserInput","onTrim","_handleTrim","_handleBufferActivate","_model","SelectionModel","_activeSelectionMode","_removeMouseDownListeners","rowsChanged","lineText","startRowEndCol","isLinuxMouseSelection","_refreshAnimationFrame","_refresh","_isClickInSelection","_getMouseBufferCoords","_areCoordsInSelection","isCellInSelection","_selectWordAtCursor","allowWhitespaceOnlySelection","getRangeLength","_selectWordAt","_getMouseEventScrollAmount","terminalHeight","macOptionClickForcesSelection","timeStamp","_handleIncrementalClick","_handleSingleClick","_handleDoubleClick","_handleTripleClick","_addMouseDownListeners","_dragScrollIntervalTimer","_dragScroll","hadSelection","_fireOnSelectionChange","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","altClickMovesCursor","coordinates","moveToCellSequence","_fireEventIfSelectionChanged","activeBuffer","_convertViewportColToCharacterIndex","charIndex","_getWordAt","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","_isCharWordSeparator","getCodePoint","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","wordSeparator","wrappedRange","getWrappedRangeForLine","first","last","ServiceRegistry_1","createDecorator","ColorContrastCache_1","Types_1","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","DEFAULT_OVERVIEW_RULER_BORDER","_colors","_contrastCache","ColorContrastCache","_halfContrastCache","_onChangeColors","selectionBackgroundTransparent","blend","selectionInactiveBackgroundTransparent","opacity","_updateRestoreColors","_setTheme","theme","parseColor","selectionBackground","selectionInactiveBackground","NULL_COLOR","isOpaque","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","extendedAnsi","colorCount","slot","_restoreColor","_restoreColors","cssString","fallback","millis","Promise","resolve","timeout","timer","_token","_isDisposed","_isScheduled","_disposable","context","handle","CircularList","_maxLength","onDeleteEmitter","onDelete","onInsertEmitter","onInsert","onTrimEmitter","_array","Array","_startIndex","_length","maxLength","newMaxLength","newArray","_getCyclicIndex","newLength","recycle","isFull","deleteCount","items","countToTrim","trimStart","shiftElements","expandListBy","$r","$g","$b","$a","toPaddedHex","s","contrastRatio","l1","l2","color_1","toChannels","fgR","fgG","fgB","bgR","bgG","bgB","rgbaColor","factor","css_1","$ctx","$litmusColor","willReadFrequently","globalCompositeOperation","createLinearGradient","rgbaMatch","parseFloat","getImageData","rgb_1","relativeLuminance2","rs","gs","bs","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","InstantiationService_1","LogService_1","BufferService_1","OptionsService_1","CoreService_1","MouseStateService_1","UnicodeV6_1","UnicodeService_1","CharsetService_1","WindowsMode_1","WriteBuffer_1","OscLinkService_1","hasWriteSyncWarnHappened","_onScrollApi","_windowsWrappingHeuristics","_onBinary","_onData","_onLineFeed","_onResize","_onWriteParsed","InstantiationService","OptionsService","LogService","BufferService","CoreService","MouseStateService","unicodeService","UnicodeService","UnicodeV6","IUnicodeService","_charsetService","CharsetService","ICharsetService","OscLinkService","InputHandler","onRequestScrollToBottom","_writeBuffer","handleUserInput","_handleWindowsPtyOptionChange","markRangeDirty","scrollBottom","WriteBuffer","promiseResult","parse","writeSync","maxSubsequentCalls","LogLevelEnum","WARN","flushSync","scroll","eraseAttr","registerEscHandler","registerDcsHandler","registerCsiHandler","registerOscHandler","registerApcHandler","windowsPty","backend","buildNumber","_enableWindowsWrappingHeuristics","disposables","updateWindowsModeWrappedState","final","_disposed","_event","thisArgs","idx","isArray","call","listeners","initial","Charsets_1","EscapeSequenceParser_1","TextDecoder_1","OscParser_1","DcsParser_1","ApcParser_1","Version_1","GLEVEL","paramToWindowOption","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","$temp","getAttrData","_curAttrData","_unicodeService","EscapeSequenceParser","_parseBuffer","Uint32Array","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","_eraseAttrDataInternal","_onRequestBell","_onRequestRefreshRows","_onRequestReset","_onRequestSendFocus","_onRequestSyncScrollBar","onRequestSyncScrollBar","_onRequestWindowsOptionsReport","_onA11yChar","_onA11yTab","_onColor","_onRequestColorSchemeQuery","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","_dirtyRowTracker","DirtyRowTracker","_activeBuffer","setCsiHandlerFallback","params","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","code","setOscHandlerFallback","setDcsHandlerFallback","payload","setApcHandlerFallback","setPrintHandler","print","insertChars","intermediates","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","sendXtVersion","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","selectProtected","requestMode","kittyKeyboardSet","kittyKeyboardQuery","kittyKeyboardPush","kittyKeyboardPop","setExecuteHandler","bell","lineFeed","carriageReturn","backspace","tab","shiftOut","shiftIn","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setHyperlink","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","CHARSETS","selectCharset","screenAlignmentPattern","setErrorHandler","DcsHandler","requestStatusString","_preserveStack","_logSlowResolvingAsync","p","slowTimeout","slowPromise","_res","rej","race","then","err","_getCurrentLinkId","wasPaused","DEBUG","prototype","TRACE","trace","split","clearRange","decode","subarray","viewportEnd","viewportStart","chWidth","charset","curAttr","bufferRow","markDirty","setCellFromCodepoint","precedingJoinState","ch","currentInfo","charProperties","extractWidth","shouldJoin","extractShouldJoin","stringFromCodePoint","addLineToLink","oldRow","oldCol","_eraseAttrData","BufferLine","copyCellsFrom","addCodepointToCell","insertCells","getNullCell","NULL_CELL_CODE","NULL_CELL_WIDTH","ApcHandler","convertEol","_restrictCursor","originalX","nextStop","maxCol","_setCursor","_moveCursor","diffToTop","diffToBottom","param","tabs","prevStop","_eraseInBufferLine","clearWrap","respectProtect","replaceCells","_resetBufferLine","clearMarkers","scrollOnEraseInDisplay","scrollBackSize","isUserScrolling","scrollBottomRowsOffset","scrollBottomAbsolute","deleteCells","joinState","idata","itext","codePointAt","tlength","copyWithin","_is","XTERM_VERSION","term","termName","startsWith","setgCharset","DEFAULT_CHARSET","quirks","allowSetCursorBlink","activeEncoding","mainFlags","altFlags","activateAltBuffer","colorSchemeQuery","activateNormalBuffer","dm","mouseProtocol","mouseEncoding","cs","f","b2v","_updateAttrColor","mode","c1","c2","c3","fromColorRGB","_extractColor","attr","accu","cSpace","advance","hasSubParams","subparams","getSubParams","underlineColor","_processUnderline","updateExtended","_processSGR0","l","kittySgrBoldFaintControl","savedX","savedY","savedCurAttrData","savedCharset","isBlinking","second","savedCharsets","charsets","savedGlevel","glevel","savedOriginMode","savedWraparoundMode","slots","spec","exec","isValidColorIndex","_createHyperlink","_finishHyperlink","parsedParams","idParamIndex","findIndex","registerLink","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","level","yOffset","markAllDirty","isProtected","block","bar","stack","altStack","mainStack","arg","_disposables","o","_value","_data","third","fourth","_targetWindow","majorVersion","isNode","process","isLegacyEdge","_getKey","logService","_insertedValues","_isFlushingInserted","_deletedIndices","_isFlushingDeleted","_flushInsertedTask","IdleTaskQueue","_flushDeletedTask","insert","_flushCleanupDeleted","enqueue","_flushInserted","sortedAddedValues","sortedAddedValuesIndex","arrayIndex","newArrayIndex","_flushCleanupInserted","_search","_flushDeleted","sortedDeletedIndices","sortedDeletedIndicesIndex","getKeyIterator","forEachByKey","mid","midKey","StringBuilder","_chunks","append","chunk","_limit","_builder","limit","TaskQueue","_tasks","_i","task","_idleCallback","_cancelCallback","_requestCallback","_process","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","PriorityTaskQueue","_createDeadline","requestIdleCallback","cancelIdleCallback","_queue","lastChar","CHAR_DATA_CODE_INDEX","WHITESPACE_CELL_CODE","ExtendedAttrs","newObj","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","isEmpty","getUnderlineColorMode","isUnderlineColorPalette","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","_urlId","_ext","val","CircularList_1","BufferReflow_1","Marker_1","MAX_BUFFER_SIZE","Buffer","_hasScrollback","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_WIDTH","_isClearing","_memoryCleanupPosition","_cols","_rows","_getCorrectBufferLength","setupTabStops","_memoryCleanupQueue","getWhitespaceCell","relativeY","correctBufferLength","scrollback","fillViewportRows","fillAttr","newCols","newRows","nullCell","dirtyMemoryLines","addToY","amountToTrim","_isReflowEnabled","_reflow","_batchedMemoryCleanup","normalRun","counted","cleanupMemory","_reflowLarger","_reflowSmaller","reflowCursorLine","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","tabStopWidth","Marker","_removeMarker","$startIndex","$workCell","$extended","fillCellData","_combined","_extendedAttrs","_cacheValid","_cache","_cacheTrimmed","CHAR_DATA_ATTR_INDEX","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","getExtended","codePoint","attrs","$idx","byteLength","uint32Cells","extKeys","copyFrom","blank","_copySparseMapsFrom","src","applyInReverse","srcData","_copyCellMapsFrom","outColumns","isCanonical","trimEnd","cellContents","srcStart","bufferCols","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","Buffer_1","BufferSet","_normalBuffer","_altBuffer","_onBufferActivate","_normal","_alt","inactiveBuffer","obj","combined","attributesEquals","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","_id","_nextId","_onDispose","h","k","q","u","A","B","C","R","Q","K","Y","E","Z","H","_","applicationCursorMode","modifiers","keyMapping","KEYCODE_KEY_MAPPINGS","keyString","toUpperCase","toLowerCase","_functionalKeyCodes","Escape","Enter","Tab","Backspace","CapsLock","ScrollLock","NumLock","PrintScreen","Pause","ContextMenu","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","F25","KP_0","KP_1","KP_2","KP_3","KP_4","KP_5","KP_6","KP_7","KP_8","KP_9","KP_Decimal","KP_Divide","KP_Multiply","KP_Subtract","KP_Add","KP_Enter","KP_Equal","ShiftLeft","ShiftRight","ControlLeft","ControlRight","AltLeft","AltRight","MetaLeft","MetaRight","MediaPlayPause","MediaStop","MediaTrackNext","MediaTrackPrevious","AudioVolumeDown","AudioVolumeUp","AudioVolumeMute","_csiTildeKeys","Insert","Delete","PageUp","PageDown","F5","F6","F7","F8","F9","F10","F11","F12","_csiLetterKeys","ArrowUp","ArrowDown","ArrowRight","ArrowLeft","Home","End","_ss3FunctionKeys","F1","F2","F3","F4","_getNumpadKeyCode","suffix","_getModifierKeyCode","_encodeModifiers","mods","_getKeyCode","macOptionAsAlt","numpadCode","modifierCode","funcCode","digit","_isModifierKey","_isLockKey","_buildCsiLetterSequence","letter","reportEventTypes","needsEventType","seq","_buildSs3Sequence","_buildCsiTildeSequence","number","_buildCsiUSequence","isFunc","isMod","shiftedKey","textCode","csiLetter","ss3Letter","tildeCode","specialKey","legacyByte","_interim","startPos","interim","Uint8Array","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","BMP_COMBINING","HIGH_COMBINING","table","version","wcwidth","num","ucs","bisearch","preceding","createPropertyValue","_codeToVk","KeyA","KeyB","KeyC","KeyD","KeyE","KeyF","KeyG","KeyH","KeyI","KeyJ","KeyK","KeyL","KeyM","KeyN","KeyO","KeyP","KeyQ","KeyR","KeyS","KeyT","KeyU","KeyV","KeyW","KeyX","KeyY","KeyZ","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","Numpad0","Numpad1","Numpad2","Numpad3","Numpad4","Numpad5","Numpad6","Numpad7","Numpad8","Numpad9","NumpadMultiply","NumpadAdd","NumpadSeparator","NumpadSubtract","NumpadDecimal","NumpadDivide","NumpadEnter","Space","Semicolon","Equal","Comma","Minus","Period","Slash","Backquote","BracketLeft","Backslash","BracketRight","Quote","IntlBackslash","_codeToScancode","_enhancedKeyCodes","_keyToControlChar","_getVirtualKeyCode","vk","_getScanCode","_getUnicodeChar","controlChar","_getControlKeyState","isKeyDown","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","_didUserInput","_innerWriteTimer","didProcess","_innerWrite","_scheduleInnerWrite","lastTime","continuation","catch","low","RGB_REX","base","HASH_REX","adv","bits","pad","s2","StringBuilder_1","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","registerHandler","handlerList","handlerIndex","clearHandler","setHandlerFallback","put","utf32ToString","success","handlerResult","LimitedStringBuilder","_payloadLimit","_hitLimit","ret","res","Params_1","unhook","hook","EMPTY_PARAMS","Params","addParam","_params","TransitionTable","Uint16Array","setDefault","addMany","codes","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","unused","PRINTABLES","EXECUTABLES","states","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_executeHandlersArr","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","DcsParser","_apcParser","ApcParser","_errorHandler","_identifier","finalRange","intermediate","finalCode","reverse","clearPrintHandler","clearEscHandler","clearExecuteHandler","clearCsiHandler","clearDcsHandler","clearOscHandler","clearApcHandler","clearErrorHandler","resetZdm","csiDone","addDigit","addSubParam","l4","collect","abort","handlersEsc","jj","_put","fromArray","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","_rejectDigits","_rejectSubDigits","_digitIsSub","newParams","getSubParamsAll","cur","_addons","instance","loadedAddon","_wrappedAddonDispose","BufferLineApiView_1","init","baseY","getLine","BufferLineApiView","_line","getCell","startColumn","endColumn","BufferApiView_1","_onBufferChange","onBufferChange","BufferApiView","_alternate","alternate","addCsiHandler","addDcsHandler","addEscHandler","addOscHandler","provider","versions","activeVersion","BufferSet_1","colsChanged","_cachedBlankLine","topRow","bottomRow","willBufferBeTrimmed","oldYdisp","_charsets","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_onRequestScrollToBottom","showCursorImmediately","structuredClone","SortedList_1","$xmin","$xmax","_decorations","_lineCache","DecorationLineCache","_onDecorationRegistered","_onDecorationRemoved","SortedList","attachToBufferLines","Decoration","markerDispose","getDecorationsAtCell","bucket","getDecorationsOnLine","_decorationsByLine","_bufferLineListeners","_lineIndexSyncTimer","MicrotaskTimer","_lineIndexSyncCallbacks","_addToLineBuckets","_removeFromLineBuckets","_handleBufferLinesTrim","_handleBufferLinesInsert","_handleBufferLinesDelete","_getDecorationHeight","_indexedStartLine","_reindexDecoration","_scheduleLineIndexSync","callbacks","newMap","_mergeLineBucket","_applyBufferLinesInsert","_applyBufferLinesDelete","existing","spanCrossers","deleteEnd","toReindex","_cachedBg","_cachedFg","foregroundColor","ServiceCollection","_entries","service","_services","getService","ctor","serviceDependencies","getServiceDependencies","serviceArgs","dependency","firstServiceArgPos","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_logLevel","_updateLogLevel","_evalLazyOptionalParams","optionalParams","_log","message","logger","log","DEFAULT_PROTOCOLS","NONE","restrict","X10","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","SGR","SGR_PIXELS","_protocols","_encodings","_activeProtocol","_activeEncoding","_onProtocolChange","addProtocol","addEncoding","encoding","_customWheelEventHandler","DEFAULT_OPTIONS","rescaleOverlappingGlyphs","FONT_WEIGHT_OPTIONS","_onOptionChange","defaultOptions","_sanitizeAndValidateOption","_setupOptions","eventKey","isCursorStyle","_entriesWithId","_dataByLinkId","_removeMarkerFromLink","castData","_getEntryIdKey","every","linkData","serviceRegistry","decorator","arguments","storeServiceDependency","_providers","_onChange","onChange","extractCharKind","_activeProvider","getStringCellWidth","precedingInfo","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file -+{"version":3,"file":"xterm.js","mappings":"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AQ,KAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAAS,CAAC,KAAQ,MAC7C,CAAC,KAAQ,M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","sources":["webpack://@xterm/xterm/webpack/universalModuleDefinition","webpack://@xterm/xterm/./src/browser/AccessibilityManager.ts","webpack://@xterm/xterm/./src/browser/Clipboard.ts","webpack://@xterm/xterm/./src/browser/ColorContrastCache.ts","webpack://@xterm/xterm/./src/browser/CoreBrowserTerminal.ts","webpack://@xterm/xterm/./src/browser/Dom.ts","webpack://@xterm/xterm/./src/browser/Linkifier.ts","webpack://@xterm/xterm/./src/browser/LocalizableStrings.ts","webpack://@xterm/xterm/./src/browser/OscLinkProvider.ts","webpack://@xterm/xterm/./src/browser/RenderDebouncer.ts","webpack://@xterm/xterm/./src/browser/TimeBasedDebouncer.ts","webpack://@xterm/xterm/./src/browser/Types.ts","webpack://@xterm/xterm/./src/browser/Viewport.ts","webpack://@xterm/xterm/./src/browser/decorations/BufferDecorationRenderer.ts","webpack://@xterm/xterm/./src/browser/decorations/ColorZoneStore.ts","webpack://@xterm/xterm/./src/browser/decorations/OverviewRulerRenderer.ts","webpack://@xterm/xterm/./src/browser/input/CompositionHelper.ts","webpack://@xterm/xterm/./src/browser/input/Mouse.ts","webpack://@xterm/xterm/./src/browser/input/MoveToCell.ts","webpack://@xterm/xterm/./src/browser/public/Terminal.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRenderer.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRendererRowFactory.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/WidthCache.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/Constants.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/RendererUtils.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/SelectionRenderModel.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://@xterm/xterm/./src/browser/scrollable/abstractScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/fastDomNode.ts","webpack://@xterm/xterm/./src/browser/scrollable/globalPointerMoveMonitor.ts","webpack://@xterm/xterm/./src/browser/scrollable/horizontalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/mouseEvent.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollable.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollableElement.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarArrow.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarState.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarVisibilityController.ts","webpack://@xterm/xterm/./src/browser/scrollable/touch.ts","webpack://@xterm/xterm/./src/browser/scrollable/verticalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/widget.ts","webpack://@xterm/xterm/./src/browser/selection/SelectionModel.ts","webpack://@xterm/xterm/./src/browser/services/CharSizeService.ts","webpack://@xterm/xterm/./src/browser/services/CharacterJoinerService.ts","webpack://@xterm/xterm/./src/browser/services/CoreBrowserService.ts","webpack://@xterm/xterm/./src/browser/services/KeyboardService.ts","webpack://@xterm/xterm/./src/browser/services/LinkProviderService.ts","webpack://@xterm/xterm/./src/browser/services/MouseCoordsService.ts","webpack://@xterm/xterm/./src/browser/services/MouseService.ts","webpack://@xterm/xterm/./src/browser/services/RenderService.ts","webpack://@xterm/xterm/./src/browser/services/SelectionService.ts","webpack://@xterm/xterm/./src/browser/services/Services.ts","webpack://@xterm/xterm/./src/browser/services/ThemeService.ts","webpack://@xterm/xterm/./src/common/Async.ts","webpack://@xterm/xterm/./src/common/CircularList.ts","webpack://@xterm/xterm/./src/common/Color.ts","webpack://@xterm/xterm/./src/common/CoreTerminal.ts","webpack://@xterm/xterm/./src/common/Event.ts","webpack://@xterm/xterm/./src/common/InputHandler.ts","webpack://@xterm/xterm/./src/common/Lifecycle.ts","webpack://@xterm/xterm/./src/common/MultiKeyMap.ts","webpack://@xterm/xterm/./src/common/Platform.ts","webpack://@xterm/xterm/./src/common/SortedList.ts","webpack://@xterm/xterm/./src/common/StringBuilder.ts","webpack://@xterm/xterm/./src/common/TaskQueue.ts","webpack://@xterm/xterm/./src/common/Version.ts","webpack://@xterm/xterm/./src/common/WindowsMode.ts","webpack://@xterm/xterm/./src/common/buffer/AttributeData.ts","webpack://@xterm/xterm/./src/common/buffer/Buffer.ts","webpack://@xterm/xterm/./src/common/buffer/BufferLine.ts","webpack://@xterm/xterm/./src/common/buffer/BufferRange.ts","webpack://@xterm/xterm/./src/common/buffer/BufferReflow.ts","webpack://@xterm/xterm/./src/common/buffer/BufferSet.ts","webpack://@xterm/xterm/./src/common/buffer/CellData.ts","webpack://@xterm/xterm/./src/common/buffer/Constants.ts","webpack://@xterm/xterm/./src/common/buffer/Marker.ts","webpack://@xterm/xterm/./src/common/data/Charsets.ts","webpack://@xterm/xterm/./src/common/input/Keyboard.ts","webpack://@xterm/xterm/./src/common/input/KittyKeyboard.ts","webpack://@xterm/xterm/./src/common/input/TextDecoder.ts","webpack://@xterm/xterm/./src/common/input/UnicodeV6.ts","webpack://@xterm/xterm/./src/common/input/Win32InputMode.ts","webpack://@xterm/xterm/./src/common/input/WriteBuffer.ts","webpack://@xterm/xterm/./src/common/input/XParseColor.ts","webpack://@xterm/xterm/./src/common/parser/ApcParser.ts","webpack://@xterm/xterm/./src/common/parser/DcsParser.ts","webpack://@xterm/xterm/./src/common/parser/EscapeSequenceParser.ts","webpack://@xterm/xterm/./src/common/parser/OscParser.ts","webpack://@xterm/xterm/./src/common/parser/Params.ts","webpack://@xterm/xterm/./src/common/public/AddonManager.ts","webpack://@xterm/xterm/./src/common/public/BufferApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferLineApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferNamespaceApi.ts","webpack://@xterm/xterm/./src/common/public/ParserApi.ts","webpack://@xterm/xterm/./src/common/public/UnicodeApi.ts","webpack://@xterm/xterm/./src/common/services/BufferService.ts","webpack://@xterm/xterm/./src/common/services/CharsetService.ts","webpack://@xterm/xterm/./src/common/services/CoreService.ts","webpack://@xterm/xterm/./src/common/services/DecorationService.ts","webpack://@xterm/xterm/./src/common/services/InstantiationService.ts","webpack://@xterm/xterm/./src/common/services/LogService.ts","webpack://@xterm/xterm/./src/common/services/MouseStateService.ts","webpack://@xterm/xterm/./src/common/services/OptionsService.ts","webpack://@xterm/xterm/./src/common/services/OscLinkService.ts","webpack://@xterm/xterm/./src/common/services/ServiceRegistry.ts","webpack://@xterm/xterm/./src/common/services/Services.ts","webpack://@xterm/xterm/./src/common/services/UnicodeService.ts","webpack://@xterm/xterm/webpack/bootstrap","webpack://@xterm/xterm/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (␛).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.blur();\n }\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', (e: CompositionEvent) => {\n if (this._compositionHelper instanceof CompositionHelper) {\n if (this._compositionHelper.compositionend(e)) {\n this.textarea!.dispatchEvent(new CustomEvent(\n 'xterm-composition-transaction-accepted',\n { bubbles: true }\n ));\n }\n } else {\n this._compositionHelper!.compositionend();\n }\n }));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._register(toDisposable(() => {\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.dispose();\n }\n }));\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n if (!this._compositionHelper!.keypress?.(key)) {\n this.coreService.triggerDataEvent(key, true);\n }\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n if (\n ev.data &&\n ev.inputType === 'insertText' &&\n !this.optionsService.rawOptions.screenReaderMode &&\n this._compositionHelper instanceof CompositionHelper &&\n this._compositionHelper.input(ev.data)\n ) {\n return true;\n }\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): boolean | void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n keypress?(text: string): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n","/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n","/// \n/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService, IThemeService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService, IUnicodeService } from '../../common/services/Services';\nimport { WidthCacheFontVariantCanvas } from '../renderer/dom/WidthCache';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable } from '../../common/Lifecycle';\nimport { color } from '../../common/Color';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\ninterface IPendingComposition {\n transactionId: number;\n finalizerTimer?: ReturnType;\n lifecycleSettled: boolean;\n sessionEnded: boolean;\n position: IPosition;\n suffix: string;\n dataAlreadySent: string;\n compositionData: string;\n endData: string;\n inputData: string;\n keypressData: string;\n keypressMayOverlapComposition: boolean;\n expectsPostCompositionInput: boolean;\n nextCompositionStart?: number;\n}\n\nconst XTERM_COMPOSITION_SESSION_START_EVENT = 'xterm-composition-session-start';\nconst XTERM_COMPOSITION_SESSION_END_EVENT = 'xterm-composition-session-end';\nconst XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT =\n 'xterm-composition-transaction-accepted';\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n public get hasPendingCompositionFinalization(): boolean {\n return this._pendingComposition !== undefined;\n }\n public get _isSendingComposition(): boolean {\n return this.hasPendingCompositionFinalization;\n }\n public get _pendingKeypressData(): string {\n return this._pendingComposition?.keypressData ?? '';\n }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n private _pendingComposition?: IPendingComposition;\n\n private _isAwaitingCompositionEnd: boolean;\n\n private _compositionInputData: string;\n\n private _lastCompositionData: string;\n\n private _compositionStartValue: string;\n\n private _compositionStartSelection: IPosition;\n\n private _compositionHasObservedProgress: boolean;\n\n private _canceledKey?: Pick;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n /**\n * Whether the IME consumed the last keydown and still owes the commit it produced. Nothing is\n * forwarded for such a keydown, so the commit is claimed by whichever observes it first.\n */\n private _imeKeydownAwaitingCommit: boolean;\n\n /**\n * Identifies the composition transaction that owns deferred work.\n */\n private _compositionTransactionId: number;\n\n /**\n * Timers that still own deferred composition state.\n */\n private _compositionTimers: Set>;\n\n private _compositionPositionTimer?: ReturnType;\n\n private _compositionViewTimer?: ReturnType;\n\n private _compositionEndTimer?: ReturnType;\n\n private _preeditRenderer?: CompositionPreeditRenderer;\n\n /** The preedit's own span, used to anchor the native candidate window. */\n private _compositionPreedit?: HTMLElement;\n\n /** The rendered row tail, set only while the cursor sits mid-line. */\n private _compositionRemainder?: HTMLElement;\n\n /** The insertion caret painted above the renderer cursor the composition view covers. */\n private _compositionCaret?: HTMLElement;\n\n // Keep the six-argument form callable: upstream's own CompositionHelper.test.ts constructs\n // this class directly, and `.npmignore` strips src/**/*.test.ts from the published tarball, so\n // the shipped patch has no hunk that could update that call. Dropping this overload fails the\n // upstream build with TS2554. The theme service is therefore optional, and every color read\n // below keeps the stock fallback that path needs.\n constructor(\n textarea: HTMLTextAreaElement,\n compositionView: HTMLElement,\n bufferService: IBufferService,\n optionsService: IOptionsService,\n coreService: ICoreService,\n renderService: IRenderService\n );\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService,\n @IThemeService private readonly _themeService?: IThemeService,\n @IUnicodeService private readonly _unicodeService?: IUnicodeService\n ) {\n this._isComposing = false;\n this._isAwaitingCompositionEnd = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionStartValue = '';\n this._compositionStartSelection = { start: 0, end: 0 };\n this._compositionHasObservedProgress = false;\n this._compositionTransactionId = 0;\n this._compositionTimers = new Set();\n this._imeKeydownAwaitingCommit = false;\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = undefined;\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = undefined;\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionStartValue = this._textarea.value;\n this._compositionStartSelection = { start, end };\n this._compositionHasObservedProgress = false;\n // A real session owns everything it commits, so no keydown is left owing one.\n this._imeKeydownAwaitingCommit = false;\n if (this._pendingComposition) {\n this._pendingComposition.nextCompositionStart = this._compositionPosition.start;\n }\n this._compositionTransactionId++;\n this._isComposing = true;\n this._isAwaitingCompositionEnd = true;\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._resetCompositionView();\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionView.classList.add('active');\n this._dispatchCompositionSessionEvent(new CustomEvent(XTERM_COMPOSITION_SESSION_START_EVENT, {\n bubbles: true,\n detail: { id: this._compositionTransactionId }\n }));\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n if (ev.data && !this._isComposing) {\n this.compositionstart();\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (ev.data?.length > 0) {\n this._lastCompositionData = ev.data;\n }\n this._renderCompositionView(ev.data ?? '');\n // Some IMEs resume without compositionstart; keep that inferred transaction visible until\n // compositionend settles it. An empty update hides the overlay without ending the transaction.\n this._compositionView.classList.toggle('active', Boolean(ev.data));\n this.updateCompositionElements();\n const transactionId = this._compositionTransactionId;\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = this._defer(() => {\n if (this._isComposing && this._compositionTransactionId === transactionId) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n });\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(ev?: Pick): boolean {\n if (!this._isAwaitingCompositionEnd) {\n return false;\n }\n if (!this._isComposing) {\n const pending = this._pendingComposition;\n if (pending?.transactionId === this._compositionTransactionId) {\n pending.endData = ev?.data ?? '';\n this._updatePostCompositionInputExpectation(pending);\n }\n return false;\n }\n const endData = ev?.data ?? '';\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n const pending = this._pendingComposition;\n if (pending && pending.transactionId !== this._compositionTransactionId) {\n this._sendPendingComposition(pending);\n }\n this._deferCompositionEnd(endData);\n return false;\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._finalizeComposition(true, endData);\n return true;\n }\n\n public blur(): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._isComposing) {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n this._finalizeComposition(false);\n }\n }\n\n public dispose(): void {\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n for (const timer of this._compositionTimers) {\n clearTimeout(timer);\n }\n this._compositionTimers.clear();\n this._compositionPositionTimer = undefined;\n this._compositionViewTimer = undefined;\n this._compositionEndTimer = undefined;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionTransactionId++;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._preeditRenderer?.dispose();\n this._preeditRenderer = undefined;\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._canceledKey?.code === ev.code && this._canceledKey.timeStamp === ev.timeStamp) {\n this._canceledKey = undefined;\n return false;\n }\n if (ev.key === 'Escape' && (this._isComposing || this.hasPendingCompositionFinalization)) {\n this._canceledKey = { code: ev.code, timeStamp: ev.timeStamp };\n this._cancelComposition();\n return false;\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n // A key the IME swallows can also empty the preedit — backspacing over the last radical of a\n // Cangjie composition — and some IMEs report that with no composition event at all.\n this._deferPreeditResync(this._composedRegionLength() > 0);\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n // Nothing is forwarded for a keydown the IME consumed, so it is left owing its commit; any\n // other keydown either forwards its own text or produces none, and clears the debt.\n this._imeKeydownAwaitingCommit = ev.keyCode === 229;\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Defers keypress text while a composition finalizer is pending so all input is emitted once\n * after reconciliation with the final textarea candidate.\n */\n public keypress(text: string): boolean {\n const pending = this._pendingComposition;\n if (!pending) {\n return false;\n }\n if (pending.keypressMayOverlapComposition) {\n pending.keypressData += text;\n return true;\n }\n if (pending.expectsPostCompositionInput && pending.keypressData.length === 0) {\n pending.keypressData = text;\n return true;\n }\n this._sendPendingComposition(pending);\n return false;\n }\n\n public input(text: string): boolean {\n if (this._isComposing) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n this._compositionInputData += text;\n return true;\n }\n const pending = this._pendingComposition;\n if (!pending) {\n return this._claimImeKeydownCommit(text);\n }\n if (pending.expectsPostCompositionInput) {\n pending.inputData += text;\n pending.expectsPostCompositionInput = false;\n this._sendPendingComposition(pending);\n return true;\n }\n const repeatsPendingTextareaInput =\n text.length > 0 &&\n this._getPendingTextareaInput(pending) === text &&\n this._getPendingTextareaInput(pending, true) === text;\n this._sendPendingComposition(pending);\n if (!repeatsPendingTextareaInput) {\n this._coreService.triggerDataEvent(text, true);\n }\n return true;\n }\n\n /**\n * Settles the commit a keydown the IME consumed still owes. That commit normally arrives as the\n * deferred textarea diff, but an asynchronous IME can deliver it after the diff has already run\n * and found the textarea unchanged, and with the key still down the terminal drops the input\n * event instead (#12099). Whichever path sees the commit first sends it and cancels the other, so\n * an IME that commits before the diff runs still sends once.\n */\n private _claimImeKeydownCommit(text: string): boolean {\n if (!this._imeKeydownAwaitingCommit) {\n return false;\n }\n this._imeKeydownAwaitingCommit = false;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n this._coreService.triggerDataEvent(text, true);\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean, endData: string = ''): void {\n const wasComposing = this._isComposing;\n this._compositionView.classList.remove('active');\n // Cleared, not just hidden: a rendered tail left in the view is stale DOM the next composition\n // would have to correct before its own first update lands.\n this._resetCompositionView();\n this._isComposing = false;\n if (waitForPropagation && !wasComposing) {\n return;\n }\n\n if (!waitForPropagation) {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition, true);\n }\n if (wasComposing) {\n const input = this._getCompositionInput(\n this._compositionPosition.start + this._dataAlreadySent.length,\n this._compositionSuffix\n );\n this._sendCompositionInput(this._compositionTransactionId, input);\n }\n } else {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition);\n }\n const pending: IPendingComposition = {\n transactionId: this._compositionTransactionId,\n lifecycleSettled: false,\n sessionEnded: false,\n position: {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n },\n suffix: this._compositionSuffix,\n dataAlreadySent: this._dataAlreadySent,\n compositionData: this._lastCompositionData,\n endData,\n inputData: this._compositionInputData,\n keypressData: '',\n keypressMayOverlapComposition:\n this._lastCompositionData.length === 0 && endData.length === 0,\n expectsPostCompositionInput: false\n };\n this._updatePostCompositionInputExpectation(pending);\n this._pendingComposition = pending;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n pending.finalizerTimer = this._defer(() => {\n pending.finalizerTimer = undefined;\n if (this._compositionTransactionId === pending.transactionId) {\n this._isAwaitingCompositionEnd = false;\n }\n if (this._pendingComposition === pending) {\n this._sendPendingComposition(pending, true);\n }\n });\n }\n }\n\n private _sendPendingComposition(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): void {\n this._cancelPendingFinalizer(pending);\n if (this._pendingComposition === pending) {\n this._pendingComposition = undefined;\n }\n const textareaInput = this._getPendingTextareaInput(pending, includeFollowingInput);\n const observedInput = this._removeAlreadySentData(\n pending.inputData || pending.keypressData,\n pending.dataAlreadySent\n );\n // Why: with no textarea, end, input, or keypress evidence the composition\n // was cancelled (e.g. Backspace over the whole preedit); stale\n // compositionupdate data must not be replayed as committed text.\n const input = this._mergeTextObservations(\n textareaInput || pending.endData || (observedInput ? pending.compositionData : ''),\n observedInput,\n pending.keypressMayOverlapComposition\n );\n this._sendCompositionInput(pending.transactionId, input, !pending.sessionEnded);\n this._settlePendingComposition(pending);\n }\n\n private _cancelPendingFinalizer(pending: IPendingComposition): void {\n if (pending.finalizerTimer === undefined) {\n return;\n }\n clearTimeout(pending.finalizerTimer);\n this._compositionTimers.delete(pending.finalizerTimer);\n pending.finalizerTimer = undefined;\n }\n\n private _settlePendingComposition(pending: IPendingComposition): void {\n if (pending.lifecycleSettled) {\n return;\n }\n pending.lifecycleSettled = true;\n this._dispatchCompositionTransactionSettled();\n }\n\n private _mergeTextObservations(\n candidate: string,\n observed: string,\n findShortestOrder: boolean\n ): string {\n if (!observed || candidate.includes(observed)) {\n return candidate;\n }\n if (!candidate || observed.includes(candidate)) {\n return observed;\n }\n if (findShortestOrder) {\n let candidateFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n candidateFirstOverlap > 0 &&\n !candidate.endsWith(observed.substring(0, candidateFirstOverlap))\n ) {\n candidateFirstOverlap--;\n }\n let observedFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n observedFirstOverlap > 0 &&\n !observed.endsWith(candidate.substring(0, observedFirstOverlap))\n ) {\n observedFirstOverlap--;\n }\n return candidateFirstOverlap > observedFirstOverlap\n ? candidate + observed.substring(candidateFirstOverlap)\n : observed + candidate.substring(observedFirstOverlap);\n }\n let overlap = Math.min(candidate.length, observed.length);\n while (overlap > 0 && !candidate.endsWith(observed.substring(0, overlap))) {\n overlap--;\n }\n return candidate + observed.substring(overlap);\n }\n\n private _updatePostCompositionInputExpectation(pending: IPendingComposition): void {\n pending.expectsPostCompositionInput =\n (pending.endData.length > 0 || pending.compositionData.length > 0) &&\n pending.inputData.length === 0 &&\n this._getPendingTextareaInput(pending).length === 0;\n }\n\n private _getPendingTextareaInput(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): string {\n const value = this._textarea.value;\n const start = pending.position.start + pending.dataAlreadySent.length;\n if (pending.nextCompositionStart !== undefined) {\n return value.substring(start, Math.max(start, pending.nextCompositionStart));\n }\n const suffixEnd =\n pending.suffix.length > 0 && value.endsWith(pending.suffix)\n ? value.length - pending.suffix.length\n : value.length;\n const compositionLength = (pending.endData || pending.compositionData).length;\n const observedEnd = includeFollowingInput\n ? suffixEnd\n : Math.max(pending.position.end, start + compositionLength);\n return value.substring(start, Math.max(start, Math.min(suffixEnd, observedEnd)));\n }\n\n private _getCompositionInput(start: number, suffix: string): string {\n const value = this._textarea.value;\n const valueEnd =\n suffix.length > 0 && value.endsWith(suffix) ? value.length - suffix.length : value.length;\n return value.substring(start, Math.max(start, valueEnd));\n }\n\n private _removeAlreadySentData(input: string, dataAlreadySent: string): string {\n if (dataAlreadySent.length === 0) {\n return input;\n }\n if (input.startsWith(dataAlreadySent)) {\n return input.substring(dataAlreadySent.length);\n }\n return dataAlreadySent.includes(input) ? '' : input;\n }\n\n private _cancelComposition(): void {\n const pending = this._pendingComposition;\n if (\n pending &&\n this._isComposing &&\n pending.transactionId !== this._compositionTransactionId\n ) {\n this._sendPendingComposition(pending);\n }\n const transactionId = this._isComposing\n ? this._compositionTransactionId\n : this._pendingComposition?.transactionId ?? 0;\n const settlesPending = pending !== undefined && this._pendingComposition === pending;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._textarea.value =\n this._textarea.value.substring(0, this._compositionPosition.start) + this._compositionSuffix;\n this._sendCompositionInput(transactionId, '');\n if (settlesPending && pending) {\n this._settlePendingComposition(pending);\n }\n }\n\n private _sendCompositionInput(\n transactionId: number,\n input: string,\n dispatchSessionEnd: boolean = true\n ): void {\n let prevented = false;\n if (dispatchSessionEnd) {\n const event = new CustomEvent(XTERM_COMPOSITION_SESSION_END_EVENT, {\n bubbles: true,\n cancelable: true,\n detail: { id: transactionId, data: input }\n });\n this._dispatchCompositionSessionEvent(event);\n prevented = event.defaultPrevented;\n }\n if (input.length > 0 && !prevented) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n\n private _endPendingCompositionSession(pending: IPendingComposition): void {\n if (pending.sessionEnded) {\n return;\n }\n pending.sessionEnded = true;\n const input =\n this._getPendingTextareaInput(pending) ||\n pending.endData ||\n pending.compositionData;\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_SESSION_END_EVENT,\n {\n bubbles: true,\n cancelable: true,\n detail: {\n id: pending.transactionId,\n data: input,\n dataPendingReconciliation: true\n }\n }\n ));\n }\n\n private _dispatchCompositionSessionEvent(event: CustomEvent): void {\n if (typeof this._textarea.dispatchEvent === 'function') {\n this._textarea.dispatchEvent(event);\n }\n }\n\n private _dispatchCompositionTransactionSettled(): void {\n this._dispatchCompositionSessionEvent(new CustomEvent(\n 'xterm-composition-transaction-settled',\n { bubbles: true }\n ));\n }\n\n private _deferCompositionEnd(endData: string): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n const transactionId = this._compositionTransactionId;\n const timer = this._defer(() => {\n if (\n this._compositionEndTimer !== timer ||\n !this._isComposing ||\n this._compositionTransactionId !== transactionId\n ) {\n return;\n }\n this._compositionEndTimer = undefined;\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n if (endData.length === 0 && !this._hasCompositionProgress()) {\n this._cancelComposition();\n }\n return;\n }\n this._finalizeComposition(true, endData);\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT,\n { bubbles: true }\n ));\n const pending = this._pendingComposition;\n if (pending?.transactionId === transactionId) {\n this._sendPendingComposition(pending, true);\n }\n });\n this._compositionEndTimer = timer;\n }\n\n /** How much of the textarea the IME currently owns; 0 means there is no preedit left. */\n private _composedRegionLength(): number {\n const end = this._textarea.value.length - this._compositionSuffix.length;\n return Math.max(0, end - this._compositionPosition.start);\n }\n\n /**\n * Re-derives the preedit from the textarea once the key that changed it has settled, and treats\n * a composition emptied that way as cancelled. Mirrors how native terminals clear a preedit on\n * the empty-marked-text state instead of on a specific key.\n */\n private _deferPreeditResync(hadPreedit: boolean): void {\n if (!hadPreedit || !this._isComposing) {\n return;\n }\n const transactionId = this._compositionTransactionId;\n this._defer(() => {\n if (\n this._isComposing &&\n this._compositionTransactionId === transactionId &&\n this._composedRegionLength() === 0\n ) {\n this._cancelComposition();\n }\n });\n }\n\n private _hasCompositionProgress(): boolean {\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n return this._compositionHasObservedProgress || (\n this._textarea.value !== this._compositionStartValue ||\n start !== this._compositionStartSelection.start ||\n end !== this._compositionStartSelection.end\n );\n }\n\n private _compositionEndBelongsToCurrentTransaction(endData: string): boolean {\n return (\n this._hasCompositionProgress() ||\n (endData.length > 0 && endData === this._lastCompositionData)\n );\n }\n\n private _defer(callback: () => void): ReturnType {\n const timer = setTimeout(() => {\n this._compositionTimers.delete(timer);\n callback();\n }, 0);\n this._compositionTimers.add(timer);\n return timer;\n }\n\n private _cancelDeferredTimer(timer?: ReturnType): void {\n if (timer === undefined) {\n return;\n }\n clearTimeout(timer);\n this._compositionTimers.delete(timer);\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n if (newValue !== oldValue) {\n this._imeKeydownAwaitingCommit = false;\n }\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Renders the preedit into the view and, when the cursor sits mid-line, the rest of the row\n * after it, so a composition reads as inserted text pushing the tail right rather than an opaque\n * box hiding the character under the cursor. Nothing reaches the pty while composing, so those\n * cells still hold their characters; only what the overlay shows changes.\n */\n private _renderCompositionView(data: string): void {\n if (!data) {\n this._resetCompositionView();\n return;\n }\n const doc = this._compositionView.ownerDocument;\n const preedit = doc.createElement('span');\n preedit.className = 'xterm-composition-preedit';\n // Underlined so the composing text stays distinguishable from the tail it pushed right.\n preedit.style.flexShrink = '0';\n preedit.style.textDecoration = 'underline';\n preedit.textContent = `‎${data}‎`;\n const caret = doc.createElement('span');\n caret.className = 'xterm-composition-caret';\n caret.setAttribute('aria-hidden', 'true');\n this._compositionView.replaceChildren(preedit, caret);\n this._compositionPreedit = preedit;\n this._compositionCaret = caret;\n this._compositionRemainder = undefined;\n this._renderCompositionRemainder(this._getRowRemainderText());\n this._styleCompositionCaret();\n }\n\n private _renderCompositionRemainder(data: string): void {\n if (!data) {\n this._compositionRemainder?.remove();\n this._compositionRemainder = undefined;\n return;\n }\n if (!this._compositionRemainder) {\n const remainder = this._compositionView.ownerDocument.createElement('span');\n remainder.className = 'xterm-composition-remainder';\n // Preserve padding cells before the trailing glyphs.\n remainder.style.whiteSpace = 'pre';\n this._compositionView.appendChild(remainder);\n this._compositionRemainder = remainder;\n }\n this._compositionRemainder.textContent = data;\n }\n\n /** The committed row text from the cursor rightwards — what a mid-line preedit would cover. */\n private _getRowRemainderText(): string {\n const buffer = this._bufferService.buffer;\n if (!buffer.isCursorInViewport) {\n return '';\n }\n const line = buffer.lines.get(buffer.ybase + buffer.y);\n // The explicit end column keeps this off the line string cache, whose self-renewing\n // idle-clear timer the composition path must not arm.\n return line\n ? line.translateToString(true, Math.min(buffer.x, this._bufferService.cols - 1), line.length)\n : '';\n }\n\n private _styleCompositionCaret(): void {\n const caret = this._compositionCaret;\n if (!caret) {\n return;\n }\n const width = Math.max(1, this._optionsService.rawOptions.cursorWidth);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const colors = this._themeService?.colors;\n const cursor = colors && (\n color.ensureContrastRatio(colors.background, colors.cursor, 3) ?? colors.cursor\n );\n caret.style.backgroundColor = cursor?.css ?? '#FFF';\n caret.style.display = 'inline-block';\n caret.style.flexShrink = '0';\n caret.style.height = cellHeight + 'px';\n caret.style.marginLeft = -width + 'px';\n caret.style.verticalAlign = 'top';\n caret.style.width = width + 'px';\n }\n\n private _resetCompositionView(): void {\n this._preeditRenderer?.clear();\n this._compositionView.textContent = '';\n this._compositionPreedit = undefined;\n this._compositionRemainder = undefined;\n this._compositionCaret = undefined;\n this._compositionView.style.display = '';\n this._compositionView.style.justifyContent = '';\n }\n\n /**\n * The theme background with any alpha dropped. The view masks the cells it draws over, so a\n * see-through background would re-expose the very characters the rendered tail stands in for.\n */\n private _opaqueViewBackground(): string {\n const background = this._themeService?.colors.background;\n return background ? color.opaque(background).css : '#000';\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n // Empty updates hide the overlay without ending the inferred transaction.\n if (!this._compositionView.classList.contains('active')) {\n return;\n }\n\n // A TUI can repaint the row under an open composition (spinners, streamed output), and this\n // already runs on every render — so keep the rendered tail current with the buffer. A string\n // compare adds no layout read.\n const rowRemainder = this._getRowRemainderText();\n if (\n this._compositionPreedit &&\n rowRemainder !== (this._compositionRemainder?.textContent ?? '')\n ) {\n this._renderCompositionRemainder(rowRemainder);\n }\n this._styleCompositionCaret();\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.setProperty('--xterm-composition-cell-width', this._renderService.dimensions.css.cell.width + 'px');\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n if (this._compositionPreedit && this._unicodeService && typeof Intl.Segmenter !== 'undefined') {\n this._preeditRenderer ??= new CompositionPreeditRenderer(\n this._unicodeService, this._compositionView.ownerDocument, () => this.updateCompositionElements(true)\n );\n this._preeditRenderer.render(this._compositionPreedit);\n }\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n const anchorBounds =\n (this._compositionPreedit ?? this._compositionView).getBoundingClientRect();\n const anchorLeft = cursorLeft + Math.min(0, maxWidth - anchorBounds.width);\n const showsRemainder =\n Boolean(this._compositionRemainder) && anchorBounds.width < maxWidth;\n if (this._compositionRemainder) {\n this._compositionRemainder.style.display = showsRemainder ? '' : 'none';\n }\n // End alignment keeps the caret visible when the preedit consumes the remaining width.\n this._compositionView.style.direction = 'ltr';\n this._compositionView.style.display = showsRemainder ? '' : 'flex';\n this._compositionView.style.justifyContent = showsRemainder ? '' : 'flex-end';\n // Themed rather than the stock #000/#FFF, so the pushed tail reads as ordinary terminal text\n // and light themes keep contrast.\n this._compositionView.style.background = this._opaqueViewBackground();\n this._compositionView.style.color = this._themeService?.colors.foreground.css ?? '#FFF';\n // Sized and placed to match the preedit, not the whole view, so the candidate window\n // anchors to the composing text rather than the end of the rendered tail. The clamp has to\n // be applied here and not only in Orca's terminal-ime-candidate-anchor.ts, because\n // CoreBrowserTerminal calls this from onRender as well as from composition events, and a\n // render can land after the last composition event that module can hear.\n this._textarea.style.left = anchorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(anchorBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(anchorBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = anchorBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = this._defer(() => this.updateCompositionElements(true));\n }\n }\n}\n\nconst CJK = /^[\\p{Script_Extensions=Han}\\p{Script_Extensions=Hiragana}\\p{Script_Extensions=Katakana}\\uac00-\\ud7a3\\u3131-\\u318e\\uff01-\\uff60]$/u;\nconst NATIVE = /[\\p{Mark}\\p{Extended_Pictographic}]/u;\nconst MAX_PREEDIT_LAYOUT_WORK = 128;\n\nclass CompositionPreeditRenderer extends Disposable {\n private readonly _segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n private _measure?: WidthCacheFontVariantCanvas;\n private _preedit?: HTMLElement;\n private _font = '';\n\n constructor(private readonly _unicodeService: IUnicodeService, doc: Document, refresh: () => void) {\n super();\n if (doc.fonts) {\n this._register(addDisposableListener(doc.fonts, 'loadingdone', () => {\n this._font = '';\n if (this._preedit) {\n refresh();\n }\n }));\n }\n }\n\n public clear(): void {\n this._preedit = undefined;\n this._font = '';\n }\n\n public override dispose(): void {\n this.clear();\n this._measure = undefined;\n super.dispose();\n }\n\n public render(preedit: HTMLElement): void {\n const doc = preedit.ownerDocument;\n const style = doc.defaultView?.getComputedStyle(preedit);\n if (!style) {\n return;\n }\n const font = [style.fontFamily, style.fontSize, style.fontWeight, style.fontStyle, doc.defaultView?.devicePixelRatio].join('|');\n if (this._preedit === preedit && this._font === font) {\n return;\n }\n this._preedit = preedit;\n this._font = font;\n const data = (preedit.textContent ?? '').slice(1, -1);\n const widths = new Map();\n const nodes: Node[] = [doc.createTextNode('‎')];\n let start = 0;\n let spacing: string | undefined;\n let work = 0;\n const emit = (end: number): void => {\n if (end === start) {\n return;\n }\n const text = data.slice(start, end);\n if (spacing === undefined) {\n nodes.push(doc.createTextNode(text));\n } else {\n const span = doc.createElement('span');\n span.style.letterSpacing = spacing;\n span.style.fontKerning = 'none';\n span.style.textDecoration = 'inherit';\n span.textContent = text;\n nodes.push(span);\n work++;\n }\n start = end;\n };\n for (const { segment, index } of this._segmenter.segment(data)) {\n // Bound cold measurements and styled runs without changing an already-corrected prefix.\n if (work >= MAX_PREEDIT_LAYOUT_WORK) {\n emit(index);\n spacing = undefined;\n break;\n }\n let nextSpacing: string | undefined;\n const columns = this._unicodeService.wcwidth(segment.codePointAt(0)!);\n if (CJK.test(segment) && !NATIVE.test(segment) && (columns === 2 || /^[\\uff61-\\uff9f]$/u.test(segment))) {\n let width = widths.get(segment);\n if (width === undefined) {\n this._measure ??= new WidthCacheFontVariantCanvas();\n this._measure.setFont(style.fontFamily, parseFloat(style.fontSize), parseFloat(style.fontWeight) || 400, style.fontStyle === 'italic');\n width = this._measure.measure(segment);\n widths.set(segment, width);\n work++;\n }\n nextSpacing = `calc(var(--xterm-composition-cell-width) * ${columns} - ${width}px)`;\n }\n if (nextSpacing !== spacing) {\n emit(index);\n spacing = nextSpacing;\n }\n }\n emit(data.length);\n nodes.push(doc.createTextNode('‎'));\n preedit.replaceChildren(...nodes);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n","/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nexport class WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n","import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices = new Set();\n private readonly _indicesByValue = new Map();\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._indicesByValue.clear();\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.clear();\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n private _rebuildIdentityIndex(): void {\n this._indicesByValue.clear();\n // Reverse indices let duplicate identities remove their first occurrence in O(1).\n for (let index = this._array.length - 1; index >= 0; index--) {\n const value = this._array[index];\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n this._indicesByValue.set(value, index);\n } else if (typeof indices === 'number') {\n this._indicesByValue.set(value, [indices, index]);\n } else {\n indices.push(index);\n }\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n // Marker disposal mutates the sort key before removal; identity stays stable.\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n return false;\n }\n const index = typeof indices === 'number' ? indices : indices.pop();\n if (index === undefined) {\n return false;\n }\n if (typeof indices === 'number' || indices.length === 0) {\n this._indicesByValue.delete(value);\n }\n if (this._deletedIndices.size === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.add(index);\n return true;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const newArray = new Array(this._array.length - this._deletedIndices.size);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (!this._deletedIndices.has(i)) {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._deletedIndices.clear();\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.size > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n²) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.303';\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n cell.extended = this._extendedAttrs[index]!;\n } else {\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n cell.extended = $extended;\n }\n return cell;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u2409', // '␉' (HT)\n 'c': '\\u240c', // '␌' (FF)\n 'd': '\\u240d', // '␍' (CR)\n 'e': '\\u240a', // '␊' (LF)\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '␤' (NL)\n 'i': '\\u240b', // '␋' (VT)\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec § \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" — i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(6081);\n"],"names":["root","factory","exports","module","define","amd","a","i","globalThis","Strings","__importStar","__webpack_require__","TimeBasedDebouncer_1","Lifecycle_1","Services_1","Services_2","Dom_1","AccessibilityManager","Disposable","constructor","_terminal","instantiationService","_coreBrowserService","_renderService","super","this","_rowColumns","WeakMap","_liveRegionLineCount","_charsToConsume","_charsToAnnounce","doc","mainDocument","_accessibilityContainer","createElement","classList","add","_rowContainer","setAttribute","_rowElements","rows","_createAccessibilityTreeNode","appendChild","_topBoundaryFocusListener","e","_handleBoundaryFocus","_bottomBoundaryFocusListener","addEventListener","length","_liveRegion","_liveRegionDebouncer","_register","TimeBasedDebouncer","_renderRows","bind","element","Error","insertAdjacentElement","onResize","_handleResize","onRender","_refreshRows","start","end","onScroll","onA11yChar","char","_handleChar","onLineFeed","onA11yTab","spaceCount","_handleTab","onKey","_handleKey","key","onBlur","_clearLiveRegion","onDimensionsChange","_refreshRowsDimensions","addDisposableListener","_handleSelectionChange","onDprChange","toDisposable","remove","shift","textContent","tooMuchOutput","get","keyChar","test","push","refresh","buffer","setSize","lines","toString","line","ydisp","columns","lineData","translateToString","undefined","posInSet","set","_alignRowWidth","_announceCharacters","position","boundaryElement","target","beforeBoundaryElement","getAttribute","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","removeChild","removeEventListener","newElement","unshift","scrollLines","focus","preventDefault","stopImmediatePropagation","selection","getSelection","isCollapsed","contains","anchorNode","clearSelection","focusNode","console","error","begin","node","offset","anchorOffset","focusOffset","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_FOLLOWING","childNodes","lastRowElement","slice","toRowColumn","rowElement","Text","parentNode","row","parseInt","isNaN","warn","column","cols","beginRowColumn","endRowColumn","select","children","tabIndex","_refreshRowDimensions","dimensions","css","cell","height","Object","assign","style","width","canvas","fontSize","options","transform","getBoundingClientRect","lastColumn","targetWidth","__decorate","__param","IInstantiationService","ICoreBrowserService","IRenderService","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","paste","textarea","coreService","optionsService","decPrivateModes","rawOptions","ignoreBracketedPasteMode","triggerDataEvent","value","moveTextAreaUnderMouseCursor","ev","screenElement","pos","left","clientX","top","clientY","zIndex","selectionService","clipboardData","setData","selectionText","stopPropagation","getData","shouldSelectWord","rightClickSelect","MultiKeyMap_1","_color","TwoKeyMap","_css","setCss","bg","fg","getCss","setColor","getColor","clear","Clipboard_1","OscLinkProvider_1","Viewport_1","BufferDecorationRenderer_1","OverviewRulerRenderer_1","CompositionHelper_1","DomRenderer_1","CharSizeService_1","CharacterJoinerService_1","CoreBrowserService_1","LinkProviderService_1","MouseCoordsService_1","MouseService_1","RenderService_1","SelectionService_1","ThemeService_1","KeyboardService_1","Color_1","CoreTerminal_1","Browser","BufferLine_1","XParseColor_1","DecorationService_1","InputHandler_1","AccessibilityManager_1","Linkifier_1","Event_1","CoreBrowserTerminal","CoreTerminal","linkifier","_linkifier","onFocus","_onFocus","event","_onBlur","_onA11yCharEmitter","_onA11yTabEmitter","onWillOpen","_onWillOpen","device","MutableDisposable","browser","_keyDownHandled","_keyDownSeen","_keyPressHandled","_unprocessedDeadKey","_accessibilityManager","_onCursorMove","Emitter","onCursorMove","_onKey","_onSelectionChange","onSelectionChange","_onTitleChange","onTitleChange","_onBell","onBell","_onDimensionsChange","_setup","_decorationService","_instantiationService","createInstance","DecorationService","setService","IDecorationService","_keyboardService","KeyboardService","IKeyboardService","_linkProviderService","LinkProviderService","ILinkProviderService","registerLinkProvider","OscLinkProvider","_inputHandler","onRequestBell","fire","onRequestRefreshRows","onRequestSendFocus","_reportFocus","onRequestReset","reset","onRequestWindowsOptionsReport","type","_reportWindowsOptions","onColor","_handleColorEvent","EventUtils","forward","_bufferService","_afterResize","_customKeyEventHandler","_themeService","req","acc","ident","index","colorRgb","color","toColorRGB","colors","ansi","toRgbString","modifyColors","channels","toColor","narrowedAcc","restoreColor","_reportColorScheme","colorSchemeMode","rgb","relativeLuminance","background","rgba","foreground","buffers","active","preventScroll","_handleScreenReaderModeOptionChange","_handleTextAreaFocus","sendFocus","_showCursor","blur","_handleTextAreaBlur","_compositionHelper","CompositionHelper","y","_syncTextArea","isCursorInViewport","isComposing","cursorY","ybase","bufferLine","cursorX","Math","min","x","cellHeight","getWidth","cellWidth","cursorTop","cursorLeft","lineHeight","_initGlobal","_bindKeys","hasSelection","copyHandler","_selectionService","pasteHandlerWrapper","handlePasteEvent","isFirefox","button","rightClickHandler","rightClickSelectsWord","isLinux","_keyUp","_keyDown","_keyPress","compositionstart","updateCompositionElements","compositionupdate","compositionend","dispatchEvent","CustomEvent","bubbles","_inputEvent","open","parent","isConnected","_logService","debug","ownerDocument","defaultView","window","_document","documentOverride","Document","dir","toggle","allowTransparency","onSpecificOptionChange","fragment","createDocumentFragment","_viewportElement","updateCursorStyle","_helperContainer","promptLabel","isChromeOS","readOnly","disableStdin","CoreBrowserService","document","_charSizeService","CharSizeService","ICharSizeService","ThemeService","IThemeService","onRequestColorSchemeQuery","onChangeColors","colorSchemeUpdates","_characterJoinerService","CharacterJoinerService","ICharacterJoinerService","RenderService","onRenderedViewportChange","_onRender","resize","_compositionView","dispose","_mouseCoordsService","MouseCoordsService","IMouseCoordsService","Linkifier","hasRenderer","setRenderer","_createRenderer","handleCursorMove","handleResize","handleBlur","handleFocus","_viewport","Viewport","onRequestScrollLines","SelectionService","ISelectionService","_mouseService","MouseService","IMouseService","amount","suppressScrollEvent","onRequestRedraw","handleSelectionChanged","columnSelectMode","onLinuxMouseSelection","any","_onScroll","queueSync","BufferDecorationRenderer","handleMouseDown","mouseStateService","areMouseEventsActive","mouseEventsRequireAlt","disable","enable","screenReaderMode","showScrollbar","scrollbar","overviewRulerWidth","_overviewRulerRenderer","OverviewRulerRenderer","shouldShow","measure","bindMouse","handleTouchScroll","disposable","DomRenderer","sync","refreshRows","shouldColumnSelect","isCursorInitialized","disp","scrollPages","pageCount","scrollToTop","scrollToBottom","disableSmoothScroll","scrollToLine","scrollAmount","data","attachCustomKeyEventHandler","customKeyEventHandler","attachCustomWheelEventHandler","customWheelEventHandler","setCustomWheelEventHandler","linkProvider","registerCharacterJoiner","handler","joinerId","register","deregisterCharacterJoiner","deregister","markers","registerMarker","cursorYOffset","addMarker","registerDecoration","decorationOptions","setSelection","getSelectionPosition","selectionStart","selectionEnd","selectAll","selectLines","shouldIgnoreComposition","isMac","macOptionIsMeta","altKey","keydown","scrollOnUserInput","result","evaluateKeyDown","scrollCount","_isThirdLevelShift","cancel","useKitty","useWin32InputMode","ctrlKey","metaKey","charCodeAt","wasModifierOnly","wasModifierKeyOnlyEvent","domEvent","thirdLevelKey","isWindows","getModifierState","keyCode","evaluateKeyUp","charCode","which","String","fromCharCode","keypress","inputType","input","composed","hasValidSize","clearAllMarkers","getBlankLine","DEFAULT_ATTR_DATA","clearTextureAtlas","WindowsOptionsReportType","GET_WIN_SIZE_PIXELS","canvasWidth","toFixed","canvasHeight","GET_CELL_SIZE_PIXELS","useCapture","domNode","bb","win","getWindow","scrollX","scrollY","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","sort","execute","animationFrameRunner","Async_1","candidateNode","candidateEvent","view","DomListener","_node","_type","_handler","_options","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","b","animationFrameState","Map","WindowIntervalTimer","IntervalTimer","_defaultTarget","cancelAndSet","interval","currentLink","_currentLink","_element","_linkCacheDisposables","_isMouseOut","_wasResized","_activeLine","_onShowLinkUnderline","onShowLinkUnderline","_onHideLinkUnderline","onHideLinkUnderline","_lastMouseEvent","_activeProviderReplies","_clearCurrentLink","_handleMouseMove","_handleMouseDown","_handleMouseUp","_positionFromMouseEvent","composedPath","_lastBufferCell","_handleHover","_askForLink","_linkAtPosition","link","useLineCache","forEach","reply","linkWithState","linkProvided","linkProviders","entries","existingReply","_checkLinkProviderResult","provideLinks","links","linksWithState","map","size","_removeIntersectingLinks","replies","occupiedCells","Set","providerReply","startX","range","endX","has","splice","hasLinkBefore","j","linkAtPosition","find","_handleNewLink","_mouseDownLink","activate","startRow","endRow","_linkLeave","decorations","underline","pointerCursor","isHovered","_linkHover","defineProperties","v","_fireUnderlineEvent","hover","showEvent","scrollOffset","_createLinkUnderlineEvent","leave","lower","upper","coords","getCoords","x1","y1","x2","y2","IBufferService","promptLabelInternal","tooMuchOutputInternal","CellData_1","_optionsService","_oscLinkService","_workCell","CellData","callback","linkHandler","lineLength","getTrimmedLength","currentLinkId","currentStart","finishLink","hasContent","loadCell","hasExtendedAttrs","extended","urlId","getLinkData","uri","_getRangeWithLineWrap","ignoreLink","allowNonHttpProtocols","parsed","URL","includes","protocol","defaultActivate","linkId","startY","finalStartX","endY","finalEndX","currentLine","isWrapped","previousLine","previousLineLength","_hasUrlId","previousStartX","nextLine","nextLineLength","nextEndX","confirm","newWindow","opener","location","href","IOptionsService","IOscLinkService","_renderCallback","_refreshCallbacks","_animationFrame","cancelAnimationFrame","addRefreshCallback","_innerRefresh","rowStart","rowEnd","rowCount","_rowCount","_rowStart","_rowEnd","max","_runRefreshCallbacks","_debounceThresholdMS","_lastRefreshMs","_additionalRefreshRequested","_refreshTimeoutID","clearTimeout","refreshRequestTime","performance","now","elapsed","waitPeriodBeforeTrailingRefresh","setTimeout","DEFAULT_ANSI_COLORS","freeze","r","g","toCss","toRgba","c","scrollableElement_1","scrollable_1","coreBrowserService","_coreService","themeService","_onRequestScrollLines","_isSyncing","_isHandlingScroll","_suppressOnScrollHandler","_needsSyncOnRender","scrollable","Scrollable","forceIntegerValues","smoothScrollDuration","scheduleAtNextAnimationFrame","cb","setSmoothScrollDuration","_scrollableElement","SmoothScrollableElement","vertical","horizontal","useShadows","mouseWheelSmoothScroll","verticalHasArrows","showArrows","_getChangeOptions","onMultipleOptionChange","updateOptions","onProtocolChange","handleMouseWheel","setScrollDimensions","scrollHeight","runAndSubscribe","backgroundColor","getDomNode","_styleElement","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","join","onBufferActivate","_latestYDisp","_sync","_handleScroll","getScrollPosition","setScrollPosition","reuseAnimation","scrollTop","verticalScrollbarSize","mouseWheelScrollSensitivity","scrollSensitivity","fastScrollSensitivity","_queuedAnimationFrame","synchronizedOutput","newRow","round","diff","translationY","ICoreService","IMouseStateService","_screenElement","_decorationElements","_altBufferIsActive","_dimensionsChanged","_container","_doRefreshDecorations","_queueRefresh","alt","onDecorationRegistered","onDecorationRemoved","decoration","_removeDecoration","_renderDecoration","_refreshStyle","_refreshXPosition","_createElement","layer","marker","display","onRenderEmitter","onDispose","delete","anchor","right","_zones","_zonePool","_zonePoolIndex","_linePadding","full","center","zones","addDecoration","overviewRulerOptions","z","_lineIntersectsZone","_lineAdjacentToZone","_addLineToZone","startBufferLine","endBufferLine","setPadding","padding","zone","ColorZoneStore_1","drawHeight","drawWidth","drawX","_width","_colorZoneStore","ColorZoneStore","_shouldUpdateDimensions","_shouldUpdateAnchor","_lastKnownBufferLength","_canvas","_refreshCanvasDimensions","parentElement","insertBefore","ctx","getContext","_ctx","normal","_refreshDrawHeightConstants","_refreshColorZonePadding","_refreshDrawConstants","outerWidth","floor","innerWidth","ceil","dpr","pixelsPerLine","nonFullHeight","_store","isDisposed","cssCanvasHeight","deviceCanvasHeight","_refreshDecorations","clearRect","lineWidth","_renderRulerOutline","_renderColorZone","fillStyle","overviewRulerBorder","fillRect","overviewRuler","showTopBorder","showBottomBorder","updateCanvasDimensions","updateAnchor","WidthCache_1","XTERM_COMPOSITION_SESSION_END_EVENT","_isComposing","hasPendingCompositionFinalization","_pendingComposition","_isSendingComposition","_pendingKeypressData","keypressData","_textarea","_unicodeService","_isAwaitingCompositionEnd","_compositionPosition","_compositionSuffix","_dataAlreadySent","_compositionInputData","_lastCompositionData","_compositionStartValue","_compositionStartSelection","_compositionHasObservedProgress","_compositionTransactionId","_compositionTimers","_imeKeydownAwaitingCommit","_cancelDeferredTimer","_compositionPositionTimer","_compositionViewTimer","_compositionEndTimer","_textareaChangeTimer","nextCompositionStart","substring","_resetCompositionView","_dispatchCompositionSessionEvent","detail","id","_hasCompositionProgress","_renderCompositionView","Boolean","transactionId","_defer","pending","endData","_updatePostCompositionInputExpectation","_compositionEndBelongsToCurrentTransaction","_sendPendingComposition","_deferCompositionEnd","_finalizeComposition","timer","_preeditRenderer","_canceledKey","code","timeStamp","_cancelComposition","_deferPreeditResync","_composedRegionLength","_handleAnyTextareaChanges","keypressMayOverlapComposition","expectsPostCompositionInput","_claimImeKeydownCommit","inputData","repeatsPendingTextareaInput","_getPendingTextareaInput","waitForPropagation","wasComposing","lifecycleSettled","sessionEnded","suffix","dataAlreadySent","compositionData","finalizerTimer","_getCompositionInput","_sendCompositionInput","includeFollowingInput","_cancelPendingFinalizer","textareaInput","observedInput","_removeAlreadySentData","_mergeTextObservations","_settlePendingComposition","_dispatchCompositionTransactionSettled","candidate","observed","findShortestOrder","candidateFirstOverlap","endsWith","observedFirstOverlap","overlap","suffixEnd","compositionLength","observedEnd","valueEnd","startsWith","settlesPending","dispatchSessionEnd","prevented","cancelable","defaultPrevented","_endPendingCompositionSession","dataPendingReconciliation","hadPreedit","oldValue","newValue","preedit","className","flexShrink","textDecoration","caret","replaceChildren","_compositionPreedit","_compositionCaret","_compositionRemainder","_renderCompositionRemainder","_getRowRemainderText","_styleCompositionCaret","remainder","whiteSpace","cursorWidth","cursor","ensureContrastRatio","marginLeft","verticalAlign","justifyContent","_opaqueViewBackground","opaque","dontRecurse","rowRemainder","setProperty","fontFamily","Intl","Segmenter","CompositionPreeditRenderer","render","maxWidth","overflow","anchorBounds","anchorLeft","showsRemainder","direction","IUnicodeService","CJK","NATIVE","_segmenter","granularity","_font","fonts","_preedit","_measure","getComputedStyle","font","fontWeight","fontStyle","devicePixelRatio","widths","nodes","createTextNode","spacing","work","emit","span","letterSpacing","fontKerning","segment","nextSpacing","wcwidth","codePointAt","WidthCacheFontVariantCanvas","setFont","parseFloat","getCoordsRelativeToElement","rect","elementStyle","leftPadding","getPropertyValue","topPadding","colCount","hasValidCharSize","cssCellWidth","cssCellHeight","isSelection","moveToRequestedRow","targetY","bufferService","applicationCursor","wrappedRowsForRow","rowsToMove","abs","wrappedRows","verticalDirection","wrappedRowsCount","repeat","sequence","currentRow","lineWraps","startCol","endCol","currentCol","bufferStr","translateBufferLineToString","count","str","rpt","targetX","hasScrollback","resetStartingRow","horizontalDirection","moveToRequestedCol","rowDifference","currX","colsFromRowEnd","CoreBrowserTerminal_1","AddonManager_1","BufferNamespaceApi_1","ParserApi_1","UnicodeApi_1","CONSTRUCTOR_ONLY_OPTIONS","$value","Terminal","_core","_addonManager","AddonManager","_publicOptions","getter","propName","setter","_checkReadonlyOptions","desc","defineProperty","_checkProposedApi","allowProposedApi","onBinary","onData","onWriteParsed","parser","_parser","ParserApi","unicode","UnicodeApi","_buffer","BufferNamespaceApi","modes","m","mouseTrackingMode","activeProtocol","applicationCursorKeysMode","applicationCursorKeys","applicationKeypadMode","applicationKeypad","insertMode","originMode","origin","reverseWraparoundMode","reverseWraparound","sendFocusMode","showCursor","isCursorHidden","synchronizedOutputMode","win32InputMode","wraparoundMode","wraparound","wasUserInput","_verifyIntegers","_verifyPositiveIntegers","write","writeln","loadAddon","addon","strings","values","Infinity","DomRendererRowFactory_1","Constants_1","RendererUtils_1","SelectionRenderModel_1","TextBlinkStateManager_1","nextTerminalId","_linkifier2","_terminalClass","_selectionRenderModel","createSelectionRenderModel","_lastSelectionColumnMode","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_onRequestRedraw","_refreshRowElements","_selectionContainer","createRenderDimensions","_updateDimensions","onOptionChange","_handleOptionsChanged","_injectCss","_rowFactory","DomRendererRowFactory","_handleLinkHover","_handleLinkLeave","_cursorBlinkStateManager","CursorBlinkStateManager","restartBlinkAnimation","_textBlinkStateManager","TextBlinkStateManager","_widthCache","_themeStyleElement","_dimensionsStyleElement","WidthCache","fontWeightBold","_setDefaultSpacing","styles","_terminalSelector","multiplyOpacity","blinkAnimationUnderlineId","blinkAnimationBarId","blinkAnimationBlockId","cursorAccent","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","INVERTED_DEFAULT_COLOR","defaultSpacing","handleDevicePixelRatioChange","handleCharSizeChanged","pause","renderRows","resume","handleViewportVisibilityChange","isVisible","setViewportVisible","oldViewportStart","oldViewportEnd","_lastSelectionStart","_lastSelectionEnd","update","viewportCappedStartRow","viewportCappedEndRow","newViewportStart","newViewportEnd","viewportStartRow","viewportEndRow","documentFragment","isXFlipped","_createSelectionElement","middleRowsCount","finalEndCol","renderStartRow","renderEndRow","cursorViewportRow","colStart","colEnd","fill","setNeedsBlinkInViewport","cursorAbsoluteY","cursorBlink","cursorStyle","cursorInactiveStyle","rowInfo","hasBlinkingCells","createRow","isBlinkOn","_setRowBlinkState","_updateTextBlinkState","_setCellUnderline","enabled","maxY","bufferline","_isIdlePaused","isFocused","_resetIdleTimer","_clearIdleTimer","_idleTimeout","_stopBlinkingDueToIdle","Constants_2","AttributeData_1","_columnSelectMode","_selectionStart","_selectionEnd","isCursorRow","blinkOn","widthCache","linkStart","linkEnd","elements","joinedRanges","getJoinedCharacters","charElement","getNoBgTrimmedLength","cellAmount","oldBg","oldFg","oldExt","oldLinkHover","oldSpacing","oldIsInSelection","skipJoinedCheckUntilX","classes","hasHover","isJoined","isValidJoinRange","lastCharX","firstSelectionState","_isCellInSelection","JoinedCellData","isInSelection","isCursorCell","isLinkHover","isBlink","isDecorated","forEachDecorationAtCell","d","chars","getChars","WHITESPACE_CELL_CHAR","isUnderline","isOverline","isBold","isItalic","selectionForeground","ext","isInvisible","isDim","underlineStyle","isUnderlineColorDefault","isUnderlineColorRGB","textDecorationColor","AttributeData","getUnderlineColor","drawBoldTextInBrightColors","isStrikethrough","getFgColor","fgColorMode","getFgColorMode","getBgColor","bgColorMode","getBgColorMode","isInverse","temp","temp2","bgOverride","fgOverride","resolvedBg","isTop","backgroundColorRGB","foregroundColorRGB","_addStyle","padStart","_applyMinimumContrast","minimumContrastRatio","treatGlyphAsBackgroundColor","getCode","cache","_getContrastCache","adjustedColor","ratio","halfContrastCache","contrastCache","canvasFactory","_flat","Float32Array","_fontSize","_weight","_weightBold","_canvasElements","_holey","weight","weightBold","bold","italic","cp","variant","OffscreenCanvas","throwIfFalsy","trim","measureText","isPowerlineGlyph","codepoint","isEmoji","glyphSizeX","deviceCellWidth","isNerdFontGlyph","isBoxOrBlockGlyph","currentOffset","SelectionRenderModel","terminal","viewportY","isCellSelected","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","duration","setIntervalDuration","blinkIntervalDuration","_clearInterval","isEnabled","needsBlinkInViewport","_updateIntervalState","_interval","wasBlinkOn","setInterval","clearInterval","dom","fastDomNode_1","globalPointerMoveMonitor_1","scrollbarArrow_1","scrollbarVisibilityController_1","widget_1","platform","AbstractScrollbar","Widget","opts","_lazyRender","lazyRender","_host","host","_scrollable","_scrollByPage","scrollByPage","_scrollbarState","scrollbarState","_visibilityController","ScrollbarVisibilityController","visibility","extraScrollbarClassName","setIsNeeded","isNeeded","_pointerMoveMonitor","GlobalPointerMoveMonitor","_shouldRender","FastDomNode","setDomNode","setPosition","_domNodePointerDown","_createArrow","arrow","ScrollbarArrow","bgDomNode","_createSlider","slider","setClassName","setTop","setLeft","setWidth","setHeight","setLayerHinting","setContain","_sliderPointerDown","_onclick","leftButton","_handleElementSize","visibleSize","setVisibleSize","_handleElementScrollSize","elementScrollSize","setScrollSize","_handleElementScrollPosition","elementScrollPosition","beginReveal","setShouldBeVisible","beginHide","_renderDomNode","getRectangleLargeSize","getRectangleSmallSize","_updateSlider","getSliderSize","getArrowSize","getSliderPosition","_handlePointerDown","delegatePointerDown","domTop","getClientRects","sliderStart","sliderStop","pointerPos","_sliderPointerPosition","offsetX","offsetY","domNodePosition","getDomNodePagePosition","pageX","pageY","_pointerDownRelativePosition","_setDesiredScrollPositionNow","getDesiredScrollPositionFromOffsetPaged","getDesiredScrollPositionFromOffset","Element","initialPointerPosition","initialPointerOrthogonalPosition","_sliderOrthogonalPointerPosition","initialScrollbarState","clone","toggleClassName","startMonitoring","pointerId","buttons","pointerMoveData","pointerOrthogonalPosition","pointerOrthogonalDelta","pointerDelta","getDesiredScrollPositionFromDelta","handleDragEnd","handleDragStart","_desiredScrollPosition","desiredScrollPosition","writeScrollPosition","setScrollPositionNow","updateScrollbarSize","scrollbarSize","_updateScrollbarSize","setScrollbarSize","numberAsPixels","_height","_top","_left","_bottom","_right","_className","_position","_layerHint","_contain","setBottom","bottom","setRight","shouldHaveIt","layerHint","contain","name","_hooks","DisposableStore","_pointerMoveCallback","_onStopCallback","stopMonitoring","invokeStopCallback","isMonitoring","onStopCallback","initialElement","initialButtons","pointerMoveCallback","eventSource","setPointerCapture","releasePointerCapture","abstractScrollbar_1","scrollbarState_1","HorizontalScrollbar","scrollDimensions","getScrollDimensions","scrollPosition","getCurrentScrollPosition","ScrollbarState","horizontalHasArrows","horizontalScrollbarSize","scrollWidth","scrollLeft","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","handleScroll","setOppositeScrollbarSize","setVisibility","sameOriginWindowChainCache","getParentWindowIfSameOrigin","w","parentLocation","IframeUtils","_getSameOriginWindowChain","windowChainCache","WeakRef","iframeElement","frameElement","getPositionOfChildWindowRelativeToAncestorWindow","childWindow","ancestorWindow","windowChain","windowChainEl","windowInChain","deref","boundingRect","timestamp","Date","browserEvent","middleButton","rightButton","shiftKey","posx","posy","body","documentElement","iframeOffsets","deltaX","deltaY","targetNode","srcElement","shouldFactorDPR","isChrome","chromeVersionMatch","navigator","userAgent","match","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","wheelDeltaX","isSafari","HORIZONTAL_AXIS","wheelDelta","ScrollState","_forceIntegerValues","_scrollStateBrand","rawScrollLeft","rawScrollTop","equals","other","withScrollDimensions","useRawScrollPositions","withScrollPosition","createScrollEvent","previous","inSmoothScrolling","widthChanged","scrollWidthChanged","scrollLeftChanged","heightChanged","scrollHeightChanged","scrollTopChanged","oldWidth","oldScrollWidth","oldScrollLeft","oldHeight","oldScrollHeight","oldScrollTop","_scrollableBrand","_smoothScrollDuration","_scheduleAtNextAnimationFrame","_state","_smoothScrolling","validateScrollPosition","newState","_setState","acceptScrollDimensions","getFutureScrollPosition","to","setScrollPositionSmooth","validTarget","newSmoothScrolling","SmoothScrollingOperation","from","startTime","animationFrameDisposable","_performSmoothScrolling","hasPendingScrollAnimation","tick","isDone","oldState","SmoothScrollingUpdate","createEaseOutCubic","delta","completion","t","pow","_initAnimations","_scrollLeft","_initAnimation","_scrollTop","viewportSize","stop1","stop2","cut","_tick","newScrollLeft","newScrollTop","mouseEvent_1","horizontalScrollbar_1","verticalScrollbar_1","MouseWheelClassifierItem","score","MouseWheelClassifier","_capacity","_memory","_front","_rear","isPhysicalMouseWheel","remainingInfluence","iteration","influence","acceptStandardWheelEvent","pageZoomFactor","getZoomFactor","accept","previousItem","_computeScore","_isAlmostInt","absDeltaX","absDeltaY","absPreviousDeltaX","absPreviousDeltaY","minDeltaX","minDeltaY","maxDeltaX","maxDeltaY","INSTANCE","resolvedScrollable","ownsScrollable","flipAxes","consumeMouseWheelIfScrollbarIsNeeded","alwaysConsumeMouseWheel","scrollYToX","scrollPredominantAxis","listenOnDomNode","verticalSliderSize","resolveOptions","scrollbarHost","mouseWheelEvent","_handleMouseWheel","_handleDragStart","_handleDragEnd","_verticalScrollbar","VerticalScrollbar","_horizontalScrollbar","_domNode","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","_onmouseover","_handleMouseOver","_onmouseleave","_handleMouseLeave","_hideTimeout","TimeoutTimer","_isDragging","_mouseIsOver","_revealOnScroll","updateClassName","newClassName","newOptions","_render","delegateScrollFromMouseWheelEvent","StandardWheelEvent","shouldListen","onMouseWheel","passive","classifier","didScroll","shiftConvert","futureScrollPosition","deltaScrollTop","desiredScrollTop","deltaScrollLeft","desiredScrollLeft","consumeMouseWheel","_reveal","renderNow","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","_hide","_scheduleHide","_handleActivate","handleActivate","bgWidth","bgHeight","arrowSize","addStandardDisposableListener","_arrowPointerDown","_pointerdownRepeatTimer","_pointerdownScheduleRepeatTimer","oppositeScrollbarSize","scrollSize","_scrollbarSize","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","iVisibleSize","iScrollSize","iScrollPosition","setArrowSize","iArrowSize","_computeValues","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","desiredSliderPosition","correctedOffset","visibleClassName","invisibleClassName","_visibility","_visibleClassName","_invisibleClassName","_isVisible","_isNeeded","_rawShouldBeVisible","_shouldBeVisible","_revealTimer","_updateShouldBeVisible","rawShouldBeVisible","_applyVisibilitySetting","shouldBeVisible","ensureVisibility","setIfNotSet","withFadeAway","DomUtils","mainWindow","tail","array","n","LinkedListNode","Undefined","prev","LinkedList","_first","_last","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","Symbol","iterator","EventType","TAP","START","END","CONTEXT_MENU","Gesture","_dispatched","_targets","_ignoreTargets","_activeTouches","_handle","_lastSetTapCountTime","_handleTouchStart","_handleTouchEnd","_handleTouchMove","addTarget","isTouchDevice","None","_instance","ignoreTarget","maxTouchPoints","len","targetTouches","touch","identifier","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","evt","_newGestureEvent","_dispatchEvent","activeTouchCount","keys","changedTouches","hasOwnProperty","holdTime","_holdDelay","finalX","finalY","deltaT","dispatchTo","filter","_inertia","createEvent","initEvent","tapCount","currentTime","getTime","setTapCount","_clearTapCountTime","targets","depth","t1","vX","dirX","vY","dirY","deltaPosX","deltaPosY","stopped","_scrollFriction","translationX","_target","descriptor","fnKey","fn","memoizeKey","args","configurable","enumerable","writable","apply","hasArrows","_arrowScrollDelta","_setArrows","_arrowScroll","currentPosition","_arrowUp","_arrowDown","arrowDelta","_updateArrowSize","listener","StandardMouseEvent","isSelectAllActive","selectionStartLength","finalSelectionStart","areSelectionValuesReversed","finalSelectionEnd","startPlusLength","handleTrim","_onCharSizeChange","onCharSizeChange","_measureStrategy","TextMetricsMeasureStrategy","DomMeasureStrategy","BaseMeasureStategy","_result","_validateAndSet","_parentElement","_measureElement","Number","offsetWidth","offsetHeight","metrics","fontBoundingBoxAscent","fontBoundingBoxDescent","firstCell","content","combinedData","isCombined","setFromCharData","getAsCharData","_characterJoiners","_nextCharacterJoinerId","joiner","ranges","lineStr","trimmedLength","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","getFg","rangeAttrBG","getBg","_getJoinedRanges","startIndex","endIndex","allJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","getString","newRange","inRange","_window","_isFocused","_cachedIsFocused","_onDprChange","_onWindowChange","onWindowChange","_screenDprMonitor","ScreenDprMonitor","setWindow","hasFocus","queueMicrotask","_parentWindow","_windowResizeListener","_outerListener","_setDprAndFireIfDiffers","_currentDevicePixelRatio","_updateDpr","_setWindowResizeListener","clearListener","parentWindow","_resolutionMediaMatchList","removeListener","matchMedia","addListener","Keyboard_1","KittyKeyboard_1","Win32InputMode_1","Platform_1","_getWin32InputMode","_win32InputMode","Win32InputMode","_getKittyKeyboard","_kittyKeyboard","KittyKeyboard","evaluateKeyboardEvent","kittyFlags","kittyKeyboard","flags","evaluate","vtExtensions","shouldUseProtocol","providerIndex","indexOf","Mouse_1","getMouseReportCoords","col","touch_1","_mouseStateService","_lastEvent","_wheelPartialScroll","_touchScrollAccumulator","mouseupListener","mousedragListener","requestedEvents","mouseup","wheel","mousedrag","mousemove","eventListeners","_handleWheel","_handleMouseDrag","_altMouseCursor","AltMouseCursorController","events","_handleProtocolChange","_syncMouseModeState","_handlePassiveWheel","_handleTouchChange","_sendEvent","but","action","overrideType","allowCustomWheelEvent","_consumeWheelEvent","stripAltFromReport","_triggerMouseEvent","ctrl","shouldForceSelection","targetDocument","listenerDocument","_handleTouchScrollAsWheel","_handleTouchScrollAsKeys","trunc","resetClass","logLevel","_explainEvents","_applyScrollModifier","targetWheelEventPixels","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_PAGE","_equalEvents","isPixelEncoding","restrictMouseEvent","report","encodeMouseEvent","isDefaultEncoding","triggerBinaryEvent","down","up","drag","move","pixels","ILogService","_isActive","_listeners","store","syncFromModifier","_updateClass","altHeld","RenderDebouncer_1","TaskQueue_1","_renderer","decorationService","_observerDisposable","_isPaused","_needsFullRefresh","_isNextRenderRedrawOnly","_needsSelectionRefresh","_canvasWidth","_canvasHeight","_selectionState","_onRenderedViewportChange","_onRefreshRequest","onRefreshRequest","_pausedResizeTask","DebouncedIdleTask","_renderDebouncer","RenderDebouncer","_syncOutputHandler","SynchronizedOutputHandler","_fullRefresh","_registerIntersectionObserver","observer","IntersectionObserver","_handleIntersectionChange","threshold","_intersectionObserver","disconnect","observe","entry","isIntersecting","intersectionRatio","flush","isRedrawOnly","bufferRows","buffered","_fireOnCanvasResize","renderer","_onTimeout","_start","_end","_isBuffering","_timeout","MoveToCell_1","SelectionModel_1","BufferRange_1","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","RegExp","_dragScrollAmount","_enabled","_trimListener","_mouseDownTimeStamp","_oldHasSelection","_oldSelectionStart","_oldSelectionEnd","_onLinuxMouseSelection","_onRedrawRequest","_mouseMoveListener","_mouseUpListener","onUserInput","onTrim","_handleTrim","_handleBufferActivate","_model","SelectionModel","_activeSelectionMode","_removeMouseDownListeners","rowsChanged","lineText","startRowEndCol","isLinuxMouseSelection","_refreshAnimationFrame","_refresh","_isClickInSelection","_getMouseBufferCoords","_areCoordsInSelection","isCellInSelection","_selectWordAtCursor","allowWhitespaceOnlySelection","getRangeLength","_selectWordAt","_getMouseEventScrollAmount","terminalHeight","macOptionClickForcesSelection","_handleIncrementalClick","_handleSingleClick","_handleDoubleClick","_handleTripleClick","_addMouseDownListeners","_dragScrollIntervalTimer","_dragScroll","hadSelection","_fireOnSelectionChange","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","altClickMovesCursor","coordinates","moveToCellSequence","_fireEventIfSelectionChanged","activeBuffer","_convertViewportColToCharacterIndex","charIndex","_getWordAt","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","_isCharWordSeparator","getCodePoint","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","wordSeparator","wrappedRange","getWrappedRangeForLine","first","last","ServiceRegistry_1","createDecorator","ColorContrastCache_1","Types_1","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","DEFAULT_OVERVIEW_RULER_BORDER","_colors","_contrastCache","ColorContrastCache","_halfContrastCache","_onChangeColors","selectionBackgroundTransparent","blend","selectionInactiveBackgroundTransparent","opacity","_updateRestoreColors","_setTheme","theme","parseColor","selectionBackground","selectionInactiveBackground","NULL_COLOR","isOpaque","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","extendedAnsi","colorCount","slot","_restoreColor","_restoreColors","cssString","fallback","millis","Promise","resolve","timeout","_token","_isDisposed","_isScheduled","_disposable","context","handle","CircularList","_maxLength","onDeleteEmitter","onDelete","onInsertEmitter","onInsert","onTrimEmitter","_array","Array","_startIndex","_length","maxLength","newMaxLength","newArray","_getCyclicIndex","newLength","recycle","isFull","deleteCount","items","countToTrim","trimStart","shiftElements","expandListBy","$r","$g","$b","$a","toPaddedHex","s","contrastRatio","l1","l2","color_1","toChannels","fgR","fgG","fgB","bgR","bgG","bgB","rgbaColor","factor","css_1","$ctx","$litmusColor","willReadFrequently","globalCompositeOperation","createLinearGradient","rgbaMatch","getImageData","rgb_1","relativeLuminance2","rs","gs","bs","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","InstantiationService_1","LogService_1","BufferService_1","OptionsService_1","CoreService_1","MouseStateService_1","UnicodeV6_1","UnicodeService_1","CharsetService_1","WindowsMode_1","WriteBuffer_1","OscLinkService_1","hasWriteSyncWarnHappened","_onScrollApi","_windowsWrappingHeuristics","_onBinary","_onData","_onLineFeed","_onResize","_onWriteParsed","InstantiationService","OptionsService","LogService","BufferService","CoreService","MouseStateService","unicodeService","UnicodeService","UnicodeV6","_charsetService","CharsetService","ICharsetService","OscLinkService","InputHandler","onRequestScrollToBottom","_writeBuffer","handleUserInput","_handleWindowsPtyOptionChange","markRangeDirty","scrollBottom","WriteBuffer","promiseResult","parse","writeSync","maxSubsequentCalls","LogLevelEnum","WARN","flushSync","scroll","eraseAttr","registerEscHandler","registerDcsHandler","registerCsiHandler","registerOscHandler","registerApcHandler","windowsPty","backend","buildNumber","_enableWindowsWrappingHeuristics","disposables","updateWindowsModeWrappedState","final","_disposed","_event","thisArgs","idx","isArray","call","listeners","initial","Charsets_1","EscapeSequenceParser_1","TextDecoder_1","OscParser_1","DcsParser_1","ApcParser_1","Version_1","GLEVEL","paramToWindowOption","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","$temp","getAttrData","_curAttrData","EscapeSequenceParser","_parseBuffer","Uint32Array","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","_eraseAttrDataInternal","_onRequestBell","_onRequestRefreshRows","_onRequestReset","_onRequestSendFocus","_onRequestSyncScrollBar","onRequestSyncScrollBar","_onRequestWindowsOptionsReport","_onA11yChar","_onA11yTab","_onColor","_onRequestColorSchemeQuery","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","_dirtyRowTracker","DirtyRowTracker","_activeBuffer","setCsiHandlerFallback","params","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","setOscHandlerFallback","setDcsHandlerFallback","payload","setApcHandlerFallback","setPrintHandler","print","insertChars","intermediates","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","sendXtVersion","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","selectProtected","requestMode","kittyKeyboardSet","kittyKeyboardQuery","kittyKeyboardPush","kittyKeyboardPop","setExecuteHandler","bell","lineFeed","carriageReturn","backspace","tab","shiftOut","shiftIn","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setHyperlink","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","CHARSETS","selectCharset","screenAlignmentPattern","setErrorHandler","DcsHandler","requestStatusString","_preserveStack","_logSlowResolvingAsync","p","slowTimeout","slowPromise","_res","rej","race","then","err","_getCurrentLinkId","wasPaused","DEBUG","prototype","TRACE","trace","split","clearRange","decode","subarray","viewportEnd","viewportStart","chWidth","charset","curAttr","bufferRow","markDirty","setCellFromCodepoint","precedingJoinState","ch","currentInfo","charProperties","extractWidth","shouldJoin","extractShouldJoin","stringFromCodePoint","addLineToLink","oldRow","oldCol","_eraseAttrData","BufferLine","copyCellsFrom","addCodepointToCell","insertCells","getNullCell","NULL_CELL_CODE","NULL_CELL_WIDTH","ApcHandler","convertEol","_restrictCursor","originalX","nextStop","maxCol","_setCursor","_moveCursor","diffToTop","diffToBottom","param","tabs","prevStop","_eraseInBufferLine","clearWrap","respectProtect","replaceCells","_resetBufferLine","clearMarkers","scrollOnEraseInDisplay","scrollBackSize","isUserScrolling","scrollBottomRowsOffset","scrollBottomAbsolute","deleteCells","joinState","idata","itext","tlength","copyWithin","_is","XTERM_VERSION","term","termName","setgCharset","DEFAULT_CHARSET","quirks","allowSetCursorBlink","activeEncoding","mainFlags","altFlags","activateAltBuffer","colorSchemeQuery","activateNormalBuffer","dm","mouseProtocol","mouseEncoding","cs","f","b2v","_updateAttrColor","mode","c1","c2","c3","fromColorRGB","_extractColor","attr","accu","cSpace","advance","hasSubParams","subparams","getSubParams","underlineColor","_processUnderline","updateExtended","_processSGR0","l","kittySgrBoldFaintControl","savedX","savedY","savedCurAttrData","savedCharset","isBlinking","second","savedCharsets","charsets","savedGlevel","glevel","savedOriginMode","savedWraparoundMode","slots","spec","exec","isValidColorIndex","_createHyperlink","_finishHyperlink","parsedParams","idParamIndex","findIndex","registerLink","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","level","yOffset","markAllDirty","isProtected","block","bar","stack","altStack","mainStack","arg","_disposables","o","_value","_data","third","fourth","_targetWindow","majorVersion","isNode","process","isLegacyEdge","_getKey","logService","_insertedValues","_isFlushingInserted","_deletedIndices","_indicesByValue","_isFlushingDeleted","_flushInsertedTask","IdleTaskQueue","_flushDeletedTask","insert","_flushCleanupDeleted","enqueue","_flushInserted","sortedAddedValues","sortedAddedValuesIndex","arrayIndex","newArrayIndex","_rebuildIdentityIndex","_flushCleanupInserted","indices","_flushDeleted","getKeyIterator","_search","forEachByKey","mid","midKey","StringBuilder","_chunks","append","chunk","_limit","_builder","limit","TaskQueue","_tasks","_i","task","_idleCallback","_cancelCallback","_requestCallback","_process","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","PriorityTaskQueue","_createDeadline","requestIdleCallback","cancelIdleCallback","_queue","lastChar","CHAR_DATA_CODE_INDEX","WHITESPACE_CELL_CODE","ExtendedAttrs","newObj","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","isEmpty","getUnderlineColorMode","isUnderlineColorPalette","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","_urlId","_ext","val","CircularList_1","BufferReflow_1","Marker_1","MAX_BUFFER_SIZE","Buffer","_hasScrollback","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_WIDTH","_isClearing","_memoryCleanupPosition","_cols","_rows","_getCorrectBufferLength","setupTabStops","_memoryCleanupQueue","getWhitespaceCell","relativeY","correctBufferLength","scrollback","fillViewportRows","fillAttr","newCols","newRows","nullCell","dirtyMemoryLines","addToY","amountToTrim","_isReflowEnabled","_reflow","_batchedMemoryCleanup","normalRun","counted","cleanupMemory","_reflowLarger","_reflowSmaller","reflowCursorLine","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","tabStopWidth","Marker","_removeMarker","$startIndex","$workCell","$extended","fillCellData","_combined","_extendedAttrs","_cacheValid","_cache","_cacheTrimmed","CHAR_DATA_ATTR_INDEX","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","codePoint","attrs","$idx","byteLength","uint32Cells","extKeys","copyFrom","blank","_copySparseMapsFrom","src","applyInReverse","srcData","_copyCellMapsFrom","outColumns","isCanonical","trimEnd","cellContents","srcStart","bufferCols","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","Buffer_1","BufferSet","_normalBuffer","_altBuffer","_onBufferActivate","_normal","_alt","inactiveBuffer","obj","combined","attributesEquals","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","_id","_nextId","_onDispose","h","k","q","u","A","B","C","R","Q","K","Y","E","Z","H","_","applicationCursorMode","modifiers","keyMapping","KEYCODE_KEY_MAPPINGS","keyString","toUpperCase","toLowerCase","_functionalKeyCodes","Escape","Enter","Tab","Backspace","CapsLock","ScrollLock","NumLock","PrintScreen","Pause","ContextMenu","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","F25","KP_0","KP_1","KP_2","KP_3","KP_4","KP_5","KP_6","KP_7","KP_8","KP_9","KP_Decimal","KP_Divide","KP_Multiply","KP_Subtract","KP_Add","KP_Enter","KP_Equal","ShiftLeft","ShiftRight","ControlLeft","ControlRight","AltLeft","AltRight","MetaLeft","MetaRight","MediaPlayPause","MediaStop","MediaTrackNext","MediaTrackPrevious","AudioVolumeDown","AudioVolumeUp","AudioVolumeMute","_csiTildeKeys","Insert","Delete","PageUp","PageDown","F5","F6","F7","F8","F9","F10","F11","F12","_csiLetterKeys","ArrowUp","ArrowDown","ArrowRight","ArrowLeft","Home","End","_ss3FunctionKeys","F1","F2","F3","F4","_getNumpadKeyCode","_getModifierKeyCode","_encodeModifiers","mods","_getKeyCode","macOptionAsAlt","numpadCode","modifierCode","funcCode","digit","_isModifierKey","_isLockKey","_buildCsiLetterSequence","letter","reportEventTypes","needsEventType","seq","_buildSs3Sequence","_buildCsiTildeSequence","number","_buildCsiUSequence","isFunc","isMod","shiftedKey","textCode","csiLetter","ss3Letter","tildeCode","specialKey","legacyByte","_interim","startPos","interim","Uint8Array","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","BMP_COMBINING","HIGH_COMBINING","table","version","num","ucs","bisearch","preceding","createPropertyValue","_codeToVk","KeyA","KeyB","KeyC","KeyD","KeyE","KeyF","KeyG","KeyH","KeyI","KeyJ","KeyK","KeyL","KeyM","KeyN","KeyO","KeyP","KeyQ","KeyR","KeyS","KeyT","KeyU","KeyV","KeyW","KeyX","KeyY","KeyZ","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","Numpad0","Numpad1","Numpad2","Numpad3","Numpad4","Numpad5","Numpad6","Numpad7","Numpad8","Numpad9","NumpadMultiply","NumpadAdd","NumpadSeparator","NumpadSubtract","NumpadDecimal","NumpadDivide","NumpadEnter","Space","Semicolon","Equal","Comma","Minus","Period","Slash","Backquote","BracketLeft","Backslash","BracketRight","Quote","IntlBackslash","_codeToScancode","_enhancedKeyCodes","_keyToControlChar","_getVirtualKeyCode","vk","_getScanCode","_getUnicodeChar","controlChar","_getControlKeyState","isKeyDown","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","_didUserInput","_innerWriteTimer","didProcess","_innerWrite","_scheduleInnerWrite","lastTime","continuation","catch","low","RGB_REX","base","HASH_REX","adv","bits","pad","s2","StringBuilder_1","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","registerHandler","handlerList","handlerIndex","clearHandler","setHandlerFallback","put","utf32ToString","success","handlerResult","LimitedStringBuilder","_payloadLimit","_hitLimit","ret","res","Params_1","unhook","hook","EMPTY_PARAMS","Params","addParam","_params","TransitionTable","Uint16Array","setDefault","addMany","codes","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","unused","PRINTABLES","EXECUTABLES","states","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_executeHandlersArr","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","DcsParser","_apcParser","ApcParser","_errorHandler","_identifier","finalRange","intermediate","finalCode","reverse","clearPrintHandler","clearEscHandler","clearExecuteHandler","clearCsiHandler","clearDcsHandler","clearOscHandler","clearApcHandler","clearErrorHandler","resetZdm","csiDone","addDigit","addSubParam","l4","collect","abort","handlersEsc","jj","_put","fromArray","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","_rejectDigits","_rejectSubDigits","_digitIsSub","newParams","getSubParamsAll","cur","_addons","instance","loadedAddon","_wrappedAddonDispose","BufferLineApiView_1","init","baseY","getLine","BufferLineApiView","_line","getCell","startColumn","endColumn","BufferApiView_1","_onBufferChange","onBufferChange","BufferApiView","_alternate","alternate","addCsiHandler","addDcsHandler","addEscHandler","addOscHandler","provider","versions","activeVersion","BufferSet_1","colsChanged","_cachedBlankLine","topRow","bottomRow","willBufferBeTrimmed","oldYdisp","_charsets","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_onRequestScrollToBottom","showCursorImmediately","structuredClone","SortedList_1","$xmin","$xmax","_decorations","_lineCache","DecorationLineCache","_onDecorationRegistered","_onDecorationRemoved","SortedList","attachToBufferLines","Decoration","markerDispose","getDecorationsAtCell","bucket","getDecorationsOnLine","_decorationsByLine","_bufferLineListeners","_lineIndexSyncTimer","MicrotaskTimer","_lineIndexSyncCallbacks","_addToLineBuckets","_removeFromLineBuckets","_handleBufferLinesTrim","_handleBufferLinesInsert","_handleBufferLinesDelete","_getDecorationHeight","_indexedStartLine","_reindexDecoration","_scheduleLineIndexSync","callbacks","newMap","_mergeLineBucket","_applyBufferLinesInsert","_applyBufferLinesDelete","existing","spanCrossers","deleteEnd","toReindex","_cachedBg","_cachedFg","foregroundColor","ServiceCollection","_entries","service","_services","getService","ctor","serviceDependencies","getServiceDependencies","serviceArgs","dependency","firstServiceArgPos","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_logLevel","_updateLogLevel","_evalLazyOptionalParams","optionalParams","_log","message","logger","log","DEFAULT_PROTOCOLS","NONE","restrict","X10","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","SGR","SGR_PIXELS","_protocols","_encodings","_activeProtocol","_activeEncoding","_onProtocolChange","addProtocol","addEncoding","encoding","_customWheelEventHandler","DEFAULT_OPTIONS","rescaleOverlappingGlyphs","FONT_WEIGHT_OPTIONS","_onOptionChange","defaultOptions","_sanitizeAndValidateOption","_setupOptions","eventKey","isCursorStyle","_entriesWithId","_dataByLinkId","_removeMarkerFromLink","castData","_getEntryIdKey","every","linkData","serviceRegistry","decorator","arguments","storeServiceDependency","_providers","_onChange","onChange","extractCharKind","_activeProvider","getStringCellWidth","precedingInfo","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} ++{"version":3,"file":"xterm.js","mappings":"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","sources":["webpack://@xterm/xterm/webpack/universalModuleDefinition","webpack://@xterm/xterm/./src/browser/AccessibilityManager.ts","webpack://@xterm/xterm/./src/browser/Clipboard.ts","webpack://@xterm/xterm/./src/browser/ColorContrastCache.ts","webpack://@xterm/xterm/./src/browser/CoreBrowserTerminal.ts","webpack://@xterm/xterm/./src/browser/Dom.ts","webpack://@xterm/xterm/./src/browser/Linkifier.ts","webpack://@xterm/xterm/./src/browser/LocalizableStrings.ts","webpack://@xterm/xterm/./src/browser/OscLinkProvider.ts","webpack://@xterm/xterm/./src/browser/RenderDebouncer.ts","webpack://@xterm/xterm/./src/browser/TimeBasedDebouncer.ts","webpack://@xterm/xterm/./src/browser/Types.ts","webpack://@xterm/xterm/./src/browser/Viewport.ts","webpack://@xterm/xterm/./src/browser/decorations/BufferDecorationRenderer.ts","webpack://@xterm/xterm/./src/browser/decorations/ColorZoneStore.ts","webpack://@xterm/xterm/./src/browser/decorations/OverviewRulerRenderer.ts","webpack://@xterm/xterm/./src/browser/input/CompositionHelper.ts","webpack://@xterm/xterm/./src/browser/input/Mouse.ts","webpack://@xterm/xterm/./src/browser/input/MoveToCell.ts","webpack://@xterm/xterm/./src/browser/public/Terminal.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRenderer.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/DomRendererRowFactory.ts","webpack://@xterm/xterm/./src/browser/renderer/dom/WidthCache.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/Constants.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/RendererUtils.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/SelectionRenderModel.ts","webpack://@xterm/xterm/./src/browser/renderer/shared/TextBlinkStateManager.ts","webpack://@xterm/xterm/./src/browser/scrollable/abstractScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/fastDomNode.ts","webpack://@xterm/xterm/./src/browser/scrollable/globalPointerMoveMonitor.ts","webpack://@xterm/xterm/./src/browser/scrollable/horizontalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/mouseEvent.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollable.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollableElement.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarArrow.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarState.ts","webpack://@xterm/xterm/./src/browser/scrollable/scrollbarVisibilityController.ts","webpack://@xterm/xterm/./src/browser/scrollable/touch.ts","webpack://@xterm/xterm/./src/browser/scrollable/verticalScrollbar.ts","webpack://@xterm/xterm/./src/browser/scrollable/widget.ts","webpack://@xterm/xterm/./src/browser/selection/SelectionModel.ts","webpack://@xterm/xterm/./src/browser/services/CharSizeService.ts","webpack://@xterm/xterm/./src/browser/services/CharacterJoinerService.ts","webpack://@xterm/xterm/./src/browser/services/CoreBrowserService.ts","webpack://@xterm/xterm/./src/browser/services/KeyboardService.ts","webpack://@xterm/xterm/./src/browser/services/LinkProviderService.ts","webpack://@xterm/xterm/./src/browser/services/MouseCoordsService.ts","webpack://@xterm/xterm/./src/browser/services/MouseService.ts","webpack://@xterm/xterm/./src/browser/services/RenderService.ts","webpack://@xterm/xterm/./src/browser/services/SelectionService.ts","webpack://@xterm/xterm/./src/browser/services/Services.ts","webpack://@xterm/xterm/./src/browser/services/ThemeService.ts","webpack://@xterm/xterm/./src/common/Async.ts","webpack://@xterm/xterm/./src/common/CircularList.ts","webpack://@xterm/xterm/./src/common/Color.ts","webpack://@xterm/xterm/./src/common/CoreTerminal.ts","webpack://@xterm/xterm/./src/common/Event.ts","webpack://@xterm/xterm/./src/common/InputHandler.ts","webpack://@xterm/xterm/./src/common/Lifecycle.ts","webpack://@xterm/xterm/./src/common/MultiKeyMap.ts","webpack://@xterm/xterm/./src/common/Platform.ts","webpack://@xterm/xterm/./src/common/SortedList.ts","webpack://@xterm/xterm/./src/common/StringBuilder.ts","webpack://@xterm/xterm/./src/common/TaskQueue.ts","webpack://@xterm/xterm/./src/common/Version.ts","webpack://@xterm/xterm/./src/common/WindowsMode.ts","webpack://@xterm/xterm/./src/common/buffer/AttributeData.ts","webpack://@xterm/xterm/./src/common/buffer/Buffer.ts","webpack://@xterm/xterm/./src/common/buffer/BufferLine.ts","webpack://@xterm/xterm/./src/common/buffer/BufferRange.ts","webpack://@xterm/xterm/./src/common/buffer/BufferReflow.ts","webpack://@xterm/xterm/./src/common/buffer/BufferSet.ts","webpack://@xterm/xterm/./src/common/buffer/CellData.ts","webpack://@xterm/xterm/./src/common/buffer/Constants.ts","webpack://@xterm/xterm/./src/common/buffer/Marker.ts","webpack://@xterm/xterm/./src/common/data/Charsets.ts","webpack://@xterm/xterm/./src/common/input/Keyboard.ts","webpack://@xterm/xterm/./src/common/input/KittyKeyboard.ts","webpack://@xterm/xterm/./src/common/input/TextDecoder.ts","webpack://@xterm/xterm/./src/common/input/UnicodeV6.ts","webpack://@xterm/xterm/./src/common/input/Win32InputMode.ts","webpack://@xterm/xterm/./src/common/input/WriteBuffer.ts","webpack://@xterm/xterm/./src/common/input/XParseColor.ts","webpack://@xterm/xterm/./src/common/parser/ApcParser.ts","webpack://@xterm/xterm/./src/common/parser/DcsParser.ts","webpack://@xterm/xterm/./src/common/parser/EscapeSequenceParser.ts","webpack://@xterm/xterm/./src/common/parser/OscParser.ts","webpack://@xterm/xterm/./src/common/parser/Params.ts","webpack://@xterm/xterm/./src/common/public/AddonManager.ts","webpack://@xterm/xterm/./src/common/public/BufferApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferLineApiView.ts","webpack://@xterm/xterm/./src/common/public/BufferNamespaceApi.ts","webpack://@xterm/xterm/./src/common/public/ParserApi.ts","webpack://@xterm/xterm/./src/common/public/UnicodeApi.ts","webpack://@xterm/xterm/./src/common/services/BufferService.ts","webpack://@xterm/xterm/./src/common/services/CharsetService.ts","webpack://@xterm/xterm/./src/common/services/CoreService.ts","webpack://@xterm/xterm/./src/common/services/DecorationService.ts","webpack://@xterm/xterm/./src/common/services/InstantiationService.ts","webpack://@xterm/xterm/./src/common/services/LogService.ts","webpack://@xterm/xterm/./src/common/services/MouseStateService.ts","webpack://@xterm/xterm/./src/common/services/OptionsService.ts","webpack://@xterm/xterm/./src/common/services/OscLinkService.ts","webpack://@xterm/xterm/./src/common/services/ServiceRegistry.ts","webpack://@xterm/xterm/./src/common/services/Services.ts","webpack://@xterm/xterm/./src/common/services/UnicodeService.ts","webpack://@xterm/xterm/webpack/bootstrap","webpack://@xterm/xterm/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(globalThis, () => {\nreturn ","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (␛).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.blur();\n }\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', (e: CompositionEvent) => {\n if (this._compositionHelper instanceof CompositionHelper) {\n if (this._compositionHelper.compositionend(e)) {\n this.textarea!.dispatchEvent(new CustomEvent(\n 'xterm-composition-transaction-accepted',\n { bubbles: true }\n ));\n }\n } else {\n this._compositionHelper!.compositionend();\n }\n }));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._register(toDisposable(() => {\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.dispose();\n }\n }));\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n if (!this._compositionHelper!.keypress?.(key)) {\n this.coreService.triggerDataEvent(key, true);\n }\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n if (\n ev.data &&\n ev.inputType === 'insertText' &&\n !this.optionsService.rawOptions.screenReaderMode &&\n this._compositionHelper instanceof CompositionHelper &&\n this._compositionHelper.input(ev.data)\n ) {\n return true;\n }\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): boolean | void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n keypress?(text: string): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n","/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n","/// \n/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService, IThemeService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService, IUnicodeService } from '../../common/services/Services';\nimport { WidthCacheFontVariantCanvas } from '../renderer/dom/WidthCache';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable } from '../../common/Lifecycle';\nimport { color } from '../../common/Color';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\ninterface IPendingComposition {\n transactionId: number;\n finalizerTimer?: ReturnType;\n lifecycleSettled: boolean;\n sessionEnded: boolean;\n position: IPosition;\n suffix: string;\n dataAlreadySent: string;\n compositionData: string;\n endData: string;\n inputData: string;\n keypressData: string;\n keypressMayOverlapComposition: boolean;\n expectsPostCompositionInput: boolean;\n nextCompositionStart?: number;\n}\n\nconst XTERM_COMPOSITION_SESSION_START_EVENT = 'xterm-composition-session-start';\nconst XTERM_COMPOSITION_SESSION_END_EVENT = 'xterm-composition-session-end';\nconst XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT =\n 'xterm-composition-transaction-accepted';\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n public get hasPendingCompositionFinalization(): boolean {\n return this._pendingComposition !== undefined;\n }\n public get _isSendingComposition(): boolean {\n return this.hasPendingCompositionFinalization;\n }\n public get _pendingKeypressData(): string {\n return this._pendingComposition?.keypressData ?? '';\n }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n private _pendingComposition?: IPendingComposition;\n\n private _isAwaitingCompositionEnd: boolean;\n\n private _compositionInputData: string;\n\n private _lastCompositionData: string;\n\n private _compositionStartValue: string;\n\n private _compositionStartSelection: IPosition;\n\n private _compositionHasObservedProgress: boolean;\n\n private _canceledKey?: Pick;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n /**\n * Whether the IME consumed the last keydown and still owes the commit it produced. Nothing is\n * forwarded for such a keydown, so the commit is claimed by whichever observes it first.\n */\n private _imeKeydownAwaitingCommit: boolean;\n\n /**\n * Identifies the composition transaction that owns deferred work.\n */\n private _compositionTransactionId: number;\n\n /**\n * Timers that still own deferred composition state.\n */\n private _compositionTimers: Set>;\n\n private _compositionPositionTimer?: ReturnType;\n\n private _compositionViewTimer?: ReturnType;\n\n private _compositionEndTimer?: ReturnType;\n\n private _preeditRenderer?: CompositionPreeditRenderer;\n\n /** The preedit's own span, used to anchor the native candidate window. */\n private _compositionPreedit?: HTMLElement;\n\n /** The rendered row tail, set only while the cursor sits mid-line. */\n private _compositionRemainder?: HTMLElement;\n\n /** The insertion caret painted above the renderer cursor the composition view covers. */\n private _compositionCaret?: HTMLElement;\n\n // Keep the six-argument form callable: upstream's own CompositionHelper.test.ts constructs\n // this class directly, and `.npmignore` strips src/**/*.test.ts from the published tarball, so\n // the shipped patch has no hunk that could update that call. Dropping this overload fails the\n // upstream build with TS2554. The theme service is therefore optional, and every color read\n // below keeps the stock fallback that path needs.\n constructor(\n textarea: HTMLTextAreaElement,\n compositionView: HTMLElement,\n bufferService: IBufferService,\n optionsService: IOptionsService,\n coreService: ICoreService,\n renderService: IRenderService\n );\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService,\n @IThemeService private readonly _themeService?: IThemeService,\n @IUnicodeService private readonly _unicodeService?: IUnicodeService\n ) {\n this._isComposing = false;\n this._isAwaitingCompositionEnd = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionStartValue = '';\n this._compositionStartSelection = { start: 0, end: 0 };\n this._compositionHasObservedProgress = false;\n this._compositionTransactionId = 0;\n this._compositionTimers = new Set();\n this._imeKeydownAwaitingCommit = false;\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = undefined;\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = undefined;\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionStartValue = this._textarea.value;\n this._compositionStartSelection = { start, end };\n this._compositionHasObservedProgress = false;\n // A real session owns everything it commits, so no keydown is left owing one.\n this._imeKeydownAwaitingCommit = false;\n if (this._pendingComposition) {\n this._pendingComposition.nextCompositionStart = this._compositionPosition.start;\n }\n this._compositionTransactionId++;\n this._isComposing = true;\n this._isAwaitingCompositionEnd = true;\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._resetCompositionView();\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionView.classList.add('active');\n this._dispatchCompositionSessionEvent(new CustomEvent(XTERM_COMPOSITION_SESSION_START_EVENT, {\n bubbles: true,\n detail: { id: this._compositionTransactionId }\n }));\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n if (ev.data && !this._isComposing) {\n this.compositionstart();\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (ev.data?.length > 0) {\n this._lastCompositionData = ev.data;\n }\n this._renderCompositionView(ev.data ?? '');\n // Some IMEs resume without compositionstart; keep that inferred transaction visible until\n // compositionend settles it. An empty update hides the overlay without ending the transaction.\n this._compositionView.classList.toggle('active', Boolean(ev.data));\n this.updateCompositionElements();\n const transactionId = this._compositionTransactionId;\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = this._defer(() => {\n if (this._isComposing && this._compositionTransactionId === transactionId) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n });\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(ev?: Pick): boolean {\n if (!this._isAwaitingCompositionEnd) {\n return false;\n }\n if (!this._isComposing) {\n const pending = this._pendingComposition;\n if (pending?.transactionId === this._compositionTransactionId) {\n pending.endData = ev?.data ?? '';\n this._updatePostCompositionInputExpectation(pending);\n }\n return false;\n }\n const endData = ev?.data ?? '';\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n const pending = this._pendingComposition;\n if (pending && pending.transactionId !== this._compositionTransactionId) {\n this._sendPendingComposition(pending);\n }\n this._deferCompositionEnd(endData);\n return false;\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._finalizeComposition(true, endData);\n return true;\n }\n\n public blur(): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._isComposing) {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n this._finalizeComposition(false);\n }\n }\n\n public dispose(): void {\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n for (const timer of this._compositionTimers) {\n clearTimeout(timer);\n }\n this._compositionTimers.clear();\n this._compositionPositionTimer = undefined;\n this._compositionViewTimer = undefined;\n this._compositionEndTimer = undefined;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionTransactionId++;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._preeditRenderer?.dispose();\n this._preeditRenderer = undefined;\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._canceledKey?.code === ev.code && this._canceledKey.timeStamp === ev.timeStamp) {\n this._canceledKey = undefined;\n return false;\n }\n if (ev.key === 'Escape' && (this._isComposing || this.hasPendingCompositionFinalization)) {\n this._canceledKey = { code: ev.code, timeStamp: ev.timeStamp };\n this._cancelComposition();\n return false;\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n // A key the IME swallows can also empty the preedit — backspacing over the last radical of a\n // Cangjie composition — and some IMEs report that with no composition event at all.\n this._deferPreeditResync(this._composedRegionLength() > 0);\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n // Nothing is forwarded for a keydown the IME consumed, so it is left owing its commit; any\n // other keydown either forwards its own text or produces none, and clears the debt.\n this._imeKeydownAwaitingCommit = ev.keyCode === 229;\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Defers keypress text while a composition finalizer is pending so all input is emitted once\n * after reconciliation with the final textarea candidate.\n */\n public keypress(text: string): boolean {\n const pending = this._pendingComposition;\n if (!pending) {\n return false;\n }\n if (pending.keypressMayOverlapComposition) {\n pending.keypressData += text;\n return true;\n }\n if (pending.expectsPostCompositionInput && pending.keypressData.length === 0) {\n pending.keypressData = text;\n return true;\n }\n this._sendPendingComposition(pending);\n return false;\n }\n\n public input(text: string): boolean {\n if (this._isComposing) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n this._compositionInputData += text;\n return true;\n }\n const pending = this._pendingComposition;\n if (!pending) {\n return this._claimImeKeydownCommit(text);\n }\n if (pending.expectsPostCompositionInput) {\n pending.inputData += text;\n pending.expectsPostCompositionInput = false;\n this._sendPendingComposition(pending);\n return true;\n }\n const repeatsPendingTextareaInput =\n text.length > 0 &&\n this._getPendingTextareaInput(pending) === text &&\n this._getPendingTextareaInput(pending, true) === text;\n this._sendPendingComposition(pending);\n if (!repeatsPendingTextareaInput) {\n this._coreService.triggerDataEvent(text, true);\n }\n return true;\n }\n\n /**\n * Settles the commit a keydown the IME consumed still owes. That commit normally arrives as the\n * deferred textarea diff, but an asynchronous IME can deliver it after the diff has already run\n * and found the textarea unchanged, and with the key still down the terminal drops the input\n * event instead (#12099). Whichever path sees the commit first sends it and cancels the other, so\n * an IME that commits before the diff runs still sends once.\n */\n private _claimImeKeydownCommit(text: string): boolean {\n if (!this._imeKeydownAwaitingCommit) {\n return false;\n }\n this._imeKeydownAwaitingCommit = false;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n this._coreService.triggerDataEvent(text, true);\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean, endData: string = ''): void {\n const wasComposing = this._isComposing;\n this._compositionView.classList.remove('active');\n // Cleared, not just hidden: a rendered tail left in the view is stale DOM the next composition\n // would have to correct before its own first update lands.\n this._resetCompositionView();\n this._isComposing = false;\n if (waitForPropagation && !wasComposing) {\n return;\n }\n\n if (!waitForPropagation) {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition, true);\n }\n if (wasComposing) {\n const input = this._getCompositionInput(\n this._compositionPosition.start + this._dataAlreadySent.length,\n this._compositionSuffix\n );\n this._sendCompositionInput(this._compositionTransactionId, input);\n }\n } else {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition);\n }\n const pending: IPendingComposition = {\n transactionId: this._compositionTransactionId,\n lifecycleSettled: false,\n sessionEnded: false,\n position: {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n },\n suffix: this._compositionSuffix,\n dataAlreadySent: this._dataAlreadySent,\n compositionData: this._lastCompositionData,\n endData,\n inputData: this._compositionInputData,\n keypressData: '',\n keypressMayOverlapComposition:\n this._lastCompositionData.length === 0 && endData.length === 0,\n expectsPostCompositionInput: false\n };\n this._updatePostCompositionInputExpectation(pending);\n this._pendingComposition = pending;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n pending.finalizerTimer = this._defer(() => {\n pending.finalizerTimer = undefined;\n if (this._compositionTransactionId === pending.transactionId) {\n this._isAwaitingCompositionEnd = false;\n }\n if (this._pendingComposition === pending) {\n this._sendPendingComposition(pending, true);\n }\n });\n }\n }\n\n private _sendPendingComposition(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): void {\n this._cancelPendingFinalizer(pending);\n if (this._pendingComposition === pending) {\n this._pendingComposition = undefined;\n }\n const textareaInput = this._getPendingTextareaInput(pending, includeFollowingInput);\n const observedInput = this._removeAlreadySentData(\n pending.inputData || pending.keypressData,\n pending.dataAlreadySent\n );\n // Why: with no textarea, end, input, or keypress evidence the composition\n // was cancelled (e.g. Backspace over the whole preedit); stale\n // compositionupdate data must not be replayed as committed text.\n const input = this._mergeTextObservations(\n textareaInput || pending.endData || (observedInput ? pending.compositionData : ''),\n observedInput,\n pending.keypressMayOverlapComposition\n );\n this._sendCompositionInput(pending.transactionId, input, !pending.sessionEnded);\n this._settlePendingComposition(pending);\n }\n\n private _cancelPendingFinalizer(pending: IPendingComposition): void {\n if (pending.finalizerTimer === undefined) {\n return;\n }\n clearTimeout(pending.finalizerTimer);\n this._compositionTimers.delete(pending.finalizerTimer);\n pending.finalizerTimer = undefined;\n }\n\n private _settlePendingComposition(pending: IPendingComposition): void {\n if (pending.lifecycleSettled) {\n return;\n }\n pending.lifecycleSettled = true;\n this._dispatchCompositionTransactionSettled();\n }\n\n private _mergeTextObservations(\n candidate: string,\n observed: string,\n findShortestOrder: boolean\n ): string {\n if (!observed || candidate.includes(observed)) {\n return candidate;\n }\n if (!candidate || observed.includes(candidate)) {\n return observed;\n }\n if (findShortestOrder) {\n let candidateFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n candidateFirstOverlap > 0 &&\n !candidate.endsWith(observed.substring(0, candidateFirstOverlap))\n ) {\n candidateFirstOverlap--;\n }\n let observedFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n observedFirstOverlap > 0 &&\n !observed.endsWith(candidate.substring(0, observedFirstOverlap))\n ) {\n observedFirstOverlap--;\n }\n return candidateFirstOverlap > observedFirstOverlap\n ? candidate + observed.substring(candidateFirstOverlap)\n : observed + candidate.substring(observedFirstOverlap);\n }\n let overlap = Math.min(candidate.length, observed.length);\n while (overlap > 0 && !candidate.endsWith(observed.substring(0, overlap))) {\n overlap--;\n }\n return candidate + observed.substring(overlap);\n }\n\n private _updatePostCompositionInputExpectation(pending: IPendingComposition): void {\n pending.expectsPostCompositionInput =\n (pending.endData.length > 0 || pending.compositionData.length > 0) &&\n pending.inputData.length === 0 &&\n this._getPendingTextareaInput(pending).length === 0;\n }\n\n private _getPendingTextareaInput(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): string {\n const value = this._textarea.value;\n const start = pending.position.start + pending.dataAlreadySent.length;\n if (pending.nextCompositionStart !== undefined) {\n return value.substring(start, Math.max(start, pending.nextCompositionStart));\n }\n const suffixEnd =\n pending.suffix.length > 0 && value.endsWith(pending.suffix)\n ? value.length - pending.suffix.length\n : value.length;\n const compositionLength = (pending.endData || pending.compositionData).length;\n const observedEnd = includeFollowingInput\n ? suffixEnd\n : Math.max(pending.position.end, start + compositionLength);\n return value.substring(start, Math.max(start, Math.min(suffixEnd, observedEnd)));\n }\n\n private _getCompositionInput(start: number, suffix: string): string {\n const value = this._textarea.value;\n const valueEnd =\n suffix.length > 0 && value.endsWith(suffix) ? value.length - suffix.length : value.length;\n return value.substring(start, Math.max(start, valueEnd));\n }\n\n private _removeAlreadySentData(input: string, dataAlreadySent: string): string {\n if (dataAlreadySent.length === 0) {\n return input;\n }\n if (input.startsWith(dataAlreadySent)) {\n return input.substring(dataAlreadySent.length);\n }\n return dataAlreadySent.includes(input) ? '' : input;\n }\n\n private _cancelComposition(): void {\n const pending = this._pendingComposition;\n if (\n pending &&\n this._isComposing &&\n pending.transactionId !== this._compositionTransactionId\n ) {\n this._sendPendingComposition(pending);\n }\n const transactionId = this._isComposing\n ? this._compositionTransactionId\n : this._pendingComposition?.transactionId ?? 0;\n const settlesPending = pending !== undefined && this._pendingComposition === pending;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._textarea.value =\n this._textarea.value.substring(0, this._compositionPosition.start) + this._compositionSuffix;\n this._sendCompositionInput(transactionId, '');\n if (settlesPending && pending) {\n this._settlePendingComposition(pending);\n }\n }\n\n private _sendCompositionInput(\n transactionId: number,\n input: string,\n dispatchSessionEnd: boolean = true\n ): void {\n let prevented = false;\n if (dispatchSessionEnd) {\n const event = new CustomEvent(XTERM_COMPOSITION_SESSION_END_EVENT, {\n bubbles: true,\n cancelable: true,\n detail: { id: transactionId, data: input }\n });\n this._dispatchCompositionSessionEvent(event);\n prevented = event.defaultPrevented;\n }\n if (input.length > 0 && !prevented) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n\n private _endPendingCompositionSession(pending: IPendingComposition): void {\n if (pending.sessionEnded) {\n return;\n }\n pending.sessionEnded = true;\n const input =\n this._getPendingTextareaInput(pending) ||\n pending.endData ||\n pending.compositionData;\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_SESSION_END_EVENT,\n {\n bubbles: true,\n cancelable: true,\n detail: {\n id: pending.transactionId,\n data: input,\n dataPendingReconciliation: true\n }\n }\n ));\n }\n\n private _dispatchCompositionSessionEvent(event: CustomEvent): void {\n if (typeof this._textarea.dispatchEvent === 'function') {\n this._textarea.dispatchEvent(event);\n }\n }\n\n private _dispatchCompositionTransactionSettled(): void {\n this._dispatchCompositionSessionEvent(new CustomEvent(\n 'xterm-composition-transaction-settled',\n { bubbles: true }\n ));\n }\n\n private _deferCompositionEnd(endData: string): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n const transactionId = this._compositionTransactionId;\n const timer = this._defer(() => {\n if (\n this._compositionEndTimer !== timer ||\n !this._isComposing ||\n this._compositionTransactionId !== transactionId\n ) {\n return;\n }\n this._compositionEndTimer = undefined;\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n if (endData.length === 0 && !this._hasCompositionProgress()) {\n this._cancelComposition();\n }\n return;\n }\n this._finalizeComposition(true, endData);\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT,\n { bubbles: true }\n ));\n const pending = this._pendingComposition;\n if (pending?.transactionId === transactionId) {\n this._sendPendingComposition(pending, true);\n }\n });\n this._compositionEndTimer = timer;\n }\n\n /** How much of the textarea the IME currently owns; 0 means there is no preedit left. */\n private _composedRegionLength(): number {\n const end = this._textarea.value.length - this._compositionSuffix.length;\n return Math.max(0, end - this._compositionPosition.start);\n }\n\n /**\n * Re-derives the preedit from the textarea once the key that changed it has settled, and treats\n * a composition emptied that way as cancelled. Mirrors how native terminals clear a preedit on\n * the empty-marked-text state instead of on a specific key.\n */\n private _deferPreeditResync(hadPreedit: boolean): void {\n if (!hadPreedit || !this._isComposing) {\n return;\n }\n const transactionId = this._compositionTransactionId;\n this._defer(() => {\n if (\n this._isComposing &&\n this._compositionTransactionId === transactionId &&\n this._composedRegionLength() === 0\n ) {\n this._cancelComposition();\n }\n });\n }\n\n private _hasCompositionProgress(): boolean {\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n return this._compositionHasObservedProgress || (\n this._textarea.value !== this._compositionStartValue ||\n start !== this._compositionStartSelection.start ||\n end !== this._compositionStartSelection.end\n );\n }\n\n private _compositionEndBelongsToCurrentTransaction(endData: string): boolean {\n return (\n this._hasCompositionProgress() ||\n (endData.length > 0 && endData === this._lastCompositionData)\n );\n }\n\n private _defer(callback: () => void): ReturnType {\n const timer = setTimeout(() => {\n this._compositionTimers.delete(timer);\n callback();\n }, 0);\n this._compositionTimers.add(timer);\n return timer;\n }\n\n private _cancelDeferredTimer(timer?: ReturnType): void {\n if (timer === undefined) {\n return;\n }\n clearTimeout(timer);\n this._compositionTimers.delete(timer);\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n if (newValue !== oldValue) {\n this._imeKeydownAwaitingCommit = false;\n }\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Renders the preedit into the view and, when the cursor sits mid-line, the rest of the row\n * after it, so a composition reads as inserted text pushing the tail right rather than an opaque\n * box hiding the character under the cursor. Nothing reaches the pty while composing, so those\n * cells still hold their characters; only what the overlay shows changes.\n */\n private _renderCompositionView(data: string): void {\n if (!data) {\n this._resetCompositionView();\n return;\n }\n const doc = this._compositionView.ownerDocument;\n const preedit = doc.createElement('span');\n preedit.className = 'xterm-composition-preedit';\n // Underlined so the composing text stays distinguishable from the tail it pushed right.\n preedit.style.flexShrink = '0';\n preedit.style.textDecoration = 'underline';\n preedit.textContent = `‎${data}‎`;\n const caret = doc.createElement('span');\n caret.className = 'xterm-composition-caret';\n caret.setAttribute('aria-hidden', 'true');\n this._compositionView.replaceChildren(preedit, caret);\n this._compositionPreedit = preedit;\n this._compositionCaret = caret;\n this._compositionRemainder = undefined;\n this._renderCompositionRemainder(this._getRowRemainderText());\n this._styleCompositionCaret();\n }\n\n private _renderCompositionRemainder(data: string): void {\n if (!data) {\n this._compositionRemainder?.remove();\n this._compositionRemainder = undefined;\n return;\n }\n if (!this._compositionRemainder) {\n const remainder = this._compositionView.ownerDocument.createElement('span');\n remainder.className = 'xterm-composition-remainder';\n // Preserve padding cells before the trailing glyphs.\n remainder.style.whiteSpace = 'pre';\n this._compositionView.appendChild(remainder);\n this._compositionRemainder = remainder;\n }\n this._compositionRemainder.textContent = data;\n }\n\n /** The committed row text from the cursor rightwards — what a mid-line preedit would cover. */\n private _getRowRemainderText(): string {\n const buffer = this._bufferService.buffer;\n if (!buffer.isCursorInViewport) {\n return '';\n }\n const line = buffer.lines.get(buffer.ybase + buffer.y);\n // The explicit end column keeps this off the line string cache, whose self-renewing\n // idle-clear timer the composition path must not arm.\n return line\n ? line.translateToString(true, Math.min(buffer.x, this._bufferService.cols - 1), line.length)\n : '';\n }\n\n private _styleCompositionCaret(): void {\n const caret = this._compositionCaret;\n if (!caret) {\n return;\n }\n const width = Math.max(1, this._optionsService.rawOptions.cursorWidth);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const colors = this._themeService?.colors;\n const cursor = colors && (\n color.ensureContrastRatio(colors.background, colors.cursor, 3) ?? colors.cursor\n );\n caret.style.backgroundColor = cursor?.css ?? '#FFF';\n caret.style.display = 'inline-block';\n caret.style.flexShrink = '0';\n caret.style.height = cellHeight + 'px';\n caret.style.marginLeft = -width + 'px';\n caret.style.verticalAlign = 'top';\n caret.style.width = width + 'px';\n }\n\n private _resetCompositionView(): void {\n this._preeditRenderer?.clear();\n this._compositionView.textContent = '';\n this._compositionPreedit = undefined;\n this._compositionRemainder = undefined;\n this._compositionCaret = undefined;\n this._compositionView.style.display = '';\n this._compositionView.style.justifyContent = '';\n }\n\n /**\n * The theme background with any alpha dropped. The view masks the cells it draws over, so a\n * see-through background would re-expose the very characters the rendered tail stands in for.\n */\n private _opaqueViewBackground(): string {\n const background = this._themeService?.colors.background;\n return background ? color.opaque(background).css : '#000';\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n // Empty updates hide the overlay without ending the inferred transaction.\n if (!this._compositionView.classList.contains('active')) {\n return;\n }\n\n // A TUI can repaint the row under an open composition (spinners, streamed output), and this\n // already runs on every render — so keep the rendered tail current with the buffer. A string\n // compare adds no layout read.\n const rowRemainder = this._getRowRemainderText();\n if (\n this._compositionPreedit &&\n rowRemainder !== (this._compositionRemainder?.textContent ?? '')\n ) {\n this._renderCompositionRemainder(rowRemainder);\n }\n this._styleCompositionCaret();\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.setProperty('--xterm-composition-cell-width', this._renderService.dimensions.css.cell.width + 'px');\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n if (this._compositionPreedit && this._unicodeService && typeof Intl.Segmenter !== 'undefined') {\n this._preeditRenderer ??= new CompositionPreeditRenderer(\n this._unicodeService, this._compositionView.ownerDocument, () => this.updateCompositionElements(true)\n );\n this._preeditRenderer.render(this._compositionPreedit);\n }\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n const anchorBounds =\n (this._compositionPreedit ?? this._compositionView).getBoundingClientRect();\n const anchorLeft = cursorLeft + Math.min(0, maxWidth - anchorBounds.width);\n const showsRemainder =\n Boolean(this._compositionRemainder) && anchorBounds.width < maxWidth;\n if (this._compositionRemainder) {\n this._compositionRemainder.style.display = showsRemainder ? '' : 'none';\n }\n // End alignment keeps the caret visible when the preedit consumes the remaining width.\n this._compositionView.style.direction = 'ltr';\n this._compositionView.style.display = showsRemainder ? '' : 'flex';\n this._compositionView.style.justifyContent = showsRemainder ? '' : 'flex-end';\n // Themed rather than the stock #000/#FFF, so the pushed tail reads as ordinary terminal text\n // and light themes keep contrast.\n this._compositionView.style.background = this._opaqueViewBackground();\n this._compositionView.style.color = this._themeService?.colors.foreground.css ?? '#FFF';\n // Sized and placed to match the preedit, not the whole view, so the candidate window\n // anchors to the composing text rather than the end of the rendered tail. The clamp has to\n // be applied here and not only in Orca's terminal-ime-candidate-anchor.ts, because\n // CoreBrowserTerminal calls this from onRender as well as from composition events, and a\n // render can land after the last composition event that module can hear.\n this._textarea.style.left = anchorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(anchorBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(anchorBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = anchorBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = this._defer(() => this.updateCompositionElements(true));\n }\n }\n}\n\nconst CJK = /^[\\p{Script_Extensions=Han}\\p{Script_Extensions=Hiragana}\\p{Script_Extensions=Katakana}\\uac00-\\ud7a3\\u3131-\\u318e\\uff01-\\uff60]$/u;\nconst NATIVE = /[\\p{Mark}\\p{Extended_Pictographic}]/u;\nconst MAX_PREEDIT_LAYOUT_WORK = 128;\n\nclass CompositionPreeditRenderer extends Disposable {\n private readonly _segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n private _measure?: WidthCacheFontVariantCanvas;\n private _preedit?: HTMLElement;\n private _font = '';\n\n constructor(private readonly _unicodeService: IUnicodeService, doc: Document, refresh: () => void) {\n super();\n if (doc.fonts) {\n this._register(addDisposableListener(doc.fonts, 'loadingdone', () => {\n this._font = '';\n if (this._preedit) {\n refresh();\n }\n }));\n }\n }\n\n public clear(): void {\n this._preedit = undefined;\n this._font = '';\n }\n\n public override dispose(): void {\n this.clear();\n this._measure = undefined;\n super.dispose();\n }\n\n public render(preedit: HTMLElement): void {\n const doc = preedit.ownerDocument;\n const style = doc.defaultView?.getComputedStyle(preedit);\n if (!style) {\n return;\n }\n const font = [style.fontFamily, style.fontSize, style.fontWeight, style.fontStyle, doc.defaultView?.devicePixelRatio].join('|');\n if (this._preedit === preedit && this._font === font) {\n return;\n }\n this._preedit = preedit;\n this._font = font;\n const data = (preedit.textContent ?? '').slice(1, -1);\n const widths = new Map();\n const nodes: Node[] = [doc.createTextNode('‎')];\n let start = 0;\n let spacing: string | undefined;\n let work = 0;\n const emit = (end: number): void => {\n if (end === start) {\n return;\n }\n const text = data.slice(start, end);\n if (spacing === undefined) {\n nodes.push(doc.createTextNode(text));\n } else {\n const span = doc.createElement('span');\n span.style.letterSpacing = spacing;\n span.style.fontKerning = 'none';\n span.style.textDecoration = 'inherit';\n span.textContent = text;\n nodes.push(span);\n work++;\n }\n start = end;\n };\n for (const { segment, index } of this._segmenter.segment(data)) {\n // Bound cold measurements and styled runs without changing an already-corrected prefix.\n if (work >= MAX_PREEDIT_LAYOUT_WORK) {\n emit(index);\n spacing = undefined;\n break;\n }\n let nextSpacing: string | undefined;\n const columns = this._unicodeService.wcwidth(segment.codePointAt(0)!);\n if (CJK.test(segment) && !NATIVE.test(segment) && (columns === 2 || /^[\\uff61-\\uff9f]$/u.test(segment))) {\n let width = widths.get(segment);\n if (width === undefined) {\n this._measure ??= new WidthCacheFontVariantCanvas();\n this._measure.setFont(style.fontFamily, parseFloat(style.fontSize), parseFloat(style.fontWeight) || 400, style.fontStyle === 'italic');\n width = this._measure.measure(segment);\n widths.set(segment, width);\n work++;\n }\n nextSpacing = `calc(var(--xterm-composition-cell-width) * ${columns} - ${width}px)`;\n }\n if (nextSpacing !== spacing) {\n emit(index);\n spacing = nextSpacing;\n }\n }\n emit(data.length);\n nodes.push(doc.createTextNode('‎'));\n preedit.replaceChildren(...nodes);\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n","/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nexport class WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const INVERTED_DEFAULT_COLOR = 257;\n\nexport const enum RendererConstants {\n /**\n * The idle time after which cursor blinking stops.\n */\n CURSOR_BLINK_IDLE_TIMEOUT = 5 * 60 * 1000\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n","import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n","/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n","/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices = new Set();\n private readonly _indicesByValue = new Map();\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._indicesByValue.clear();\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.clear();\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n private _rebuildIdentityIndex(): void {\n this._indicesByValue.clear();\n // Reverse indices let duplicate identities remove their first occurrence in O(1).\n for (let index = this._array.length - 1; index >= 0; index--) {\n const value = this._array[index];\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n this._indicesByValue.set(value, index);\n } else if (typeof indices === 'number') {\n this._indicesByValue.set(value, [indices, index]);\n } else {\n indices.push(index);\n }\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n // Marker disposal mutates the sort key before removal; identity stays stable.\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n return false;\n }\n const index = typeof indices === 'number' ? indices : indices.pop();\n if (index === undefined) {\n return false;\n }\n if (typeof indices === 'number' || indices.length === 0) {\n this._indicesByValue.delete(value);\n }\n if (this._deletedIndices.size === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.add(index);\n return true;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const newArray = new Array(this._array.length - this._deletedIndices.size);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (!this._deletedIndices.has(i)) {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._deletedIndices.clear();\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.size > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n²) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.304';\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n cell.extended = this.getExtended(index);\n return cell;\n }\n\n public getExtended(index: number): IExtendedAttrs {\n $startIndex = index * Constants.CELL_INDICIES;\n if (this._data[$startIndex + Cell.BG] & BgFlags.HAS_EXTENDED) {\n return this._extendedAttrs[index]!;\n }\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n $extended.payload = undefined;\n return $extended;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n","/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport const DEFAULT_COLOR = 0;\nexport const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);\nexport const DEFAULT_EXT = 0;\n\nexport const CHAR_DATA_ATTR_INDEX = 0;\nexport const CHAR_DATA_CHAR_INDEX = 1;\nexport const CHAR_DATA_WIDTH_INDEX = 2;\nexport const CHAR_DATA_CODE_INDEX = 3;\n\n/**\n * Null cell - a real empty cell (containing nothing).\n * Note that code should always be 0 for a null cell as\n * several test condition of the buffer line rely on this.\n */\nexport const NULL_CELL_CHAR = '';\nexport const NULL_CELL_WIDTH = 1;\nexport const NULL_CELL_CODE = 0;\n\n/**\n * Whitespace cell.\n * This is meant as a replacement for empty cells when needed\n * during rendering lines to preserve correct alignment.\n */\nexport const WHITESPACE_CELL_CHAR = ' ';\nexport const WHITESPACE_CELL_WIDTH = 1;\nexport const WHITESPACE_CELL_CODE = 32;\n\n/**\n * Bitmasks for accessing data in `content`.\n */\nexport const enum Content {\n /**\n * bit 1..21 codepoint, max allowed in UTF32 is 0x10FFFF (21 bits taken)\n * read: `codepoint = content & Content.CODEPOINT_MASK;`\n * write: `content |= codepoint & Content.CODEPOINT_MASK;`\n * shortcut if precondition `codepoint <= 0x10FFFF` is met:\n * `content |= codepoint;`\n */\n CODEPOINT_MASK = 0x1FFFFF,\n\n /**\n * bit 22 flag indicating whether a cell contains combined content\n * read: `isCombined = content & Content.IS_COMBINED_MASK;`\n * set: `content |= Content.IS_COMBINED_MASK;`\n * clear: `content &= ~Content.IS_COMBINED_MASK;`\n */\n IS_COMBINED_MASK = 0x200000, // 1 << 21\n\n /**\n * bit 1..22 mask to check whether a cell contains any string data\n * we need to check for codepoint and isCombined bits to see\n * whether a cell contains anything\n * read: `isEmpty = !(content & Content.HAS_CONTENT_MASK)`\n */\n HAS_CONTENT_MASK = 0x3FFFFF,\n\n /**\n * bit 23..24 wcwidth value of cell, takes 2 bits (ranges from 0..2)\n * read: `width = (content & Content.WIDTH_MASK) >> Content.WIDTH_SHIFT;`\n * `hasWidth = content & Content.WIDTH_MASK;`\n * as long as wcwidth is highest value in `content`:\n * `width = content >> Content.WIDTH_SHIFT;`\n * write: `content |= (width << Content.WIDTH_SHIFT) & Content.WIDTH_MASK;`\n * shortcut if precondition `0 <= width <= 3` is met:\n * `content |= width << Content.WIDTH_SHIFT;`\n */\n WIDTH_MASK = 0xC00000, // 3 << 22\n WIDTH_SHIFT = 22\n}\n\nexport const enum Attributes {\n /**\n * bit 1..8 blue in RGB, color in P256 and P16\n */\n BLUE_MASK = 0xFF,\n BLUE_SHIFT = 0,\n PCOLOR_MASK = 0xFF,\n PCOLOR_SHIFT = 0,\n\n /**\n * bit 9..16 green in RGB\n */\n GREEN_MASK = 0xFF00,\n GREEN_SHIFT = 8,\n\n /**\n * bit 17..24 red in RGB\n */\n RED_MASK = 0xFF0000,\n RED_SHIFT = 16,\n\n /**\n * bit 25..26 color mode: DEFAULT (0) | P16 (1) | P256 (2) | RGB (3)\n */\n CM_MASK = 0x3000000,\n CM_DEFAULT = 0,\n CM_P16 = 0x1000000,\n CM_P256 = 0x2000000,\n CM_RGB = 0x3000000,\n\n /**\n * bit 1..24 RGB room\n */\n RGB_MASK = 0xFFFFFF\n}\n\nexport const enum FgFlags {\n /**\n * bit 27..32\n */\n INVERSE = 0x4000000,\n BOLD = 0x8000000,\n UNDERLINE = 0x10000000,\n BLINK = 0x20000000,\n INVISIBLE = 0x40000000,\n STRIKETHROUGH = 0x80000000,\n}\n\nexport const enum BgFlags {\n /**\n * bit 27..32 (upper 2 unused)\n */\n ITALIC = 0x4000000,\n DIM = 0x8000000,\n HAS_EXTENDED = 0x10000000,\n PROTECTED = 0x20000000,\n OVERLINE = 0x40000000\n}\n\nexport const enum ExtFlags {\n /**\n * bit 27..29\n */\n UNDERLINE_STYLE = 0x1C000000,\n\n /**\n * bit 30..32\n *\n * An optional variant for the glyph, this can be used for example to offset underlines by a\n * number of pixels to create a perfect pattern.\n */\n VARIANT_OFFSET = 0xE0000000\n}\n\nexport const enum UnderlineStyle {\n NONE = 0,\n SINGLE = 1,\n DOUBLE = 2,\n CURLY = 3,\n DOTTED = 4,\n DASHED = 5\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n","/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '◆'\n 'a': '\\u2592', // '▒'\n 'b': '\\u2409', // '␉' (HT)\n 'c': '\\u240c', // '␌' (FF)\n 'd': '\\u240d', // '␍' (CR)\n 'e': '\\u240a', // '␊' (LF)\n 'f': '\\u00b0', // '°'\n 'g': '\\u00b1', // '±'\n 'h': '\\u2424', // '␤' (NL)\n 'i': '\\u240b', // '␋' (VT)\n 'j': '\\u2518', // '┘'\n 'k': '\\u2510', // '┐'\n 'l': '\\u250c', // '┌'\n 'm': '\\u2514', // '└'\n 'n': '\\u253c', // '┼'\n 'o': '\\u23ba', // '⎺'\n 'p': '\\u23bb', // '⎻'\n 'q': '\\u2500', // '─'\n 'r': '\\u23bc', // '⎼'\n 's': '\\u23bd', // '⎽'\n 't': '\\u251c', // '├'\n 'u': '\\u2524', // '┤'\n 'v': '\\u2534', // '┴'\n 'w': '\\u252c', // '┬'\n 'x': '\\u2502', // '│'\n 'y': '\\u2264', // '≤'\n 'z': '\\u2265', // '≥'\n '{': '\\u03c0', // 'π'\n '|': '\\u2260', // '≠'\n '}': '\\u00a3', // '£'\n '~': '\\u00b7' // '·'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '£'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '£',\n '@': '¾',\n '[': 'ij',\n '\\\\': '½',\n ']': '|',\n '{': '¨',\n '|': 'f',\n '}': '¼',\n '~': '´'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '£',\n '@': 'à',\n '[': '°',\n '\\\\': 'ç',\n ']': '§',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': '¨'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': 'à',\n '[': 'â',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n '`': 'ô',\n '{': 'é',\n '|': 'ù',\n '}': 'è',\n '~': 'û'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '§',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Ü',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'ß'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '£',\n '@': '§',\n '[': '°',\n '\\\\': 'ç',\n ']': 'é',\n '`': 'ù',\n '{': 'à',\n '|': 'ò',\n '}': 'è',\n '~': 'ì'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': 'Ä',\n '[': 'Æ',\n '\\\\': 'Ø',\n ']': 'Å',\n '^': 'Ü',\n '`': 'ä',\n '{': 'æ',\n '|': 'ø',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '£',\n '@': '§',\n '[': '¡',\n '\\\\': 'Ñ',\n ']': '¿',\n '{': '°',\n '|': 'ñ',\n '}': 'ç'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': 'É',\n '[': 'Ä',\n '\\\\': 'Ö',\n ']': 'Å',\n '^': 'Ü',\n '`': 'é',\n '{': 'ä',\n '|': 'ö',\n '}': 'å',\n '~': 'ü'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': 'ù',\n '@': 'à',\n '[': 'é',\n '\\\\': 'ç',\n ']': 'ê',\n '^': 'î',\n\n '_': 'è',\n '`': 'ô',\n '{': 'ä',\n '|': 'ö',\n '}': 'ü',\n '~': 'û'\n};\n","/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec § \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" — i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n","/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n","\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n","/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n","/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n","/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n","/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(6081);\n"],"names":["root","factory","exports","module","define","amd","a","i","globalThis","Strings","__importStar","__webpack_require__","TimeBasedDebouncer_1","Lifecycle_1","Services_1","Services_2","Dom_1","AccessibilityManager","Disposable","constructor","_terminal","instantiationService","_coreBrowserService","_renderService","super","this","_rowColumns","WeakMap","_liveRegionLineCount","_charsToConsume","_charsToAnnounce","doc","mainDocument","_accessibilityContainer","createElement","classList","add","_rowContainer","setAttribute","_rowElements","rows","_createAccessibilityTreeNode","appendChild","_topBoundaryFocusListener","e","_handleBoundaryFocus","_bottomBoundaryFocusListener","addEventListener","length","_liveRegion","_liveRegionDebouncer","_register","TimeBasedDebouncer","_renderRows","bind","element","Error","insertAdjacentElement","onResize","_handleResize","onRender","_refreshRows","start","end","onScroll","onA11yChar","char","_handleChar","onLineFeed","onA11yTab","spaceCount","_handleTab","onKey","_handleKey","key","onBlur","_clearLiveRegion","onDimensionsChange","_refreshRowsDimensions","addDisposableListener","_handleSelectionChange","onDprChange","toDisposable","remove","shift","textContent","tooMuchOutput","get","keyChar","test","push","refresh","buffer","setSize","lines","toString","line","ydisp","columns","lineData","translateToString","undefined","posInSet","set","_alignRowWidth","_announceCharacters","position","boundaryElement","target","beforeBoundaryElement","getAttribute","relatedTarget","topBoundaryElement","bottomBoundaryElement","pop","removeChild","removeEventListener","newElement","unshift","scrollLines","focus","preventDefault","stopImmediatePropagation","selection","getSelection","isCollapsed","contains","anchorNode","clearSelection","focusNode","console","error","begin","node","offset","anchorOffset","focusOffset","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_FOLLOWING","childNodes","lastRowElement","slice","toRowColumn","rowElement","Text","parentNode","row","parseInt","isNaN","warn","column","cols","beginRowColumn","endRowColumn","select","children","tabIndex","_refreshRowDimensions","dimensions","css","cell","height","Object","assign","style","width","canvas","fontSize","options","transform","getBoundingClientRect","lastColumn","targetWidth","__decorate","__param","IInstantiationService","ICoreBrowserService","IRenderService","prepareTextForTerminal","text","replace","bracketTextForPaste","bracketedPasteMode","paste","textarea","coreService","optionsService","decPrivateModes","rawOptions","ignoreBracketedPasteMode","triggerDataEvent","value","moveTextAreaUnderMouseCursor","ev","screenElement","pos","left","clientX","top","clientY","zIndex","selectionService","clipboardData","setData","selectionText","stopPropagation","getData","shouldSelectWord","rightClickSelect","MultiKeyMap_1","_color","TwoKeyMap","_css","setCss","bg","fg","getCss","setColor","getColor","clear","Clipboard_1","OscLinkProvider_1","Viewport_1","BufferDecorationRenderer_1","OverviewRulerRenderer_1","CompositionHelper_1","DomRenderer_1","CharSizeService_1","CharacterJoinerService_1","CoreBrowserService_1","LinkProviderService_1","MouseCoordsService_1","MouseService_1","RenderService_1","SelectionService_1","ThemeService_1","KeyboardService_1","Color_1","CoreTerminal_1","Browser","BufferLine_1","XParseColor_1","DecorationService_1","InputHandler_1","AccessibilityManager_1","Linkifier_1","Event_1","CoreBrowserTerminal","CoreTerminal","linkifier","_linkifier","onFocus","_onFocus","event","_onBlur","_onA11yCharEmitter","_onA11yTabEmitter","onWillOpen","_onWillOpen","device","MutableDisposable","browser","_keyDownHandled","_keyDownSeen","_keyPressHandled","_unprocessedDeadKey","_accessibilityManager","_onCursorMove","Emitter","onCursorMove","_onKey","_onSelectionChange","onSelectionChange","_onTitleChange","onTitleChange","_onBell","onBell","_onDimensionsChange","_setup","_decorationService","_instantiationService","createInstance","DecorationService","setService","IDecorationService","_keyboardService","KeyboardService","IKeyboardService","_linkProviderService","LinkProviderService","ILinkProviderService","registerLinkProvider","OscLinkProvider","_inputHandler","onRequestBell","fire","onRequestRefreshRows","onRequestSendFocus","_reportFocus","onRequestReset","reset","onRequestWindowsOptionsReport","type","_reportWindowsOptions","onColor","_handleColorEvent","EventUtils","forward","_bufferService","_afterResize","_customKeyEventHandler","_themeService","req","acc","ident","index","colorRgb","color","toColorRGB","colors","ansi","toRgbString","modifyColors","channels","toColor","narrowedAcc","restoreColor","_reportColorScheme","colorSchemeMode","rgb","relativeLuminance","background","rgba","foreground","buffers","active","preventScroll","_handleScreenReaderModeOptionChange","_handleTextAreaFocus","sendFocus","_showCursor","blur","_handleTextAreaBlur","_compositionHelper","CompositionHelper","y","_syncTextArea","isCursorInViewport","isComposing","cursorY","ybase","bufferLine","cursorX","Math","min","x","cellHeight","getWidth","cellWidth","cursorTop","cursorLeft","lineHeight","_initGlobal","_bindKeys","hasSelection","copyHandler","_selectionService","pasteHandlerWrapper","handlePasteEvent","isFirefox","button","rightClickHandler","rightClickSelectsWord","isLinux","_keyUp","_keyDown","_keyPress","compositionstart","updateCompositionElements","compositionupdate","compositionend","dispatchEvent","CustomEvent","bubbles","_inputEvent","open","parent","isConnected","_logService","debug","ownerDocument","defaultView","window","_document","documentOverride","Document","dir","toggle","allowTransparency","onSpecificOptionChange","fragment","createDocumentFragment","_viewportElement","updateCursorStyle","_helperContainer","promptLabel","isChromeOS","readOnly","disableStdin","CoreBrowserService","document","_charSizeService","CharSizeService","ICharSizeService","ThemeService","IThemeService","onRequestColorSchemeQuery","onChangeColors","colorSchemeUpdates","_characterJoinerService","CharacterJoinerService","ICharacterJoinerService","RenderService","onRenderedViewportChange","_onRender","resize","_compositionView","dispose","_mouseCoordsService","MouseCoordsService","IMouseCoordsService","Linkifier","hasRenderer","setRenderer","_createRenderer","handleCursorMove","handleResize","handleBlur","handleFocus","_viewport","Viewport","onRequestScrollLines","SelectionService","ISelectionService","_mouseService","MouseService","IMouseService","amount","suppressScrollEvent","onRequestRedraw","handleSelectionChanged","columnSelectMode","onLinuxMouseSelection","any","_onScroll","queueSync","BufferDecorationRenderer","handleMouseDown","mouseStateService","areMouseEventsActive","mouseEventsRequireAlt","disable","enable","screenReaderMode","showScrollbar","scrollbar","overviewRulerWidth","_overviewRulerRenderer","OverviewRulerRenderer","shouldShow","measure","bindMouse","handleTouchScroll","disposable","DomRenderer","sync","refreshRows","shouldColumnSelect","isCursorInitialized","disp","scrollPages","pageCount","scrollToTop","scrollToBottom","disableSmoothScroll","scrollToLine","scrollAmount","data","attachCustomKeyEventHandler","customKeyEventHandler","attachCustomWheelEventHandler","customWheelEventHandler","setCustomWheelEventHandler","linkProvider","registerCharacterJoiner","handler","joinerId","register","deregisterCharacterJoiner","deregister","markers","registerMarker","cursorYOffset","addMarker","registerDecoration","decorationOptions","setSelection","getSelectionPosition","selectionStart","selectionEnd","selectAll","selectLines","shouldIgnoreComposition","isMac","macOptionIsMeta","altKey","keydown","scrollOnUserInput","result","evaluateKeyDown","scrollCount","_isThirdLevelShift","cancel","useKitty","useWin32InputMode","ctrlKey","metaKey","charCodeAt","wasModifierOnly","wasModifierKeyOnlyEvent","domEvent","thirdLevelKey","isWindows","getModifierState","keyCode","evaluateKeyUp","charCode","which","String","fromCharCode","keypress","inputType","input","composed","hasValidSize","clearAllMarkers","getBlankLine","DEFAULT_ATTR_DATA","clearTextureAtlas","WindowsOptionsReportType","GET_WIN_SIZE_PIXELS","canvasWidth","toFixed","canvasHeight","GET_CELL_SIZE_PIXELS","useCapture","domNode","bb","win","getWindow","scrollX","scrollY","targetWindow","runner","priority","state","getAnimationFrameState","item","AnimationFrameQueueItem","next","animFrameRequested","requestAnimationFrame","current","inAnimationFrameRunner","sort","execute","animationFrameRunner","Async_1","candidateNode","candidateEvent","view","DomListener","_node","_type","_handler","_options","useCaptureOrOptions","eventType","CLICK","MOUSE_DOWN","MOUSE_OVER","MOUSE_LEAVE","KEY_DOWN","KEY_UP","INPUT","BLUR","FOCUS","CHANGE","POINTER_DOWN","POINTER_MOVE","POINTER_UP","MOUSE_WHEEL","WHEEL","_runner","_canceled","b","animationFrameState","Map","WindowIntervalTimer","IntervalTimer","_defaultTarget","cancelAndSet","interval","currentLink","_currentLink","_element","_linkCacheDisposables","_isMouseOut","_wasResized","_activeLine","_onShowLinkUnderline","onShowLinkUnderline","_onHideLinkUnderline","onHideLinkUnderline","_lastMouseEvent","_activeProviderReplies","_clearCurrentLink","_handleMouseMove","_handleMouseDown","_handleMouseUp","_positionFromMouseEvent","composedPath","_lastBufferCell","_handleHover","_askForLink","_linkAtPosition","link","useLineCache","forEach","reply","linkWithState","linkProvided","linkProviders","entries","existingReply","_checkLinkProviderResult","provideLinks","links","linksWithState","map","size","_removeIntersectingLinks","replies","occupiedCells","Set","providerReply","startX","range","endX","has","splice","hasLinkBefore","j","linkAtPosition","find","_handleNewLink","_mouseDownLink","activate","startRow","endRow","_linkLeave","decorations","underline","pointerCursor","isHovered","_linkHover","defineProperties","v","_fireUnderlineEvent","hover","showEvent","scrollOffset","_createLinkUnderlineEvent","leave","lower","upper","coords","getCoords","x1","y1","x2","y2","IBufferService","promptLabelInternal","tooMuchOutputInternal","CellData_1","_optionsService","_oscLinkService","_workCell","CellData","callback","linkHandler","lineLength","getTrimmedLength","currentLinkId","currentStart","finishLink","hasContent","loadCell","hasExtendedAttrs","extended","urlId","getLinkData","uri","_getRangeWithLineWrap","ignoreLink","allowNonHttpProtocols","parsed","URL","includes","protocol","defaultActivate","linkId","startY","finalStartX","endY","finalEndX","currentLine","isWrapped","previousLine","previousLineLength","_hasUrlId","previousStartX","nextLine","nextLineLength","nextEndX","confirm","newWindow","opener","location","href","IOptionsService","IOscLinkService","_renderCallback","_refreshCallbacks","_animationFrame","cancelAnimationFrame","addRefreshCallback","_innerRefresh","rowStart","rowEnd","rowCount","_rowCount","_rowStart","_rowEnd","max","_runRefreshCallbacks","_debounceThresholdMS","_lastRefreshMs","_additionalRefreshRequested","_refreshTimeoutID","clearTimeout","refreshRequestTime","performance","now","elapsed","waitPeriodBeforeTrailingRefresh","setTimeout","DEFAULT_ANSI_COLORS","freeze","r","g","toCss","toRgba","c","scrollableElement_1","scrollable_1","coreBrowserService","_coreService","themeService","_onRequestScrollLines","_isSyncing","_isHandlingScroll","_suppressOnScrollHandler","_needsSyncOnRender","scrollable","Scrollable","forceIntegerValues","smoothScrollDuration","scheduleAtNextAnimationFrame","cb","setSmoothScrollDuration","_scrollableElement","SmoothScrollableElement","vertical","horizontal","useShadows","mouseWheelSmoothScroll","verticalHasArrows","showArrows","_getChangeOptions","onMultipleOptionChange","updateOptions","onProtocolChange","handleMouseWheel","setScrollDimensions","scrollHeight","runAndSubscribe","backgroundColor","getDomNode","_styleElement","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","join","onBufferActivate","_latestYDisp","_sync","_handleScroll","getScrollPosition","setScrollPosition","reuseAnimation","scrollTop","verticalScrollbarSize","mouseWheelScrollSensitivity","scrollSensitivity","fastScrollSensitivity","_queuedAnimationFrame","synchronizedOutput","newRow","round","diff","translationY","ICoreService","IMouseStateService","_screenElement","_decorationElements","_altBufferIsActive","_dimensionsChanged","_container","_doRefreshDecorations","_queueRefresh","alt","onDecorationRegistered","onDecorationRemoved","decoration","_removeDecoration","_renderDecoration","_refreshStyle","_refreshXPosition","_createElement","layer","marker","display","onRenderEmitter","onDispose","delete","anchor","right","_zones","_zonePool","_zonePoolIndex","_linePadding","full","center","zones","addDecoration","overviewRulerOptions","z","_lineIntersectsZone","_lineAdjacentToZone","_addLineToZone","startBufferLine","endBufferLine","setPadding","padding","zone","ColorZoneStore_1","drawHeight","drawWidth","drawX","_width","_colorZoneStore","ColorZoneStore","_shouldUpdateDimensions","_shouldUpdateAnchor","_lastKnownBufferLength","_canvas","_refreshCanvasDimensions","parentElement","insertBefore","ctx","getContext","_ctx","normal","_refreshDrawHeightConstants","_refreshColorZonePadding","_refreshDrawConstants","outerWidth","floor","innerWidth","ceil","dpr","pixelsPerLine","nonFullHeight","_store","isDisposed","cssCanvasHeight","deviceCanvasHeight","_refreshDecorations","clearRect","lineWidth","_renderRulerOutline","_renderColorZone","fillStyle","overviewRulerBorder","fillRect","overviewRuler","showTopBorder","showBottomBorder","updateCanvasDimensions","updateAnchor","WidthCache_1","XTERM_COMPOSITION_SESSION_END_EVENT","_isComposing","hasPendingCompositionFinalization","_pendingComposition","_isSendingComposition","_pendingKeypressData","keypressData","_textarea","_unicodeService","_isAwaitingCompositionEnd","_compositionPosition","_compositionSuffix","_dataAlreadySent","_compositionInputData","_lastCompositionData","_compositionStartValue","_compositionStartSelection","_compositionHasObservedProgress","_compositionTransactionId","_compositionTimers","_imeKeydownAwaitingCommit","_cancelDeferredTimer","_compositionPositionTimer","_compositionViewTimer","_compositionEndTimer","_textareaChangeTimer","nextCompositionStart","substring","_resetCompositionView","_dispatchCompositionSessionEvent","detail","id","_hasCompositionProgress","_renderCompositionView","Boolean","transactionId","_defer","pending","endData","_updatePostCompositionInputExpectation","_compositionEndBelongsToCurrentTransaction","_sendPendingComposition","_deferCompositionEnd","_finalizeComposition","timer","_preeditRenderer","_canceledKey","code","timeStamp","_cancelComposition","_deferPreeditResync","_composedRegionLength","_handleAnyTextareaChanges","keypressMayOverlapComposition","expectsPostCompositionInput","_claimImeKeydownCommit","inputData","repeatsPendingTextareaInput","_getPendingTextareaInput","waitForPropagation","wasComposing","lifecycleSettled","sessionEnded","suffix","dataAlreadySent","compositionData","finalizerTimer","_getCompositionInput","_sendCompositionInput","includeFollowingInput","_cancelPendingFinalizer","textareaInput","observedInput","_removeAlreadySentData","_mergeTextObservations","_settlePendingComposition","_dispatchCompositionTransactionSettled","candidate","observed","findShortestOrder","candidateFirstOverlap","endsWith","observedFirstOverlap","overlap","suffixEnd","compositionLength","observedEnd","valueEnd","startsWith","settlesPending","dispatchSessionEnd","prevented","cancelable","defaultPrevented","_endPendingCompositionSession","dataPendingReconciliation","hadPreedit","oldValue","newValue","preedit","className","flexShrink","textDecoration","caret","replaceChildren","_compositionPreedit","_compositionCaret","_compositionRemainder","_renderCompositionRemainder","_getRowRemainderText","_styleCompositionCaret","remainder","whiteSpace","cursorWidth","cursor","ensureContrastRatio","marginLeft","verticalAlign","justifyContent","_opaqueViewBackground","opaque","dontRecurse","rowRemainder","setProperty","fontFamily","Intl","Segmenter","CompositionPreeditRenderer","render","maxWidth","overflow","anchorBounds","anchorLeft","showsRemainder","direction","IUnicodeService","CJK","NATIVE","_segmenter","granularity","_font","fonts","_preedit","_measure","getComputedStyle","font","fontWeight","fontStyle","devicePixelRatio","widths","nodes","createTextNode","spacing","work","emit","span","letterSpacing","fontKerning","segment","nextSpacing","wcwidth","codePointAt","WidthCacheFontVariantCanvas","setFont","parseFloat","getCoordsRelativeToElement","rect","elementStyle","leftPadding","getPropertyValue","topPadding","colCount","hasValidCharSize","cssCellWidth","cssCellHeight","isSelection","moveToRequestedRow","targetY","bufferService","applicationCursor","wrappedRowsForRow","rowsToMove","abs","wrappedRows","verticalDirection","wrappedRowsCount","repeat","sequence","currentRow","lineWraps","startCol","endCol","currentCol","bufferStr","translateBufferLineToString","count","str","rpt","targetX","hasScrollback","resetStartingRow","horizontalDirection","moveToRequestedCol","rowDifference","currX","colsFromRowEnd","CoreBrowserTerminal_1","AddonManager_1","BufferNamespaceApi_1","ParserApi_1","UnicodeApi_1","CONSTRUCTOR_ONLY_OPTIONS","$value","Terminal","_core","_addonManager","AddonManager","_publicOptions","getter","propName","setter","_checkReadonlyOptions","desc","defineProperty","_checkProposedApi","allowProposedApi","onBinary","onData","onWriteParsed","parser","_parser","ParserApi","unicode","UnicodeApi","_buffer","BufferNamespaceApi","modes","m","mouseTrackingMode","activeProtocol","applicationCursorKeysMode","applicationCursorKeys","applicationKeypadMode","applicationKeypad","insertMode","originMode","origin","reverseWraparoundMode","reverseWraparound","sendFocusMode","showCursor","isCursorHidden","synchronizedOutputMode","win32InputMode","wraparoundMode","wraparound","wasUserInput","_verifyIntegers","_verifyPositiveIntegers","write","writeln","loadAddon","addon","strings","values","Infinity","DomRendererRowFactory_1","Constants_1","RendererUtils_1","SelectionRenderModel_1","TextBlinkStateManager_1","nextTerminalId","_linkifier2","_terminalClass","_selectionRenderModel","createSelectionRenderModel","_lastSelectionColumnMode","_rowHasBlinkingCells","_rowHasBlinkingCellsCount","_onRequestRedraw","_refreshRowElements","_selectionContainer","createRenderDimensions","_updateDimensions","onOptionChange","_handleOptionsChanged","_injectCss","_rowFactory","DomRendererRowFactory","_handleLinkHover","_handleLinkLeave","_cursorBlinkStateManager","CursorBlinkStateManager","restartBlinkAnimation","_textBlinkStateManager","TextBlinkStateManager","_widthCache","_themeStyleElement","_dimensionsStyleElement","WidthCache","fontWeightBold","_setDefaultSpacing","styles","_terminalSelector","multiplyOpacity","blinkAnimationUnderlineId","blinkAnimationBarId","blinkAnimationBlockId","cursorAccent","selectionBackgroundOpaque","selectionInactiveBackgroundOpaque","INVERTED_DEFAULT_COLOR","defaultSpacing","handleDevicePixelRatioChange","handleCharSizeChanged","pause","renderRows","resume","handleViewportVisibilityChange","isVisible","setViewportVisible","oldViewportStart","oldViewportEnd","_lastSelectionStart","_lastSelectionEnd","update","viewportCappedStartRow","viewportCappedEndRow","newViewportStart","newViewportEnd","viewportStartRow","viewportEndRow","documentFragment","isXFlipped","_createSelectionElement","middleRowsCount","finalEndCol","renderStartRow","renderEndRow","cursorViewportRow","colStart","colEnd","fill","setNeedsBlinkInViewport","cursorAbsoluteY","cursorBlink","cursorStyle","cursorInactiveStyle","rowInfo","hasBlinkingCells","createRow","isBlinkOn","_setRowBlinkState","_updateTextBlinkState","_setCellUnderline","enabled","maxY","bufferline","_isIdlePaused","isFocused","_resetIdleTimer","_clearIdleTimer","_idleTimeout","_stopBlinkingDueToIdle","Constants_2","AttributeData_1","_columnSelectMode","_selectionStart","_selectionEnd","isCursorRow","blinkOn","widthCache","linkStart","linkEnd","elements","joinedRanges","getJoinedCharacters","charElement","getNoBgTrimmedLength","cellAmount","oldBg","oldFg","oldExt","oldLinkHover","oldSpacing","oldIsInSelection","skipJoinedCheckUntilX","classes","hasHover","isJoined","isValidJoinRange","lastCharX","firstSelectionState","_isCellInSelection","JoinedCellData","isInSelection","isCursorCell","isLinkHover","isBlink","isDecorated","forEachDecorationAtCell","d","chars","getChars","WHITESPACE_CELL_CHAR","isUnderline","isOverline","isBold","isItalic","selectionForeground","ext","isInvisible","isDim","underlineStyle","isUnderlineColorDefault","isUnderlineColorRGB","textDecorationColor","AttributeData","getUnderlineColor","drawBoldTextInBrightColors","isStrikethrough","getFgColor","fgColorMode","getFgColorMode","getBgColor","bgColorMode","getBgColorMode","isInverse","temp","temp2","bgOverride","fgOverride","resolvedBg","isTop","backgroundColorRGB","foregroundColorRGB","_addStyle","padStart","_applyMinimumContrast","minimumContrastRatio","treatGlyphAsBackgroundColor","getCode","cache","_getContrastCache","adjustedColor","ratio","halfContrastCache","contrastCache","canvasFactory","_flat","Float32Array","_fontSize","_weight","_weightBold","_canvasElements","_holey","weight","weightBold","bold","italic","cp","variant","OffscreenCanvas","throwIfFalsy","trim","measureText","isPowerlineGlyph","codepoint","isEmoji","glyphSizeX","deviceCellWidth","isNerdFontGlyph","isBoxOrBlockGlyph","currentOffset","SelectionRenderModel","terminal","viewportY","isCellSelected","_intervalDuration","_blinkOn","_needsBlinkInViewport","_isViewportVisible","duration","setIntervalDuration","blinkIntervalDuration","_clearInterval","isEnabled","needsBlinkInViewport","_updateIntervalState","_interval","wasBlinkOn","setInterval","clearInterval","dom","fastDomNode_1","globalPointerMoveMonitor_1","scrollbarArrow_1","scrollbarVisibilityController_1","widget_1","platform","AbstractScrollbar","Widget","opts","_lazyRender","lazyRender","_host","host","_scrollable","_scrollByPage","scrollByPage","_scrollbarState","scrollbarState","_visibilityController","ScrollbarVisibilityController","visibility","extraScrollbarClassName","setIsNeeded","isNeeded","_pointerMoveMonitor","GlobalPointerMoveMonitor","_shouldRender","FastDomNode","setDomNode","setPosition","_domNodePointerDown","_createArrow","arrow","ScrollbarArrow","bgDomNode","_createSlider","slider","setClassName","setTop","setLeft","setWidth","setHeight","setLayerHinting","setContain","_sliderPointerDown","_onclick","leftButton","_handleElementSize","visibleSize","setVisibleSize","_handleElementScrollSize","elementScrollSize","setScrollSize","_handleElementScrollPosition","elementScrollPosition","beginReveal","setShouldBeVisible","beginHide","_renderDomNode","getRectangleLargeSize","getRectangleSmallSize","_updateSlider","getSliderSize","getArrowSize","getSliderPosition","_handlePointerDown","delegatePointerDown","domTop","getClientRects","sliderStart","sliderStop","pointerPos","_sliderPointerPosition","offsetX","offsetY","domNodePosition","getDomNodePagePosition","pageX","pageY","_pointerDownRelativePosition","_setDesiredScrollPositionNow","getDesiredScrollPositionFromOffsetPaged","getDesiredScrollPositionFromOffset","Element","initialPointerPosition","initialPointerOrthogonalPosition","_sliderOrthogonalPointerPosition","initialScrollbarState","clone","toggleClassName","startMonitoring","pointerId","buttons","pointerMoveData","pointerOrthogonalPosition","pointerOrthogonalDelta","pointerDelta","getDesiredScrollPositionFromDelta","handleDragEnd","handleDragStart","_desiredScrollPosition","desiredScrollPosition","writeScrollPosition","setScrollPositionNow","updateScrollbarSize","scrollbarSize","_updateScrollbarSize","setScrollbarSize","numberAsPixels","_height","_top","_left","_bottom","_right","_className","_position","_layerHint","_contain","setBottom","bottom","setRight","shouldHaveIt","layerHint","contain","name","_hooks","DisposableStore","_pointerMoveCallback","_onStopCallback","stopMonitoring","invokeStopCallback","isMonitoring","onStopCallback","initialElement","initialButtons","pointerMoveCallback","eventSource","setPointerCapture","releasePointerCapture","abstractScrollbar_1","scrollbarState_1","HorizontalScrollbar","scrollDimensions","getScrollDimensions","scrollPosition","getCurrentScrollPosition","ScrollbarState","horizontalHasArrows","horizontalScrollbarSize","scrollWidth","scrollLeft","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","handleScroll","setOppositeScrollbarSize","setVisibility","sameOriginWindowChainCache","getParentWindowIfSameOrigin","w","parentLocation","IframeUtils","_getSameOriginWindowChain","windowChainCache","WeakRef","iframeElement","frameElement","getPositionOfChildWindowRelativeToAncestorWindow","childWindow","ancestorWindow","windowChain","windowChainEl","windowInChain","deref","boundingRect","timestamp","Date","browserEvent","middleButton","rightButton","shiftKey","posx","posy","body","documentElement","iframeOffsets","deltaX","deltaY","targetNode","srcElement","shouldFactorDPR","isChrome","chromeVersionMatch","navigator","userAgent","match","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","wheelDeltaX","isSafari","HORIZONTAL_AXIS","wheelDelta","ScrollState","_forceIntegerValues","_scrollStateBrand","rawScrollLeft","rawScrollTop","equals","other","withScrollDimensions","useRawScrollPositions","withScrollPosition","createScrollEvent","previous","inSmoothScrolling","widthChanged","scrollWidthChanged","scrollLeftChanged","heightChanged","scrollHeightChanged","scrollTopChanged","oldWidth","oldScrollWidth","oldScrollLeft","oldHeight","oldScrollHeight","oldScrollTop","_scrollableBrand","_smoothScrollDuration","_scheduleAtNextAnimationFrame","_state","_smoothScrolling","validateScrollPosition","newState","_setState","acceptScrollDimensions","getFutureScrollPosition","to","setScrollPositionSmooth","validTarget","newSmoothScrolling","SmoothScrollingOperation","from","startTime","animationFrameDisposable","_performSmoothScrolling","hasPendingScrollAnimation","tick","isDone","oldState","SmoothScrollingUpdate","createEaseOutCubic","delta","completion","t","pow","_initAnimations","_scrollLeft","_initAnimation","_scrollTop","viewportSize","stop1","stop2","cut","_tick","newScrollLeft","newScrollTop","mouseEvent_1","horizontalScrollbar_1","verticalScrollbar_1","MouseWheelClassifierItem","score","MouseWheelClassifier","_capacity","_memory","_front","_rear","isPhysicalMouseWheel","remainingInfluence","iteration","influence","acceptStandardWheelEvent","pageZoomFactor","getZoomFactor","accept","previousItem","_computeScore","_isAlmostInt","absDeltaX","absDeltaY","absPreviousDeltaX","absPreviousDeltaY","minDeltaX","minDeltaY","maxDeltaX","maxDeltaY","INSTANCE","resolvedScrollable","ownsScrollable","flipAxes","consumeMouseWheelIfScrollbarIsNeeded","alwaysConsumeMouseWheel","scrollYToX","scrollPredominantAxis","listenOnDomNode","verticalSliderSize","resolveOptions","scrollbarHost","mouseWheelEvent","_handleMouseWheel","_handleDragStart","_handleDragEnd","_verticalScrollbar","VerticalScrollbar","_horizontalScrollbar","_domNode","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","_onmouseover","_handleMouseOver","_onmouseleave","_handleMouseLeave","_hideTimeout","TimeoutTimer","_isDragging","_mouseIsOver","_revealOnScroll","updateClassName","newClassName","newOptions","_render","delegateScrollFromMouseWheelEvent","StandardWheelEvent","shouldListen","onMouseWheel","passive","classifier","didScroll","shiftConvert","futureScrollPosition","deltaScrollTop","desiredScrollTop","deltaScrollLeft","desiredScrollLeft","consumeMouseWheel","_reveal","renderNow","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","_hide","_scheduleHide","_handleActivate","handleActivate","bgWidth","bgHeight","arrowSize","addStandardDisposableListener","_arrowPointerDown","_pointerdownRepeatTimer","_pointerdownScheduleRepeatTimer","oppositeScrollbarSize","scrollSize","_scrollbarSize","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","iVisibleSize","iScrollSize","iScrollPosition","setArrowSize","iArrowSize","_computeValues","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","desiredSliderPosition","correctedOffset","visibleClassName","invisibleClassName","_visibility","_visibleClassName","_invisibleClassName","_isVisible","_isNeeded","_rawShouldBeVisible","_shouldBeVisible","_revealTimer","_updateShouldBeVisible","rawShouldBeVisible","_applyVisibilitySetting","shouldBeVisible","ensureVisibility","setIfNotSet","withFadeAway","DomUtils","mainWindow","tail","array","n","LinkedListNode","Undefined","prev","LinkedList","_first","_last","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","Symbol","iterator","EventType","TAP","START","END","CONTEXT_MENU","Gesture","_dispatched","_targets","_ignoreTargets","_activeTouches","_handle","_lastSetTapCountTime","_handleTouchStart","_handleTouchEnd","_handleTouchMove","addTarget","isTouchDevice","None","_instance","ignoreTarget","maxTouchPoints","len","targetTouches","touch","identifier","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","evt","_newGestureEvent","_dispatchEvent","activeTouchCount","keys","changedTouches","hasOwnProperty","holdTime","_holdDelay","finalX","finalY","deltaT","dispatchTo","filter","_inertia","createEvent","initEvent","tapCount","currentTime","getTime","setTapCount","_clearTapCountTime","targets","depth","t1","vX","dirX","vY","dirY","deltaPosX","deltaPosY","stopped","_scrollFriction","translationX","_target","descriptor","fnKey","fn","memoizeKey","args","configurable","enumerable","writable","apply","hasArrows","_arrowScrollDelta","_setArrows","_arrowScroll","currentPosition","_arrowUp","_arrowDown","arrowDelta","_updateArrowSize","listener","StandardMouseEvent","isSelectAllActive","selectionStartLength","finalSelectionStart","areSelectionValuesReversed","finalSelectionEnd","startPlusLength","handleTrim","_onCharSizeChange","onCharSizeChange","_measureStrategy","TextMetricsMeasureStrategy","DomMeasureStrategy","BaseMeasureStategy","_result","_validateAndSet","_parentElement","_measureElement","Number","offsetWidth","offsetHeight","metrics","fontBoundingBoxAscent","fontBoundingBoxDescent","firstCell","content","combinedData","isCombined","setFromCharData","getAsCharData","_characterJoiners","_nextCharacterJoinerId","joiner","ranges","lineStr","trimmedLength","rangeStartColumn","currentStringIndex","rangeStartStringIndex","rangeAttrFG","getFg","rangeAttrBG","getBg","_getJoinedRanges","startIndex","endIndex","allJoinedRanges","joinerRanges","_mergeRanges","_stringRangesToCellRanges","currentRangeIndex","currentRangeStarted","currentRange","getString","newRange","inRange","_window","_isFocused","_cachedIsFocused","_onDprChange","_onWindowChange","onWindowChange","_screenDprMonitor","ScreenDprMonitor","setWindow","hasFocus","queueMicrotask","_parentWindow","_windowResizeListener","_outerListener","_setDprAndFireIfDiffers","_currentDevicePixelRatio","_updateDpr","_setWindowResizeListener","clearListener","parentWindow","_resolutionMediaMatchList","removeListener","matchMedia","addListener","Keyboard_1","KittyKeyboard_1","Win32InputMode_1","Platform_1","_getWin32InputMode","_win32InputMode","Win32InputMode","_getKittyKeyboard","_kittyKeyboard","KittyKeyboard","evaluateKeyboardEvent","kittyFlags","kittyKeyboard","flags","evaluate","vtExtensions","shouldUseProtocol","providerIndex","indexOf","Mouse_1","getMouseReportCoords","col","touch_1","_mouseStateService","_lastEvent","_wheelPartialScroll","_touchScrollAccumulator","mouseupListener","mousedragListener","requestedEvents","mouseup","wheel","mousedrag","mousemove","eventListeners","_handleWheel","_handleMouseDrag","_altMouseCursor","AltMouseCursorController","events","_handleProtocolChange","_syncMouseModeState","_handlePassiveWheel","_handleTouchChange","_sendEvent","but","action","overrideType","allowCustomWheelEvent","_consumeWheelEvent","stripAltFromReport","_triggerMouseEvent","ctrl","shouldForceSelection","targetDocument","listenerDocument","_handleTouchScrollAsWheel","_handleTouchScrollAsKeys","trunc","resetClass","logLevel","_explainEvents","_applyScrollModifier","targetWheelEventPixels","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_PAGE","_equalEvents","isPixelEncoding","restrictMouseEvent","report","encodeMouseEvent","isDefaultEncoding","triggerBinaryEvent","down","up","drag","move","pixels","ILogService","_isActive","_listeners","store","syncFromModifier","_updateClass","altHeld","RenderDebouncer_1","TaskQueue_1","_renderer","decorationService","_observerDisposable","_isPaused","_needsFullRefresh","_isNextRenderRedrawOnly","_needsSelectionRefresh","_canvasWidth","_canvasHeight","_selectionState","_onRenderedViewportChange","_onRefreshRequest","onRefreshRequest","_pausedResizeTask","DebouncedIdleTask","_renderDebouncer","RenderDebouncer","_syncOutputHandler","SynchronizedOutputHandler","_fullRefresh","_registerIntersectionObserver","observer","IntersectionObserver","_handleIntersectionChange","threshold","_intersectionObserver","disconnect","observe","entry","isIntersecting","intersectionRatio","flush","isRedrawOnly","bufferRows","buffered","_fireOnCanvasResize","renderer","_onTimeout","_start","_end","_isBuffering","_timeout","MoveToCell_1","SelectionModel_1","BufferRange_1","NON_BREAKING_SPACE_CHAR","ALL_NON_BREAKING_SPACE_REGEX","RegExp","_dragScrollAmount","_enabled","_trimListener","_mouseDownTimeStamp","_oldHasSelection","_oldSelectionStart","_oldSelectionEnd","_onLinuxMouseSelection","_onRedrawRequest","_mouseMoveListener","_mouseUpListener","onUserInput","onTrim","_handleTrim","_handleBufferActivate","_model","SelectionModel","_activeSelectionMode","_removeMouseDownListeners","rowsChanged","lineText","startRowEndCol","isLinuxMouseSelection","_refreshAnimationFrame","_refresh","_isClickInSelection","_getMouseBufferCoords","_areCoordsInSelection","isCellInSelection","_selectWordAtCursor","allowWhitespaceOnlySelection","getRangeLength","_selectWordAt","_getMouseEventScrollAmount","terminalHeight","macOptionClickForcesSelection","_handleIncrementalClick","_handleSingleClick","_handleDoubleClick","_handleTripleClick","_addMouseDownListeners","_dragScrollIntervalTimer","_dragScroll","hadSelection","_fireOnSelectionChange","hasWidth","_selectLineAt","previousSelectionEnd","_selectToWordAt","timeElapsed","altClickMovesCursor","coordinates","moveToCellSequence","_fireEventIfSelectionChanged","activeBuffer","_convertViewportColToCharacterIndex","charIndex","_getWordAt","followWrappedLinesAbove","followWrappedLinesBelow","charOffset","leftWideCharCount","rightWideCharCount","leftLongCharOffset","rightLongCharOffset","charAt","_isCharWordSeparator","getCodePoint","previousBufferLine","previousLineWordPosition","nextBufferLine","nextLineWordPosition","wordPosition","wordSeparator","wrappedRange","getWrappedRangeForLine","first","last","ServiceRegistry_1","createDecorator","ColorContrastCache_1","Types_1","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","DEFAULT_CURSOR","DEFAULT_CURSOR_ACCENT","DEFAULT_SELECTION","DEFAULT_OVERVIEW_RULER_BORDER","_colors","_contrastCache","ColorContrastCache","_halfContrastCache","_onChangeColors","selectionBackgroundTransparent","blend","selectionInactiveBackgroundTransparent","opacity","_updateRestoreColors","_setTheme","theme","parseColor","selectionBackground","selectionInactiveBackground","NULL_COLOR","isOpaque","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","extendedAnsi","colorCount","slot","_restoreColor","_restoreColors","cssString","fallback","millis","Promise","resolve","timeout","_token","_isDisposed","_isScheduled","_disposable","context","handle","CircularList","_maxLength","onDeleteEmitter","onDelete","onInsertEmitter","onInsert","onTrimEmitter","_array","Array","_startIndex","_length","maxLength","newMaxLength","newArray","_getCyclicIndex","newLength","recycle","isFull","deleteCount","items","countToTrim","trimStart","shiftElements","expandListBy","$r","$g","$b","$a","toPaddedHex","s","contrastRatio","l1","l2","color_1","toChannels","fgR","fgG","fgB","bgR","bgG","bgB","rgbaColor","factor","css_1","$ctx","$litmusColor","willReadFrequently","globalCompositeOperation","createLinearGradient","rgbaMatch","getImageData","rgb_1","relativeLuminance2","rs","gs","bs","reduceLuminance","bgRgba","fgRgba","cr","increaseLuminance","bgL","fgL","resultA","resultARatio","resultB","InstantiationService_1","LogService_1","BufferService_1","OptionsService_1","CoreService_1","MouseStateService_1","UnicodeV6_1","UnicodeService_1","CharsetService_1","WindowsMode_1","WriteBuffer_1","OscLinkService_1","hasWriteSyncWarnHappened","_onScrollApi","_windowsWrappingHeuristics","_onBinary","_onData","_onLineFeed","_onResize","_onWriteParsed","InstantiationService","OptionsService","LogService","BufferService","CoreService","MouseStateService","unicodeService","UnicodeService","UnicodeV6","_charsetService","CharsetService","ICharsetService","OscLinkService","InputHandler","onRequestScrollToBottom","_writeBuffer","handleUserInput","_handleWindowsPtyOptionChange","markRangeDirty","scrollBottom","WriteBuffer","promiseResult","parse","writeSync","maxSubsequentCalls","LogLevelEnum","WARN","flushSync","scroll","eraseAttr","registerEscHandler","registerDcsHandler","registerCsiHandler","registerOscHandler","registerApcHandler","windowsPty","backend","buildNumber","_enableWindowsWrappingHeuristics","disposables","updateWindowsModeWrappedState","final","_disposed","_event","thisArgs","idx","isArray","call","listeners","initial","Charsets_1","EscapeSequenceParser_1","TextDecoder_1","OscParser_1","DcsParser_1","ApcParser_1","Version_1","GLEVEL","paramToWindowOption","setWinLines","restoreWin","minimizeWin","setWinPosition","setWinSizePixels","raiseWin","lowerWin","refreshWin","setWinSizeChars","maximizeWin","fullscreenWin","getWinState","getWinPosition","getWinSizePixels","getScreenSizePixels","getCellSizePixels","getWinSizeChars","getScreenSizeChars","getIconTitle","getWinTitle","pushTitle","popTitle","$temp","getAttrData","_curAttrData","EscapeSequenceParser","_parseBuffer","Uint32Array","_stringDecoder","StringToUtf32","_utf8Decoder","Utf8ToUtf32","_windowTitle","_iconName","_windowTitleStack","_iconNameStack","_eraseAttrDataInternal","_onRequestBell","_onRequestRefreshRows","_onRequestReset","_onRequestSendFocus","_onRequestSyncScrollBar","onRequestSyncScrollBar","_onRequestWindowsOptionsReport","_onA11yChar","_onA11yTab","_onColor","_onRequestColorSchemeQuery","_parseStack","paused","cursorStartX","cursorStartY","decodedLength","_specialColors","_dirtyRowTracker","DirtyRowTracker","_activeBuffer","setCsiHandlerFallback","params","identToString","toArray","setEscHandlerFallback","setExecuteHandlerFallback","setOscHandlerFallback","setDcsHandlerFallback","payload","setApcHandlerFallback","setPrintHandler","print","insertChars","intermediates","cursorUp","scrollRight","cursorDown","cursorForward","cursorBackward","cursorNextLine","cursorPrecedingLine","cursorCharAbsolute","cursorPosition","cursorForwardTab","eraseInDisplay","prefix","eraseInLine","insertLines","deleteLines","deleteChars","scrollUp","scrollDown","eraseChars","cursorBackwardTab","charPosAbsolute","hPositionRelative","repeatPrecedingCharacter","sendDeviceAttributesPrimary","sendDeviceAttributesSecondary","linePosAbsolute","vPositionRelative","hVPosition","tabClear","setMode","setModePrivate","resetMode","resetModePrivate","charAttributes","deviceStatus","deviceStatusPrivate","softReset","sendXtVersion","setCursorStyle","setScrollRegion","saveCursor","windowOptions","restoreCursor","insertColumns","deleteColumns","selectProtected","requestMode","kittyKeyboardSet","kittyKeyboardQuery","kittyKeyboardPush","kittyKeyboardPop","setExecuteHandler","bell","lineFeed","carriageReturn","backspace","tab","shiftOut","shiftIn","tabSet","OscHandler","setTitle","setIconName","setOrReportIndexedColor","setHyperlink","setOrReportFgColor","setOrReportBgColor","setOrReportCursorColor","restoreIndexedColor","restoreFgColor","restoreBgColor","restoreCursorColor","reverseIndex","keypadApplicationMode","keypadNumericMode","fullReset","setgLevel","selectDefaultCharset","flag","CHARSETS","selectCharset","screenAlignmentPattern","setErrorHandler","DcsHandler","requestStatusString","_preserveStack","_logSlowResolvingAsync","p","slowTimeout","slowPromise","_res","rej","race","then","err","_getCurrentLinkId","wasPaused","DEBUG","prototype","TRACE","trace","split","clearRange","decode","subarray","viewportEnd","viewportStart","chWidth","charset","curAttr","bufferRow","markDirty","setCellFromCodepoint","precedingJoinState","ch","currentInfo","charProperties","extractWidth","shouldJoin","extractShouldJoin","stringFromCodePoint","addLineToLink","oldRow","oldCol","_eraseAttrData","BufferLine","copyCellsFrom","addCodepointToCell","insertCells","getNullCell","NULL_CELL_CODE","NULL_CELL_WIDTH","ApcHandler","convertEol","_restrictCursor","originalX","nextStop","maxCol","_setCursor","_moveCursor","diffToTop","diffToBottom","param","tabs","prevStop","_eraseInBufferLine","clearWrap","respectProtect","replaceCells","_resetBufferLine","clearMarkers","scrollOnEraseInDisplay","scrollBackSize","isUserScrolling","scrollBottomRowsOffset","scrollBottomAbsolute","deleteCells","joinState","idata","itext","tlength","copyWithin","_is","XTERM_VERSION","term","termName","setgCharset","DEFAULT_CHARSET","quirks","allowSetCursorBlink","activeEncoding","mainFlags","altFlags","activateAltBuffer","colorSchemeQuery","activateNormalBuffer","dm","mouseProtocol","mouseEncoding","cs","f","b2v","_updateAttrColor","mode","c1","c2","c3","fromColorRGB","_extractColor","attr","accu","cSpace","advance","hasSubParams","subparams","getSubParams","underlineColor","_processUnderline","updateExtended","_processSGR0","l","kittySgrBoldFaintControl","savedX","savedY","savedCurAttrData","savedCharset","isBlinking","second","savedCharsets","charsets","savedGlevel","glevel","savedOriginMode","savedWraparoundMode","slots","spec","exec","isValidColorIndex","_createHyperlink","_finishHyperlink","parsedParams","idParamIndex","findIndex","registerLink","_setOrReportSpecialColor","collectAndFlag","scrollRegionHeight","level","yOffset","markAllDirty","isProtected","block","bar","stack","altStack","mainStack","arg","_disposables","o","_value","_data","third","fourth","_targetWindow","majorVersion","isNode","process","isLegacyEdge","_getKey","logService","_insertedValues","_isFlushingInserted","_deletedIndices","_indicesByValue","_isFlushingDeleted","_flushInsertedTask","IdleTaskQueue","_flushDeletedTask","insert","_flushCleanupDeleted","enqueue","_flushInserted","sortedAddedValues","sortedAddedValuesIndex","arrayIndex","newArrayIndex","_rebuildIdentityIndex","_flushCleanupInserted","indices","_flushDeleted","getKeyIterator","_search","forEachByKey","mid","midKey","StringBuilder","_chunks","append","chunk","_limit","_builder","limit","TaskQueue","_tasks","_i","task","_idleCallback","_cancelCallback","_requestCallback","_process","deadline","taskDuration","deadlineRemaining","longestTask","lastDeadlineRemaining","timeRemaining","PriorityTaskQueue","_createDeadline","requestIdleCallback","cancelIdleCallback","_queue","lastChar","CHAR_DATA_CODE_INDEX","WHITESPACE_CELL_CODE","ExtendedAttrs","newObj","isFgRGB","isBgRGB","isFgPalette","isBgPalette","isFgDefault","isBgDefault","isAttributeDefault","isEmpty","getUnderlineColorMode","isUnderlineColorPalette","getUnderlineStyle","getUnderlineVariantOffset","underlineVariantOffset","_urlId","_ext","val","CircularList_1","BufferReflow_1","Marker_1","MAX_BUFFER_SIZE","Buffer","_hasScrollback","_nullCell","fromCharData","NULL_CELL_CHAR","_whitespaceCell","WHITESPACE_CELL_WIDTH","_isClearing","_memoryCleanupPosition","_cols","_rows","_getCorrectBufferLength","setupTabStops","_memoryCleanupQueue","getWhitespaceCell","relativeY","correctBufferLength","scrollback","fillViewportRows","fillAttr","newCols","newRows","nullCell","dirtyMemoryLines","addToY","amountToTrim","_isReflowEnabled","_reflow","_batchedMemoryCleanup","normalRun","counted","cleanupMemory","_reflowLarger","_reflowSmaller","reflowCursorLine","toRemove","reflowLargerGetLinesToRemove","newLayoutResult","reflowLargerCreateNewLayout","reflowLargerApplyNewLayout","layout","_reflowLargerAdjustViewport","countRemoved","viewportAdjustments","toInsert","countToInsert","wrappedLines","absoluteY","lastLineLength","destLineLengths","reflowSmallerGetNewLineLengths","linesToAdd","trimmedLines","newLines","newLine","destLineIndex","destCol","srcLineIndex","srcCol","cellsToCopy","wrappedLinesIndex","getWrappedLineTrimmedLength","setCell","insertEvents","originalLines","originalLinesLength","originalLineIndex","nextToInsertIndex","nextToInsert","countInsertedSoFar","nextI","insertCountEmitted","lineIndex","trimRight","tabStopWidth","Marker","_removeMarker","$startIndex","$workCell","$extended","fillCellData","_combined","_extendedAttrs","_cacheValid","_cache","_cacheTrimmed","CHAR_DATA_ATTR_INDEX","CHAR_DATA_CHAR_INDEX","CHAR_DATA_WIDTH_INDEX","getExtended","codePoint","attrs","$idx","byteLength","uint32Cells","extKeys","copyFrom","blank","_copySparseMapsFrom","src","applyInReverse","srcData","_copyCellMapsFrom","outColumns","isCanonical","trimEnd","cellContents","srcStart","bufferCols","endsInNull","followingLineStartsWithWide","oldCols","bufferAbsoluteY","srcTrimmedTineLength","srcRemainingCells","destRemainingCells","countToRemove","nextToRemoveIndex","nextToRemoveStart","countRemovedSoFar","newLayout","newLayoutLines","newLineLengths","cellsNeeded","srcLine","cellsAvailable","oldTrimmedLength","endsWithWide","Buffer_1","BufferSet","_normalBuffer","_altBuffer","_onBufferActivate","_normal","_alt","inactiveBuffer","obj","combined","attributesEquals","thisDefault","otherDefault","DEFAULT_COLOR","DEFAULT_ATTR","DEFAULT_EXT","_id","_nextId","_onDispose","h","k","q","u","A","B","C","R","Q","K","Y","E","Z","H","_","applicationCursorMode","modifiers","keyMapping","KEYCODE_KEY_MAPPINGS","keyString","toUpperCase","toLowerCase","_functionalKeyCodes","Escape","Enter","Tab","Backspace","CapsLock","ScrollLock","NumLock","PrintScreen","Pause","ContextMenu","F13","F14","F15","F16","F17","F18","F19","F20","F21","F22","F23","F24","F25","KP_0","KP_1","KP_2","KP_3","KP_4","KP_5","KP_6","KP_7","KP_8","KP_9","KP_Decimal","KP_Divide","KP_Multiply","KP_Subtract","KP_Add","KP_Enter","KP_Equal","ShiftLeft","ShiftRight","ControlLeft","ControlRight","AltLeft","AltRight","MetaLeft","MetaRight","MediaPlayPause","MediaStop","MediaTrackNext","MediaTrackPrevious","AudioVolumeDown","AudioVolumeUp","AudioVolumeMute","_csiTildeKeys","Insert","Delete","PageUp","PageDown","F5","F6","F7","F8","F9","F10","F11","F12","_csiLetterKeys","ArrowUp","ArrowDown","ArrowRight","ArrowLeft","Home","End","_ss3FunctionKeys","F1","F2","F3","F4","_getNumpadKeyCode","_getModifierKeyCode","_encodeModifiers","mods","_getKeyCode","macOptionAsAlt","numpadCode","modifierCode","funcCode","digit","_isModifierKey","_isLockKey","_buildCsiLetterSequence","letter","reportEventTypes","needsEventType","seq","_buildSs3Sequence","_buildCsiTildeSequence","number","_buildCsiUSequence","isFunc","isMod","shiftedKey","textCode","csiLetter","ss3Letter","tildeCode","specialKey","legacyByte","_interim","startPos","interim","Uint8Array","byte1","byte2","byte3","byte4","discardInterim","tmp","missing","fourStop","BMP_COMBINING","HIGH_COMBINING","table","version","num","ucs","bisearch","preceding","createPropertyValue","_codeToVk","KeyA","KeyB","KeyC","KeyD","KeyE","KeyF","KeyG","KeyH","KeyI","KeyJ","KeyK","KeyL","KeyM","KeyN","KeyO","KeyP","KeyQ","KeyR","KeyS","KeyT","KeyU","KeyV","KeyW","KeyX","KeyY","KeyZ","Digit0","Digit1","Digit2","Digit3","Digit4","Digit5","Digit6","Digit7","Digit8","Digit9","Numpad0","Numpad1","Numpad2","Numpad3","Numpad4","Numpad5","Numpad6","Numpad7","Numpad8","Numpad9","NumpadMultiply","NumpadAdd","NumpadSeparator","NumpadSubtract","NumpadDecimal","NumpadDivide","NumpadEnter","Space","Semicolon","Equal","Comma","Minus","Period","Slash","Backquote","BracketLeft","Backslash","BracketRight","Quote","IntlBackslash","_codeToScancode","_enhancedKeyCodes","_keyToControlChar","_getVirtualKeyCode","vk","_getScanCode","_getUnicodeChar","controlChar","_getControlKeyState","isKeyDown","_action","_callbacks","_pendingData","_bufferOffset","_isSyncWriting","_syncCalls","_didUserInput","_innerWriteTimer","didProcess","_innerWrite","_scheduleInnerWrite","lastTime","continuation","catch","low","RGB_REX","base","HASH_REX","adv","bits","pad","s2","StringBuilder_1","EMPTY_HANDLERS","_handlers","create","_active","_ident","_handlerFb","_stack","loopPosition","fallThrough","registerHandler","handlerList","handlerIndex","clearHandler","setHandlerFallback","put","utf32ToString","success","handlerResult","LimitedStringBuilder","_payloadLimit","_hitLimit","ret","res","Params_1","unhook","hook","EMPTY_PARAMS","Params","addParam","_params","TransitionTable","Uint16Array","setDefault","addMany","codes","NON_ASCII_PRINTABLE","VT500_TRANSITION_TABLE","blueprint","unused","PRINTABLES","EXECUTABLES","states","_transitions","handlers","handlerPos","transition","chunkPos","initialState","currentState","_collect","_printHandlerFb","_executeHandlerFb","_csiHandlerFb","_escHandlerFb","_errorHandlerFb","_printHandler","_executeHandlers","_executeHandlersArr","_csiHandlers","_escHandlers","_oscParser","OscParser","_dcsParser","DcsParser","_apcParser","ApcParser","_errorHandler","_identifier","finalRange","intermediate","finalCode","reverse","clearPrintHandler","clearEscHandler","clearExecuteHandler","clearCsiHandler","clearDcsHandler","clearOscHandler","clearApcHandler","clearErrorHandler","resetZdm","csiDone","addDigit","addSubParam","l4","collect","abort","handlersEsc","jj","_put","fromArray","maxSubParamsLength","Int32Array","_subParams","_subParamsLength","_subParamsIdx","_rejectDigits","_rejectSubDigits","_digitIsSub","newParams","getSubParamsAll","cur","_addons","instance","loadedAddon","_wrappedAddonDispose","BufferLineApiView_1","init","baseY","getLine","BufferLineApiView","_line","getCell","startColumn","endColumn","BufferApiView_1","_onBufferChange","onBufferChange","BufferApiView","_alternate","alternate","addCsiHandler","addDcsHandler","addEscHandler","addOscHandler","provider","versions","activeVersion","BufferSet_1","colsChanged","_cachedBlankLine","topRow","bottomRow","willBufferBeTrimmed","oldYdisp","_charsets","DEFAULT_MODES","DEFAULT_DEC_PRIVATE_MODES","_onUserInput","_onRequestScrollToBottom","showCursorImmediately","structuredClone","SortedList_1","$xmin","$xmax","_decorations","_lineCache","DecorationLineCache","_onDecorationRegistered","_onDecorationRemoved","SortedList","attachToBufferLines","Decoration","markerDispose","getDecorationsAtCell","bucket","getDecorationsOnLine","_decorationsByLine","_bufferLineListeners","_lineIndexSyncTimer","MicrotaskTimer","_lineIndexSyncCallbacks","_addToLineBuckets","_removeFromLineBuckets","_handleBufferLinesTrim","_handleBufferLinesInsert","_handleBufferLinesDelete","_getDecorationHeight","_indexedStartLine","_reindexDecoration","_scheduleLineIndexSync","callbacks","newMap","_mergeLineBucket","_applyBufferLinesInsert","_applyBufferLinesDelete","existing","spanCrossers","deleteEnd","toReindex","_cachedBg","_cachedFg","foregroundColor","ServiceCollection","_entries","service","_services","getService","ctor","serviceDependencies","getServiceDependencies","serviceArgs","dependency","firstServiceArgPos","optionsKeyToLogLevel","info","INFO","ERROR","off","OFF","_logLevel","_updateLogLevel","_evalLazyOptionalParams","optionalParams","_log","message","logger","log","DEFAULT_PROTOCOLS","NONE","restrict","X10","VT200","DRAG","ANY","eventCode","isSGR","S","DEFAULT_ENCODINGS","DEFAULT","SGR","SGR_PIXELS","_protocols","_encodings","_activeProtocol","_activeEncoding","_onProtocolChange","addProtocol","addEncoding","encoding","_customWheelEventHandler","DEFAULT_OPTIONS","rescaleOverlappingGlyphs","FONT_WEIGHT_OPTIONS","_onOptionChange","defaultOptions","_sanitizeAndValidateOption","_setupOptions","eventKey","isCursorStyle","_entriesWithId","_dataByLinkId","_removeMarkerFromLink","castData","_getEntryIdKey","every","linkData","serviceRegistry","decorator","arguments","storeServiceDependency","_providers","_onChange","onChange","extractCharKind","_activeProvider","getStringCellWidth","precedingInfo","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/xterm.mjs b/lib/xterm.mjs -index 7be5c35968284a175066eaefc3be48fde9990601..964875b10e458fced00e7b27b443455698619eda 100644 +index ba7fc036a04411da9b69e3d9b3268c3b98f9ee21..bd42550fe6bb59a9cacd30b7afbff7d5e61d5950 100644 --- a/lib/xterm.mjs +++ b/lib/xterm.mjs @@ -14,14 +14,14 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ --var ks=Object.defineProperty;var Ln=Object.getOwnPropertyDescriptor;var An=(n,i)=>{for(var e in i)ks(n,e,{get:i[e],enumerable:!0})};var y=(n,i,e,t)=>{for(var r=t>1?void 0:t?Ln(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&ks(i,e,r),r},m=(n,i)=>(e,t)=>i(e,t,n);var Ms="Terminal input",Ut={get:()=>Ms,set:n=>Ms=n},Ps="Too much output to announce, navigate to rows manually to read",Ze={get:()=>Ps,set:n=>Ps=n};function kn(n){return n.replace(/\r?\n/g,"\r")}function Mn(n,i){return i?`\x1B[200~${n.replace(/\x1b/g,"\u241B")}\x1B[201~`:n}function Bs(n,i){n.clipboardData&&n.clipboardData.setData("text/plain",i.selectionText),n.preventDefault()}function Os(n,i,e,t){if(n.stopPropagation(),n.clipboardData){let r=n.clipboardData.getData("text/plain");Pr(r,i,e,t)}}function Pr(n,i,e,t){n=kn(n),n=Mn(n,e.decPrivateModes.bracketedPasteMode&&t.rawOptions.ignoreBracketedPasteMode!==!0),e.triggerDataEvent(n,!0),i.value=""}function Br(n,i,e){let t=e.getBoundingClientRect(),r=n.clientX-t.left-10,s=n.clientY-t.top-10;i.style.width="20px",i.style.height="20px",i.style.left=`${r}px`,i.style.top=`${s}px`,i.style.zIndex="1000",i.focus()}function Or(n,i,e,t,r){Br(n,i,e),r&&t.rightClickSelect(n),i.value=t.selectionText,i.select()}function be(n){return n>65535?(n-=65536,String.fromCharCode((n>>10)+55296)+String.fromCharCode(n%1024+56320)):String.fromCharCode(n)}function ye(n,i=0,e=n.length){let t="";for(let r=i;r65535?(s-=65536,t+=String.fromCharCode((s>>10)+55296)+String.fromCharCode(s%1024+56320)):t+=String.fromCharCode(s)}return t}var pi=class{constructor(){this._interim=0}clear(){this._interim=0}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s=0;if(this._interim){let o=i.charCodeAt(s++);56320<=o&&o<=57343?e[r++]=(this._interim-55296)*1024+o-56320+65536:(e[r++]=this._interim,e[r++]=o),this._interim=0}for(let o=s;o=t)return this._interim=a,r;let l=i.charCodeAt(o);56320<=l&&l<=57343?e[r++]=(a-55296)*1024+l-56320+65536:(e[r++]=a,e[r++]=l);continue}a!==65279&&(e[r++]=a)}return r}},mi=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s,o,a,l,h,d=0;if(this.interim[0]){let _=!1,p=this.interim[0];p&=(p&224)===192?31:(p&240)===224?15:7;let v=0,f;for(;(f=this.interim[++v])&&v<4;)p<<=6,p|=f&63;let S=(this.interim[0]&224)===192?2:(this.interim[0]&240)===224?3:4,I=S-v;for(;d=t)return 0;if(f=i[d++],(f&192)!==128){d--,_=!0;break}else this.interim[v++]=f,p<<=6,p|=f&63}_||(S===2?p<128?d--:e[r++]=p:S===3?p<2048||p>=55296&&p<=57343||p===65279||(e[r++]=p):p<65536||p>1114111||(e[r++]=p)),this.interim.fill(0)}let c=t-4,u=d;for(;u=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(h=(s&31)<<6|o&63,h<128){u--;continue}e[r++]=h}else if((s&240)===224){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(h=(s&15)<<12|(o&63)<<6|a&63,h<2048||h>=55296&&h<=57343||h===65279)continue;e[r++]=h}else if((s&248)===240){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,this.interim[2]=a,r;if(l=i[u++],(l&192)!==128){u--;continue}if(h=(s&7)<<18|(o&63)<<12|(a&63)<<6|l&63,h<65536||h>1114111)continue;e[r++]=h}}return r}};var ue=class n{constructor(){this.fg=0;this.bg=0;this.extended=new ke}static toColorRGB(i){return[i>>>16&255,i>>>8&255,i&255]}static fromColorRGB(i){return(i[0]&255)<<16|(i[1]&255)<<8|i[2]&255}clone(){let i=new n;return i.fg=this.fg,i.bg=this.bg,i.extended=this.extended.clone(),i}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},ke=class n{constructor(i=0,e=0){this._ext=0;this._urlId=0;this._ext=i,this._urlId=e}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(i){this._ext=i}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(i){this._ext&=-469762049,this._ext|=i<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(i){this._ext&=-67108864,this._ext|=i&67108863}get urlId(){return this._urlId}set urlId(i){this._urlId=i}get underlineVariantOffset(){let i=(this._ext&3758096384)>>29;return i<0?i^4294967288:i}set underlineVariantOffset(i){this._ext&=536870911,this._ext|=i<<29&3758096384}clone(){return new n(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}};var F=class n extends ue{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new ke;this.combinedData=""}static fromCharData(e){let t=new n;return t.setFromCharData(e),t}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?be(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let r=e[1].charCodeAt(0);if(55296<=r&&r<=56319){let s=e[1].charCodeAt(1);56320<=s&&s<=57343?this.content=(r-55296)*1024+s-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor()||this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor()||this.isInverse()!==e.isInverse()||this.isBold()!==e.isBold()||this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;let t=this.isUnderlineColorDefault(),r=e.isUnderlineColorDefault();if(!(t&&r)&&(t!==r||this.getUnderlineColor()!==e.getUnderlineColor()||this.getUnderlineColorMode()!==e.getUnderlineColorMode()))return!1}return!(this.isOverline()!==e.isOverline()||this.isBlink()!==e.isBlink()||this.isInvisible()!==e.isInvisible()||this.isItalic()!==e.isItalic()||this.isDim()!==e.isDim()||this.isStrikethrough()!==e.isStrikethrough())}};var Wr=new Map;function Fs(n){return n.di$dependencies||[]}function H(n){if(Wr.has(n))return Wr.get(n);let i=function(e,t,r){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");On(i,e,r)};return i._id=n,Wr.set(n,i),i}function On(n,i,e){i.di$target===i?i.di$dependencies.push({id:n,index:e}):(i.di$dependencies=[{id:n,index:e}],i.di$target=i)}var D=H("BufferService"),Me=H("MouseStateService"),Y=H("CoreService"),Hs=H("CharsetService"),Qe=H("InstantiationService");var fe=H("LogService"),R=H("OptionsService"),bi=H("OscLinkService"),Ws=H("UnicodeService"),ge=H("DecorationService");var et=class{constructor(i,e,t){this._bufferService=i;this._optionsService=e;this._oscLinkService=t;this._workCell=new F}provideLinks(i,e){let t=this._bufferService.buffer.lines.get(i-1);if(!t){e(void 0);return}let r=[],s=this._optionsService.rawOptions.linkHandler,o=this._workCell,a=t.getTrimmedLength(),l=-1,h=-1,d=!1;for(let c=0;cs?s.activate(f,S,p):Nn(f,S),hover:(f,S)=>s?.hover?.(f,S,p),leave:(f,S)=>s?.leave?.(f,S,p)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(h=c,l=o.extended.urlId):(h=-1,l=-1)}}e(r)}_getRangeWithLineWrap(i,e,t,r){let s=i,o=e,a=i,l=t;for(;o===0&&this._bufferService.buffer.lines.get(s-1)?.isWrapped;){let d=this._bufferService.buffer.lines.get(s-2);if(!d)break;let c=d.getTrimmedLength();if(c===0||!this._hasUrlId(d,c-1,r))break;let u=c-1;for(;u>0&&this._hasUrlId(d,u-1,r);)u--;s--,o=u}for(;;){let h=this._bufferService.buffer.lines.get(a-1);if(!h)break;let d=h.getTrimmedLength();if(l!==d)break;let c=this._bufferService.buffer.lines.get(a);if(!c?.isWrapped)break;let u=c.getTrimmedLength();if(u===0||!this._hasUrlId(c,0,r))break;let _=1;for(;_{for(var e in i)Ms(n,e,{get:i[e],enumerable:!0})};var y=(n,i,e,t)=>{for(var r=t>1?void 0:t?kn(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&Ms(i,e,r),r},m=(n,i)=>(e,t)=>i(e,t,n);var Bs="Terminal input",Ut={get:()=>Bs,set:n=>Bs=n},Os="Too much output to announce, navigate to rows manually to read",Ze={get:()=>Os,set:n=>Os=n};function Mn(n){return n.replace(/\r?\n/g,"\r")}function Bn(n,i){return i?`\x1B[200~${n.replace(/\x1b/g,"\u241B")}\x1B[201~`:n}function Ns(n,i){n.clipboardData&&n.clipboardData.setData("text/plain",i.selectionText),n.preventDefault()}function Fs(n,i,e,t){if(n.stopPropagation(),n.clipboardData){let r=n.clipboardData.getData("text/plain");Or(r,i,e,t)}}function Or(n,i,e,t){n=Mn(n),n=Bn(n,e.decPrivateModes.bracketedPasteMode&&t.rawOptions.ignoreBracketedPasteMode!==!0),e.triggerDataEvent(n,!0),i.value=""}function Nr(n,i,e){let t=e.getBoundingClientRect(),r=n.clientX-t.left-10,s=n.clientY-t.top-10;i.style.width="20px",i.style.height="20px",i.style.left=`${r}px`,i.style.top=`${s}px`,i.style.zIndex="1000",i.focus()}function Fr(n,i,e,t,r){Nr(n,i,e),r&&t.rightClickSelect(n),i.value=t.selectionText,i.select()}function be(n){return n>65535?(n-=65536,String.fromCharCode((n>>10)+55296)+String.fromCharCode(n%1024+56320)):String.fromCharCode(n)}function xe(n,i=0,e=n.length){let t="";for(let r=i;r65535?(s-=65536,t+=String.fromCharCode((s>>10)+55296)+String.fromCharCode(s%1024+56320)):t+=String.fromCharCode(s)}return t}var mi=class{constructor(){this._interim=0}clear(){this._interim=0}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s=0;if(this._interim){let o=i.charCodeAt(s++);56320<=o&&o<=57343?e[r++]=(this._interim-55296)*1024+o-56320+65536:(e[r++]=this._interim,e[r++]=o),this._interim=0}for(let o=s;o=t)return this._interim=a,r;let l=i.charCodeAt(o);56320<=l&&l<=57343?e[r++]=(a-55296)*1024+l-56320+65536:(e[r++]=a,e[r++]=l);continue}a!==65279&&(e[r++]=a)}return r}},bi=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s,o,a,l,h,d=0;if(this.interim[0]){let f=!1,p=this.interim[0];p&=(p&224)===192?31:(p&240)===224?15:7;let b=0,_;for(;(_=this.interim[++b])&&b<4;)p<<=6,p|=_&63;let S=(this.interim[0]&224)===192?2:(this.interim[0]&240)===224?3:4,C=S-b;for(;d=t)return 0;if(_=i[d++],(_&192)!==128){d--,f=!0;break}else this.interim[b++]=_,p<<=6,p|=_&63}f||(S===2?p<128?d--:e[r++]=p:S===3?p<2048||p>=55296&&p<=57343||p===65279||(e[r++]=p):p<65536||p>1114111||(e[r++]=p)),this.interim.fill(0)}let c=t-4,u=d;for(;u=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(h=(s&31)<<6|o&63,h<128){u--;continue}e[r++]=h}else if((s&240)===224){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(h=(s&15)<<12|(o&63)<<6|a&63,h<2048||h>=55296&&h<=57343||h===65279)continue;e[r++]=h}else if((s&248)===240){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,this.interim[2]=a,r;if(l=i[u++],(l&192)!==128){u--;continue}if(h=(s&7)<<18|(o&63)<<12|(a&63)<<6|l&63,h<65536||h>1114111)continue;e[r++]=h}}return r}};var fe=class n{constructor(){this.fg=0;this.bg=0;this.extended=new Pe}static toColorRGB(i){return[i>>>16&255,i>>>8&255,i&255]}static fromColorRGB(i){return(i[0]&255)<<16|(i[1]&255)<<8|i[2]&255}clone(){let i=new n;return i.fg=this.fg,i.bg=this.bg,i.extended=this.extended.clone(),i}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},Pe=class n{constructor(i=0,e=0){this._ext=0;this._urlId=0;this._ext=i,this._urlId=e}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(i){this._ext=i}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(i){this._ext&=-469762049,this._ext|=i<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(i){this._ext&=-67108864,this._ext|=i&67108863}get urlId(){return this._urlId}set urlId(i){this._urlId=i}get underlineVariantOffset(){let i=(this._ext&3758096384)>>29;return i<0?i^4294967288:i}set underlineVariantOffset(i){this._ext&=536870911,this._ext|=i<<29&3758096384}clone(){return new n(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}};var F=class n extends fe{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new Pe;this.combinedData=""}static fromCharData(e){let t=new n;return t.setFromCharData(e),t}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?be(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let r=e[1].charCodeAt(0);if(55296<=r&&r<=56319){let s=e[1].charCodeAt(1);56320<=s&&s<=57343?this.content=(r-55296)*1024+s-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor()||this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor()||this.isInverse()!==e.isInverse()||this.isBold()!==e.isBold()||this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;let t=this.isUnderlineColorDefault(),r=e.isUnderlineColorDefault();if(!(t&&r)&&(t!==r||this.getUnderlineColor()!==e.getUnderlineColor()||this.getUnderlineColorMode()!==e.getUnderlineColorMode()))return!1}return!(this.isOverline()!==e.isOverline()||this.isBlink()!==e.isBlink()||this.isInvisible()!==e.isInvisible()||this.isItalic()!==e.isItalic()||this.isDim()!==e.isDim()||this.isStrikethrough()!==e.isStrikethrough())}};var Kr=new Map;function Ws(n){return n.di$dependencies||[]}function H(n){if(Kr.has(n))return Kr.get(n);let i=function(e,t,r){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");Fn(i,e,r)};return i._id=n,Kr.set(n,i),i}function Fn(n,i,e){i.di$target===i?i.di$dependencies.push({id:n,index:e}):(i.di$dependencies=[{id:n,index:e}],i.di$target=i)}var D=H("BufferService"),Me=H("MouseStateService"),X=H("CoreService"),Us=H("CharsetService"),et=H("InstantiationService");var _e=H("LogService"),R=H("OptionsService"),vi=H("OscLinkService"),Si=H("UnicodeService"),ge=H("DecorationService");var tt=class{constructor(i,e,t){this._bufferService=i;this._optionsService=e;this._oscLinkService=t;this._workCell=new F}provideLinks(i,e){let t=this._bufferService.buffer.lines.get(i-1);if(!t){e(void 0);return}let r=[],s=this._optionsService.rawOptions.linkHandler,o=this._workCell,a=t.getTrimmedLength(),l=-1,h=-1,d=!1;for(let c=0;cs?s.activate(_,S,p):Hn(_,S),hover:(_,S)=>s?.hover?.(_,S,p),leave:(_,S)=>s?.leave?.(_,S,p)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(h=c,l=o.extended.urlId):(h=-1,l=-1)}}e(r)}_getRangeWithLineWrap(i,e,t,r){let s=i,o=e,a=i,l=t;for(;o===0&&this._bufferService.buffer.lines.get(s-1)?.isWrapped;){let d=this._bufferService.buffer.lines.get(s-2);if(!d)break;let c=d.getTrimmedLength();if(c===0||!this._hasUrlId(d,c-1,r))break;let u=c-1;for(;u>0&&this._hasUrlId(d,u-1,r);)u--;s--,o=u}for(;;){let h=this._bufferService.buffer.lines.get(a-1);if(!h)break;let d=h.getTrimmedLength();if(l!==d)break;let c=this._bufferService.buffer.lines.get(a);if(!c?.isWrapped)break;let u=c.getTrimmedLength();if(u===0||!this._hasUrlId(c,0,r))break;let f=1;for(;f{for(var e in i)ks(n,e,{get:i[e],enumerable:!0})};var y=(n,i,e,t)=>{for(var r=t>1?void 0:t?Ln(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&ks(i,e,r),r},m=(n,i)=>(e,t)=>i(e,t,n);var Ms="Terminal input",Kt={get:()=>Ms,set:n=>Ms=n},Ps="Too much output to announce, navigate to rows manually to read",Ze={get:()=>Ps,set:n=>Ps=n};function kn(n){return n.replace(/\r?\n/g,"\r")}function Mn(n,i){return i?`\x1B[200~${n.replace(/\x1b/g,"\u241B")}\x1B[201~`:n}function Bs(n,i){n.clipboardData&&n.clipboardData.setData("text/plain",i.selectionText),n.preventDefault()}function Os(n,i,e,t){if(n.stopPropagation(),n.clipboardData){let r=n.clipboardData.getData("text/plain");Br(r,i,e,t)}}function Br(n,i,e,t){n=kn(n),n=Mn(n,e.decPrivateModes.bracketedPasteMode&&t.rawOptions.ignoreBracketedPasteMode!==!0),e.triggerDataEvent(n,!0),i.value=""}function Or(n,i,e){let t=e.getBoundingClientRect(),r=n.clientX-t.left-10,s=n.clientY-t.top-10;i.style.width="20px",i.style.height="20px",i.style.left=`${r}px`,i.style.top=`${s}px`,i.style.zIndex="1000",i.focus()}function Nr(n,i,e,t,r){Or(n,i,e),r&&t.rightClickSelect(n),i.value=t.selectionText,i.select()}function be(n){return n>65535?(n-=65536,String.fromCharCode((n>>10)+55296)+String.fromCharCode(n%1024+56320)):String.fromCharCode(n)}function ye(n,i=0,e=n.length){let t="";for(let r=i;r65535?(s-=65536,t+=String.fromCharCode((s>>10)+55296)+String.fromCharCode(s%1024+56320)):t+=String.fromCharCode(s)}return t}var mi=class{constructor(){this._interim=0}clear(){this._interim=0}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s=0;if(this._interim){let o=i.charCodeAt(s++);56320<=o&&o<=57343?e[r++]=(this._interim-55296)*1024+o-56320+65536:(e[r++]=this._interim,e[r++]=o),this._interim=0}for(let o=s;o=t)return this._interim=a,r;let l=i.charCodeAt(o);56320<=l&&l<=57343?e[r++]=(a-55296)*1024+l-56320+65536:(e[r++]=a,e[r++]=l);continue}a!==65279&&(e[r++]=a)}return r}},bi=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s,o,a,l,h,d=0;if(this.interim[0]){let _=!1,p=this.interim[0];p&=(p&224)===192?31:(p&240)===224?15:7;let v=0,f;for(;(f=this.interim[++v])&&v<4;)p<<=6,p|=f&63;let S=(this.interim[0]&224)===192?2:(this.interim[0]&240)===224?3:4,I=S-v;for(;d=t)return 0;if(f=i[d++],(f&192)!==128){d--,_=!0;break}else this.interim[v++]=f,p<<=6,p|=f&63}_||(S===2?p<128?d--:e[r++]=p:S===3?p<2048||p>=55296&&p<=57343||p===65279||(e[r++]=p):p<65536||p>1114111||(e[r++]=p)),this.interim.fill(0)}let c=t-4,u=d;for(;u=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(h=(s&31)<<6|o&63,h<128){u--;continue}e[r++]=h}else if((s&240)===224){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(h=(s&15)<<12|(o&63)<<6|a&63,h<2048||h>=55296&&h<=57343||h===65279)continue;e[r++]=h}else if((s&248)===240){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,this.interim[2]=a,r;if(l=i[u++],(l&192)!==128){u--;continue}if(h=(s&7)<<18|(o&63)<<12|(a&63)<<6|l&63,h<65536||h>1114111)continue;e[r++]=h}}return r}};var ue=class n{constructor(){this.fg=0;this.bg=0;this.extended=new ke}static toColorRGB(i){return[i>>>16&255,i>>>8&255,i&255]}static fromColorRGB(i){return(i[0]&255)<<16|(i[1]&255)<<8|i[2]&255}clone(){let i=new n;return i.fg=this.fg,i.bg=this.bg,i.extended=this.extended.clone(),i}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},ke=class n{constructor(i=0,e=0){this._ext=0;this._urlId=0;this._ext=i,this._urlId=e}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(i){this._ext=i}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(i){this._ext&=-469762049,this._ext|=i<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(i){this._ext&=-67108864,this._ext|=i&67108863}get urlId(){return this._urlId}set urlId(i){this._urlId=i}get underlineVariantOffset(){let i=(this._ext&3758096384)>>29;return i<0?i^4294967288:i}set underlineVariantOffset(i){this._ext&=536870911,this._ext|=i<<29&3758096384}clone(){return new n(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.payload===void 0}};var F=class n extends ue{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new ke;this.combinedData=""}static fromCharData(e){let t=new n;return t.setFromCharData(e),t}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?be(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let r=e[1].charCodeAt(0);if(55296<=r&&r<=56319){let s=e[1].charCodeAt(1);56320<=s&&s<=57343?this.content=(r-55296)*1024+s-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor()||this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor()||this.isInverse()!==e.isInverse()||this.isBold()!==e.isBold()||this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;let t=this.isUnderlineColorDefault(),r=e.isUnderlineColorDefault();if(!(t&&r)&&(t!==r||this.getUnderlineColor()!==e.getUnderlineColor()||this.getUnderlineColorMode()!==e.getUnderlineColorMode()))return!1}return!(this.isOverline()!==e.isOverline()||this.isBlink()!==e.isBlink()||this.isInvisible()!==e.isInvisible()||this.isItalic()!==e.isItalic()||this.isDim()!==e.isDim()||this.isStrikethrough()!==e.isStrikethrough())}};var Ur=new Map;function Fs(n){return n.di$dependencies||[]}function H(n){if(Ur.has(n))return Ur.get(n);let i=function(e,t,r){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");On(i,e,r)};return i._id=n,Ur.set(n,i),i}function On(n,i,e){i.di$target===i?i.di$dependencies.push({id:n,index:e}):(i.di$dependencies=[{id:n,index:e}],i.di$target=i)}var D=H("BufferService"),Me=H("MouseStateService"),Y=H("CoreService"),Hs=H("CharsetService"),Qe=H("InstantiationService");var fe=H("LogService"),R=H("OptionsService"),vi=H("OscLinkService"),Ws=H("UnicodeService"),ge=H("DecorationService");var et=class{constructor(i,e,t){this._bufferService=i;this._optionsService=e;this._oscLinkService=t;this._workCell=new F}provideLinks(i,e){let t=this._bufferService.buffer.lines.get(i-1);if(!t){e(void 0);return}let r=[],s=this._optionsService.rawOptions.linkHandler,o=this._workCell,a=t.getTrimmedLength(),l=-1,h=-1,d=!1;for(let c=0;cs?s.activate(f,S,p):Nn(f,S),hover:(f,S)=>s?.hover?.(f,S,p),leave:(f,S)=>s?.leave?.(f,S,p)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(h=c,l=o.extended.urlId):(h=-1,l=-1)}}e(r)}_getRangeWithLineWrap(i,e,t,r){let s=i,o=e,a=i,l=t;for(;o===0&&this._bufferService.buffer.lines.get(s-1)?.isWrapped;){let d=this._bufferService.buffer.lines.get(s-2);if(!d)break;let c=d.getTrimmedLength();if(c===0||!this._hasUrlId(d,c-1,r))break;let u=c-1;for(;u>0&&this._hasUrlId(d,u-1,r);)u--;s--,o=u}for(;;){let h=this._bufferService.buffer.lines.get(a-1);if(!h)break;let d=h.getTrimmedLength();if(l!==d)break;let c=this._bufferService.buffer.lines.get(a);if(!c?.isWrapped)break;let u=c.getTrimmedLength();if(u===0||!this._hasUrlId(c,0,r))break;let _=1;for(;_{for(var e in i)Ms(n,e,{get:i[e],enumerable:!0})};var y=(n,i,e,t)=>{for(var r=t>1?void 0:t?kn(i,e):i,s=n.length-1,o;s>=0;s--)(o=n[s])&&(r=(t?o(i,e,r):o(r))||r);return t&&r&&Ms(i,e,r),r},m=(n,i)=>(e,t)=>i(e,t,n);var Bs="Terminal input",Kt={get:()=>Bs,set:n=>Bs=n},Os="Too much output to announce, navigate to rows manually to read",Ze={get:()=>Os,set:n=>Os=n};function Mn(n){return n.replace(/\r?\n/g,"\r")}function Bn(n,i){return i?`\x1B[200~${n.replace(/\x1b/g,"\u241B")}\x1B[201~`:n}function Ns(n,i){n.clipboardData&&n.clipboardData.setData("text/plain",i.selectionText),n.preventDefault()}function Fs(n,i,e,t){if(n.stopPropagation(),n.clipboardData){let r=n.clipboardData.getData("text/plain");Nr(r,i,e,t)}}function Nr(n,i,e,t){n=Mn(n),n=Bn(n,e.decPrivateModes.bracketedPasteMode&&t.rawOptions.ignoreBracketedPasteMode!==!0),e.triggerDataEvent(n,!0),i.value=""}function Fr(n,i,e){let t=e.getBoundingClientRect(),r=n.clientX-t.left-10,s=n.clientY-t.top-10;i.style.width="20px",i.style.height="20px",i.style.left=`${r}px`,i.style.top=`${s}px`,i.style.zIndex="1000",i.focus()}function Hr(n,i,e,t,r){Fr(n,i,e),r&&t.rightClickSelect(n),i.value=t.selectionText,i.select()}function be(n){return n>65535?(n-=65536,String.fromCharCode((n>>10)+55296)+String.fromCharCode(n%1024+56320)):String.fromCharCode(n)}function xe(n,i=0,e=n.length){let t="";for(let r=i;r65535?(s-=65536,t+=String.fromCharCode((s>>10)+55296)+String.fromCharCode(s%1024+56320)):t+=String.fromCharCode(s)}return t}var bi=class{constructor(){this._interim=0}clear(){this._interim=0}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s=0;if(this._interim){let o=i.charCodeAt(s++);56320<=o&&o<=57343?e[r++]=(this._interim-55296)*1024+o-56320+65536:(e[r++]=this._interim,e[r++]=o),this._interim=0}for(let o=s;o=t)return this._interim=a,r;let l=i.charCodeAt(o);56320<=l&&l<=57343?e[r++]=(a-55296)*1024+l-56320+65536:(e[r++]=a,e[r++]=l);continue}a!==65279&&(e[r++]=a)}return r}},vi=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(i,e){let t=i.length;if(!t)return 0;let r=0,s,o,a,l,h,d=0;if(this.interim[0]){let f=!1,p=this.interim[0];p&=(p&224)===192?31:(p&240)===224?15:7;let b=0,_;for(;(_=this.interim[++b])&&b<4;)p<<=6,p|=_&63;let S=(this.interim[0]&224)===192?2:(this.interim[0]&240)===224?3:4,C=S-b;for(;d=t)return 0;if(_=i[d++],(_&192)!==128){d--,f=!0;break}else this.interim[b++]=_,p<<=6,p|=_&63}f||(S===2?p<128?d--:e[r++]=p:S===3?p<2048||p>=55296&&p<=57343||p===65279||(e[r++]=p):p<65536||p>1114111||(e[r++]=p)),this.interim.fill(0)}let c=t-4,u=d;for(;u=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(h=(s&31)<<6|o&63,h<128){u--;continue}e[r++]=h}else if((s&240)===224){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(h=(s&15)<<12|(o&63)<<6|a&63,h<2048||h>=55296&&h<=57343||h===65279)continue;e[r++]=h}else if((s&248)===240){if(u>=t)return this.interim[0]=s,r;if(o=i[u++],(o&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,r;if(a=i[u++],(a&192)!==128){u--;continue}if(u>=t)return this.interim[0]=s,this.interim[1]=o,this.interim[2]=a,r;if(l=i[u++],(l&192)!==128){u--;continue}if(h=(s&7)<<18|(o&63)<<12|(a&63)<<6|l&63,h<65536||h>1114111)continue;e[r++]=h}}return r}};var fe=class n{constructor(){this.fg=0;this.bg=0;this.extended=new Pe}static toColorRGB(i){return[i>>>16&255,i>>>8&255,i&255]}static fromColorRGB(i){return(i[0]&255)<<16|(i[1]&255)<<8|i[2]&255}clone(){let i=new n;return i.fg=this.fg,i.bg=this.bg,i.extended=this.extended.clone(),i}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)===50331648}isBgRGB(){return(this.bg&50331648)===50331648}isFgPalette(){return(this.fg&50331648)===16777216||(this.fg&50331648)===33554432}isBgPalette(){return(this.bg&50331648)===16777216||(this.bg&50331648)===33554432}isFgDefault(){return(this.fg&50331648)===0}isBgDefault(){return(this.bg&50331648)===0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===16777216||(this.extended.underlineColor&50331648)===33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)===0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},Pe=class n{constructor(i=0,e=0){this._ext=0;this._urlId=0;this._ext=i,this._urlId=e}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(i){this._ext=i}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(i){this._ext&=-469762049,this._ext|=i<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(i){this._ext&=-67108864,this._ext|=i&67108863}get urlId(){return this._urlId}set urlId(i){this._urlId=i}get underlineVariantOffset(){let i=(this._ext&3758096384)>>29;return i<0?i^4294967288:i}set underlineVariantOffset(i){this._ext&=536870911,this._ext|=i<<29&3758096384}clone(){return new n(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0&&this.payload===void 0}};var F=class n extends fe{constructor(){super(...arguments);this.content=0;this.fg=0;this.bg=0;this.extended=new Pe;this.combinedData=""}static fromCharData(e){let t=new n;return t.setFromCharData(e),t}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?be(this.content&2097151):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let r=e[1].charCodeAt(0);if(55296<=r&&r<=56319){let s=e[1].charCodeAt(1);56320<=s&&s<=57343?this.content=(r-55296)*1024+s-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}attributesEquals(e){if(this.getFgColorMode()!==e.getFgColorMode()||this.getFgColor()!==e.getFgColor()||this.getBgColorMode()!==e.getBgColorMode()||this.getBgColor()!==e.getBgColor()||this.isInverse()!==e.isInverse()||this.isBold()!==e.isBold()||this.isUnderline()!==e.isUnderline())return!1;if(this.isUnderline()){if(this.getUnderlineStyle()!==e.getUnderlineStyle())return!1;let t=this.isUnderlineColorDefault(),r=e.isUnderlineColorDefault();if(!(t&&r)&&(t!==r||this.getUnderlineColor()!==e.getUnderlineColor()||this.getUnderlineColorMode()!==e.getUnderlineColorMode()))return!1}return!(this.isOverline()!==e.isOverline()||this.isBlink()!==e.isBlink()||this.isInvisible()!==e.isInvisible()||this.isItalic()!==e.isItalic()||this.isDim()!==e.isDim()||this.isStrikethrough()!==e.isStrikethrough())}};var zr=new Map;function Ws(n){return n.di$dependencies||[]}function H(n){if(zr.has(n))return zr.get(n);let i=function(e,t,r){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");Fn(i,e,r)};return i._id=n,zr.set(n,i),i}function Fn(n,i,e){i.di$target===i?i.di$dependencies.push({id:n,index:e}):(i.di$dependencies=[{id:n,index:e}],i.di$target=i)}var D=H("BufferService"),Me=H("MouseStateService"),X=H("CoreService"),Us=H("CharsetService"),et=H("InstantiationService");var _e=H("LogService"),R=H("OptionsService"),Si=H("OscLinkService"),gi=H("UnicodeService"),ge=H("DecorationService");var tt=class{constructor(i,e,t){this._bufferService=i;this._optionsService=e;this._oscLinkService=t;this._workCell=new F}provideLinks(i,e){let t=this._bufferService.buffer.lines.get(i-1);if(!t){e(void 0);return}let r=[],s=this._optionsService.rawOptions.linkHandler,o=this._workCell,a=t.getTrimmedLength(),l=-1,h=-1,d=!1;for(let c=0;cs?s.activate(_,S,p):Hn(_,S),hover:(_,S)=>s?.hover?.(_,S,p),leave:(_,S)=>s?.leave?.(_,S,p)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(h=c,l=o.extended.urlId):(h=-1,l=-1)}}e(r)}_getRangeWithLineWrap(i,e,t,r){let s=i,o=e,a=i,l=t;for(;o===0&&this._bufferService.buffer.lines.get(s-1)?.isWrapped;){let d=this._bufferService.buffer.lines.get(s-2);if(!d)break;let c=d.getTrimmedLength();if(c===0||!this._hasUrlId(d,c-1,r))break;let u=c-1;for(;u>0&&this._hasUrlId(d,u-1,r);)u--;s--,o=u}for(;;){let h=this._bufferService.buffer.lines.get(a-1);if(!h)break;let d=h.getTrimmedLength();if(l!==d)break;let c=this._bufferService.buffer.lines.get(a);if(!c?.isWrapped)break;let u=c.getTrimmedLength();if(u===0||!this._hasUrlId(c,0,r))break;let f=1;for(;f{this._token=-1,i()},e)}setIfNotSet(i,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,i()},e))}},Ii=class{constructor(){this._isScheduled=!1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(i){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,i())}))}},Ci=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(i,e,t=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();let r=t.setInterval(()=>{i()},e);this._disposable={dispose:()=>{t.clearInterval(r),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}};function se(n){let i=n;if(i?.ownerDocument?.defaultView)return i.ownerDocument.defaultView;let e=n;return e?.view?e.view:window}var Ur=class{constructor(i,e,t,r){this._node=i,this._type=e,this._handler=t,this._options=r,i.addEventListener(e,t,r)}dispose(){!this._node||!this._handler||(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}};function C(n,i,e,t){return new Ur(n,i,e,t)}function Kr(n,i,e,t){return C(n,i,e,t)}var le={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};function Gs(n){let i=n.getBoundingClientRect(),e=se(n);return{left:i.left+e.scrollX,top:i.top+e.scrollY,width:i.width,height:i.height}}var Ei=class{constructor(i,e){this._runner=i;this.priority=e;this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(i){console.error(i)}}static sort(i,e){return e.priority-i.priority}},zs=new Map;function Vs(n){let i=zs.get(n);return i||(i={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},zs.set(n,i)),i}function Fn(n){let i=Vs(n);for(i.animFrameRequested=!1,i.current=i.next,i.next=[],i.inAnimationFrameRunner=!0;i.current.length>0;)i.current.sort(Ei.sort),i.current.shift().execute();i.inAnimationFrameRunner=!1}function tt(n,i,e=0){let t=Vs(n),r=new Ei(i,e);return t.next.push(r),t.animFrameRequested||(t.animFrameRequested=!0,n.requestAnimationFrame(()=>Fn(n))),r}var yi=class extends Ci{constructor(i){super(),this._defaultTarget=i?se(i):void 0}cancelAndSet(i,e,t){super.cancelAndSet(i,e,t??this._defaultTarget??window)}};var we=class{constructor(i){this.domNode=i;this._width="";this._height="";this._top="";this._left="";this._bottom="";this._right="";this._className="";this._position="";this._layerHint=!1;this._contain="none"}setWidth(i){let e=rt(i);this._width!==e&&(this._width=e,this.domNode.style.width=this._width)}setHeight(i){let e=rt(i);this._height!==e&&(this._height=e,this.domNode.style.height=this._height)}setTop(i){let e=rt(i);this._top!==e&&(this._top=e,this.domNode.style.top=this._top)}setLeft(i){let e=rt(i);this._left!==e&&(this._left=e,this.domNode.style.left=this._left)}setBottom(i){let e=rt(i);this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom)}setRight(i){let e=rt(i);this._right!==e&&(this._right=e,this.domNode.style.right=this._right)}setClassName(i){this._className!==i&&(this._className=i,this.domNode.className=this._className)}toggleClassName(i,e){this.domNode.classList.toggle(i,e),this._className=this.domNode.className}setPosition(i){this._position!==i&&(this._position=i,this.domNode.style.position=this._position)}setLayerHinting(i){this._layerHint!==i&&(this._layerHint=i,i?this.domNode.style.transform="translate3d(0px, 0px, 0px)":this.domNode.style.transform="")}setContain(i){this._contain!==i&&(this._contain=i,this.domNode.style.contain=this._contain)}setAttribute(i,e){this.domNode.setAttribute(i,e)}};function rt(n){return typeof n=="number"?`${n}px`:n}var Ke={};An(Ke,{getSafariVersion:()=>Wn,getZoomFactor:()=>Vr,isChrome:()=>Kt,isChromeOS:()=>$r,isFirefox:()=>nt,isLegacyEdge:()=>Hn,isLinux:()=>zt,isMac:()=>ie,isNode:()=>zr,isSafari:()=>xi,isWindows:()=>Ue});var zr=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),st=zr?"node":navigator.userAgent,Gr=zr?"node":navigator.platform,nt=st.includes("Firefox"),Kt=st.includes("Chrome"),Hn=st.includes("Edge"),xi=/^((?!chrome|android).)*safari/i.test(st);function Vr(n){return 1}function Wn(){if(!xi)return 0;let n=st.match(/Version\/(\d+)/);return n===null||n.length<2?0:parseInt(n[1],10)}var ie=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(Gr),Ue=["Windows","Win16","Win32","WinCE"].includes(Gr),zt=Gr.indexOf("Linux")>=0,$r=/\bCrOS\b/.test(st);var $s=new WeakMap;function Un(n){if(!n.parent||n.parent===n)return null;try{let i=n.location,e=n.parent.location;if(i.origin!=="null"&&e.origin!=="null"&&i.origin!==e.origin)return null}catch{return null}return n.parent}var qr=class{static _getSameOriginWindowChain(i){let e=$s.get(i);if(!e){e=[],$s.set(i,e);let t=i,r;do r=Un(t),r?e.push({window:new WeakRef(t),iframeElement:t.frameElement??null}):e.push({window:new WeakRef(t),iframeElement:null}),t=r;while(t)}return e.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(i,e){if(!e||i===e)return{top:0,left:0};let t=0,r=0,s=this._getSameOriginWindowChain(i);for(let o of s){let a=o.window.deref();if(t+=a?.scrollY??0,r+=a?.scrollX??0,a===e||!o.iframeElement)break;let l=o.iframeElement.getBoundingClientRect();t+=l.top,r+=l.left}return{top:t,left:r}}},ot=class{constructor(i,e){this.timestamp=Date.now(),this.browserEvent=e,this.leftButton=e.button===0,this.middleButton=e.button===1,this.rightButton=e.button===2,this.buttons=e.buttons,this.target=e.target,this.detail=e.detail??1,e.type==="dblclick"&&(this.detail=2),this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,typeof e.pageX=="number"?(this.posx=e.pageX,this.posy=e.pageY):(this.posx=e.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=e.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);let t=qr.getPositionOfChildWindowRelativeToAncestorWindow(i,e.view);this.posx-=t.left,this.posy-=t.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}},Gt=class{constructor(i,e=0,t=0){this.browserEvent=i??null,this.target=i?i.target??i.targetNode??i.srcElement??null:null,this.deltaY=t,this.deltaX=e;let r=!1;if(Kt){let s=navigator.userAgent.match(/Chrome\/(\d+)/);r=(s?parseInt(s[1],10):123)<=122}if(i){let s=i,o=i,a=i.view?.devicePixelRatio??1;if(typeof s.wheelDeltaY<"u")r?this.deltaY=s.wheelDeltaY/(120*a):this.deltaY=s.wheelDeltaY/120;else if(typeof o.VERTICAL_AXIS<"u"&&o.axis===o.VERTICAL_AXIS)this.deltaY=-o.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?nt&&!ie?this.deltaY=-i.deltaY/3:this.deltaY=-i.deltaY:this.deltaY=-i.deltaY/40}if(typeof s.wheelDeltaX<"u")xi&&Ue?this.deltaX=-(s.wheelDeltaX/120):r?this.deltaX=s.wheelDeltaX/(120*a):this.deltaX=s.wheelDeltaX/120;else if(typeof o.HORIZONTAL_AXIS<"u"&&o.axis===o.HORIZONTAL_AXIS)this.deltaX=-i.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?nt&&!ie?this.deltaX=-i.deltaX/3:this.deltaX=-i.deltaX:this.deltaX=-i.deltaX/40}this.deltaY===0&&this.deltaX===0&&i.wheelDelta&&(r?this.deltaY=i.wheelDelta/(120*a):this.deltaY=i.wheelDelta/120)}}preventDefault(){this.browserEvent?.preventDefault()}stopPropagation(){this.browserEvent?.stopPropagation()}};var at=class{constructor(){this._hooks=new pe;this._pointerMoveCallback=null;this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(i){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let e=this._onStopCallback;this._onStopCallback=null,i&&e&&e()}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(i,e,t,r,s){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=s;let o=i;try{i.setPointerCapture(e),this._hooks.add(E(()=>{try{i.releasePointerCapture(e)}catch{}}))}catch{o=se(i)}this._hooks.add(C(o,le.POINTER_MOVE,a=>{if(a.buttons!==t){this.stopMonitoring(!0);return}a.preventDefault(),this._pointerMoveCallback(a)})),this._hooks.add(C(o,le.POINTER_UP,a=>this.stopMonitoring(!0)))}};var Ne=class extends g{_onclick(i,e){this._register(C(i,le.CLICK,t=>e(new ot(se(i),t))))}_onmouseover(i,e){this._register(C(i,le.MOUSE_OVER,t=>e(new ot(se(i),t))))}_onmouseleave(i,e){this._register(C(i,le.MOUSE_LEAVE,t=>e(new ot(se(i),t))))}};var wi=class extends Ne{constructor(i){super(),this._handleActivate=i.handleActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="xterm-arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=i.bgWidth+"px",this.bgDomNode.style.height=i.bgHeight+"px",typeof i.top<"u"&&(this.bgDomNode.style.top="0px"),typeof i.left<"u"&&(this.bgDomNode.style.left="0px"),typeof i.bottom<"u"&&(this.bgDomNode.style.bottom="0px"),typeof i.right<"u"&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=i.className,this.domNode.style.position="absolute";let e=Math.min(i.bgWidth,i.bgHeight);this.domNode.style.width=e+"px",this.domNode.style.height=e+"px",typeof i.top<"u"&&(this.domNode.style.top=i.top+"px"),typeof i.left<"u"&&(this.domNode.style.left=i.left+"px"),typeof i.bottom<"u"&&(this.domNode.style.bottom=i.bottom+"px"),typeof i.right<"u"&&(this.domNode.style.right=i.right+"px"),this._pointerMoveMonitor=this._register(new at),this._register(Kr(this.bgDomNode,le.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._register(Kr(this.domNode,le.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._pointerdownRepeatTimer=this._register(new yi),this._pointerdownScheduleRepeatTimer=this._register(new Ie)}_arrowPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,se(i))};this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(e,200),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,t=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),i.preventDefault()}};var b=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(i,e,t)=>{if(this._disposed)return E(()=>{});let r={fn:i,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);let s=E(()=>{let o=this._listeners.indexOf(r);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return t&&(Array.isArray(t)?t.push(s):t.add(s)),s},this._event)}fire(i){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,i);return}let e=this._listeners;for(let t=0,r=e.length;t{function n(s,o){return s(a=>o.fire(a))}r.forward=n;function i(s,o){return(a,l,h)=>s(d=>a.call(l,o(d)),void 0,h)}r.map=i;function e(...s){return(o,a,l)=>{let h=new pe;for(let d of s)h.add(d(c=>o.call(a,c)));return l&&(Array.isArray(l)?l.push(h):l.add(h)),h}}r.any=e;function t(s,o,a){return o(a),s(l=>o(l))}r.runAndSubscribe=t})(j||={});var Yr=class n{constructor(i,e,t,r,s,o,a){this._forceIntegerValues=i;this._scrollStateBrand=void 0;this._forceIntegerValues&&(e=e|0,t=t|0,r=r|0,s=s|0,o=o|0,a=a|0),this.rawScrollLeft=r,this.rawScrollTop=a,e<0&&(e=0),r+e>t&&(r=t-e),r<0&&(r=0),s<0&&(s=0),a+s>o&&(a=o-s),a<0&&(a=0),this.width=e,this.scrollWidth=t,this.scrollLeft=r,this.height=s,this.scrollHeight=o,this.scrollTop=a}equals(i){return this.rawScrollLeft===i.rawScrollLeft&&this.rawScrollTop===i.rawScrollTop&&this.width===i.width&&this.scrollWidth===i.scrollWidth&&this.scrollLeft===i.scrollLeft&&this.height===i.height&&this.scrollHeight===i.scrollHeight&&this.scrollTop===i.scrollTop}withScrollDimensions(i,e){return new n(this._forceIntegerValues,typeof i.width<"u"?i.width:this.width,typeof i.scrollWidth<"u"?i.scrollWidth:this.scrollWidth,e?this.rawScrollLeft:this.scrollLeft,typeof i.height<"u"?i.height:this.height,typeof i.scrollHeight<"u"?i.scrollHeight:this.scrollHeight,e?this.rawScrollTop:this.scrollTop)}withScrollPosition(i){return new n(this._forceIntegerValues,this.width,this.scrollWidth,typeof i.scrollLeft<"u"?i.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof i.scrollTop<"u"?i.scrollTop:this.rawScrollTop)}createScrollEvent(i,e){let t=this.width!==i.width,r=this.scrollWidth!==i.scrollWidth,s=this.scrollLeft!==i.scrollLeft,o=this.height!==i.height,a=this.scrollHeight!==i.scrollHeight,l=this.scrollTop!==i.scrollTop;return{inSmoothScrolling:e,oldWidth:i.width,oldScrollWidth:i.scrollWidth,oldScrollLeft:i.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:i.height,oldScrollHeight:i.scrollHeight,oldScrollTop:i.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:t,scrollWidthChanged:r,scrollLeftChanged:s,heightChanged:o,scrollHeightChanged:a,scrollTopChanged:l}}},lt=class extends g{constructor(e){super();this._scrollableBrand=void 0;this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new Yr(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){let r=this._state.withScrollDimensions(e,t);this._setState(r,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(this._smoothScrollDuration===0){this.setScrollPositionNow(e);return}if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>"u"?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>"u"?this._smoothScrolling.to.scrollTop:e.scrollTop};let r=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===r.scrollLeft&&this._smoothScrolling.to.scrollTop===r.scrollTop)return;let s;t?s=new Vt(this._smoothScrolling.from,r,this._smoothScrolling.startTime,this._smoothScrolling.duration):s=Vt.start(this._state,r,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{let r=this._state.withScrollPosition(e);this._smoothScrolling=Vt.start(this._state,r,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);if(this._setState(t,!0),!!this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,t){let r=this._state;r.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(r,t)))}},Ti=class{constructor(i,e,t){this.scrollLeft=i,this.scrollTop=e,this.isDone=t}};function Xr(n,i){let e=i-n;return function(t){return n+e*Gn(t)}}function Kn(n,i,e){return function(t){return t2.5*t){let s,o;return i{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(i){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(i?" xterm-fade":"")))}};var Vn=140,ct=class extends Ne{constructor(i){super(),this._lazyRender=i.lazyRender,this._host=i.host,this._scrollable=i.scrollable,this._scrollByPage=i.scrollByPage,this._scrollbarState=i.scrollbarState,this._visibilityController=this._register(new Di(i.visibility,"xterm-visible xterm-scrollbar "+i.extraScrollbarClassName,"xterm-invisible xterm-scrollbar "+i.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new at),this._shouldRender=!0,this.domNode=new we(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this._register(C(this.domNode.domNode,le.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(i){let e=this._register(new wi(i));return this.domNode.domNode.appendChild(e.bgDomNode),this.domNode.domNode.appendChild(e.domNode),e}_createSlider(i,e,t,r){this.slider=new we(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(i),this.slider.setLeft(e),typeof t=="number"&&this.slider.setWidth(t),typeof r=="number"&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(C(this.slider.domNode,le.POINTER_DOWN,s=>{s.button===0&&(s.preventDefault(),this._sliderPointerDown(s))})),this._onclick(this.slider.domNode,s=>{s.leftButton&&s.stopPropagation()})}_handleElementSize(i){return this._scrollbarState.setVisibleSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(i){return this._scrollbarState.setScrollSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(i){return this._scrollbarState.setScrollPosition(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(i){i.target===this.domNode.domNode&&this._handlePointerDown(i)}delegatePointerDown(i){let e=this.domNode.domNode.getClientRects()[0].top,t=e+this._scrollbarState.getSliderPosition(),r=e+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),s=this._sliderPointerPosition(i);t<=s&&s<=r?i.button===0&&(i.preventDefault(),this._sliderPointerDown(i)):this._handlePointerDown(i)}_handlePointerDown(i){let e,t;if(i.target===this.domNode.domNode&&typeof i.offsetX=="number"&&typeof i.offsetY=="number")e=i.offsetX,t=i.offsetY;else{let s=Gs(this.domNode.domNode);e=i.pageX-s.left,t=i.pageY-s.top}let r=this._pointerDownRelativePosition(e,t);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),i.button===0&&(i.preventDefault(),this._sliderPointerDown(i))}_sliderPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=this._sliderPointerPosition(i),t=this._sliderOrthogonalPointerPosition(i),r=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,s=>{let o=this._sliderOrthogonalPointerPosition(s),a=Math.abs(o-t);if(Ue&&a>Vn){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let h=this._sliderPointerPosition(s)-e;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(h))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(i){let e={};this.writeScrollPosition(e,i),this._scrollable.setScrollPositionNow(e)}updateScrollbarSize(i){this._updateScrollbarSize(i),this._scrollbarState.setScrollbarSize(i),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}};var ht=class n{constructor(i,e,t,r,s,o){this._scrollbarSize=Math.round(e),this._oppositeScrollbarSize=Math.round(t),this._arrowSize=Math.round(i),this._visibleSize=r,this._scrollSize=s,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new n(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(i){let e=Math.round(i);return this._visibleSize!==e?(this._visibleSize=e,this._refreshComputedValues(),!0):!1}setScrollSize(i){let e=Math.round(i);return this._scrollSize!==e?(this._scrollSize=e,this._refreshComputedValues(),!0):!1}setScrollPosition(i){let e=Math.round(i);return this._scrollPosition!==e?(this._scrollPosition=e,this._refreshComputedValues(),!0):!1}setScrollbarSize(i){this._scrollbarSize=Math.round(i)}setArrowSize(i){let e=Math.round(i);this._arrowSize!==e&&(this._arrowSize=e,this._refreshComputedValues())}setOppositeScrollbarSize(i){this._oppositeScrollbarSize=Math.round(i)}static _computeValues(i,e,t,r,s){let o=Math.max(0,t-i),a=Math.max(0,o-2*e),l=r>0&&r>t;if(!l)return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(a),computedSliderRatio:0,computedSliderPosition:0};let h=Math.round(Math.max(20,Math.floor(t*a/r))),d=(a-h)/(r-t),c=s*d;return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(h),computedSliderRatio:d,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){let i=n._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=i.computedAvailableSize,this._computedIsNeeded=i.computedIsNeeded,this._computedSliderSize=i.computedSliderSize,this._computedSliderRatio=i.computedSliderRatio,this._computedSliderPosition=i.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize-this._computedSliderSize/2;return Math.round(e/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize,t=this._scrollPosition;return ethis._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:0,left:0,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})),this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;let r=e?"":"none";this._arrowUp.bgDomNode.style.display=r,this._arrowUp.domNode.style.display=r,this._arrowDown.bgDomNode.style.display=r,this._arrowDown.domNode.style.display=r}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){let t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(e.vertical===2?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}};var jr=class{constructor(i,e,t){this.timestamp=i,this.deltaX=e,this.deltaY=t,this.score=0}},Mi=class Mi{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let i=1,e=0,t=1,r=this._rear;for(;r!==-1;){let s=r===this._front?i:Math.pow(2,-t);if(i-=s,e+=this._memory[r].score*s,r===this._front)break;r=(this._capacity+r-1)%this._capacity,t++}return e<=.5}acceptStandardWheelEvent(i){if(Kt){let e=se(i.browserEvent),t=Vr(e);this.accept(Date.now(),i.deltaX*t,i.deltaY*t)}else this.accept(Date.now(),i.deltaX,i.deltaY)}accept(i,e,t){let r=null,s=new jr(i,e,t);this._front===-1&&this._rear===-1?(this._memory[0]=s,this._front=0,this._rear=0):(r=this._memory[this._rear],this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=s),s.score=this._computeScore(s,r)}_computeScore(i,e){if(Math.abs(i.deltaX)>0&&Math.abs(i.deltaY)>0)return 1;let t=.5;if((!this._isAlmostInt(i.deltaX)||!this._isAlmostInt(i.deltaY))&&(t+=.25),e){let r=Math.abs(i.deltaX),s=Math.abs(i.deltaY),o=Math.abs(e.deltaX),a=Math.abs(e.deltaY),l=Math.max(Math.min(r,o),1),h=Math.max(Math.min(s,a),1),d=Math.max(r,o),c=Math.max(s,a);d%l===0&&c%h===0&&(t-=.5)}return Math.min(Math.max(t,0),1)}_isAlmostInt(i){return Math.abs(Math.round(i)-i)<.01}};Mi.INSTANCE=new Mi;var Zr=Mi,ki=class extends Ne{constructor(e,t,r){super();this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;t=t??{};let s,o=!r;r?s=r:(t.mouseWheelSmoothScroll=!1,s=new lt({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:l=>tt(se(e),l)})),this._options=$n(t),this._scrollable=s,this._register(this._scrollable.onScroll(l=>{this._handleScroll(l),this._onScroll.fire(l)})),o&&this._register(this._scrollable);let a={handleMouseWheel:l=>this._handleMouseWheel(l),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new Ai(this._scrollable,this._options,a)),this._horizontalScrollbar=this._register(new Li(this._scrollable,this._options,a)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new we(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new we(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new we(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,l=>this._handleMouseOver(l)),this._onmouseleave(this._listenOnDomNode,l=>this._handleMouseLeave(l)),this._hideTimeout=this._register(new Ie),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=Oe(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,ie&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){typeof e.handleMouseWheel<"u"&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<"u"&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<"u"&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<"u"&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<"u"&&(this._options.horizontal=e.horizontal),typeof e.vertical<"u"&&(this._options.vertical=e.vertical),typeof e.horizontalHasArrows<"u"&&(this._options.horizontalHasArrows=e.horizontalHasArrows),typeof e.verticalHasArrows<"u"&&(this._options.verticalHasArrows=e.verticalHasArrows),typeof e.horizontalScrollbarSize<"u"&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<"u"&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<"u"&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new Gt(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=Oe(this._mouseWheelToDispose),e)){let r=s=>{this._handleMouseWheel(new Gt(s))};this._mouseWheelToDispose.push(C(this._listenOnDomNode,le.MOUSE_WHEEL,r,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let t=Zr.INSTANCE;t.acceptStandardWheelEvent(e);let r=!1;if(e.deltaY||e.deltaX){let o=e.deltaY*this._options.mouseWheelScrollSensitivity,a=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&a+o===0?a=o=0:Math.abs(o)>=Math.abs(a)?a=0:o=0),this._options.flipAxes&&([o,a]=[a,o]);let l=!ie&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||l)&&!a&&(a=o,o=0),e.browserEvent&&e.browserEvent.altKey&&(a=a*this._options.fastScrollSensitivity,o=o*this._options.fastScrollSensitivity);let h=this._scrollable.getFutureScrollPosition(),d={};if(o){let c=50*o,u=h.scrollTop-(c<0?Math.floor(c):Math.ceil(c));this._verticalScrollbar.writeScrollPosition(d,u)}if(a){let c=50*a,u=h.scrollLeft-(c<0?Math.floor(c):Math.ceil(c));this._horizontalScrollbar.writeScrollPosition(d,u)}d=this._scrollable.validateScrollPosition(d),(h.scrollLeft!==d.scrollLeft||h.scrollTop!==d.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(d):this._scrollable.setScrollPositionNow(d),r=!0)}let s=r;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,r=e.scrollLeft>0,s=r?" xterm-shadow-left":"",o=t?" xterm-shadow-top":"",a=r||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${o}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${a}${o}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),500)}};function $n(n){let i={lazyRender:typeof n.lazyRender<"u"?n.lazyRender:!1,className:typeof n.className<"u"?n.className:"",useShadows:typeof n.useShadows<"u"?n.useShadows:!0,handleMouseWheel:typeof n.handleMouseWheel<"u"?n.handleMouseWheel:!0,flipAxes:typeof n.flipAxes<"u"?n.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof n.consumeMouseWheelIfScrollbarIsNeeded<"u"?n.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof n.alwaysConsumeMouseWheel<"u"?n.alwaysConsumeMouseWheel:!1,scrollYToX:typeof n.scrollYToX<"u"?n.scrollYToX:!1,mouseWheelScrollSensitivity:typeof n.mouseWheelScrollSensitivity<"u"?n.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof n.fastScrollSensitivity<"u"?n.fastScrollSensitivity:5,scrollPredominantAxis:typeof n.scrollPredominantAxis<"u"?n.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof n.mouseWheelSmoothScroll<"u"?n.mouseWheelSmoothScroll:!0,listenOnDomNode:typeof n.listenOnDomNode<"u"?n.listenOnDomNode:null,horizontal:typeof n.horizontal<"u"?n.horizontal:1,horizontalScrollbarSize:typeof n.horizontalScrollbarSize<"u"?n.horizontalScrollbarSize:10,horizontalSliderSize:typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:0,horizontalHasArrows:typeof n.horizontalHasArrows<"u"?n.horizontalHasArrows:!1,vertical:typeof n.vertical<"u"?n.vertical:1,verticalScrollbarSize:typeof n.verticalScrollbarSize<"u"?n.verticalScrollbarSize:10,verticalHasArrows:typeof n.verticalHasArrows<"u"?n.verticalHasArrows:!1,verticalSliderSize:typeof n.verticalSliderSize<"u"?n.verticalSliderSize:0,scrollByPage:typeof n.scrollByPage<"u"?n.scrollByPage:!1};return i.horizontalSliderSize=typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:i.horizontalScrollbarSize,i.verticalSliderSize=typeof n.verticalSliderSize<"u"?n.verticalSliderSize:i.verticalScrollbarSize,ie&&(i.className+=" xterm-mac"),i}var dt=class extends g{constructor(e,t,r,s,o,a,l,h,d){super();this._bufferService=r;this._coreService=o;this._optionsService=h;this._renderService=d;this._onRequestScrollLines=this._register(new b);this.onRequestScrollLines=this._onRequestScrollLines.event;this._isSyncing=!1;this._isHandlingScroll=!1;this._suppressOnScrollHandler=!1;this._needsSyncOnRender=!1;let c=this._register(new lt({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:u=>tt(s.window,u)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{c.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new ki(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},c)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(a.onProtocolChange(u=>{this._scrollableElement.updateOptions({handleMouseWheel:!(u&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(j.runAndSubscribe(l.onChangeColors,()=>{e.style.backgroundColor=l.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=l.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(E(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register(E(()=>this._styleElement.remove())),this._register(j.runAndSubscribe(l.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${l.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${l.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${l.colors.scrollbarSliderActiveBackground.css};`,"}"].join(` --`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(u=>this._handleScroll(u)))}scrollLines(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){let e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,r=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:r,verticalHasArrows:t}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){if(!(!this._renderService||this._isSyncing)){if(this._coreService.decPrivateModes.synchronizedOutput){this._needsSyncOnRender=!0;return}this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1}}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),r=t-this._bufferService.buffer.ydisp;r!==0&&(this._latestYDisp=t,this._onRequestScrollLines.fire(r)),this._isHandlingScroll=!1}handleTouchScroll(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};dt=y([m(2,D),m(3,G),m(4,Y),m(5,Me),m(6,_e),m(7,R),m(8,V)],dt);var ut=class extends g{constructor(e,t,r,s,o){super();this._screenElement=e;this._bufferService=t;this._coreBrowserService=r;this._decorationService=s;this._renderService=o;this._decorationElements=new Map;this._altBufferIsActive=!1;this._dimensionsChanged=!1;this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(a=>this._removeDecoration(a))),this._register(E(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer",e?.options?.layer==="top"),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,t.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let r=e.options.x??0;return r&&r>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let r=this._decorationElements.get(e);r||(r=this._createElement(e),e.element=r,this._decorationElements.set(e,r),this._container.appendChild(r),e.onDispose(()=>{this._decorationElements.delete(e),r.remove()})),r.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(r.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,r.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,r.style.top=`${t*this._renderService.dimensions.css.cell.height}px`,r.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(r)}}_refreshXPosition(e,t=e.element){if(!t)return;let r=e.options.x??0;(e.options.anchor||"left")==="right"?t.style.right=r?`${r*this._renderService.dimensions.css.cell.width}px`:"":t.style.left=r?`${r*this._renderService.dimensions.css.cell.width}px`:""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};ut=y([m(1,D),m(2,G),m(3,ge),m(4,V)],ut);var Pi=class{constructor(){this._zones=[];this._zonePool=[];this._zonePoolIndex=0;this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(i){if(i.options.overviewRulerOptions){for(let e of this._zones)if(e.color===i.options.overviewRulerOptions.color&&e.position===i.options.overviewRulerOptions.position){if(this._lineIntersectsZone(e,i.marker.line))return;if(this._lineAdjacentToZone(e,i.marker.line,i.options.overviewRulerOptions.position)){this._addLineToZone(e,i.marker.line);return}}if(this._zonePoolIndex=i.startBufferLine&&e<=i.endBufferLine}_lineAdjacentToZone(i,e,t){return e>=i.startBufferLine-this._linePadding[t||"full"]&&e<=i.endBufferLine+this._linePadding[t||"full"]}_addLineToZone(i,e){i.startBufferLine=Math.min(i.startBufferLine,e),i.endBufferLine=Math.max(i.endBufferLine,e)}};var Ce={full:0,left:0,center:0,right:0},Fe={full:0,left:0,center:0,right:0},$t={full:0,left:0,center:0,right:0},ze=class extends g{constructor(e,t,r,s,o,a,l,h){super();this._viewportElement=e;this._screenElement=t;this._bufferService=r;this._decorationService=s;this._renderService=o;this._optionsService=a;this._themeService=l;this._coreBrowserService=h;this._colorZoneStore=new Pi;this._shouldUpdateDimensions=!0;this._shouldUpdateAnchor=!0;this._lastKnownBufferLength=0;this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(E(()=>this._canvas?.remove()));let d=this._canvas.getContext("2d");if(d)this._ctx=d;else throw new Error("Ctx cannot be null");this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register(E(()=>{this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}get _width(){let e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??!0?e?.width??0:0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);Fe.full=this._canvas.width,Fe.left=e,Fe.center=t,Fe.right=e,this._refreshDrawHeightConstants(),$t.full=1,$t.left=1,$t.center=1+Fe.left,$t.right=1+Fe.left+Fe.center}_refreshDrawHeightConstants(){Ce.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);Ce.left=t,Ce.center=t,Ce.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;let e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let t of this._decorationService.decorations)this._colorZoneStore.addDecoration(t);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let t of e)t.position!=="full"&&this._renderColorZone(t);for(let t of e)t.position==="full"&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect($t[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-Ce[e.position||"full"]/2),Fe[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+Ce[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};ze=y([m(2,D),m(3,ge),m(4,V),m(5,R),m(6,_e),m(7,G)],ze);var ft=class{constructor(i,e,t,r,s,o){this._textarea=i;this._compositionView=e;this._bufferService=t;this._optionsService=r;this._coreService=s;this._renderService=o;this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._compositionSuffix="",this._dataAlreadySent=""}get isComposing(){return this._isComposing}compositionstart(){this._isComposing=!0;let i=this._textarea.selectionStart??this._textarea.value.length,e=this._textarea.selectionEnd??i;this._compositionPosition.start=Math.min(i,e),this._compositionPosition.end=Math.max(i,e),this._compositionSuffix=this._textarea.value.substring(this._compositionPosition.end),this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(i){this._compositionView.textContent=`\u200E${i.data}\u200E`,this.updateCompositionElements(),setTimeout(()=>{let e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)},0)}compositionend(){this._finalizeComposition(!0)}keydown(i){if(this._isComposing||this._isSendingComposition){if(i.keyCode===20||i.keyCode===229||i.keyCode===16||i.keyCode===17||i.keyCode===18)return!1;this._finalizeComposition(!1)}return i.keyCode===229?(this._handleAnyTextareaChanges(),!1):!0}_finalizeComposition(i){if(this._compositionView.classList.remove("active"),this._isComposing=!1,i){let e={start:this._compositionPosition.start,end:this._compositionPosition.end},t=this._compositionSuffix;this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){this._isSendingComposition=!1;let r;if(e.start+=this._dataAlreadySent.length,this._isComposing)r=this._textarea.value.substring(e.start,this._compositionPosition.start);else{let s=this._textarea.value,o=t.length>0&&s.endsWith(t)?s.length-t.length:s.length;r=s.substring(e.start,Math.max(e.start,o))}r.length>0&&this._coreService.triggerDataEvent(r,!0)}},0)}else{this._isSendingComposition=!1;let e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;let i=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){let e=this._textarea.value,t=e.replace(i,"");this._dataAlreadySent=t,e.length>i.length?this._coreService.triggerDataEvent(t,!0):e.lengththis.updateCompositionElements(!0),0)}}};ft=y([m(2,D),m(3,R),m(4,Y),m(5,V)],ft);var J=0,Q=0,ee=0,W=0,Jr={css:"#00000000",rgba:0},O;(t=>{function n(r,s,o,a){return a!==void 0?`#${Ve(r)}${Ve(s)}${Ve(o)}${Ve(a)}`:`#${Ve(r)}${Ve(s)}${Ve(o)}`}t.toCss=n;function i(r,s,o,a=255){return(r<<24|s<<16|o<<8|a)>>>0}t.toRgba=i;function e(r,s,o,a){return{css:t.toCss(r,s,o,a),rgba:t.toRgba(r,s,o,a)}}t.toColor=e})(O||={});var k;(a=>{function n(l,h){if(W=(h.rgba&255)/255,W===1)return{css:h.css,rgba:h.rgba};let d=h.rgba>>24&255,c=h.rgba>>16&255,u=h.rgba>>8&255,_=l.rgba>>24&255,p=l.rgba>>16&255,v=l.rgba>>8&255;J=_+Math.round((d-_)*W),Q=p+Math.round((c-p)*W),ee=v+Math.round((u-v)*W);let f=O.toCss(J,Q,ee),S=O.toRgba(J,Q,ee);return{css:f,rgba:S}}a.blend=n;function i(l){return(l.rgba&255)===255}a.isOpaque=i;function e(l,h,d){let c=Bi.ensureContrastRatio(l.rgba,h.rgba,d);if(c)return O.toColor(c>>24&255,c>>16&255,c>>8&255)}a.ensureContrastRatio=e;function t(l){let h=(l.rgba|255)>>>0;return[J,Q,ee]=Bi.toChannels(h),{css:O.toCss(J,Q,ee),rgba:h}}a.opaque=t;function r(l,h){return W=Math.round(h*255),[J,Q,ee]=Bi.toChannels(l.rgba),{css:O.toCss(J,Q,ee,W),rgba:O.toRgba(J,Q,ee,W)}}a.opacity=r;function s(l,h){return W=l.rgba&255,r(l,W*h/255)}a.multiplyOpacity=s;function o(l){return[l.rgba>>24&255,l.rgba>>16&255,l.rgba>>8&255]}a.toColorRGB=o})(k||={});var P;(t=>{let n,i;try{let r=document.createElement("canvas");r.width=1,r.height=1;let s=r.getContext("2d",{willReadFrequently:!0});s&&(n=s,n.globalCompositeOperation="copy",i=n.createLinearGradient(0,0,1,1))}catch{}function e(r){if(r.match(/#[\da-f]{3,8}/i))switch(r.length){case 4:return J=parseInt(r.slice(1,2).repeat(2),16),Q=parseInt(r.slice(2,3).repeat(2),16),ee=parseInt(r.slice(3,4).repeat(2),16),O.toColor(J,Q,ee);case 5:return J=parseInt(r.slice(1,2).repeat(2),16),Q=parseInt(r.slice(2,3).repeat(2),16),ee=parseInt(r.slice(3,4).repeat(2),16),W=parseInt(r.slice(4,5).repeat(2),16),O.toColor(J,Q,ee,W);case 7:return{css:r,rgba:(parseInt(r.slice(1),16)<<8|255)>>>0};case 9:return{css:r,rgba:parseInt(r.slice(1),16)>>>0}}let s=r.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(s)return J=parseInt(s[1],10),Q=parseInt(s[2],10),ee=parseInt(s[3],10),W=Math.round((s[5]===void 0?1:parseFloat(s[5]))*255),O.toColor(J,Q,ee,W);if(r==="transparent")return{css:"transparent",rgba:0};if(!n||!i)throw new Error("css.toColor: Unsupported css format");if(n.fillStyle=i,n.fillStyle=r,typeof n.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(n.fillRect(0,0,1,1),[J,Q,ee,W]=n.getImageData(0,0,1,1).data,W!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:O.toRgba(J,Q,ee,W),css:r}}t.toColor=e})(P||={});var Z;(e=>{function n(t){return i(t>>16&255,t>>8&255,t&255)}e.relativeLuminance=n;function i(t,r,s){let o=t/255,a=r/255,l=s/255,h=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),d=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4),c=l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4);return h*.2126+d*.7152+c*.0722}e.relativeLuminance2=i})(Z||={});var Bi;(s=>{function n(o,a){if(W=(a&255)/255,W===1)return a;let l=a>>24&255,h=a>>16&255,d=a>>8&255,c=o>>24&255,u=o>>16&255,_=o>>8&255;return J=c+Math.round((l-c)*W),Q=u+Math.round((h-u)*W),ee=_+Math.round((d-_)*W),O.toRgba(J,Q,ee)}s.blend=n;function i(o,a,l){let h=Z.relativeLuminance(o>>8),d=Z.relativeLuminance(a>>8);if(Te(h,d)>8));if(v>8));return v>S?p:f}return p}let u=t(o,a,l),_=Te(h,Z.relativeLuminance(u>>8));if(_>8));return _>v?u:p}return u}}s.ensureContrastRatio=i;function e(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,_=a>>16&255,p=a>>8&255,v=Te(Z.relativeLuminance2(u,_,p),Z.relativeLuminance2(h,d,c));for(;v0||_>0||p>0);)u-=Math.max(0,Math.ceil(u*.1)),_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),v=Te(Z.relativeLuminance2(u,_,p),Z.relativeLuminance2(h,d,c));return(u<<24|_<<16|p<<8|255)>>>0}s.reduceLuminance=e;function t(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,_=a>>16&255,p=a>>8&255,v=Te(Z.relativeLuminance2(u,_,p),Z.relativeLuminance2(h,d,c));for(;v>>0}s.increaseLuminance=t;function r(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}s.toChannels=r})(Bi||={});function Ve(n){let i=n.toString(16);return i.length<2?"0"+i:i}function Te(n,i){return n1){let u=this._getJoinedRanges(r,l,a,e,o);for(let _=0;_1){let c=this._getJoinedRanges(r,l,a,e,o);for(let u=0;u=As,Tr=ae,x=this._workCell;if(v.length>0&&ae===v[0][0]&&je){let A=v.shift(),kr=this._isCellInSelection(A[0],e);for(T=A[0]+1;T=A[1],je?(ui=!0,x=new Oi(this._workCell,i.translateToString(!0,A[0],A[1]),A[1]-A[0]),Tr=A[1]-1,wr=x.getWidth()):As=A[1]}let Nt=this._isCellInSelection(ae,e),Dr=t&&ae===o,Rr=Rn&&ae>=c&&ae<=u;_&&x.isBlink()&&(_.hasBlinkingCells=!0),!l&&x.isBlink()&&N.push("xterm-blink-hidden");let Lr=!1;this._decorationService.forEachDecorationAtCell(ae,e,void 0,A=>{Lr=!0});let fi=x.getChars()||" ";if(fi===" "&&(x.isUnderline()||x.isOverline())&&(fi="\xA0"),Ot=wr*h-d.get(fi,x.isBold(),x.isItalic()),!I)I=this._document.createElement("span");else if(w&&(Nt&&di||!Nt&&!di&&x.bg===te)&&(Nt&&di&&f.selectionForeground||x.fg===Ts)&&x.extended.ext===Ds&&Rr===Rs&&Ot===Ls&&!Dr&&!ui&&!Lr&&je){x.isInvisible()?L+=" ":L+=fi,w++;continue}else w&&(I.textContent=L),I=this._document.createElement("span"),w=0,L="";if(te=x.bg,Ts=x.fg,Ds=x.extended.ext,Rs=Rr,Ls=Ot,di=Nt,ui&&o>=ae&&o<=Tr&&(o=ae),!this._coreService.isCursorHidden&&Dr&&this._coreService.isCursorInitialized){if(N.push("xterm-cursor"),this._coreBrowserService.isFocused)a&&N.push("xterm-cursor-blink"),N.push(r==="bar"?"xterm-cursor-bar":r==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(s)switch(s){case"outline":N.push("xterm-cursor-outline");break;case"block":N.push("xterm-cursor-block");break;case"bar":N.push("xterm-cursor-bar");break;case"underline":N.push("xterm-cursor-underline");break;default:break}}if(x.isBold()&&N.push("xterm-bold"),x.isItalic()&&N.push("xterm-italic"),x.isDim()&&N.push("xterm-dim"),x.isInvisible()?L=" ":L=x.getChars()||" ",x.isUnderline()&&(N.push(`xterm-underline-${x.extended.underlineStyle}`),L===" "&&(L="\xA0"),!x.isUnderlineColorDefault()))if(x.isUnderlineColorRGB())I.style.textDecorationColor=`rgb(${ue.toColorRGB(x.getUnderlineColor()).join(",")})`;else{let A=x.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&x.isBold()&&A<8&&(A+=8),I.style.textDecorationColor=f.ansi[A].css}x.isOverline()&&(N.push("xterm-overline"),L===" "&&(L="\xA0")),x.isStrikethrough()&&N.push("xterm-strikethrough"),Rr&&(I.style.textDecoration="underline");let de=x.getFgColor(),Ft=x.getFgColorMode(),Se=x.getBgColor(),Ht=x.getBgColorMode(),Ar=!!x.isInverse();if(Ar){let A=de;de=Se,Se=A;let kr=Ft;Ft=Ht,Ht=kr}let Le,_i,Wt=!1;this._decorationService.forEachDecorationAtCell(ae,e,void 0,A=>{A.options.layer!=="top"&&Wt||(A.backgroundColorRGB&&(Ht=50331648,Se=A.backgroundColorRGB.rgba>>8&16777215,Le=A.backgroundColorRGB),A.foregroundColorRGB&&(Ft=50331648,de=A.foregroundColorRGB.rgba>>8&16777215,_i=A.foregroundColorRGB),Wt=A.options.layer==="top")}),!Wt&&Nt&&(Le=this._coreBrowserService.isFocused?f.selectionBackgroundOpaque:f.selectionInactiveBackgroundOpaque,Se=Le.rgba>>8&16777215,Ht=50331648,Wt=!0,f.selectionForeground&&(Ft=50331648,de=f.selectionForeground.rgba>>8&16777215,_i=f.selectionForeground)),Wt&&N.push("xterm-decoration-top");let Ae;switch(Ht){case 16777216:case 33554432:Ae=f.ansi[Se],N.push(`xterm-bg-${Se}`);break;case 50331648:Ae=O.toColor(Se>>16,Se>>8&255,Se&255),this._addStyle(I,`background-color:#${(Se>>>0).toString(16).padStart(6,"0")}`);break;case 0:default:Ar?(Ae=f.foreground,N.push(`xterm-bg-${257}`)):Ae=f.background}switch(Le||x.isDim()&&(Le=k.multiplyOpacity(Ae,.5)),Ft){case 16777216:case 33554432:x.isBold()&&de<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(de+=8),this._applyMinimumContrast(I,Ae,f.ansi[de],x,Le,void 0)||N.push(`xterm-fg-${de}`);break;case 50331648:let A=O.toColor(de>>16&255,de>>8&255,de&255);this._applyMinimumContrast(I,Ae,A,x,Le,_i)||this._addStyle(I,`color:#${de.toString(16).padStart(6,"0")}`);break;case 0:default:this._applyMinimumContrast(I,Ae,f.foreground,x,Le,_i)||Ar&&N.push(`xterm-fg-${257}`)}N.length&&(I.className=N.join(" "),N.length=0),!Dr&&!ui&&!Lr&&je?w++:I.textContent=L,Ot!==this.defaultSpacing&&(I.style.letterSpacing=`${Ot}px`),p.push(I),ae=Tr}return I&&w&&(I.textContent=L),p}_applyMinimumContrast(i,e,t,r,s,o){if(this._optionsService.rawOptions.minimumContrastRatio===1||Xs(r.getCode()))return!1;let a=this._getContrastCache(r),l;if(!s&&!o&&(l=a.getColor(e.rgba,t.rgba)),l===void 0){let h=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);l=k.ensureContrastRatio(s??e,o??t,h),a.setColor((s??e).rgba,(o??t).rgba,l??null)}return l?(this._addStyle(i,`color:${l.css}`),!0):!1}_getContrastCache(i){return i.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(i,e){i.setAttribute("style",`${i.getAttribute("style")||""}${e};`)}_isCellInSelection(i,e){let t=this._selectionStart,r=this._selectionEnd;return!t||!r?!1:this._columnSelectMode?t[0]<=r[0]?i>=t[0]&&e>=t[1]&&i=t[1]&&i>=r[0]&&e<=r[1]:e>t[1]&&e=t[0]&&i=t[0]}};_t=y([m(1,Si),m(2,R),m(3,G),m(4,Y),m(5,ge),m(6,_e)],_t);var Fi=class{constructor(i=()=>new es){this._flat=new Float32Array(256);this._font="";this._fontSize=0;this._weight="normal";this._weightBold="bold";this._canvasElements=[];this._canvasElements=[i(),i(),i(),i()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(i,e,t,r){i===this._font&&e===this._fontSize&&t===this._weight&&r===this._weightBold||(this._font=i,this._fontSize=e,this._weight=t,this._weightBold=r,this._canvasElements[0].setFont(i,e,t,!1),this._canvasElements[1].setFont(i,e,r,!1),this._canvasElements[2].setFont(i,e,t,!0),this._canvasElements[3].setFont(i,e,r,!0),this.clear())}get(i,e,t){let r;if(!e&&!t&&i.length===1&&(r=i.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];let a=this._measure(i,0);return a>0&&(this._flat[r]=a),a}let s=i;e&&(s+="B"),t&&(s+="I");let o=this._holey.get(s);if(o===void 0){let a=0;e&&(a|=1),t&&(a|=2),o=this._measure(i,a),o>0&&this._holey.set(s,o)}return o}_measure(i,e){return this._canvasElements[e].measure(i)}},es=class{constructor(){typeof OffscreenCanvas<"u"?(this._canvas=new OffscreenCanvas(1,1),this._ctx=Qr(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=Qr(this._canvas.getContext("2d")))}setFont(i,e,t,r){let s=r?"italic":"";this._ctx.font=`${s} ${t} ${e}px ${i}`.trim()}measure(i){return this._ctx.measureText(i).width}};var ts=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(i,e,t,r=!1){if(this.selectionStart=e,this.selectionEnd=t,!e||!t||e[0]===t[0]&&e[1]===t[1]){this.clear();return}let s=i.buffers.active.ydisp,o=e[1]-s,a=t[1]-s,l=Math.max(o,0),h=Math.min(a,i.rows-1);if(l>=i.rows||h<0){this.clear();return}this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=o,this.viewportEndRow=a,this.viewportCappedStartRow=l,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=t[0]}isCellSelected(i,e,t){return this.hasSelection?(t-=i.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&t>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&t<=this.viewportCappedEndRow:t>this.viewportStartRow&&t=this.startCol&&e=this.startCol):!1}};function js(){return new ts}var Hi=class extends g{constructor(e,t,r){super();this._renderCallback=e;this._coreBrowserService=t;this._optionsService=r;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",s=>{this.setIntervalDuration(s)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(E(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let t=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),t||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var Yn=1,mt=class extends g{constructor(e,t,r,s,o,a,l,h,d,c,u,_,p,v){super();this._terminal=e;this._document=t;this._element=r;this._screenElement=s;this._viewportElement=o;this._helperContainer=a;this._linkifier2=l;this._charSizeService=d;this._optionsService=c;this._bufferService=u;this._coreService=_;this._coreBrowserService=p;this._themeService=v;this._terminalClass=Yn++;this._rowElements=[];this._selectionRenderModel=js();this._lastSelectionColumnMode=!1;this._rowHasBlinkingCells=[];this._rowHasBlinkingCellsCount=0;this._onRequestRedraw=this._register(new b);this.onRequestRedraw=this._onRequestRedraw.event;this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=Ys(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(f=>this._injectCss(f))),this._injectCss(this._themeService.colors),this._rowFactory=h.createInstance(_t,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(f=>this._handleLinkHover(f))),this._register(this._linkifier2.onHideLinkUnderline(f=>this._handleLinkLeave(f))),this._cursorBlinkStateManager=new is(this._rowContainer,this._coreBrowserService),this._register(C(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register(E(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new Hi(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register(E(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Fi,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let r of this._rowElements)r.style.width=`${this.dimensions.css.canvas.width}px`,r.style.height=`${this.dimensions.css.cell.height}px`,r.style.lineHeight=`${this.dimensions.css.cell.height}px`,r.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${k.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;let r=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,o=`blink_block_${this._terminalClass}`;t+=`@keyframes ${r} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${o} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${o} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[a,l]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${a} { color: ${l.css}; }${this._terminalSelector} .xterm-fg-${a}.xterm-dim { color: ${k.multiplyOpacity(l,.5).css}; }${this._terminalSelector} .xterm-bg-${a} { background-color: ${l.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${257} { color: ${k.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${257}.xterm-dim { color: ${k.multiplyOpacity(k.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${257} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let r=this._rowElements.length;r<=t;r++){let s=this._document.createElement("div");this._rowContainer.appendChild(s),this._rowElements.push(s),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,r){let s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,r);let o=0,a=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(o=this._selectionRenderModel.viewportCappedStartRow,a=this._selectionRenderModel.viewportCappedEndRow));let l=0,h=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,r),this._selectionRenderModel.hasSelection){let u=this._selectionRenderModel.viewportStartRow,_=this._selectionRenderModel.viewportEndRow,p=this._selectionRenderModel.viewportCappedStartRow,v=this._selectionRenderModel.viewportCappedEndRow;l=p,h=v;let f=this._document.createDocumentFragment();if(r){let S=e[0]>t[0];f.appendChild(this._createSelectionElement(p,S?t[0]:e[0],S?e[0]:t[0],v-p+1))}else{let S=u===p?e[0]:0,I=p===_?t[0]:this._bufferService.cols;f.appendChild(this._createSelectionElement(p,S,I));let w=v-p-1;if(f.appendChild(this._createSelectionElement(p+1,0,this._bufferService.cols,w)),p!==v){let L=_===v?t[0]:this._bufferService.cols;f.appendChild(this._createSelectionElement(v,0,L))}}this._selectionContainer.appendChild(f)}let d=Math.min(o,l),c=Math.max(a,h);if(c>=0){d=Math.max(d,0),c=Math.min(c,s-1);let _=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&_>=0&&_this.dimensions.css.canvas.width&&(l=this.dimensions.css.canvas.width-a),o.style.height=`${s*this.dimensions.css.cell.height}px`,o.style.top=`${e*this.dimensions.css.cell.height}px`,o.style.left=`${a}px`,o.style.width=`${l}px`,o}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){let r=this._bufferService.buffer,s=r.ybase+r.y,o=Math.min(r.x,this._bufferService.cols-1),a=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,l=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,h=this._optionsService.rawOptions.cursorInactiveStyle,d={hasBlinkingCells:!1};for(let c=e;c<=t;c++){let u=c+r.ydisp,_=this._rowElements[c];if(!_)continue;let p=r.lines.get(u);if(!p){_.replaceChildren(),this._setRowBlinkState(c,!1);continue}_.replaceChildren(...this._rowFactory.createRow(p,u,u===s,l,h,o,a,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,d)),this._setRowBlinkState(c,d.hasBlinkingCells)}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,r,s,o,a){r<0&&(e=0),s<0&&(t=0);let l=this._bufferService.rows-1;r=Math.max(Math.min(r,l),0),s=Math.max(Math.min(s,l),0),o=Math.min(o,this._bufferService.cols);let h=this._bufferService.buffer,d=h.ybase+h.y,c=Math.min(h.x,o-1),u=this._optionsService.rawOptions.cursorBlink,_=this._optionsService.rawOptions.cursorStyle,p=this._optionsService.rawOptions.cursorInactiveStyle,v={hasBlinkingCells:!1};for(let f=r;f<=s;++f){let S=f+h.ydisp,I=this._rowElements[f];if(!I)continue;let w=h.lines.get(S);if(!w){I.replaceChildren(),this._setRowBlinkState(f,!1);continue}I.replaceChildren(...this._rowFactory.createRow(w,S,S===d,_,p,c,u,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,a?f===r?e:0:-1,a?(f===s?t:o)-1:-1,v)),this._setRowBlinkState(f,v.hasBlinkingCells)}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};mt=y([m(7,Qe),m(8,Pe),m(9,R),m(10,D),m(11,Y),m(12,G),m(13,_e)],mt);var is=class{constructor(i,e){this._rowContainer=i;this._coreBrowserService=e;this._isIdlePaused=!1;this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){this._idleTimeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}};var bt=class extends g{constructor(e,t,r){super();this._optionsService=r;this.width=0;this.height=0;this._onCharSizeChange=this._register(new b);this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new ss(this._optionsService))}catch{this._measureStrategy=this._register(new rs(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};bt=y([m(2,R)],bt);var Wi=class extends g{constructor(){super(...arguments);this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}},rs=class extends Wi{constructor(e,t,r){super();this._document=e;this._parentElement=t;this._optionsService=r;this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},ss=class extends Wi{constructor(e){super();this._optionsService=e;this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");let t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}};var Ui=class extends g{constructor(e,t,r){super();this._textarea=e;this._window=t;this.mainDocument=r;this._isFocused=!1;this._cachedIsFocused=void 0;this._onDprChange=this._register(new b);this.onDprChange=this._onDprChange.event;this._onWindowChange=this._register(new b);this.onWindowChange=this._onWindowChange.event;this._screenDprMonitor=this._register(new ns(this._window)),this._register(this.onWindowChange(s=>this._screenDprMonitor.setWindow(s))),this._register(j.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(C(this._textarea,"focus",()=>this._isFocused=!0)),this._register(C(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},ns=class extends g{constructor(e){super();this._parentWindow=e;this._windowResizeListener=this._register(new B);this._onDprChange=this._register(new b);this.onDprChange=this._onDprChange.event;this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(E(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=C(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}};var Ki=class extends g{constructor(){super();this.linkProviders=[];this._register(E(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}};function qt(n,i,e){let t=e.getBoundingClientRect(),r=n.getComputedStyle(e),s=parseInt(r.getPropertyValue("padding-left"),10),o=parseInt(r.getPropertyValue("padding-top"),10);return[i.clientX-t.left-s,i.clientY-t.top-o]}function Zs(n,i,e,t,r,s,o,a,l){if(!s)return;let h=qt(n,i,e);return h[0]=Math.ceil((h[0]+(l?o/2:0))/o),h[1]=Math.ceil(h[1]/a),h[0]=Math.min(Math.max(h[0],1),t+(l?1:0)),h[1]=Math.min(Math.max(h[1],1),r),h}var vt=class{constructor(i,e){this._charSizeService=i;this._renderService=e}getCoords(i,e,t,r,s){return Zs(se(e),i,e,t,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,s)}getMouseReportCoords(i,e){let t=qt(se(e),i,e);if(this._charSizeService.hasValidSize)return t[0]=Math.min(Math.max(t[0],0),this._renderService.dimensions.css.canvas.width-1),t[1]=Math.min(Math.max(t[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(t[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(t[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(t[0]),y:Math.floor(t[1])}}};vt=y([m(0,Pe),m(1,V)],vt);var Js=typeof window=="object"?window:globalThis;function ce(n,i=0){return n[n.length-(1+i)]}function jn(n,i,e){let t=null,r=null;if(typeof e.value=="function"?(t="value",r=e.value,r.length!==0&&console.warn("Memoize should only be used in functions with zero parameters")):typeof e.get=="function"&&(t="get",r=e.get),!r||!t)throw new Error("not supported");let s=`$memoize$${i}`,o=e;o[t]=function(...a){return this.hasOwnProperty(s)||Object.defineProperty(this,s,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,a)}),this[s]}}var St=class St{constructor(i){this.element=i,this.next=St.Undefined,this.prev=St.Undefined}};St.Undefined=new St(void 0);var re=St,zi=class{constructor(){this._first=re.Undefined;this._last=re.Undefined}push(i){return this._insert(i,!0)}_insert(i,e){let t=new re(i);if(this._first===re.Undefined)this._first=t,this._last=t;else if(e){let s=this._last;this._last=t,t.prev=s,s.next=t}else{let s=this._first;this._first=t,t.next=s,s.prev=t}let r=!1;return()=>{r||(r=!0,this._remove(t))}}_remove(i){if(i.prev!==re.Undefined&&i.next!==re.Undefined){let e=i.prev;e.next=i.next,i.next.prev=e}else i.prev===re.Undefined&&i.next===re.Undefined?(this._first=re.Undefined,this._last=re.Undefined):i.next===re.Undefined?(this._last=this._last.prev,this._last.next=re.Undefined):i.prev===re.Undefined&&(this._first=this._first.next,this._first.prev=re.Undefined)}*[Symbol.iterator](){let i=this._first;for(;i!==re.Undefined;)yield i.element,i=i.next}},he;(s=>(s.TAP="-xterm-gesturetap",s.CHANGE="-xterm-gesturechange",s.START="-xterm-gesturestart",s.END="-xterm-gesturesend",s.CONTEXT_MENU="-xterm-gesturecontextmenu"))(he||={});var K=class K extends g{constructor(){super();this._dispatched=!1;this._targets=new zi;this._ignoreTargets=new zi;this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;let e=Js;this._register(C(e.document,"touchstart",t=>this._handleTouchStart(t),{passive:!1})),this._register(C(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(C(e.document,"touchmove",t=>this._handleTouchMove(t),{passive:!1}))}static addTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._targets.push(e);return E(t)}static ignoreTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._ignoreTargets.push(e);return E(t)}static isTouchDevice(){return"ontouchstart"in Js||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){let t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let r=0,s=e.targetTouches.length;r=K._holdDelay&&Math.abs(h.initialPageX-ce(h.rollingPageX))<30&&Math.abs(h.initialPageY-ce(h.rollingPageY))<30){let c=this._newGestureEvent(he.CONTEXT_MENU,h.initialTarget);c.pageX=ce(h.rollingPageX),c.pageY=ce(h.rollingPageY),this._dispatchEvent(c)}else if(s===1){let c=ce(h.rollingPageX),u=ce(h.rollingPageY),_=ce(h.rollingTimestamps)-h.rollingTimestamps[0],p=c-h.rollingPageX[0],v=u-h.rollingPageY[0],f=[...this._targets].filter(S=>h.initialTarget instanceof Node&&S.contains(h.initialTarget));this._inertia(e,f,r,Math.abs(p)/_,p>0?1:-1,c,Math.abs(v)/_,v>0?1:-1,u)}this._dispatchEvent(this._newGestureEvent(he.END,h.initialTarget)),delete this._activeTouches[l.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){let r=document.createEvent("CustomEvent");return r.initEvent(e,!1,!0),r.initialTarget=t,r.tapCount=0,r}_dispatchEvent(e){if(e.type===he.TAP){let t=new Date().getTime(),r;t-this._lastSetTapCountTime>K._clearTapCountTime?r=1:r=2,this._lastSetTapCountTime=t,e.tapCount=r}else(e.type===he.CHANGE||e.type===he.CONTEXT_MENU)&&(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(let r of this._ignoreTargets)if(r.contains(e.initialTarget))return;let t=[];for(let r of this._targets)if(r.contains(e.initialTarget)){let s=0,o=e.initialTarget;for(;o&&o!==r;)s++,o=o.parentElement;t.push([s,r])}t.sort((r,s)=>r[0]-s[0]);for(let[,r]of t)r.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,r,s,o,a,l,h,d){this._handle=tt(e,()=>{let c=Date.now(),u=c-r,_=0,p=0,v=!0;s+=K._scrollFriction*u,l+=K._scrollFriction*u,s>0&&(v=!1,_=o*s*u),l>0&&(v=!1,p=h*l*u);let f=this._newGestureEvent(he.CHANGE);f.translationX=_,f.translationY=p,t.forEach(S=>S.dispatchEvent(f)),v||this._inertia(e,t,c,s,o,a+_,l,h,d+p)})}_handleTouchMove(e){let t=Date.now();for(let r=0,s=e.changedTouches.length;r3&&(a.rollingPageX.shift(),a.rollingPageY.shift(),a.rollingTimestamps.shift()),a.rollingPageX.push(o.pageX),a.rollingPageY.push(o.pageY),a.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}};K._scrollFriction=-.005,K._holdDelay=700,K._clearTapCountTime=400,y([jn],K,"isTouchDevice",1);var Gi=K;var gt=class{constructor(i,e,t,r,s,o,a,l,h){this._renderService=i;this._mouseCoordsService=e;this._mouseStateService=t;this._coreService=r;this._bufferService=s;this._optionsService=o;this._selectionService=a;this._logService=l;this._coreBrowserService=h;this._lastEvent=null;this._wheelPartialScroll=0;this._touchScrollAccumulator=0}bindMouse(i,e,t){let{element:r,document:s}=i,o={mouseup:null,wheel:null,mousedrag:null,mousemove:null},a=new B,l=new B;e(a),e(l);let h={target:i,focus:t,requestedEvents:o,mouseupListener:a,mousedragListener:l},d={mouseup:c=>this._handleMouseUp(h,c),wheel:c=>this._handleWheel(h,c),mousedrag:c=>this._handleMouseDrag(h,c),mousemove:c=>this._handleMouseMove(h,c)};this._altMouseCursor=new os(r,s,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),e(this._altMouseCursor),e(this._mouseStateService.onProtocolChange(c=>{this._handleProtocolChange(h,d,c)})),e(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(r),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,e(C(r,"mousedown",c=>this._handleMouseDown(h,c))),e(C(r,"wheel",c=>this._handlePassiveWheel(h,c),{passive:!1})),e(Gi.addTarget(i.screenElement)),e(C(i.screenElement,he.START,()=>this._handleTouchStart())),e(C(i.screenElement,he.CHANGE,c=>this._handleTouchChange(h,c)))}_sendEvent(i,e){let t=this._mouseCoordsService.getMouseReportCoords(e,i.target.screenElement);if(!t)return!1;let r,s;switch(e.overrideType||e.type){case"mousemove":s=32,e.buttons===void 0?(r=3,e.button!==void 0&&(r=e.button<3?e.button:3)):r=e.buttons&1?0:e.buttons&4?1:e.buttons&2?2:3;break;case"mouseup":s=0,r=e.button<3?e.button:3;break;case"mousedown":s=1,r=e.button<3?e.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;let a=e.deltaY;if(a===0||this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return!1;s=a<0?0:1,r=4;break;default:return!1}if(s===void 0||r===void 0||r>4||r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!e.altKey)return!1;let o=r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:t.col,row:t.row,x:t.x,y:t.y,button:r,action:s,ctrl:e.ctrlKey,alt:o?!1:e.altKey,shift:e.shiftKey})}_handleMouseUp(i,e){this._sendEvent(i,e),e.buttons||(i.mouseupListener.clear(),i.mousedragListener.clear())}_handleWheel(i,e){return this._sendEvent(i,e),e.preventDefault(),e.stopPropagation(),!1}_handleMouseDrag(i,e){e.buttons&&this._sendEvent(i,e)}_handleMouseMove(i,e){e.buttons||this._sendEvent(i,e)}_handleMouseDown(i,e){if(e.preventDefault(),i.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(e))return;this._sendEvent(i,e);let{element:t,document:r}=i.target,s=t.ownerDocument??r;i.requestedEvents.mouseup&&(i.mouseupListener.value=C(s,"mouseup",i.requestedEvents.mouseup)),i.requestedEvents.mousedrag&&(i.mousedragListener.value=C(s,"mousemove",i.requestedEvents.mousedrag))}_handlePassiveWheel(i,e){if(!i.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;if(!this._bufferService.buffer.hasScrollback){if(e.deltaY===0)return!1;if(this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return e.preventDefault(),e.stopPropagation(),!1;let s="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(e.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(s,!0),e.preventDefault(),e.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(i,e){if(e.preventDefault(),e.stopPropagation(),i.requestedEvents.wheel){this._handleTouchScrollAsWheel(i,e);return}if(!this._bufferService.buffer.hasScrollback){this._handleTouchScrollAsKeys(e);return}i.target.handleTouchScroll?.(e.translationY)}_handleTouchScrollAsKeys(i){let e=this._renderService?.dimensions.css.cell.height;if(!e)return;this._touchScrollAccumulator-=i.translationY;let t=Math.trunc(this._touchScrollAccumulator/e);if(t===0)return;this._touchScrollAccumulator-=t*e;let r="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t<0?"A":"B");for(let s=0;s0?1:-1),this._wheelPartialScroll%=1):i.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(s*=this._bufferService.rows),s}_triggerMouseEvent(i){if(i.col<0||i.col>=this._bufferService.cols||i.row<0||i.row>=this._bufferService.rows||i.button===4&&i.action===32||i.button===3&&i.action!==32||i.button!==4&&(i.action===2||i.action===3)||(i.col++,i.row++,i.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,i,this._mouseStateService.isPixelEncoding))||!this._mouseStateService.restrictMouseEvent(i))return!1;let e=this._mouseStateService.encodeMouseEvent(i);return e&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(e):this._coreService.triggerDataEvent(e,!0)),this._lastEvent=i,!0}_explainEvents(i){return{down:!!(i&1),up:!!(i&2),drag:!!(i&4),move:!!(i&8),wheel:!!(i&16)}}_equalEvents(i,e,t){if(t){if(i.x!==e.x||i.y!==e.y)return!1}else if(i.col!==e.col||i.row!==e.row)return!1;return!(i.button!==e.button||i.action!==e.action||i.ctrl!==e.ctrl||i.alt!==e.alt||i.shift!==e.shift)}};gt=y([m(0,V),m(1,Be),m(2,Me),m(3,Y),m(4,D),m(5,R),m(6,vi),m(7,fe),m(8,G)],gt);var os=class{constructor(i,e,t){this._element=i;this._document=e;this._isActive=t;this._listeners=new B}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;let i=new pe,e=r=>this.syncFromModifier(r);i.add(C(this._document,"keydown",e)),i.add(C(this._document,"keyup",e)),i.add(C(this._element,"mousemove",e));let t=this._element.ownerDocument?.defaultView;t&&i.add(C(t,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=i}resetClass(){this._updateClass(!1)}syncFromModifier(i){this._isActive()&&this._updateClass(i.getModifierState("Alt"))}_updateClass(i){i?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}};var Vi=class{constructor(i,e){this._renderCallback=i;this._coreBrowserService=e;this._refreshCallbacks=[]}dispose(){this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(i){return this._refreshCallbacks.push(i),this._animationFrame??=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()),this._animationFrame}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let i of this._refreshCallbacks)i(0);this._refreshCallbacks=[]}};var $i=class{constructor(i){this._tasks=[];this._i=0;this._logService=i}enqueue(i){this._tasks.push(i),this._start()}flush(){for(;this._is){r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),this._start();return}r=s}this.clear()}},as=class extends $i{_requestCallback(i){return setTimeout(()=>i(this._createDeadline(16)))}_cancelCallback(i){clearTimeout(i)}_createDeadline(i){let e=performance.now()+i;return{timeRemaining:()=>Math.max(0,e-performance.now())}}},ls=class extends $i{_requestCallback(i){return requestIdleCallback(i)}_cancelCallback(i){cancelIdleCallback(i)}},It="requestIdleCallback"in globalThis?ls:as,qi=class{constructor(i){this._queue=new It(i)}set(i){this._queue.clear(),this._queue.enqueue(i)}flush(){this._queue.flush()}dispose(){this._queue.clear()}};var Ct=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._rowCount=e;this._optionsService=r;this._logService=s;this._charSizeService=o;this._coreService=a;this._coreBrowserService=d;this._renderer=this._register(new B);this._observerDisposable=this._register(new B);this._isPaused=!1;this._needsFullRefresh=!1;this._isNextRenderRedrawOnly=!0;this._needsSelectionRefresh=!1;this._canvasWidth=0;this._canvasHeight=0;this._selectionState={start:void 0,end:void 0,columnSelectMode:!1};this._onDimensionsChange=this._register(new b);this.onDimensionsChange=this._onDimensionsChange.event;this._onRenderedViewportChange=this._register(new b);this.onRenderedViewportChange=this._onRenderedViewportChange.event;this._onRender=this._register(new b);this.onRender=this._onRender.event;this._onRefreshRequest=this._register(new b);this.onRefreshRequest=this._onRefreshRequest.event;this._pausedResizeTask=this._register(new qi(this._logService)),this._renderDebouncer=new Vi((u,_)=>this._renderRows(u,_),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new cs(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(E(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(h.onResize(()=>this._fullRefresh())),this._register(h.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(h.cols,h.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(h.buffer.y,h.buffer.y,void 0,!0))),this._register(c.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(u=>this._registerIntersectionObserver(u,t)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){let r=new e.IntersectionObserver(s=>this._handleIntersectionChange(s[s.length-1]),{threshold:0});this._observerDisposable.value=E(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=r,r.observe(t)}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,r=!1,s=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}let o=this._syncOutputHandler.flush();o&&(e=Math.min(e,o.start),t=Math.max(t,o.end)),s||(this._isNextRenderRedrawOnly=!1),r?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0}}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(t=>this.refreshRows(t.start,t.end,t.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.value?.handleSelectionChanged(e,t,r)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};Ct=y([m(2,R),m(3,fe),m(4,Pe),m(5,Y),m(6,ge),m(7,D),m(8,G),m(9,_e)],Ct);var cs=class{constructor(i,e,t){this._coreBrowserService=i;this._coreService=e;this._onTimeout=t;this._start=0;this._end=0;this._isBuffering=!1}bufferRows(i,e){this._isBuffering?(this._start=Math.min(this._start,i),this._end=Math.max(this._end,e)):(this._start=i,this._end=e,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let i={start:this._start,end:this._end};return this._isBuffering=!1,i}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function Qs(n,i,e,t){let r=e.buffer.x,s=e.buffer.y;if(!e.buffer.hasScrollback)return to(r,s,n,i,e,t)+Xi(s,i,e,t)+io(r,s,n,i,e,t);let o;if(s===i)return o=r>n?"D":"C",Yt(Math.abs(r-n),Xt(o,t));o=s>i?"D":"C";let a=Math.abs(s-i),l=eo(s>i?n:r,e)+(a-1)*e.cols+1+Qn(s>i?r:n,e);return Yt(l,Xt(o,t))}function Qn(n,i){return n-1}function eo(n,i){return i.cols-n}function to(n,i,e,t,r,s){return Xi(i,t,r,s).length===0?"":Yt(tn(n,i,n,i-$e(i,r),!1,r).length,Xt("D",s))}function Xi(n,i,e,t){let r=n-$e(n,e),s=i-$e(i,e),o=Math.abs(r-s)-ro(n,i,e);return Yt(o,Xt(en(n,i),t))}function io(n,i,e,t,r,s){let o;Xi(i,t,r,s).length>0?o=t-$e(t,r):o=i;let a=t,l=so(n,i,e,t,r,s);return Yt(tn(n,o,e,a,l==="C",r).length,Xt(l,s))}function ro(n,i,e){let t=0,r=n-$e(n,e),s=i-$e(i,e);for(let o=0;o=0&&n0?o=t-$e(t,r):o=i,n=e&&oi?"A":"B"}function tn(n,i,e,t,r,s){let o=n,a=i,l="";for(;(o!==e||a!==t)&&a>=0&&as.cols-1?(l+=s.buffer.translateBufferLineToString(a,!1,n,o),o=0,n=0,a++):!r&&o<0&&(l+=s.buffer.translateBufferLineToString(a,!1,0,n+1),o=s.cols-1,n=o,a--);return l+s.buffer.translateBufferLineToString(a,!1,n,o)}function Xt(n,i){let e=i?"O":"[";return"\x1B"+e+n}function Yt(n,i){n=Math.floor(n);let e="";for(let t=0;tthis._bufferService.cols?i%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)-1]:[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[i,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let i=this.selectionStart[0]+this.selectionStartLength;return i>this._bufferService.cols?[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[Math.max(i,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let i=this.selectionStart,e=this.selectionEnd;return!i||!e?!1:i[1]>e[1]||i[1]===e[1]&&i[0]>e[0]}handleTrim(i){return this.selectionStart&&(this.selectionStart[1]-=i),this.selectionEnd&&(this.selectionEnd[1]-=i),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):this.selectionStart&&this.selectionStart[1]<0?(this.selectionStart=[0,0],!0):!1}};function hs(n,i){if(n.start.y>n.end.y)throw new Error(`Buffer range end (${n.end.x}, ${n.end.y}) cannot be before start (${n.start.x}, ${n.start.y})`);return i*(n.end.y-n.start.y)+(n.end.x-n.start.x+1)}var no="\xA0",oo=new RegExp(no,"g");var Et=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._element=e;this._screenElement=t;this._linkifier=r;this._bufferService=s;this._coreService=o;this._mouseCoordsService=a;this._optionsService=l;this._mouseStateService=h;this._renderService=d;this._coreBrowserService=c;this._dragScrollAmount=0;this._enabled=!0;this._trimListener=this._register(new B);this._workCell=new F;this._mouseDownTimeStamp=0;this._oldHasSelection=!1;this._oldSelectionStart=void 0;this._oldSelectionEnd=void 0;this._onLinuxMouseSelection=this._register(new b);this.onLinuxMouseSelection=this._onLinuxMouseSelection.event;this._onRedrawRequest=this._register(new b);this.onRequestRedraw=this._onRedrawRequest.event;this._onSelectionChange=this._register(new b);this.onSelectionChange=this._onSelectionChange.event;this._onRequestScrollLines=this._register(new b);this.onRequestScrollLines=this._onRequestScrollLines.event;this._mouseMoveListener=u=>this._handleMouseMove(u),this._mouseUpListener=u=>this._handleMouseUp(u),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(u=>this._handleTrim(u)),this._register(this._bufferService.buffers.onBufferActivate(u=>this._handleBufferActivate(u))),this.enable(),this._model=new Yi(this._bufferService),this._activeSelectionMode=0,this._register(E(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(u=>{u.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!e||!t?!1:e[0]!==t[0]||e[1]!==t[1]}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";let r=this._bufferService.buffer,s=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return"";let a=e[0]a.replace(oo," ")).join(Ue?`\r -+WARNING: This link could potentially be dangerous`)){let t=window.open();if(t){try{t.opener=null}catch{}t.location.href=i}else console.warn("Opening link blocked as opener could not be cleared")}}var Be=H("CharSizeService"),z=H("CoreBrowserService"),Oe=H("MouseCoordsService"),Ks=H("MouseService"),G=H("RenderService"),gi=H("SelectionService"),Ci=H("CharacterJoinerService"),le=H("ThemeService"),Ii=H("LinkProviderService"),zs=H("KeyboardService");function E(n){return{dispose:n}}function Ne(n){if(!n)return n;if(Array.isArray(n)){for(let i of n)i.dispose();return[]}return n.dispose(),n}var pe=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(i){return this._isDisposed?i.dispose():this._disposables.add(i),i}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let i of this._disposables)i.dispose();this._disposables.clear()}}clear(){for(let i of this._disposables)i.dispose();this._disposables.clear()}},g=class{constructor(){this._store=new pe}dispose(){this._store.dispose()}_register(i){return this._store.add(i)}};g.None=Object.freeze({dispose(){}});var B=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(i){this._isDisposed||i===this._value||(this._value?.dispose(),this._value=i)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Ce=class{constructor(){this._token=-1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(i,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,i()},e)}setIfNotSet(i,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,i()},e))}},Ei=class{constructor(){this._isScheduled=!1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(i){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,i())}))}},yi=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(i,e,t=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();let r=t.setInterval(()=>{i()},e);this._disposable={dispose:()=>{t.clearInterval(r),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}};function re(n){let i=n;if(i?.ownerDocument?.defaultView)return i.ownerDocument.defaultView;let e=n;return e?.view?e.view:window}var zr=class{constructor(i,e,t,r){this._node=i,this._type=e,this._handler=t,this._options=r,i.addEventListener(e,t,r)}dispose(){!this._node||!this._handler||(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}};function I(n,i,e,t){return new zr(n,i,e,t)}function Gr(n,i,e,t){return I(n,i,e,t)}var ae={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};function Vs(n){let i=n.getBoundingClientRect(),e=re(n);return{left:i.left+e.scrollX,top:i.top+e.scrollY,width:i.width,height:i.height}}var xi=class{constructor(i,e){this._runner=i;this.priority=e;this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(i){console.error(i)}}static sort(i,e){return e.priority-i.priority}},Gs=new Map;function $s(n){let i=Gs.get(n);return i||(i={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},Gs.set(n,i)),i}function Wn(n){let i=$s(n);for(i.animFrameRequested=!1,i.current=i.next,i.next=[],i.inAnimationFrameRunner=!0;i.current.length>0;)i.current.sort(xi.sort),i.current.shift().execute();i.inAnimationFrameRunner=!1}function it(n,i,e=0){let t=$s(n),r=new xi(i,e);return t.next.push(r),t.animFrameRequested||(t.animFrameRequested=!0,n.requestAnimationFrame(()=>Wn(n))),r}var wi=class extends yi{constructor(i){super(),this._defaultTarget=i?re(i):void 0}cancelAndSet(i,e,t){super.cancelAndSet(i,e,t??this._defaultTarget??window)}};var Te=class{constructor(i){this.domNode=i;this._width="";this._height="";this._top="";this._left="";this._bottom="";this._right="";this._className="";this._position="";this._layerHint=!1;this._contain="none"}setWidth(i){let e=st(i);this._width!==e&&(this._width=e,this.domNode.style.width=this._width)}setHeight(i){let e=st(i);this._height!==e&&(this._height=e,this.domNode.style.height=this._height)}setTop(i){let e=st(i);this._top!==e&&(this._top=e,this.domNode.style.top=this._top)}setLeft(i){let e=st(i);this._left!==e&&(this._left=e,this.domNode.style.left=this._left)}setBottom(i){let e=st(i);this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom)}setRight(i){let e=st(i);this._right!==e&&(this._right=e,this.domNode.style.right=this._right)}setClassName(i){this._className!==i&&(this._className=i,this.domNode.className=this._className)}toggleClassName(i,e){this.domNode.classList.toggle(i,e),this._className=this.domNode.className}setPosition(i){this._position!==i&&(this._position=i,this.domNode.style.position=this._position)}setLayerHinting(i){this._layerHint!==i&&(this._layerHint=i,i?this.domNode.style.transform="translate3d(0px, 0px, 0px)":this.domNode.style.transform="")}setContain(i){this._contain!==i&&(this._contain=i,this.domNode.style.contain=this._contain)}setAttribute(i,e){this.domNode.setAttribute(i,e)}};function st(n){return typeof n=="number"?`${n}px`:n}var ze={};Pn(ze,{getSafariVersion:()=>Kn,getZoomFactor:()=>qr,isChrome:()=>Kt,isChromeOS:()=>Xr,isFirefox:()=>ot,isLegacyEdge:()=>Un,isLinux:()=>zt,isMac:()=>te,isNode:()=>Vr,isSafari:()=>Ti,isWindows:()=>Ke});var Vr=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),nt=Vr?"node":navigator.userAgent,$r=Vr?"node":navigator.platform,ot=nt.includes("Firefox"),Kt=nt.includes("Chrome"),Un=nt.includes("Edge"),Ti=/^((?!chrome|android).)*safari/i.test(nt);function qr(n){return 1}function Kn(){if(!Ti)return 0;let n=nt.match(/Version\/(\d+)/);return n===null||n.length<2?0:parseInt(n[1],10)}var te=["Macintosh","MacIntel","MacPPC","Mac68K"].includes($r),Ke=["Windows","Win16","Win32","WinCE"].includes($r),zt=$r.indexOf("Linux")>=0,Xr=/\bCrOS\b/.test(nt);var qs=new WeakMap;function zn(n){if(!n.parent||n.parent===n)return null;try{let i=n.location,e=n.parent.location;if(i.origin!=="null"&&e.origin!=="null"&&i.origin!==e.origin)return null}catch{return null}return n.parent}var Yr=class{static _getSameOriginWindowChain(i){let e=qs.get(i);if(!e){e=[],qs.set(i,e);let t=i,r;do r=zn(t),r?e.push({window:new WeakRef(t),iframeElement:t.frameElement??null}):e.push({window:new WeakRef(t),iframeElement:null}),t=r;while(t)}return e.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(i,e){if(!e||i===e)return{top:0,left:0};let t=0,r=0,s=this._getSameOriginWindowChain(i);for(let o of s){let a=o.window.deref();if(t+=a?.scrollY??0,r+=a?.scrollX??0,a===e||!o.iframeElement)break;let l=o.iframeElement.getBoundingClientRect();t+=l.top,r+=l.left}return{top:t,left:r}}},at=class{constructor(i,e){this.timestamp=Date.now(),this.browserEvent=e,this.leftButton=e.button===0,this.middleButton=e.button===1,this.rightButton=e.button===2,this.buttons=e.buttons,this.target=e.target,this.detail=e.detail??1,e.type==="dblclick"&&(this.detail=2),this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,typeof e.pageX=="number"?(this.posx=e.pageX,this.posy=e.pageY):(this.posx=e.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=e.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);let t=Yr.getPositionOfChildWindowRelativeToAncestorWindow(i,e.view);this.posx-=t.left,this.posy-=t.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}},Gt=class{constructor(i,e=0,t=0){this.browserEvent=i??null,this.target=i?i.target??i.targetNode??i.srcElement??null:null,this.deltaY=t,this.deltaX=e;let r=!1;if(Kt){let s=navigator.userAgent.match(/Chrome\/(\d+)/);r=(s?parseInt(s[1],10):123)<=122}if(i){let s=i,o=i,a=i.view?.devicePixelRatio??1;if(typeof s.wheelDeltaY<"u")r?this.deltaY=s.wheelDeltaY/(120*a):this.deltaY=s.wheelDeltaY/120;else if(typeof o.VERTICAL_AXIS<"u"&&o.axis===o.VERTICAL_AXIS)this.deltaY=-o.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?ot&&!te?this.deltaY=-i.deltaY/3:this.deltaY=-i.deltaY:this.deltaY=-i.deltaY/40}if(typeof s.wheelDeltaX<"u")Ti&&Ke?this.deltaX=-(s.wheelDeltaX/120):r?this.deltaX=s.wheelDeltaX/(120*a):this.deltaX=s.wheelDeltaX/120;else if(typeof o.HORIZONTAL_AXIS<"u"&&o.axis===o.HORIZONTAL_AXIS)this.deltaX=-i.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?ot&&!te?this.deltaX=-i.deltaX/3:this.deltaX=-i.deltaX:this.deltaX=-i.deltaX/40}this.deltaY===0&&this.deltaX===0&&i.wheelDelta&&(r?this.deltaY=i.wheelDelta/(120*a):this.deltaY=i.wheelDelta/120)}}preventDefault(){this.browserEvent?.preventDefault()}stopPropagation(){this.browserEvent?.stopPropagation()}};var lt=class{constructor(){this._hooks=new pe;this._pointerMoveCallback=null;this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(i){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let e=this._onStopCallback;this._onStopCallback=null,i&&e&&e()}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(i,e,t,r,s){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=s;let o=i;try{i.setPointerCapture(e),this._hooks.add(E(()=>{try{i.releasePointerCapture(e)}catch{}}))}catch{o=re(i)}this._hooks.add(I(o,ae.POINTER_MOVE,a=>{if(a.buttons!==t){this.stopMonitoring(!0);return}a.preventDefault(),this._pointerMoveCallback(a)})),this._hooks.add(I(o,ae.POINTER_UP,a=>this.stopMonitoring(!0)))}};var Fe=class extends g{_onclick(i,e){this._register(I(i,ae.CLICK,t=>e(new at(re(i),t))))}_onmouseover(i,e){this._register(I(i,ae.MOUSE_OVER,t=>e(new at(re(i),t))))}_onmouseleave(i,e){this._register(I(i,ae.MOUSE_LEAVE,t=>e(new at(re(i),t))))}};var Di=class extends Fe{constructor(i){super(),this._handleActivate=i.handleActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="xterm-arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=i.bgWidth+"px",this.bgDomNode.style.height=i.bgHeight+"px",typeof i.top<"u"&&(this.bgDomNode.style.top="0px"),typeof i.left<"u"&&(this.bgDomNode.style.left="0px"),typeof i.bottom<"u"&&(this.bgDomNode.style.bottom="0px"),typeof i.right<"u"&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=i.className,this.domNode.style.position="absolute";let e=Math.min(i.bgWidth,i.bgHeight);this.domNode.style.width=e+"px",this.domNode.style.height=e+"px",typeof i.top<"u"&&(this.domNode.style.top=i.top+"px"),typeof i.left<"u"&&(this.domNode.style.left=i.left+"px"),typeof i.bottom<"u"&&(this.domNode.style.bottom=i.bottom+"px"),typeof i.right<"u"&&(this.domNode.style.right=i.right+"px"),this._pointerMoveMonitor=this._register(new lt),this._register(Gr(this.bgDomNode,ae.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._register(Gr(this.domNode,ae.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._pointerdownRepeatTimer=this._register(new wi),this._pointerdownScheduleRepeatTimer=this._register(new Ce)}_arrowPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,re(i))};this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(e,200),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,t=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),i.preventDefault()}};var v=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(i,e,t)=>{if(this._disposed)return E(()=>{});let r={fn:i,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);let s=E(()=>{let o=this._listeners.indexOf(r);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return t&&(Array.isArray(t)?t.push(s):t.add(s)),s},this._event)}fire(i){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,i);return}let e=this._listeners;for(let t=0,r=e.length;t{function n(s,o){return s(a=>o.fire(a))}r.forward=n;function i(s,o){return(a,l,h)=>s(d=>a.call(l,o(d)),void 0,h)}r.map=i;function e(...s){return(o,a,l)=>{let h=new pe;for(let d of s)h.add(d(c=>o.call(a,c)));return l&&(Array.isArray(l)?l.push(h):l.add(h)),h}}r.any=e;function t(s,o,a){return o(a),s(l=>o(l))}r.runAndSubscribe=t})(Y||={});var Jr=class n{constructor(i,e,t,r,s,o,a){this._forceIntegerValues=i;this._scrollStateBrand=void 0;this._forceIntegerValues&&(e=e|0,t=t|0,r=r|0,s=s|0,o=o|0,a=a|0),this.rawScrollLeft=r,this.rawScrollTop=a,e<0&&(e=0),r+e>t&&(r=t-e),r<0&&(r=0),s<0&&(s=0),a+s>o&&(a=o-s),a<0&&(a=0),this.width=e,this.scrollWidth=t,this.scrollLeft=r,this.height=s,this.scrollHeight=o,this.scrollTop=a}equals(i){return this.rawScrollLeft===i.rawScrollLeft&&this.rawScrollTop===i.rawScrollTop&&this.width===i.width&&this.scrollWidth===i.scrollWidth&&this.scrollLeft===i.scrollLeft&&this.height===i.height&&this.scrollHeight===i.scrollHeight&&this.scrollTop===i.scrollTop}withScrollDimensions(i,e){return new n(this._forceIntegerValues,typeof i.width<"u"?i.width:this.width,typeof i.scrollWidth<"u"?i.scrollWidth:this.scrollWidth,e?this.rawScrollLeft:this.scrollLeft,typeof i.height<"u"?i.height:this.height,typeof i.scrollHeight<"u"?i.scrollHeight:this.scrollHeight,e?this.rawScrollTop:this.scrollTop)}withScrollPosition(i){return new n(this._forceIntegerValues,this.width,this.scrollWidth,typeof i.scrollLeft<"u"?i.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof i.scrollTop<"u"?i.scrollTop:this.rawScrollTop)}createScrollEvent(i,e){let t=this.width!==i.width,r=this.scrollWidth!==i.scrollWidth,s=this.scrollLeft!==i.scrollLeft,o=this.height!==i.height,a=this.scrollHeight!==i.scrollHeight,l=this.scrollTop!==i.scrollTop;return{inSmoothScrolling:e,oldWidth:i.width,oldScrollWidth:i.scrollWidth,oldScrollLeft:i.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:i.height,oldScrollHeight:i.scrollHeight,oldScrollTop:i.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:t,scrollWidthChanged:r,scrollLeftChanged:s,heightChanged:o,scrollHeightChanged:a,scrollTopChanged:l}}},ct=class extends g{constructor(e){super();this._scrollableBrand=void 0;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new Jr(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){let r=this._state.withScrollDimensions(e,t);this._setState(r,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(this._smoothScrollDuration===0){this.setScrollPositionNow(e);return}if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>"u"?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>"u"?this._smoothScrolling.to.scrollTop:e.scrollTop};let r=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===r.scrollLeft&&this._smoothScrolling.to.scrollTop===r.scrollTop)return;let s;t?s=new Vt(this._smoothScrolling.from,r,this._smoothScrolling.startTime,this._smoothScrolling.duration):s=Vt.start(this._state,r,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{let r=this._state.withScrollPosition(e);this._smoothScrolling=Vt.start(this._state,r,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);if(this._setState(t,!0),!!this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,t){let r=this._state;r.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(r,t)))}},Ri=class{constructor(i,e,t){this.scrollLeft=i,this.scrollTop=e,this.isDone=t}};function jr(n,i){let e=i-n;return function(t){return n+e*$n(t)}}function Gn(n,i,e){return function(t){return t2.5*t){let s,o;return i{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(i){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(i?" xterm-fade":"")))}};var qn=140,ht=class extends Fe{constructor(i){super(),this._lazyRender=i.lazyRender,this._host=i.host,this._scrollable=i.scrollable,this._scrollByPage=i.scrollByPage,this._scrollbarState=i.scrollbarState,this._visibilityController=this._register(new Li(i.visibility,"xterm-visible xterm-scrollbar "+i.extraScrollbarClassName,"xterm-invisible xterm-scrollbar "+i.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new lt),this._shouldRender=!0,this.domNode=new Te(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this._register(I(this.domNode.domNode,ae.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(i){let e=this._register(new Di(i));return this.domNode.domNode.appendChild(e.bgDomNode),this.domNode.domNode.appendChild(e.domNode),e}_createSlider(i,e,t,r){this.slider=new Te(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(i),this.slider.setLeft(e),typeof t=="number"&&this.slider.setWidth(t),typeof r=="number"&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(I(this.slider.domNode,ae.POINTER_DOWN,s=>{s.button===0&&(s.preventDefault(),this._sliderPointerDown(s))})),this._onclick(this.slider.domNode,s=>{s.leftButton&&s.stopPropagation()})}_handleElementSize(i){return this._scrollbarState.setVisibleSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(i){return this._scrollbarState.setScrollSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(i){return this._scrollbarState.setScrollPosition(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(i){i.target===this.domNode.domNode&&this._handlePointerDown(i)}delegatePointerDown(i){let e=this.domNode.domNode.getClientRects()[0].top,t=e+this._scrollbarState.getSliderPosition(),r=e+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),s=this._sliderPointerPosition(i);t<=s&&s<=r?i.button===0&&(i.preventDefault(),this._sliderPointerDown(i)):this._handlePointerDown(i)}_handlePointerDown(i){let e,t;if(i.target===this.domNode.domNode&&typeof i.offsetX=="number"&&typeof i.offsetY=="number")e=i.offsetX,t=i.offsetY;else{let s=Vs(this.domNode.domNode);e=i.pageX-s.left,t=i.pageY-s.top}let r=this._pointerDownRelativePosition(e,t);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),i.button===0&&(i.preventDefault(),this._sliderPointerDown(i))}_sliderPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=this._sliderPointerPosition(i),t=this._sliderOrthogonalPointerPosition(i),r=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,s=>{let o=this._sliderOrthogonalPointerPosition(s),a=Math.abs(o-t);if(Ke&&a>qn){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let h=this._sliderPointerPosition(s)-e;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(h))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(i){let e={};this.writeScrollPosition(e,i),this._scrollable.setScrollPositionNow(e)}updateScrollbarSize(i){this._updateScrollbarSize(i),this._scrollbarState.setScrollbarSize(i),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}};var dt=class n{constructor(i,e,t,r,s,o){this._scrollbarSize=Math.round(e),this._oppositeScrollbarSize=Math.round(t),this._arrowSize=Math.round(i),this._visibleSize=r,this._scrollSize=s,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new n(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(i){let e=Math.round(i);return this._visibleSize!==e?(this._visibleSize=e,this._refreshComputedValues(),!0):!1}setScrollSize(i){let e=Math.round(i);return this._scrollSize!==e?(this._scrollSize=e,this._refreshComputedValues(),!0):!1}setScrollPosition(i){let e=Math.round(i);return this._scrollPosition!==e?(this._scrollPosition=e,this._refreshComputedValues(),!0):!1}setScrollbarSize(i){this._scrollbarSize=Math.round(i)}setArrowSize(i){let e=Math.round(i);this._arrowSize!==e&&(this._arrowSize=e,this._refreshComputedValues())}setOppositeScrollbarSize(i){this._oppositeScrollbarSize=Math.round(i)}static _computeValues(i,e,t,r,s){let o=Math.max(0,t-i),a=Math.max(0,o-2*e),l=r>0&&r>t;if(!l)return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(a),computedSliderRatio:0,computedSliderPosition:0};let h=Math.round(Math.max(20,Math.floor(t*a/r))),d=(a-h)/(r-t),c=s*d;return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(h),computedSliderRatio:d,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){let i=n._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=i.computedAvailableSize,this._computedIsNeeded=i.computedIsNeeded,this._computedSliderSize=i.computedSliderSize,this._computedSliderRatio=i.computedSliderRatio,this._computedSliderPosition=i.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize-this._computedSliderSize/2;return Math.round(e/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize,t=this._scrollPosition;return ethis._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:0,left:0,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})),this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;let r=e?"":"none";this._arrowUp.bgDomNode.style.display=r,this._arrowUp.domNode.style.display=r,this._arrowDown.bgDomNode.style.display=r,this._arrowDown.domNode.style.display=r}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){let t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(e.vertical===2?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}};var Zr=class{constructor(i,e,t){this.timestamp=i,this.deltaX=e,this.deltaY=t,this.score=0}},Bi=class Bi{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let i=1,e=0,t=1,r=this._rear;for(;r!==-1;){let s=r===this._front?i:Math.pow(2,-t);if(i-=s,e+=this._memory[r].score*s,r===this._front)break;r=(this._capacity+r-1)%this._capacity,t++}return e<=.5}acceptStandardWheelEvent(i){if(Kt){let e=re(i.browserEvent),t=qr(e);this.accept(Date.now(),i.deltaX*t,i.deltaY*t)}else this.accept(Date.now(),i.deltaX,i.deltaY)}accept(i,e,t){let r=null,s=new Zr(i,e,t);this._front===-1&&this._rear===-1?(this._memory[0]=s,this._front=0,this._rear=0):(r=this._memory[this._rear],this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=s),s.score=this._computeScore(s,r)}_computeScore(i,e){if(Math.abs(i.deltaX)>0&&Math.abs(i.deltaY)>0)return 1;let t=.5;if((!this._isAlmostInt(i.deltaX)||!this._isAlmostInt(i.deltaY))&&(t+=.25),e){let r=Math.abs(i.deltaX),s=Math.abs(i.deltaY),o=Math.abs(e.deltaX),a=Math.abs(e.deltaY),l=Math.max(Math.min(r,o),1),h=Math.max(Math.min(s,a),1),d=Math.max(r,o),c=Math.max(s,a);d%l===0&&c%h===0&&(t-=.5)}return Math.min(Math.max(t,0),1)}_isAlmostInt(i){return Math.abs(Math.round(i)-i)<.01}};Bi.INSTANCE=new Bi;var Qr=Bi,Mi=class extends Fe{constructor(e,t,r){super();this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;t=t??{};let s,o=!r;r?s=r:(t.mouseWheelSmoothScroll=!1,s=new ct({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:l=>it(re(e),l)})),this._options=Xn(t),this._scrollable=s,this._register(this._scrollable.onScroll(l=>{this._handleScroll(l),this._onScroll.fire(l)})),o&&this._register(this._scrollable);let a={handleMouseWheel:l=>this._handleMouseWheel(l),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new Pi(this._scrollable,this._options,a)),this._horizontalScrollbar=this._register(new ki(this._scrollable,this._options,a)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new Te(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new Te(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new Te(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,l=>this._handleMouseOver(l)),this._onmouseleave(this._listenOnDomNode,l=>this._handleMouseLeave(l)),this._hideTimeout=this._register(new Ce),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=Ne(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,te&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){typeof e.handleMouseWheel<"u"&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<"u"&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<"u"&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<"u"&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<"u"&&(this._options.horizontal=e.horizontal),typeof e.vertical<"u"&&(this._options.vertical=e.vertical),typeof e.horizontalHasArrows<"u"&&(this._options.horizontalHasArrows=e.horizontalHasArrows),typeof e.verticalHasArrows<"u"&&(this._options.verticalHasArrows=e.verticalHasArrows),typeof e.horizontalScrollbarSize<"u"&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<"u"&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<"u"&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new Gt(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=Ne(this._mouseWheelToDispose),e)){let r=s=>{this._handleMouseWheel(new Gt(s))};this._mouseWheelToDispose.push(I(this._listenOnDomNode,ae.MOUSE_WHEEL,r,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let t=Qr.INSTANCE;t.acceptStandardWheelEvent(e);let r=!1;if(e.deltaY||e.deltaX){let o=e.deltaY*this._options.mouseWheelScrollSensitivity,a=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&a+o===0?a=o=0:Math.abs(o)>=Math.abs(a)?a=0:o=0),this._options.flipAxes&&([o,a]=[a,o]);let l=!te&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||l)&&!a&&(a=o,o=0),e.browserEvent&&e.browserEvent.altKey&&(a=a*this._options.fastScrollSensitivity,o=o*this._options.fastScrollSensitivity);let h=this._scrollable.getFutureScrollPosition(),d={};if(o){let c=50*o,u=h.scrollTop-(c<0?Math.floor(c):Math.ceil(c));this._verticalScrollbar.writeScrollPosition(d,u)}if(a){let c=50*a,u=h.scrollLeft-(c<0?Math.floor(c):Math.ceil(c));this._horizontalScrollbar.writeScrollPosition(d,u)}d=this._scrollable.validateScrollPosition(d),(h.scrollLeft!==d.scrollLeft||h.scrollTop!==d.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(d):this._scrollable.setScrollPositionNow(d),r=!0)}let s=r;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,r=e.scrollLeft>0,s=r?" xterm-shadow-left":"",o=t?" xterm-shadow-top":"",a=r||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${o}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${a}${o}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),500)}};function Xn(n){let i={lazyRender:typeof n.lazyRender<"u"?n.lazyRender:!1,className:typeof n.className<"u"?n.className:"",useShadows:typeof n.useShadows<"u"?n.useShadows:!0,handleMouseWheel:typeof n.handleMouseWheel<"u"?n.handleMouseWheel:!0,flipAxes:typeof n.flipAxes<"u"?n.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof n.consumeMouseWheelIfScrollbarIsNeeded<"u"?n.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof n.alwaysConsumeMouseWheel<"u"?n.alwaysConsumeMouseWheel:!1,scrollYToX:typeof n.scrollYToX<"u"?n.scrollYToX:!1,mouseWheelScrollSensitivity:typeof n.mouseWheelScrollSensitivity<"u"?n.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof n.fastScrollSensitivity<"u"?n.fastScrollSensitivity:5,scrollPredominantAxis:typeof n.scrollPredominantAxis<"u"?n.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof n.mouseWheelSmoothScroll<"u"?n.mouseWheelSmoothScroll:!0,listenOnDomNode:typeof n.listenOnDomNode<"u"?n.listenOnDomNode:null,horizontal:typeof n.horizontal<"u"?n.horizontal:1,horizontalScrollbarSize:typeof n.horizontalScrollbarSize<"u"?n.horizontalScrollbarSize:10,horizontalSliderSize:typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:0,horizontalHasArrows:typeof n.horizontalHasArrows<"u"?n.horizontalHasArrows:!1,vertical:typeof n.vertical<"u"?n.vertical:1,verticalScrollbarSize:typeof n.verticalScrollbarSize<"u"?n.verticalScrollbarSize:10,verticalHasArrows:typeof n.verticalHasArrows<"u"?n.verticalHasArrows:!1,verticalSliderSize:typeof n.verticalSliderSize<"u"?n.verticalSliderSize:0,scrollByPage:typeof n.scrollByPage<"u"?n.scrollByPage:!1};return i.horizontalSliderSize=typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:i.horizontalScrollbarSize,i.verticalSliderSize=typeof n.verticalSliderSize<"u"?n.verticalSliderSize:i.verticalScrollbarSize,te&&(i.className+=" xterm-mac"),i}var ut=class extends g{constructor(e,t,r,s,o,a,l,h,d){super();this._bufferService=r;this._coreService=o;this._optionsService=h;this._renderService=d;this._onRequestScrollLines=this._register(new v);this.onRequestScrollLines=this._onRequestScrollLines.event;this._isSyncing=!1;this._isHandlingScroll=!1;this._suppressOnScrollHandler=!1;this._needsSyncOnRender=!1;let c=this._register(new ct({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:u=>it(s.window,u)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{c.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new Mi(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},c)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(a.onProtocolChange(u=>{this._scrollableElement.updateOptions({handleMouseWheel:!(u&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(Y.runAndSubscribe(l.onChangeColors,()=>{e.style.backgroundColor=l.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=l.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(E(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register(E(()=>this._styleElement.remove())),this._register(Y.runAndSubscribe(l.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${l.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${l.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${l.colors.scrollbarSliderActiveBackground.css};`,"}"].join(` -+`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(u=>this._handleScroll(u)))}scrollLines(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){let e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,r=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:r,verticalHasArrows:t}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){if(!(!this._renderService||this._isSyncing)){if(this._coreService.decPrivateModes.synchronizedOutput){this._needsSyncOnRender=!0;return}this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1}}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),r=t-this._bufferService.buffer.ydisp;r!==0&&(this._latestYDisp=t,this._onRequestScrollLines.fire(r)),this._isHandlingScroll=!1}handleTouchScroll(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};ut=y([m(2,D),m(3,z),m(4,X),m(5,Me),m(6,le),m(7,R),m(8,G)],ut);var ft=class extends g{constructor(e,t,r,s,o){super();this._screenElement=e;this._bufferService=t;this._coreBrowserService=r;this._decorationService=s;this._renderService=o;this._decorationElements=new Map;this._altBufferIsActive=!1;this._dimensionsChanged=!1;this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(a=>this._removeDecoration(a))),this._register(E(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer",e?.options?.layer==="top"),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,t.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let r=e.options.x??0;return r&&r>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let r=this._decorationElements.get(e);r||(r=this._createElement(e),e.element=r,this._decorationElements.set(e,r),this._container.appendChild(r),e.onDispose(()=>{this._decorationElements.delete(e),r.remove()})),r.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(r.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,r.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,r.style.top=`${t*this._renderService.dimensions.css.cell.height}px`,r.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(r)}}_refreshXPosition(e,t=e.element){if(!t)return;let r=e.options.x??0;(e.options.anchor||"left")==="right"?t.style.right=r?`${r*this._renderService.dimensions.css.cell.width}px`:"":t.style.left=r?`${r*this._renderService.dimensions.css.cell.width}px`:""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};ft=y([m(1,D),m(2,z),m(3,ge),m(4,G)],ft);var Oi=class{constructor(){this._zones=[];this._zonePool=[];this._zonePoolIndex=0;this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(i){if(i.options.overviewRulerOptions){for(let e of this._zones)if(e.color===i.options.overviewRulerOptions.color&&e.position===i.options.overviewRulerOptions.position){if(this._lineIntersectsZone(e,i.marker.line))return;if(this._lineAdjacentToZone(e,i.marker.line,i.options.overviewRulerOptions.position)){this._addLineToZone(e,i.marker.line);return}}if(this._zonePoolIndex=i.startBufferLine&&e<=i.endBufferLine}_lineAdjacentToZone(i,e,t){return e>=i.startBufferLine-this._linePadding[t||"full"]&&e<=i.endBufferLine+this._linePadding[t||"full"]}_addLineToZone(i,e){i.startBufferLine=Math.min(i.startBufferLine,e),i.endBufferLine=Math.max(i.endBufferLine,e)}};var Ie={full:0,left:0,center:0,right:0},He={full:0,left:0,center:0,right:0},$t={full:0,left:0,center:0,right:0},Ge=class extends g{constructor(e,t,r,s,o,a,l,h){super();this._viewportElement=e;this._screenElement=t;this._bufferService=r;this._decorationService=s;this._renderService=o;this._optionsService=a;this._themeService=l;this._coreBrowserService=h;this._colorZoneStore=new Oi;this._shouldUpdateDimensions=!0;this._shouldUpdateAnchor=!0;this._lastKnownBufferLength=0;this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(E(()=>this._canvas?.remove()));let d=this._canvas.getContext("2d");if(d)this._ctx=d;else throw new Error("Ctx cannot be null");this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register(E(()=>{this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}get _width(){let e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??!0?e?.width??0:0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);He.full=this._canvas.width,He.left=e,He.center=t,He.right=e,this._refreshDrawHeightConstants(),$t.full=1,$t.left=1,$t.center=1+He.left,$t.right=1+He.left+He.center}_refreshDrawHeightConstants(){Ie.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);Ie.left=t,Ie.center=t,Ie.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;let e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let t of this._decorationService.decorations)this._colorZoneStore.addDecoration(t);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let t of e)t.position!=="full"&&this._renderColorZone(t);for(let t of e)t.position==="full"&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect($t[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-Ie[e.position||"full"]/2),He[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+Ie[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};Ge=y([m(2,D),m(3,ge),m(4,G),m(5,R),m(6,le),m(7,z)],Ge);function es(n){if(!n)throw new Error("value must not be falsy");return n}function Yn(n){return 57508<=n&&n<=57558}function jn(n){return 9472<=n&&n<=9631}function Ys(n){return Yn(n)||jn(n)}function js(){return{css:{canvas:Ni(),cell:Ni()},device:{canvas:Ni(),cell:Ni(),char:{width:0,height:0,left:0,top:0}}}}function Ni(){return{width:0,height:0}}var Fi=class{constructor(i=()=>new qt){this._flat=new Float32Array(256);this._font="";this._fontSize=0;this._weight="normal";this._weightBold="bold";this._canvasElements=[];this._canvasElements=[i(),i(),i(),i()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(i,e,t,r){i===this._font&&e===this._fontSize&&t===this._weight&&r===this._weightBold||(this._font=i,this._fontSize=e,this._weight=t,this._weightBold=r,this._canvasElements[0].setFont(i,e,t,!1),this._canvasElements[1].setFont(i,e,r,!1),this._canvasElements[2].setFont(i,e,t,!0),this._canvasElements[3].setFont(i,e,r,!0),this.clear())}get(i,e,t){let r;if(!e&&!t&&i.length===1&&(r=i.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];let a=this._measure(i,0);return a>0&&(this._flat[r]=a),a}let s=i;e&&(s+="B"),t&&(s+="I");let o=this._holey.get(s);if(o===void 0){let a=0;e&&(a|=1),t&&(a|=2),o=this._measure(i,a),o>0&&this._holey.set(s,o)}return o}_measure(i,e){return this._canvasElements[e].measure(i)}},qt=class{constructor(){typeof OffscreenCanvas<"u"?(this._canvas=new OffscreenCanvas(1,1),this._ctx=es(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=es(this._canvas.getContext("2d")))}setFont(i,e,t,r){let s=r?"italic":"";this._ctx.font=`${s} ${t} ${e}px ${i}`.trim()}measure(i){return this._ctx.measureText(i).width}};var J=0,Z=0,Q=0,W=0,ts={css:"#00000000",rgba:0},O;(t=>{function n(r,s,o,a){return a!==void 0?`#${Ve(r)}${Ve(s)}${Ve(o)}${Ve(a)}`:`#${Ve(r)}${Ve(s)}${Ve(o)}`}t.toCss=n;function i(r,s,o,a=255){return(r<<24|s<<16|o<<8|a)>>>0}t.toRgba=i;function e(r,s,o,a){return{css:t.toCss(r,s,o,a),rgba:t.toRgba(r,s,o,a)}}t.toColor=e})(O||={});var L;(a=>{function n(l,h){if(W=(h.rgba&255)/255,W===1)return{css:h.css,rgba:h.rgba};let d=h.rgba>>24&255,c=h.rgba>>16&255,u=h.rgba>>8&255,f=l.rgba>>24&255,p=l.rgba>>16&255,b=l.rgba>>8&255;J=f+Math.round((d-f)*W),Z=p+Math.round((c-p)*W),Q=b+Math.round((u-b)*W);let _=O.toCss(J,Z,Q),S=O.toRgba(J,Z,Q);return{css:_,rgba:S}}a.blend=n;function i(l){return(l.rgba&255)===255}a.isOpaque=i;function e(l,h,d){let c=Hi.ensureContrastRatio(l.rgba,h.rgba,d);if(c)return O.toColor(c>>24&255,c>>16&255,c>>8&255)}a.ensureContrastRatio=e;function t(l){let h=(l.rgba|255)>>>0;return[J,Z,Q]=Hi.toChannels(h),{css:O.toCss(J,Z,Q),rgba:h}}a.opaque=t;function r(l,h){return W=Math.round(h*255),[J,Z,Q]=Hi.toChannels(l.rgba),{css:O.toCss(J,Z,Q,W),rgba:O.toRgba(J,Z,Q,W)}}a.opacity=r;function s(l,h){return W=l.rgba&255,r(l,W*h/255)}a.multiplyOpacity=s;function o(l){return[l.rgba>>24&255,l.rgba>>16&255,l.rgba>>8&255]}a.toColorRGB=o})(L||={});var M;(t=>{let n,i;try{let r=document.createElement("canvas");r.width=1,r.height=1;let s=r.getContext("2d",{willReadFrequently:!0});s&&(n=s,n.globalCompositeOperation="copy",i=n.createLinearGradient(0,0,1,1))}catch{}function e(r){if(r.match(/#[\da-f]{3,8}/i))switch(r.length){case 4:return J=parseInt(r.slice(1,2).repeat(2),16),Z=parseInt(r.slice(2,3).repeat(2),16),Q=parseInt(r.slice(3,4).repeat(2),16),O.toColor(J,Z,Q);case 5:return J=parseInt(r.slice(1,2).repeat(2),16),Z=parseInt(r.slice(2,3).repeat(2),16),Q=parseInt(r.slice(3,4).repeat(2),16),W=parseInt(r.slice(4,5).repeat(2),16),O.toColor(J,Z,Q,W);case 7:return{css:r,rgba:(parseInt(r.slice(1),16)<<8|255)>>>0};case 9:return{css:r,rgba:parseInt(r.slice(1),16)>>>0}}let s=r.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(s)return J=parseInt(s[1],10),Z=parseInt(s[2],10),Q=parseInt(s[3],10),W=Math.round((s[5]===void 0?1:parseFloat(s[5]))*255),O.toColor(J,Z,Q,W);if(r==="transparent")return{css:"transparent",rgba:0};if(!n||!i)throw new Error("css.toColor: Unsupported css format");if(n.fillStyle=i,n.fillStyle=r,typeof n.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(n.fillRect(0,0,1,1),[J,Z,Q,W]=n.getImageData(0,0,1,1).data,W!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:O.toRgba(J,Z,Q,W),css:r}}t.toColor=e})(M||={});var j;(e=>{function n(t){return i(t>>16&255,t>>8&255,t&255)}e.relativeLuminance=n;function i(t,r,s){let o=t/255,a=r/255,l=s/255,h=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),d=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4),c=l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4);return h*.2126+d*.7152+c*.0722}e.relativeLuminance2=i})(j||={});var Hi;(s=>{function n(o,a){if(W=(a&255)/255,W===1)return a;let l=a>>24&255,h=a>>16&255,d=a>>8&255,c=o>>24&255,u=o>>16&255,f=o>>8&255;return J=c+Math.round((l-c)*W),Z=u+Math.round((h-u)*W),Q=f+Math.round((d-f)*W),O.toRgba(J,Z,Q)}s.blend=n;function i(o,a,l){let h=j.relativeLuminance(o>>8),d=j.relativeLuminance(a>>8);if(De(h,d)>8));if(b>8));return b>S?p:_}return p}let u=t(o,a,l),f=De(h,j.relativeLuminance(u>>8));if(f>8));return f>b?u:p}return u}}s.ensureContrastRatio=i;function e(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,f=a>>16&255,p=a>>8&255,b=De(j.relativeLuminance2(u,f,p),j.relativeLuminance2(h,d,c));for(;b0||f>0||p>0);)u-=Math.max(0,Math.ceil(u*.1)),f-=Math.max(0,Math.ceil(f*.1)),p-=Math.max(0,Math.ceil(p*.1)),b=De(j.relativeLuminance2(u,f,p),j.relativeLuminance2(h,d,c));return(u<<24|f<<16|p<<8|255)>>>0}s.reduceLuminance=e;function t(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,f=a>>16&255,p=a>>8&255,b=De(j.relativeLuminance2(u,f,p),j.relativeLuminance2(h,d,c));for(;b>>0}s.increaseLuminance=t;function r(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}s.toChannels=r})(Hi||={});function Ve(n){let i=n.toString(16);return i.length<2?"0"+i:i}function De(n,i){return n0&&(this._lastCompositionData=i.data),this._renderCompositionView(i.data??""),this._compositionView.classList.toggle("active",!!i.data),this.updateCompositionElements();let e=this._compositionTransactionId;this._cancelDeferredTimer(this._compositionPositionTimer),this._compositionPositionTimer=this._defer(()=>{if(this._isComposing&&this._compositionTransactionId===e){this._compositionHasObservedProgress||=this._hasCompositionProgress();let t=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,t)}})}compositionend(i){if(!this._isAwaitingCompositionEnd)return!1;if(!this._isComposing){let t=this._pendingComposition;return t?.transactionId===this._compositionTransactionId&&(t.endData=i?.data??"",this._updatePostCompositionInputExpectation(t)),!1}let e=i?.data??"";if(this._compositionHasObservedProgress||=this._hasCompositionProgress(),!this._compositionEndBelongsToCurrentTransaction(e)){let t=this._pendingComposition;return t&&t.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(t),this._deferCompositionEnd(e),!1}return this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._finalizeComposition(!0,e),!0}blur(){if(this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._isComposing){let i=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,i)}(this._isComposing||this.hasPendingCompositionFinalization)&&this._finalizeComposition(!1)}dispose(){this._textareaChangeTimer!==void 0&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0);for(let i of this._compositionTimers)clearTimeout(i);this._compositionTimers.clear(),this._compositionPositionTimer=void 0,this._compositionViewTimer=void 0,this._compositionEndTimer=void 0,this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionTransactionId++,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._preeditRenderer?.dispose(),this._preeditRenderer=void 0}keydown(i){if(this._canceledKey?.code===i.code&&this._canceledKey.timeStamp===i.timeStamp)return this._canceledKey=void 0,!1;if(i.key==="Escape"&&(this._isComposing||this.hasPendingCompositionFinalization))return this._canceledKey={code:i.code,timeStamp:i.timeStamp},this._cancelComposition(),!1;if(this._isComposing||this.hasPendingCompositionFinalization){if(this._deferPreeditResync(this._composedRegionLength()>0),i.keyCode===20||i.keyCode===229||i.keyCode===16||i.keyCode===17||i.keyCode===18)return!1;this._finalizeComposition(!1)}return this._imeKeydownAwaitingCommit=i.keyCode===229,i.keyCode===229?(this._handleAnyTextareaChanges(),!1):!0}keypress(i){let e=this._pendingComposition;return e?e.keypressMayOverlapComposition?(e.keypressData+=i,!0):e.expectsPostCompositionInput&&e.keypressData.length===0?(e.keypressData=i,!0):(this._sendPendingComposition(e),!1):!1}input(i){if(this._isComposing)return this._compositionHasObservedProgress||=this._hasCompositionProgress(),this._compositionInputData+=i,!0;let e=this._pendingComposition;if(!e)return this._claimImeKeydownCommit(i);if(e.expectsPostCompositionInput)return e.inputData+=i,e.expectsPostCompositionInput=!1,this._sendPendingComposition(e),!0;let t=i.length>0&&this._getPendingTextareaInput(e)===i&&this._getPendingTextareaInput(e,!0)===i;return this._sendPendingComposition(e),t||this._coreService.triggerDataEvent(i,!0),!0}_claimImeKeydownCommit(i){return this._imeKeydownAwaitingCommit?(this._imeKeydownAwaitingCommit=!1,this._textareaChangeTimer!==void 0&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0),this._coreService.triggerDataEvent(i,!0),!0):!1}_finalizeComposition(i,e=""){let t=this._isComposing;if(this._compositionView.classList.remove("active"),this._resetCompositionView(),this._isComposing=!1,!(i&&!t)){if(i){this._pendingComposition&&this._sendPendingComposition(this._pendingComposition);let r={transactionId:this._compositionTransactionId,lifecycleSettled:!1,sessionEnded:!1,position:{start:this._compositionPosition.start,end:this._compositionPosition.end},suffix:this._compositionSuffix,dataAlreadySent:this._dataAlreadySent,compositionData:this._lastCompositionData,endData:e,inputData:this._compositionInputData,keypressData:"",keypressMayOverlapComposition:this._lastCompositionData.length===0&&e.length===0,expectsPostCompositionInput:!1};this._updatePostCompositionInputExpectation(r),this._pendingComposition=r,r.finalizerTimer=this._defer(()=>{r.finalizerTimer=void 0,this._compositionTransactionId===r.transactionId&&(this._isAwaitingCompositionEnd=!1),this._pendingComposition===r&&this._sendPendingComposition(r,!0)})}else if(this._pendingComposition&&this._sendPendingComposition(this._pendingComposition,!0),t){let r=this._getCompositionInput(this._compositionPosition.start+this._dataAlreadySent.length,this._compositionSuffix);this._sendCompositionInput(this._compositionTransactionId,r)}}}_sendPendingComposition(i,e=!1){this._cancelPendingFinalizer(i),this._pendingComposition===i&&(this._pendingComposition=void 0);let t=this._getPendingTextareaInput(i,e),r=this._removeAlreadySentData(i.inputData||i.keypressData,i.dataAlreadySent),s=this._mergeTextObservations(t||i.endData||(r?i.compositionData:""),r,i.keypressMayOverlapComposition);this._sendCompositionInput(i.transactionId,s,!i.sessionEnded),this._settlePendingComposition(i)}_cancelPendingFinalizer(i){i.finalizerTimer!==void 0&&(clearTimeout(i.finalizerTimer),this._compositionTimers.delete(i.finalizerTimer),i.finalizerTimer=void 0)}_settlePendingComposition(i){i.lifecycleSettled||(i.lifecycleSettled=!0,this._dispatchCompositionTransactionSettled())}_mergeTextObservations(i,e,t){if(!e||i.includes(e))return i;if(!i||e.includes(i))return e;if(t){let s=Math.min(i.length,e.length);for(;s>0&&!i.endsWith(e.substring(0,s));)s--;let o=Math.min(i.length,e.length);for(;o>0&&!e.endsWith(i.substring(0,o));)o--;return s>o?i+e.substring(s):e+i.substring(o)}let r=Math.min(i.length,e.length);for(;r>0&&!i.endsWith(e.substring(0,r));)r--;return i+e.substring(r)}_updatePostCompositionInputExpectation(i){i.expectsPostCompositionInput=(i.endData.length>0||i.compositionData.length>0)&&i.inputData.length===0&&this._getPendingTextareaInput(i).length===0}_getPendingTextareaInput(i,e=!1){let t=this._textarea.value,r=i.position.start+i.dataAlreadySent.length;if(i.nextCompositionStart!==void 0)return t.substring(r,Math.max(r,i.nextCompositionStart));let s=i.suffix.length>0&&t.endsWith(i.suffix)?t.length-i.suffix.length:t.length,o=(i.endData||i.compositionData).length,a=e?s:Math.max(i.position.end,r+o);return t.substring(r,Math.max(r,Math.min(s,a)))}_getCompositionInput(i,e){let t=this._textarea.value,r=e.length>0&&t.endsWith(e)?t.length-e.length:t.length;return t.substring(i,Math.max(i,r))}_removeAlreadySentData(i,e){return e.length===0?i:i.startsWith(e)?i.substring(e.length):e.includes(i)?"":i}_cancelComposition(){let i=this._pendingComposition;i&&this._isComposing&&i.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(i);let e=this._isComposing?this._compositionTransactionId:this._pendingComposition?.transactionId??0,t=i!==void 0&&this._pendingComposition===i;this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._textarea.value=this._textarea.value.substring(0,this._compositionPosition.start)+this._compositionSuffix,this._sendCompositionInput(e,""),t&&i&&this._settlePendingComposition(i)}_sendCompositionInput(i,e,t=!0){let r=!1;if(t){let s=new CustomEvent(Js,{bubbles:!0,cancelable:!0,detail:{id:i,data:e}});this._dispatchCompositionSessionEvent(s),r=s.defaultPrevented}e.length>0&&!r&&this._coreService.triggerDataEvent(e,!0)}_endPendingCompositionSession(i){if(i.sessionEnded)return;i.sessionEnded=!0;let e=this._getPendingTextareaInput(i)||i.endData||i.compositionData;this._dispatchCompositionSessionEvent(new CustomEvent(Js,{bubbles:!0,cancelable:!0,detail:{id:i.transactionId,data:e,dataPendingReconciliation:!0}}))}_dispatchCompositionSessionEvent(i){typeof this._textarea.dispatchEvent=="function"&&this._textarea.dispatchEvent(i)}_dispatchCompositionTransactionSettled(){this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-transaction-settled",{bubbles:!0}))}_deferCompositionEnd(i){this._cancelDeferredTimer(this._compositionEndTimer);let e=this._compositionTransactionId,t=this._defer(()=>{if(this._compositionEndTimer!==t||!this._isComposing||this._compositionTransactionId!==e)return;if(this._compositionEndTimer=void 0,!this._compositionEndBelongsToCurrentTransaction(i)){i.length===0&&!this._hasCompositionProgress()&&this._cancelComposition();return}this._finalizeComposition(!0,i),this._dispatchCompositionSessionEvent(new CustomEvent(Zn,{bubbles:!0}));let r=this._pendingComposition;r?.transactionId===e&&this._sendPendingComposition(r,!0)});this._compositionEndTimer=t}_composedRegionLength(){let i=this._textarea.value.length-this._compositionSuffix.length;return Math.max(0,i-this._compositionPosition.start)}_deferPreeditResync(i){if(!i||!this._isComposing)return;let e=this._compositionTransactionId;this._defer(()=>{this._isComposing&&this._compositionTransactionId===e&&this._composedRegionLength()===0&&this._cancelComposition()})}_hasCompositionProgress(){let i=this._textarea.selectionStart??this._textarea.value.length,e=this._textarea.selectionEnd??i;return this._compositionHasObservedProgress||this._textarea.value!==this._compositionStartValue||i!==this._compositionStartSelection.start||e!==this._compositionStartSelection.end}_compositionEndBelongsToCurrentTransaction(i){return this._hasCompositionProgress()||i.length>0&&i===this._lastCompositionData}_defer(i){let e=setTimeout(()=>{this._compositionTimers.delete(e),i()},0);return this._compositionTimers.add(e),e}_cancelDeferredTimer(i){i!==void 0&&(clearTimeout(i),this._compositionTimers.delete(i))}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;let i=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){let e=this._textarea.value,t=e.replace(i,"");e!==i&&(this._imeKeydownAwaitingCommit=!1),this._dataAlreadySent=t,e.length>i.length?this._coreService.triggerDataEvent(t,!0):e.lengththis.updateCompositionElements(!0)),this._preeditRenderer.render(this._compositionPreedit));let a=this._bufferService.cols*this._renderService.dimensions.css.cell.width-o;this._compositionView.style.maxWidth=a+"px",this._compositionView.style.overflow="hidden";let l=(this._compositionPreedit??this._compositionView).getBoundingClientRect(),h=o+Math.min(0,a-l.width),d=!!this._compositionRemainder&&l.widththis.updateCompositionElements(!0)))}};Ee=y([m(2,D),m(3,R),m(4,X),m(5,G),m(6,le),m(7,Si)],Ee);var Qn=/^[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}\uac00-\ud7a3\u3131-\u318e\uff01-\uff60]$/u,eo=/[\p{Mark}\p{Extended_Pictographic}]/u,to=128,is=class extends g{constructor(e,t,r){super();this._unicodeService=e;this._segmenter=new Intl.Segmenter(void 0,{granularity:"grapheme"});this._font="";t.fonts&&this._register(I(t.fonts,"loadingdone",()=>{this._font="",this._preedit&&r()}))}clear(){this._preedit=void 0,this._font=""}dispose(){this.clear(),this._measure=void 0,super.dispose()}render(e){let t=e.ownerDocument,r=t.defaultView?.getComputedStyle(e);if(!r)return;let s=[r.fontFamily,r.fontSize,r.fontWeight,r.fontStyle,t.defaultView?.devicePixelRatio].join("|");if(this._preedit===e&&this._font===s)return;this._preedit=e,this._font=s;let o=(e.textContent??"").slice(1,-1),a=new Map,l=[t.createTextNode("\u200E")],h=0,d,c=0,u=f=>{if(f===h)return;let p=o.slice(h,f);if(d===void 0)l.push(t.createTextNode(p));else{let b=t.createElement("span");b.style.letterSpacing=d,b.style.fontKerning="none",b.style.textDecoration="inherit",b.textContent=p,l.push(b),c++}h=f};for(let{segment:f,index:p}of this._segmenter.segment(o)){if(c>=to){u(p),d=void 0;break}let b,_=this._unicodeService.wcwidth(f.codePointAt(0));if(Qn.test(f)&&!eo.test(f)&&(_===2||/^[\uff61-\uff9f]$/u.test(f))){let S=a.get(f);S===void 0&&(this._measure??=new qt,this._measure.setFont(r.fontFamily,parseFloat(r.fontSize),parseFloat(r.fontWeight)||400,r.fontStyle==="italic"),S=this._measure.measure(f),a.set(f,S),c++),b=`calc(var(--xterm-composition-cell-width) * ${_} - ${S}px)`}b!==d&&(u(p),d=b)}u(o.length),l.push(t.createTextNode("\u200E")),e.replaceChildren(...l)}};var Wi=class extends fe{constructor(e,t,r){super();this.content=0;this.combinedData="";this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=r}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},We=class{constructor(i){this._bufferService=i;this._characterJoiners=[];this._nextCharacterJoinerId=0;this._workCell=new F}register(i){let e={id:this._nextCharacterJoinerId++,handler:i};return this._characterJoiners.push(e),e.id}deregister(i){for(let e=0;e1){let u=this._getJoinedRanges(r,l,a,e,o);for(let f=0;f1){let c=this._getJoinedRanges(r,l,a,e,o);for(let u=0;u=Ps,Rr=oe,x=this._workCell;if(b.length>0&&oe===b[0][0]&&Je){let k=b.shift(),Mr=this._isCellInSelection(k[0],e);for(T=k[0]+1;T=k[1],Je?(fi=!0,x=new Wi(this._workCell,i.translateToString(!0,k[0],k[1]),k[1]-k[0]),Rr=k[1]-1,Dr=x.getWidth()):Ps=k[1]}let Nt=this._isCellInSelection(oe,e),Lr=t&&oe===o,Ar=An&&oe>=c&&oe<=u;f&&x.isBlink()&&(f.hasBlinkingCells=!0),!l&&x.isBlink()&&N.push("xterm-blink-hidden");let kr=!1;this._decorationService.forEachDecorationAtCell(oe,e,void 0,k=>{kr=!0});let _i=x.getChars()||" ";if(_i===" "&&(x.isUnderline()||x.isOverline())&&(_i="\xA0"),Ot=Dr*h-d.get(_i,x.isBold(),x.isItalic()),!C)C=this._document.createElement("span");else if(w&&(Nt&&ui||!Nt&&!ui&&x.bg===ee)&&(Nt&&ui&&_.selectionForeground||x.fg===Rs)&&x.extended.ext===Ls&&Ar===As&&Ot===ks&&!Lr&&!fi&&!kr&&Je){x.isInvisible()?A+=" ":A+=_i,w++;continue}else w&&(C.textContent=A),C=this._document.createElement("span"),w=0,A="";if(ee=x.bg,Rs=x.fg,Ls=x.extended.ext,As=Ar,ks=Ot,ui=Nt,fi&&o>=oe&&o<=Rr&&(o=oe),!this._coreService.isCursorHidden&&Lr&&this._coreService.isCursorInitialized){if(N.push("xterm-cursor"),this._coreBrowserService.isFocused)a&&N.push("xterm-cursor-blink"),N.push(r==="bar"?"xterm-cursor-bar":r==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(s)switch(s){case"outline":N.push("xterm-cursor-outline");break;case"block":N.push("xterm-cursor-block");break;case"bar":N.push("xterm-cursor-bar");break;case"underline":N.push("xterm-cursor-underline");break;default:break}}if(x.isBold()&&N.push("xterm-bold"),x.isItalic()&&N.push("xterm-italic"),x.isDim()&&N.push("xterm-dim"),x.isInvisible()?A=" ":A=x.getChars()||" ",x.isUnderline()&&(N.push(`xterm-underline-${x.extended.underlineStyle}`),A===" "&&(A="\xA0"),!x.isUnderlineColorDefault()))if(x.isUnderlineColorRGB())C.style.textDecorationColor=`rgb(${fe.toColorRGB(x.getUnderlineColor()).join(",")})`;else{let k=x.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&x.isBold()&&k<8&&(k+=8),C.style.textDecorationColor=_.ansi[k].css}x.isOverline()&&(N.push("xterm-overline"),A===" "&&(A="\xA0")),x.isStrikethrough()&&N.push("xterm-strikethrough"),Ar&&(C.style.textDecoration="underline");let ue=x.getFgColor(),Ft=x.getFgColorMode(),Se=x.getBgColor(),Ht=x.getBgColorMode(),Pr=!!x.isInverse();if(Pr){let k=ue;ue=Se,Se=k;let Mr=Ft;Ft=Ht,Ht=Mr}let Ae,pi,Wt=!1;this._decorationService.forEachDecorationAtCell(oe,e,void 0,k=>{k.options.layer!=="top"&&Wt||(k.backgroundColorRGB&&(Ht=50331648,Se=k.backgroundColorRGB.rgba>>8&16777215,Ae=k.backgroundColorRGB),k.foregroundColorRGB&&(Ft=50331648,ue=k.foregroundColorRGB.rgba>>8&16777215,pi=k.foregroundColorRGB),Wt=k.options.layer==="top")}),!Wt&&Nt&&(Ae=this._coreBrowserService.isFocused?_.selectionBackgroundOpaque:_.selectionInactiveBackgroundOpaque,Se=Ae.rgba>>8&16777215,Ht=50331648,Wt=!0,_.selectionForeground&&(Ft=50331648,ue=_.selectionForeground.rgba>>8&16777215,pi=_.selectionForeground)),Wt&&N.push("xterm-decoration-top");let ke;switch(Ht){case 16777216:case 33554432:ke=_.ansi[Se],N.push(`xterm-bg-${Se}`);break;case 50331648:ke=O.toColor(Se>>16,Se>>8&255,Se&255),this._addStyle(C,`background-color:#${(Se>>>0).toString(16).padStart(6,"0")}`);break;case 0:default:Pr?(ke=_.foreground,N.push(`xterm-bg-${257}`)):ke=_.background}switch(Ae||x.isDim()&&(Ae=L.multiplyOpacity(ke,.5)),Ft){case 16777216:case 33554432:x.isBold()&&ue<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(ue+=8),this._applyMinimumContrast(C,ke,_.ansi[ue],x,Ae,void 0)||N.push(`xterm-fg-${ue}`);break;case 50331648:let k=O.toColor(ue>>16&255,ue>>8&255,ue&255);this._applyMinimumContrast(C,ke,k,x,Ae,pi)||this._addStyle(C,`color:#${ue.toString(16).padStart(6,"0")}`);break;case 0:default:this._applyMinimumContrast(C,ke,_.foreground,x,Ae,pi)||Pr&&N.push(`xterm-fg-${257}`)}N.length&&(C.className=N.join(" "),N.length=0),!Lr&&!fi&&!kr&&Je?w++:C.textContent=A,Ot!==this.defaultSpacing&&(C.style.letterSpacing=`${Ot}px`),p.push(C),oe=Rr}return C&&w&&(C.textContent=A),p}_applyMinimumContrast(i,e,t,r,s,o){if(this._optionsService.rawOptions.minimumContrastRatio===1||Ys(r.getCode()))return!1;let a=this._getContrastCache(r),l;if(!s&&!o&&(l=a.getColor(e.rgba,t.rgba)),l===void 0){let h=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);l=L.ensureContrastRatio(s??e,o??t,h),a.setColor((s??e).rgba,(o??t).rgba,l??null)}return l?(this._addStyle(i,`color:${l.css}`),!0):!1}_getContrastCache(i){return i.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(i,e){i.setAttribute("style",`${i.getAttribute("style")||""}${e};`)}_isCellInSelection(i,e){let t=this._selectionStart,r=this._selectionEnd;return!t||!r?!1:this._columnSelectMode?t[0]<=r[0]?i>=t[0]&&e>=t[1]&&i=t[1]&&i>=r[0]&&e<=r[1]:e>t[1]&&e=t[0]&&i=t[0]}};_t=y([m(1,Ci),m(2,R),m(3,z),m(4,X),m(5,ge),m(6,le)],_t);var rs=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(i,e,t,r=!1){if(this.selectionStart=e,this.selectionEnd=t,!e||!t||e[0]===t[0]&&e[1]===t[1]){this.clear();return}let s=i.buffers.active.ydisp,o=e[1]-s,a=t[1]-s,l=Math.max(o,0),h=Math.min(a,i.rows-1);if(l>=i.rows||h<0){this.clear();return}this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=o,this.viewportEndRow=a,this.viewportCappedStartRow=l,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=t[0]}isCellSelected(i,e,t){return this.hasSelection?(t-=i.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&t>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&t<=this.viewportCappedEndRow:t>this.viewportStartRow&&t=this.startCol&&e=this.startCol):!1}};function Zs(){return new rs}var Ui=class extends g{constructor(e,t,r){super();this._renderCallback=e;this._coreBrowserService=t;this._optionsService=r;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",s=>{this.setIntervalDuration(s)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(E(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let t=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),t||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var io=1,mt=class extends g{constructor(e,t,r,s,o,a,l,h,d,c,u,f,p,b){super();this._terminal=e;this._document=t;this._element=r;this._screenElement=s;this._viewportElement=o;this._helperContainer=a;this._linkifier2=l;this._charSizeService=d;this._optionsService=c;this._bufferService=u;this._coreService=f;this._coreBrowserService=p;this._themeService=b;this._terminalClass=io++;this._rowElements=[];this._selectionRenderModel=Zs();this._lastSelectionColumnMode=!1;this._rowHasBlinkingCells=[];this._rowHasBlinkingCellsCount=0;this._onRequestRedraw=this._register(new v);this.onRequestRedraw=this._onRequestRedraw.event;this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=js(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(_=>this._injectCss(_))),this._injectCss(this._themeService.colors),this._rowFactory=h.createInstance(_t,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(_=>this._handleLinkHover(_))),this._register(this._linkifier2.onHideLinkUnderline(_=>this._handleLinkLeave(_))),this._cursorBlinkStateManager=new ss(this._rowContainer,this._coreBrowserService),this._register(I(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register(E(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new Ui(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register(E(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Fi,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let r of this._rowElements)r.style.width=`${this.dimensions.css.canvas.width}px`,r.style.height=`${this.dimensions.css.cell.height}px`,r.style.lineHeight=`${this.dimensions.css.cell.height}px`,r.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${L.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;let r=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,o=`blink_block_${this._terminalClass}`;t+=`@keyframes ${r} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${o} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${o} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[a,l]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${a} { color: ${l.css}; }${this._terminalSelector} .xterm-fg-${a}.xterm-dim { color: ${L.multiplyOpacity(l,.5).css}; }${this._terminalSelector} .xterm-bg-${a} { background-color: ${l.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${257} { color: ${L.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${257}.xterm-dim { color: ${L.multiplyOpacity(L.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${257} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let r=this._rowElements.length;r<=t;r++){let s=this._document.createElement("div");this._rowContainer.appendChild(s),this._rowElements.push(s),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,r){let s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,r);let o=0,a=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(o=this._selectionRenderModel.viewportCappedStartRow,a=this._selectionRenderModel.viewportCappedEndRow));let l=0,h=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,r),this._selectionRenderModel.hasSelection){let u=this._selectionRenderModel.viewportStartRow,f=this._selectionRenderModel.viewportEndRow,p=this._selectionRenderModel.viewportCappedStartRow,b=this._selectionRenderModel.viewportCappedEndRow;l=p,h=b;let _=this._document.createDocumentFragment();if(r){let S=e[0]>t[0];_.appendChild(this._createSelectionElement(p,S?t[0]:e[0],S?e[0]:t[0],b-p+1))}else{let S=u===p?e[0]:0,C=p===f?t[0]:this._bufferService.cols;_.appendChild(this._createSelectionElement(p,S,C));let w=b-p-1;if(_.appendChild(this._createSelectionElement(p+1,0,this._bufferService.cols,w)),p!==b){let A=f===b?t[0]:this._bufferService.cols;_.appendChild(this._createSelectionElement(b,0,A))}}this._selectionContainer.appendChild(_)}let d=Math.min(o,l),c=Math.max(a,h);if(c>=0){d=Math.max(d,0),c=Math.min(c,s-1);let f=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&f>=0&&fthis.dimensions.css.canvas.width&&(l=this.dimensions.css.canvas.width-a),o.style.height=`${s*this.dimensions.css.cell.height}px`,o.style.top=`${e*this.dimensions.css.cell.height}px`,o.style.left=`${a}px`,o.style.width=`${l}px`,o}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){let r=this._bufferService.buffer,s=r.ybase+r.y,o=Math.min(r.x,this._bufferService.cols-1),a=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,l=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,h=this._optionsService.rawOptions.cursorInactiveStyle,d={hasBlinkingCells:!1};for(let c=e;c<=t;c++){let u=c+r.ydisp,f=this._rowElements[c];if(!f)continue;let p=r.lines.get(u);if(!p){f.replaceChildren(),this._setRowBlinkState(c,!1);continue}f.replaceChildren(...this._rowFactory.createRow(p,u,u===s,l,h,o,a,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,d)),this._setRowBlinkState(c,d.hasBlinkingCells)}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,r,s,o,a){r<0&&(e=0),s<0&&(t=0);let l=this._bufferService.rows-1;r=Math.max(Math.min(r,l),0),s=Math.max(Math.min(s,l),0),o=Math.min(o,this._bufferService.cols);let h=this._bufferService.buffer,d=h.ybase+h.y,c=Math.min(h.x,o-1),u=this._optionsService.rawOptions.cursorBlink,f=this._optionsService.rawOptions.cursorStyle,p=this._optionsService.rawOptions.cursorInactiveStyle,b={hasBlinkingCells:!1};for(let _=r;_<=s;++_){let S=_+h.ydisp,C=this._rowElements[_];if(!C)continue;let w=h.lines.get(S);if(!w){C.replaceChildren(),this._setRowBlinkState(_,!1);continue}C.replaceChildren(...this._rowFactory.createRow(w,S,S===d,f,p,c,u,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,a?_===r?e:0:-1,a?(_===s?t:o)-1:-1,b)),this._setRowBlinkState(_,b.hasBlinkingCells)}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};mt=y([m(7,et),m(8,Be),m(9,R),m(10,D),m(11,X),m(12,z),m(13,le)],mt);var ss=class{constructor(i,e){this._rowContainer=i;this._coreBrowserService=e;this._isIdlePaused=!1;this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){this._idleTimeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}};var bt=class extends g{constructor(e,t,r){super();this._optionsService=r;this.width=0;this.height=0;this._onCharSizeChange=this._register(new v);this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new os(this._optionsService))}catch{this._measureStrategy=this._register(new ns(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};bt=y([m(2,R)],bt);var Ki=class extends g{constructor(){super(...arguments);this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}},ns=class extends Ki{constructor(e,t,r){super();this._document=e;this._parentElement=t;this._optionsService=r;this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},os=class extends Ki{constructor(e){super();this._optionsService=e;this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");let t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}};var zi=class extends g{constructor(e,t,r){super();this._textarea=e;this._window=t;this.mainDocument=r;this._isFocused=!1;this._cachedIsFocused=void 0;this._onDprChange=this._register(new v);this.onDprChange=this._onDprChange.event;this._onWindowChange=this._register(new v);this.onWindowChange=this._onWindowChange.event;this._screenDprMonitor=this._register(new as(this._window)),this._register(this.onWindowChange(s=>this._screenDprMonitor.setWindow(s))),this._register(Y.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(I(this._textarea,"focus",()=>this._isFocused=!0)),this._register(I(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},as=class extends g{constructor(e){super();this._parentWindow=e;this._windowResizeListener=this._register(new B);this._onDprChange=this._register(new v);this.onDprChange=this._onDprChange.event;this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(E(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=I(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}};var Gi=class extends g{constructor(){super();this.linkProviders=[];this._register(E(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}};function Xt(n,i,e){let t=e.getBoundingClientRect(),r=n.getComputedStyle(e),s=parseInt(r.getPropertyValue("padding-left"),10),o=parseInt(r.getPropertyValue("padding-top"),10);return[i.clientX-t.left-s,i.clientY-t.top-o]}function Qs(n,i,e,t,r,s,o,a,l){if(!s)return;let h=Xt(n,i,e);return h[0]=Math.ceil((h[0]+(l?o/2:0))/o),h[1]=Math.ceil(h[1]/a),h[0]=Math.min(Math.max(h[0],1),t+(l?1:0)),h[1]=Math.min(Math.max(h[1],1),r),h}var vt=class{constructor(i,e){this._charSizeService=i;this._renderService=e}getCoords(i,e,t,r,s){return Qs(re(e),i,e,t,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,s)}getMouseReportCoords(i,e){let t=Xt(re(e),i,e);if(this._charSizeService.hasValidSize)return t[0]=Math.min(Math.max(t[0],0),this._renderService.dimensions.css.canvas.width-1),t[1]=Math.min(Math.max(t[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(t[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(t[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(t[0]),y:Math.floor(t[1])}}};vt=y([m(0,Be),m(1,G)],vt);var en=typeof window=="object"?window:globalThis;function he(n,i=0){return n[n.length-(1+i)]}function ro(n,i,e){let t=null,r=null;if(typeof e.value=="function"?(t="value",r=e.value,r.length!==0&&console.warn("Memoize should only be used in functions with zero parameters")):typeof e.get=="function"&&(t="get",r=e.get),!r||!t)throw new Error("not supported");let s=`$memoize$${i}`,o=e;o[t]=function(...a){return this.hasOwnProperty(s)||Object.defineProperty(this,s,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,a)}),this[s]}}var St=class St{constructor(i){this.element=i,this.next=St.Undefined,this.prev=St.Undefined}};St.Undefined=new St(void 0);var ie=St,Vi=class{constructor(){this._first=ie.Undefined;this._last=ie.Undefined}push(i){return this._insert(i,!0)}_insert(i,e){let t=new ie(i);if(this._first===ie.Undefined)this._first=t,this._last=t;else if(e){let s=this._last;this._last=t,t.prev=s,s.next=t}else{let s=this._first;this._first=t,t.next=s,s.prev=t}let r=!1;return()=>{r||(r=!0,this._remove(t))}}_remove(i){if(i.prev!==ie.Undefined&&i.next!==ie.Undefined){let e=i.prev;e.next=i.next,i.next.prev=e}else i.prev===ie.Undefined&&i.next===ie.Undefined?(this._first=ie.Undefined,this._last=ie.Undefined):i.next===ie.Undefined?(this._last=this._last.prev,this._last.next=ie.Undefined):i.prev===ie.Undefined&&(this._first=this._first.next,this._first.prev=ie.Undefined)}*[Symbol.iterator](){let i=this._first;for(;i!==ie.Undefined;)yield i.element,i=i.next}},de;(s=>(s.TAP="-xterm-gesturetap",s.CHANGE="-xterm-gesturechange",s.START="-xterm-gesturestart",s.END="-xterm-gesturesend",s.CONTEXT_MENU="-xterm-gesturecontextmenu"))(de||={});var K=class K extends g{constructor(){super();this._dispatched=!1;this._targets=new Vi;this._ignoreTargets=new Vi;this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;let e=en;this._register(I(e.document,"touchstart",t=>this._handleTouchStart(t),{passive:!1})),this._register(I(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(I(e.document,"touchmove",t=>this._handleTouchMove(t),{passive:!1}))}static addTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._targets.push(e);return E(t)}static ignoreTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._ignoreTargets.push(e);return E(t)}static isTouchDevice(){return"ontouchstart"in en||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){let t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let r=0,s=e.targetTouches.length;r=K._holdDelay&&Math.abs(h.initialPageX-he(h.rollingPageX))<30&&Math.abs(h.initialPageY-he(h.rollingPageY))<30){let c=this._newGestureEvent(de.CONTEXT_MENU,h.initialTarget);c.pageX=he(h.rollingPageX),c.pageY=he(h.rollingPageY),this._dispatchEvent(c)}else if(s===1){let c=he(h.rollingPageX),u=he(h.rollingPageY),f=he(h.rollingTimestamps)-h.rollingTimestamps[0],p=c-h.rollingPageX[0],b=u-h.rollingPageY[0],_=[...this._targets].filter(S=>h.initialTarget instanceof Node&&S.contains(h.initialTarget));this._inertia(e,_,r,Math.abs(p)/f,p>0?1:-1,c,Math.abs(b)/f,b>0?1:-1,u)}this._dispatchEvent(this._newGestureEvent(de.END,h.initialTarget)),delete this._activeTouches[l.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){let r=document.createEvent("CustomEvent");return r.initEvent(e,!1,!0),r.initialTarget=t,r.tapCount=0,r}_dispatchEvent(e){if(e.type===de.TAP){let t=new Date().getTime(),r;t-this._lastSetTapCountTime>K._clearTapCountTime?r=1:r=2,this._lastSetTapCountTime=t,e.tapCount=r}else(e.type===de.CHANGE||e.type===de.CONTEXT_MENU)&&(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(let r of this._ignoreTargets)if(r.contains(e.initialTarget))return;let t=[];for(let r of this._targets)if(r.contains(e.initialTarget)){let s=0,o=e.initialTarget;for(;o&&o!==r;)s++,o=o.parentElement;t.push([s,r])}t.sort((r,s)=>r[0]-s[0]);for(let[,r]of t)r.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,r,s,o,a,l,h,d){this._handle=it(e,()=>{let c=Date.now(),u=c-r,f=0,p=0,b=!0;s+=K._scrollFriction*u,l+=K._scrollFriction*u,s>0&&(b=!1,f=o*s*u),l>0&&(b=!1,p=h*l*u);let _=this._newGestureEvent(de.CHANGE);_.translationX=f,_.translationY=p,t.forEach(S=>S.dispatchEvent(_)),b||this._inertia(e,t,c,s,o,a+f,l,h,d+p)})}_handleTouchMove(e){let t=Date.now();for(let r=0,s=e.changedTouches.length;r3&&(a.rollingPageX.shift(),a.rollingPageY.shift(),a.rollingTimestamps.shift()),a.rollingPageX.push(o.pageX),a.rollingPageY.push(o.pageY),a.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}};K._scrollFriction=-.005,K._holdDelay=700,K._clearTapCountTime=400,y([ro],K,"isTouchDevice",1);var $i=K;var gt=class{constructor(i,e,t,r,s,o,a,l,h){this._renderService=i;this._mouseCoordsService=e;this._mouseStateService=t;this._coreService=r;this._bufferService=s;this._optionsService=o;this._selectionService=a;this._logService=l;this._coreBrowserService=h;this._lastEvent=null;this._wheelPartialScroll=0;this._touchScrollAccumulator=0}bindMouse(i,e,t){let{element:r,document:s}=i,o={mouseup:null,wheel:null,mousedrag:null,mousemove:null},a=new B,l=new B;e(a),e(l);let h={target:i,focus:t,requestedEvents:o,mouseupListener:a,mousedragListener:l},d={mouseup:c=>this._handleMouseUp(h,c),wheel:c=>this._handleWheel(h,c),mousedrag:c=>this._handleMouseDrag(h,c),mousemove:c=>this._handleMouseMove(h,c)};this._altMouseCursor=new ls(r,s,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),e(this._altMouseCursor),e(this._mouseStateService.onProtocolChange(c=>{this._handleProtocolChange(h,d,c)})),e(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(r),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,e(I(r,"mousedown",c=>this._handleMouseDown(h,c))),e(I(r,"wheel",c=>this._handlePassiveWheel(h,c),{passive:!1})),e($i.addTarget(i.screenElement)),e(I(i.screenElement,de.START,()=>this._handleTouchStart())),e(I(i.screenElement,de.CHANGE,c=>this._handleTouchChange(h,c)))}_sendEvent(i,e){let t=this._mouseCoordsService.getMouseReportCoords(e,i.target.screenElement);if(!t)return!1;let r,s;switch(e.overrideType||e.type){case"mousemove":s=32,e.buttons===void 0?(r=3,e.button!==void 0&&(r=e.button<3?e.button:3)):r=e.buttons&1?0:e.buttons&4?1:e.buttons&2?2:3;break;case"mouseup":s=0,r=e.button<3?e.button:3;break;case"mousedown":s=1,r=e.button<3?e.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;let a=e.deltaY;if(a===0||this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return!1;s=a<0?0:1,r=4;break;default:return!1}if(s===void 0||r===void 0||r>4||r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!e.altKey)return!1;let o=r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:t.col,row:t.row,x:t.x,y:t.y,button:r,action:s,ctrl:e.ctrlKey,alt:o?!1:e.altKey,shift:e.shiftKey})}_handleMouseUp(i,e){this._sendEvent(i,e),e.buttons||(i.mouseupListener.clear(),i.mousedragListener.clear())}_handleWheel(i,e){return this._sendEvent(i,e),e.preventDefault(),e.stopPropagation(),!1}_handleMouseDrag(i,e){e.buttons&&this._sendEvent(i,e)}_handleMouseMove(i,e){e.buttons||this._sendEvent(i,e)}_handleMouseDown(i,e){if(e.preventDefault(),i.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(e))return;this._sendEvent(i,e);let{element:t,document:r}=i.target,s=t.ownerDocument??r;i.requestedEvents.mouseup&&(i.mouseupListener.value=I(s,"mouseup",i.requestedEvents.mouseup)),i.requestedEvents.mousedrag&&(i.mousedragListener.value=I(s,"mousemove",i.requestedEvents.mousedrag))}_handlePassiveWheel(i,e){if(!i.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;if(!this._bufferService.buffer.hasScrollback){if(e.deltaY===0)return!1;if(this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return e.preventDefault(),e.stopPropagation(),!1;let s="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(e.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(s,!0),e.preventDefault(),e.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(i,e){if(e.preventDefault(),e.stopPropagation(),i.requestedEvents.wheel){this._handleTouchScrollAsWheel(i,e);return}if(!this._bufferService.buffer.hasScrollback){this._handleTouchScrollAsKeys(e);return}i.target.handleTouchScroll?.(e.translationY)}_handleTouchScrollAsKeys(i){let e=this._renderService?.dimensions.css.cell.height;if(!e)return;this._touchScrollAccumulator-=i.translationY;let t=Math.trunc(this._touchScrollAccumulator/e);if(t===0)return;this._touchScrollAccumulator-=t*e;let r="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t<0?"A":"B");for(let s=0;s0?1:-1),this._wheelPartialScroll%=1):i.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(s*=this._bufferService.rows),s}_triggerMouseEvent(i){if(i.col<0||i.col>=this._bufferService.cols||i.row<0||i.row>=this._bufferService.rows||i.button===4&&i.action===32||i.button===3&&i.action!==32||i.button!==4&&(i.action===2||i.action===3)||(i.col++,i.row++,i.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,i,this._mouseStateService.isPixelEncoding))||!this._mouseStateService.restrictMouseEvent(i))return!1;let e=this._mouseStateService.encodeMouseEvent(i);return e&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(e):this._coreService.triggerDataEvent(e,!0)),this._lastEvent=i,!0}_explainEvents(i){return{down:!!(i&1),up:!!(i&2),drag:!!(i&4),move:!!(i&8),wheel:!!(i&16)}}_equalEvents(i,e,t){if(t){if(i.x!==e.x||i.y!==e.y)return!1}else if(i.col!==e.col||i.row!==e.row)return!1;return!(i.button!==e.button||i.action!==e.action||i.ctrl!==e.ctrl||i.alt!==e.alt||i.shift!==e.shift)}};gt=y([m(0,G),m(1,Oe),m(2,Me),m(3,X),m(4,D),m(5,R),m(6,gi),m(7,_e),m(8,z)],gt);var ls=class{constructor(i,e,t){this._element=i;this._document=e;this._isActive=t;this._listeners=new B}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;let i=new pe,e=r=>this.syncFromModifier(r);i.add(I(this._document,"keydown",e)),i.add(I(this._document,"keyup",e)),i.add(I(this._element,"mousemove",e));let t=this._element.ownerDocument?.defaultView;t&&i.add(I(t,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=i}resetClass(){this._updateClass(!1)}syncFromModifier(i){this._isActive()&&this._updateClass(i.getModifierState("Alt"))}_updateClass(i){i?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}};var qi=class{constructor(i,e){this._renderCallback=i;this._coreBrowserService=e;this._refreshCallbacks=[]}dispose(){this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(i){return this._refreshCallbacks.push(i),this._animationFrame??=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()),this._animationFrame}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let i of this._refreshCallbacks)i(0);this._refreshCallbacks=[]}};var Xi=class{constructor(i){this._tasks=[];this._i=0;this._logService=i}enqueue(i){this._tasks.push(i),this._start()}flush(){for(;this._is){r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),this._start();return}r=s}this.clear()}},cs=class extends Xi{_requestCallback(i){return setTimeout(()=>i(this._createDeadline(16)))}_cancelCallback(i){clearTimeout(i)}_createDeadline(i){let e=performance.now()+i;return{timeRemaining:()=>Math.max(0,e-performance.now())}}},hs=class extends Xi{_requestCallback(i){return requestIdleCallback(i)}_cancelCallback(i){cancelIdleCallback(i)}},Ct="requestIdleCallback"in globalThis?hs:cs,Yi=class{constructor(i){this._queue=new Ct(i)}set(i){this._queue.clear(),this._queue.enqueue(i)}flush(){this._queue.flush()}dispose(){this._queue.clear()}};var It=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._rowCount=e;this._optionsService=r;this._logService=s;this._charSizeService=o;this._coreService=a;this._coreBrowserService=d;this._renderer=this._register(new B);this._observerDisposable=this._register(new B);this._isPaused=!1;this._needsFullRefresh=!1;this._isNextRenderRedrawOnly=!0;this._needsSelectionRefresh=!1;this._canvasWidth=0;this._canvasHeight=0;this._selectionState={start:void 0,end:void 0,columnSelectMode:!1};this._onDimensionsChange=this._register(new v);this.onDimensionsChange=this._onDimensionsChange.event;this._onRenderedViewportChange=this._register(new v);this.onRenderedViewportChange=this._onRenderedViewportChange.event;this._onRender=this._register(new v);this.onRender=this._onRender.event;this._onRefreshRequest=this._register(new v);this.onRefreshRequest=this._onRefreshRequest.event;this._pausedResizeTask=this._register(new Yi(this._logService)),this._renderDebouncer=new qi((u,f)=>this._renderRows(u,f),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new ds(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(E(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(h.onResize(()=>this._fullRefresh())),this._register(h.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(h.cols,h.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(h.buffer.y,h.buffer.y,void 0,!0))),this._register(c.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(u=>this._registerIntersectionObserver(u,t)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){let r=new e.IntersectionObserver(s=>this._handleIntersectionChange(s[s.length-1]),{threshold:0});this._observerDisposable.value=E(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=r,r.observe(t)}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,r=!1,s=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}let o=this._syncOutputHandler.flush();o&&(e=Math.min(e,o.start),t=Math.max(t,o.end)),s||(this._isNextRenderRedrawOnly=!1),r?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0}}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(t=>this.refreshRows(t.start,t.end,t.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.value?.handleSelectionChanged(e,t,r)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};It=y([m(2,R),m(3,_e),m(4,Be),m(5,X),m(6,ge),m(7,D),m(8,z),m(9,le)],It);var ds=class{constructor(i,e,t){this._coreBrowserService=i;this._coreService=e;this._onTimeout=t;this._start=0;this._end=0;this._isBuffering=!1}bufferRows(i,e){this._isBuffering?(this._start=Math.min(this._start,i),this._end=Math.max(this._end,e)):(this._start=i,this._end=e,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let i={start:this._start,end:this._end};return this._isBuffering=!1,i}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function tn(n,i,e,t){let r=e.buffer.x,s=e.buffer.y;if(!e.buffer.hasScrollback)return lo(r,s,n,i,e,t)+ji(s,i,e,t)+co(r,s,n,i,e,t);let o;if(s===i)return o=r>n?"D":"C",jt(Math.abs(r-n),Yt(o,t));o=s>i?"D":"C";let a=Math.abs(s-i),l=ao(s>i?n:r,e)+(a-1)*e.cols+1+oo(s>i?r:n,e);return jt(l,Yt(o,t))}function oo(n,i){return n-1}function ao(n,i){return i.cols-n}function lo(n,i,e,t,r,s){return ji(i,t,r,s).length===0?"":jt(sn(n,i,n,i-qe(i,r),!1,r).length,Yt("D",s))}function ji(n,i,e,t){let r=n-qe(n,e),s=i-qe(i,e),o=Math.abs(r-s)-ho(n,i,e);return jt(o,Yt(rn(n,i),t))}function co(n,i,e,t,r,s){let o;ji(i,t,r,s).length>0?o=t-qe(t,r):o=i;let a=t,l=uo(n,i,e,t,r,s);return jt(sn(n,o,e,a,l==="C",r).length,Yt(l,s))}function ho(n,i,e){let t=0,r=n-qe(n,e),s=i-qe(i,e);for(let o=0;o=0&&n0?o=t-qe(t,r):o=i,n=e&&oi?"A":"B"}function sn(n,i,e,t,r,s){let o=n,a=i,l="";for(;(o!==e||a!==t)&&a>=0&&as.cols-1?(l+=s.buffer.translateBufferLineToString(a,!1,n,o),o=0,n=0,a++):!r&&o<0&&(l+=s.buffer.translateBufferLineToString(a,!1,0,n+1),o=s.cols-1,n=o,a--);return l+s.buffer.translateBufferLineToString(a,!1,n,o)}function Yt(n,i){let e=i?"O":"[";return"\x1B"+e+n}function jt(n,i){n=Math.floor(n);let e="";for(let t=0;tthis._bufferService.cols?i%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)-1]:[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[i,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let i=this.selectionStart[0]+this.selectionStartLength;return i>this._bufferService.cols?[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[Math.max(i,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let i=this.selectionStart,e=this.selectionEnd;return!i||!e?!1:i[1]>e[1]||i[1]===e[1]&&i[0]>e[0]}handleTrim(i){return this.selectionStart&&(this.selectionStart[1]-=i),this.selectionEnd&&(this.selectionEnd[1]-=i),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):this.selectionStart&&this.selectionStart[1]<0?(this.selectionStart=[0,0],!0):!1}};function us(n,i){if(n.start.y>n.end.y)throw new Error(`Buffer range end (${n.end.x}, ${n.end.y}) cannot be before start (${n.start.x}, ${n.start.y})`);return i*(n.end.y-n.start.y)+(n.end.x-n.start.x+1)}var fo="\xA0",_o=new RegExp(fo,"g");var Et=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._element=e;this._screenElement=t;this._linkifier=r;this._bufferService=s;this._coreService=o;this._mouseCoordsService=a;this._optionsService=l;this._mouseStateService=h;this._renderService=d;this._coreBrowserService=c;this._dragScrollAmount=0;this._enabled=!0;this._trimListener=this._register(new B);this._workCell=new F;this._mouseDownTimeStamp=0;this._oldHasSelection=!1;this._oldSelectionStart=void 0;this._oldSelectionEnd=void 0;this._onLinuxMouseSelection=this._register(new v);this.onLinuxMouseSelection=this._onLinuxMouseSelection.event;this._onRedrawRequest=this._register(new v);this.onRequestRedraw=this._onRedrawRequest.event;this._onSelectionChange=this._register(new v);this.onSelectionChange=this._onSelectionChange.event;this._onRequestScrollLines=this._register(new v);this.onRequestScrollLines=this._onRequestScrollLines.event;this._mouseMoveListener=u=>this._handleMouseMove(u),this._mouseUpListener=u=>this._handleMouseUp(u),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(u=>this._handleTrim(u)),this._register(this._bufferService.buffers.onBufferActivate(u=>this._handleBufferActivate(u))),this.enable(),this._model=new Ji(this._bufferService),this._activeSelectionMode=0,this._register(E(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(u=>{u.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!e||!t?!1:e[0]!==t[0]||e[1]!==t[1]}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";let r=this._bufferService.buffer,s=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return"";let a=e[0]a.replace(_o," ")).join(Ke?`\r +-WARNING: This link could potentially be dangerous`)){let t=window.open();if(t){try{t.opener=null}catch{}t.location.href=i}else console.warn("Opening link blocked as opener could not be cleared")}}var Pe=H("CharSizeService"),G=H("CoreBrowserService"),Be=H("MouseCoordsService"),Us=H("MouseService"),V=H("RenderService"),Si=H("SelectionService"),gi=H("CharacterJoinerService"),_e=H("ThemeService"),Ii=H("LinkProviderService"),Ks=H("KeyboardService");function E(n){return{dispose:n}}function Oe(n){if(!n)return n;if(Array.isArray(n)){for(let i of n)i.dispose();return[]}return n.dispose(),n}var pe=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(i){return this._isDisposed?i.dispose():this._disposables.add(i),i}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let i of this._disposables)i.dispose();this._disposables.clear()}}clear(){for(let i of this._disposables)i.dispose();this._disposables.clear()}},g=class{constructor(){this._store=new pe}dispose(){this._store.dispose()}_register(i){return this._store.add(i)}};g.None=Object.freeze({dispose(){}});var B=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(i){this._isDisposed||i===this._value||(this._value?.dispose(),this._value=i)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Ie=class{constructor(){this._token=-1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(i,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,i()},e)}setIfNotSet(i,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,i()},e))}},Ci=class{constructor(){this._isScheduled=!1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(i){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,i())}))}},Ei=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(i,e,t=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();let r=t.setInterval(()=>{i()},e);this._disposable={dispose:()=>{t.clearInterval(r),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}};function se(n){let i=n;if(i?.ownerDocument?.defaultView)return i.ownerDocument.defaultView;let e=n;return e?.view?e.view:window}var Kr=class{constructor(i,e,t,r){this._node=i,this._type=e,this._handler=t,this._options=r,i.addEventListener(e,t,r)}dispose(){!this._node||!this._handler||(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}};function C(n,i,e,t){return new Kr(n,i,e,t)}function zr(n,i,e,t){return C(n,i,e,t)}var le={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};function Gs(n){let i=n.getBoundingClientRect(),e=se(n);return{left:i.left+e.scrollX,top:i.top+e.scrollY,width:i.width,height:i.height}}var yi=class{constructor(i,e){this._runner=i;this.priority=e;this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(i){console.error(i)}}static sort(i,e){return e.priority-i.priority}},zs=new Map;function Vs(n){let i=zs.get(n);return i||(i={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},zs.set(n,i)),i}function Fn(n){let i=Vs(n);for(i.animFrameRequested=!1,i.current=i.next,i.next=[],i.inAnimationFrameRunner=!0;i.current.length>0;)i.current.sort(yi.sort),i.current.shift().execute();i.inAnimationFrameRunner=!1}function tt(n,i,e=0){let t=Vs(n),r=new yi(i,e);return t.next.push(r),t.animFrameRequested||(t.animFrameRequested=!0,n.requestAnimationFrame(()=>Fn(n))),r}var xi=class extends Ei{constructor(i){super(),this._defaultTarget=i?se(i):void 0}cancelAndSet(i,e,t){super.cancelAndSet(i,e,t??this._defaultTarget??window)}};var we=class{constructor(i){this.domNode=i;this._width="";this._height="";this._top="";this._left="";this._bottom="";this._right="";this._className="";this._position="";this._layerHint=!1;this._contain="none"}setWidth(i){let e=rt(i);this._width!==e&&(this._width=e,this.domNode.style.width=this._width)}setHeight(i){let e=rt(i);this._height!==e&&(this._height=e,this.domNode.style.height=this._height)}setTop(i){let e=rt(i);this._top!==e&&(this._top=e,this.domNode.style.top=this._top)}setLeft(i){let e=rt(i);this._left!==e&&(this._left=e,this.domNode.style.left=this._left)}setBottom(i){let e=rt(i);this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom)}setRight(i){let e=rt(i);this._right!==e&&(this._right=e,this.domNode.style.right=this._right)}setClassName(i){this._className!==i&&(this._className=i,this.domNode.className=this._className)}toggleClassName(i,e){this.domNode.classList.toggle(i,e),this._className=this.domNode.className}setPosition(i){this._position!==i&&(this._position=i,this.domNode.style.position=this._position)}setLayerHinting(i){this._layerHint!==i&&(this._layerHint=i,i?this.domNode.style.transform="translate3d(0px, 0px, 0px)":this.domNode.style.transform="")}setContain(i){this._contain!==i&&(this._contain=i,this.domNode.style.contain=this._contain)}setAttribute(i,e){this.domNode.setAttribute(i,e)}};function rt(n){return typeof n=="number"?`${n}px`:n}var Ke={};An(Ke,{getSafariVersion:()=>Wn,getZoomFactor:()=>$r,isChrome:()=>zt,isChromeOS:()=>qr,isFirefox:()=>nt,isLegacyEdge:()=>Hn,isLinux:()=>Gt,isMac:()=>ie,isNode:()=>Gr,isSafari:()=>wi,isWindows:()=>Ue});var Gr=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),st=Gr?"node":navigator.userAgent,Vr=Gr?"node":navigator.platform,nt=st.includes("Firefox"),zt=st.includes("Chrome"),Hn=st.includes("Edge"),wi=/^((?!chrome|android).)*safari/i.test(st);function $r(n){return 1}function Wn(){if(!wi)return 0;let n=st.match(/Version\/(\d+)/);return n===null||n.length<2?0:parseInt(n[1],10)}var ie=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(Vr),Ue=["Windows","Win16","Win32","WinCE"].includes(Vr),Gt=Vr.indexOf("Linux")>=0,qr=/\bCrOS\b/.test(st);var $s=new WeakMap;function Un(n){if(!n.parent||n.parent===n)return null;try{let i=n.location,e=n.parent.location;if(i.origin!=="null"&&e.origin!=="null"&&i.origin!==e.origin)return null}catch{return null}return n.parent}var Xr=class{static _getSameOriginWindowChain(i){let e=$s.get(i);if(!e){e=[],$s.set(i,e);let t=i,r;do r=Un(t),r?e.push({window:new WeakRef(t),iframeElement:t.frameElement??null}):e.push({window:new WeakRef(t),iframeElement:null}),t=r;while(t)}return e.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(i,e){if(!e||i===e)return{top:0,left:0};let t=0,r=0,s=this._getSameOriginWindowChain(i);for(let o of s){let a=o.window.deref();if(t+=a?.scrollY??0,r+=a?.scrollX??0,a===e||!o.iframeElement)break;let l=o.iframeElement.getBoundingClientRect();t+=l.top,r+=l.left}return{top:t,left:r}}},ot=class{constructor(i,e){this.timestamp=Date.now(),this.browserEvent=e,this.leftButton=e.button===0,this.middleButton=e.button===1,this.rightButton=e.button===2,this.buttons=e.buttons,this.target=e.target,this.detail=e.detail??1,e.type==="dblclick"&&(this.detail=2),this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,typeof e.pageX=="number"?(this.posx=e.pageX,this.posy=e.pageY):(this.posx=e.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=e.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);let t=Xr.getPositionOfChildWindowRelativeToAncestorWindow(i,e.view);this.posx-=t.left,this.posy-=t.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}},Vt=class{constructor(i,e=0,t=0){this.browserEvent=i??null,this.target=i?i.target??i.targetNode??i.srcElement??null:null,this.deltaY=t,this.deltaX=e;let r=!1;if(zt){let s=navigator.userAgent.match(/Chrome\/(\d+)/);r=(s?parseInt(s[1],10):123)<=122}if(i){let s=i,o=i,a=i.view?.devicePixelRatio??1;if(typeof s.wheelDeltaY<"u")r?this.deltaY=s.wheelDeltaY/(120*a):this.deltaY=s.wheelDeltaY/120;else if(typeof o.VERTICAL_AXIS<"u"&&o.axis===o.VERTICAL_AXIS)this.deltaY=-o.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?nt&&!ie?this.deltaY=-i.deltaY/3:this.deltaY=-i.deltaY:this.deltaY=-i.deltaY/40}if(typeof s.wheelDeltaX<"u")wi&&Ue?this.deltaX=-(s.wheelDeltaX/120):r?this.deltaX=s.wheelDeltaX/(120*a):this.deltaX=s.wheelDeltaX/120;else if(typeof o.HORIZONTAL_AXIS<"u"&&o.axis===o.HORIZONTAL_AXIS)this.deltaX=-i.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?nt&&!ie?this.deltaX=-i.deltaX/3:this.deltaX=-i.deltaX:this.deltaX=-i.deltaX/40}this.deltaY===0&&this.deltaX===0&&i.wheelDelta&&(r?this.deltaY=i.wheelDelta/(120*a):this.deltaY=i.wheelDelta/120)}}preventDefault(){this.browserEvent?.preventDefault()}stopPropagation(){this.browserEvent?.stopPropagation()}};var at=class{constructor(){this._hooks=new pe;this._pointerMoveCallback=null;this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(i){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let e=this._onStopCallback;this._onStopCallback=null,i&&e&&e()}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(i,e,t,r,s){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=s;let o=i;try{i.setPointerCapture(e),this._hooks.add(E(()=>{try{i.releasePointerCapture(e)}catch{}}))}catch{o=se(i)}this._hooks.add(C(o,le.POINTER_MOVE,a=>{if(a.buttons!==t){this.stopMonitoring(!0);return}a.preventDefault(),this._pointerMoveCallback(a)})),this._hooks.add(C(o,le.POINTER_UP,a=>this.stopMonitoring(!0)))}};var Ne=class extends g{_onclick(i,e){this._register(C(i,le.CLICK,t=>e(new ot(se(i),t))))}_onmouseover(i,e){this._register(C(i,le.MOUSE_OVER,t=>e(new ot(se(i),t))))}_onmouseleave(i,e){this._register(C(i,le.MOUSE_LEAVE,t=>e(new ot(se(i),t))))}};var Ti=class extends Ne{constructor(i){super(),this._handleActivate=i.handleActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="xterm-arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=i.bgWidth+"px",this.bgDomNode.style.height=i.bgHeight+"px",typeof i.top<"u"&&(this.bgDomNode.style.top="0px"),typeof i.left<"u"&&(this.bgDomNode.style.left="0px"),typeof i.bottom<"u"&&(this.bgDomNode.style.bottom="0px"),typeof i.right<"u"&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=i.className,this.domNode.style.position="absolute";let e=Math.min(i.bgWidth,i.bgHeight);this.domNode.style.width=e+"px",this.domNode.style.height=e+"px",typeof i.top<"u"&&(this.domNode.style.top=i.top+"px"),typeof i.left<"u"&&(this.domNode.style.left=i.left+"px"),typeof i.bottom<"u"&&(this.domNode.style.bottom=i.bottom+"px"),typeof i.right<"u"&&(this.domNode.style.right=i.right+"px"),this._pointerMoveMonitor=this._register(new at),this._register(zr(this.bgDomNode,le.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._register(zr(this.domNode,le.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._pointerdownRepeatTimer=this._register(new xi),this._pointerdownScheduleRepeatTimer=this._register(new Ie)}_arrowPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,se(i))};this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(e,200),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,t=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),i.preventDefault()}};var b=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(i,e,t)=>{if(this._disposed)return E(()=>{});let r={fn:i,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);let s=E(()=>{let o=this._listeners.indexOf(r);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return t&&(Array.isArray(t)?t.push(s):t.add(s)),s},this._event)}fire(i){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,i);return}let e=this._listeners;for(let t=0,r=e.length;t{function n(s,o){return s(a=>o.fire(a))}r.forward=n;function i(s,o){return(a,l,h)=>s(d=>a.call(l,o(d)),void 0,h)}r.map=i;function e(...s){return(o,a,l)=>{let h=new pe;for(let d of s)h.add(d(c=>o.call(a,c)));return l&&(Array.isArray(l)?l.push(h):l.add(h)),h}}r.any=e;function t(s,o,a){return o(a),s(l=>o(l))}r.runAndSubscribe=t})(j||={});var jr=class n{constructor(i,e,t,r,s,o,a){this._forceIntegerValues=i;this._scrollStateBrand=void 0;this._forceIntegerValues&&(e=e|0,t=t|0,r=r|0,s=s|0,o=o|0,a=a|0),this.rawScrollLeft=r,this.rawScrollTop=a,e<0&&(e=0),r+e>t&&(r=t-e),r<0&&(r=0),s<0&&(s=0),a+s>o&&(a=o-s),a<0&&(a=0),this.width=e,this.scrollWidth=t,this.scrollLeft=r,this.height=s,this.scrollHeight=o,this.scrollTop=a}equals(i){return this.rawScrollLeft===i.rawScrollLeft&&this.rawScrollTop===i.rawScrollTop&&this.width===i.width&&this.scrollWidth===i.scrollWidth&&this.scrollLeft===i.scrollLeft&&this.height===i.height&&this.scrollHeight===i.scrollHeight&&this.scrollTop===i.scrollTop}withScrollDimensions(i,e){return new n(this._forceIntegerValues,typeof i.width<"u"?i.width:this.width,typeof i.scrollWidth<"u"?i.scrollWidth:this.scrollWidth,e?this.rawScrollLeft:this.scrollLeft,typeof i.height<"u"?i.height:this.height,typeof i.scrollHeight<"u"?i.scrollHeight:this.scrollHeight,e?this.rawScrollTop:this.scrollTop)}withScrollPosition(i){return new n(this._forceIntegerValues,this.width,this.scrollWidth,typeof i.scrollLeft<"u"?i.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof i.scrollTop<"u"?i.scrollTop:this.rawScrollTop)}createScrollEvent(i,e){let t=this.width!==i.width,r=this.scrollWidth!==i.scrollWidth,s=this.scrollLeft!==i.scrollLeft,o=this.height!==i.height,a=this.scrollHeight!==i.scrollHeight,l=this.scrollTop!==i.scrollTop;return{inSmoothScrolling:e,oldWidth:i.width,oldScrollWidth:i.scrollWidth,oldScrollLeft:i.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:i.height,oldScrollHeight:i.scrollHeight,oldScrollTop:i.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:t,scrollWidthChanged:r,scrollLeftChanged:s,heightChanged:o,scrollHeightChanged:a,scrollTopChanged:l}}},lt=class extends g{constructor(e){super();this._scrollableBrand=void 0;this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new jr(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){let r=this._state.withScrollDimensions(e,t);this._setState(r,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(this._smoothScrollDuration===0){this.setScrollPositionNow(e);return}if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>"u"?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>"u"?this._smoothScrolling.to.scrollTop:e.scrollTop};let r=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===r.scrollLeft&&this._smoothScrolling.to.scrollTop===r.scrollTop)return;let s;t?s=new $t(this._smoothScrolling.from,r,this._smoothScrolling.startTime,this._smoothScrolling.duration):s=$t.start(this._state,r,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{let r=this._state.withScrollPosition(e);this._smoothScrolling=$t.start(this._state,r,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);if(this._setState(t,!0),!!this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,t){let r=this._state;r.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(r,t)))}},Di=class{constructor(i,e,t){this.scrollLeft=i,this.scrollTop=e,this.isDone=t}};function Yr(n,i){let e=i-n;return function(t){return n+e*Gn(t)}}function Kn(n,i,e){return function(t){return t2.5*t){let s,o;return i{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(i){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(i?" xterm-fade":"")))}};var Vn=140,ct=class extends Ne{constructor(i){super(),this._lazyRender=i.lazyRender,this._host=i.host,this._scrollable=i.scrollable,this._scrollByPage=i.scrollByPage,this._scrollbarState=i.scrollbarState,this._visibilityController=this._register(new Ri(i.visibility,"xterm-visible xterm-scrollbar "+i.extraScrollbarClassName,"xterm-invisible xterm-scrollbar "+i.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new at),this._shouldRender=!0,this.domNode=new we(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this._register(C(this.domNode.domNode,le.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(i){let e=this._register(new Ti(i));return this.domNode.domNode.appendChild(e.bgDomNode),this.domNode.domNode.appendChild(e.domNode),e}_createSlider(i,e,t,r){this.slider=new we(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(i),this.slider.setLeft(e),typeof t=="number"&&this.slider.setWidth(t),typeof r=="number"&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(C(this.slider.domNode,le.POINTER_DOWN,s=>{s.button===0&&(s.preventDefault(),this._sliderPointerDown(s))})),this._onclick(this.slider.domNode,s=>{s.leftButton&&s.stopPropagation()})}_handleElementSize(i){return this._scrollbarState.setVisibleSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(i){return this._scrollbarState.setScrollSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(i){return this._scrollbarState.setScrollPosition(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(i){i.target===this.domNode.domNode&&this._handlePointerDown(i)}delegatePointerDown(i){let e=this.domNode.domNode.getClientRects()[0].top,t=e+this._scrollbarState.getSliderPosition(),r=e+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),s=this._sliderPointerPosition(i);t<=s&&s<=r?i.button===0&&(i.preventDefault(),this._sliderPointerDown(i)):this._handlePointerDown(i)}_handlePointerDown(i){let e,t;if(i.target===this.domNode.domNode&&typeof i.offsetX=="number"&&typeof i.offsetY=="number")e=i.offsetX,t=i.offsetY;else{let s=Gs(this.domNode.domNode);e=i.pageX-s.left,t=i.pageY-s.top}let r=this._pointerDownRelativePosition(e,t);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),i.button===0&&(i.preventDefault(),this._sliderPointerDown(i))}_sliderPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=this._sliderPointerPosition(i),t=this._sliderOrthogonalPointerPosition(i),r=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,s=>{let o=this._sliderOrthogonalPointerPosition(s),a=Math.abs(o-t);if(Ue&&a>Vn){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let h=this._sliderPointerPosition(s)-e;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(h))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(i){let e={};this.writeScrollPosition(e,i),this._scrollable.setScrollPositionNow(e)}updateScrollbarSize(i){this._updateScrollbarSize(i),this._scrollbarState.setScrollbarSize(i),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}};var ht=class n{constructor(i,e,t,r,s,o){this._scrollbarSize=Math.round(e),this._oppositeScrollbarSize=Math.round(t),this._arrowSize=Math.round(i),this._visibleSize=r,this._scrollSize=s,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new n(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(i){let e=Math.round(i);return this._visibleSize!==e?(this._visibleSize=e,this._refreshComputedValues(),!0):!1}setScrollSize(i){let e=Math.round(i);return this._scrollSize!==e?(this._scrollSize=e,this._refreshComputedValues(),!0):!1}setScrollPosition(i){let e=Math.round(i);return this._scrollPosition!==e?(this._scrollPosition=e,this._refreshComputedValues(),!0):!1}setScrollbarSize(i){this._scrollbarSize=Math.round(i)}setArrowSize(i){let e=Math.round(i);this._arrowSize!==e&&(this._arrowSize=e,this._refreshComputedValues())}setOppositeScrollbarSize(i){this._oppositeScrollbarSize=Math.round(i)}static _computeValues(i,e,t,r,s){let o=Math.max(0,t-i),a=Math.max(0,o-2*e),l=r>0&&r>t;if(!l)return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(a),computedSliderRatio:0,computedSliderPosition:0};let h=Math.round(Math.max(20,Math.floor(t*a/r))),d=(a-h)/(r-t),c=s*d;return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(h),computedSliderRatio:d,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){let i=n._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=i.computedAvailableSize,this._computedIsNeeded=i.computedIsNeeded,this._computedSliderSize=i.computedSliderSize,this._computedSliderRatio=i.computedSliderRatio,this._computedSliderPosition=i.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize-this._computedSliderSize/2;return Math.round(e/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize,t=this._scrollPosition;return ethis._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:0,left:0,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})),this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;let r=e?"":"none";this._arrowUp.bgDomNode.style.display=r,this._arrowUp.domNode.style.display=r,this._arrowDown.bgDomNode.style.display=r,this._arrowDown.domNode.style.display=r}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){let t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(e.vertical===2?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}};var Zr=class{constructor(i,e,t){this.timestamp=i,this.deltaX=e,this.deltaY=t,this.score=0}},Pi=class Pi{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let i=1,e=0,t=1,r=this._rear;for(;r!==-1;){let s=r===this._front?i:Math.pow(2,-t);if(i-=s,e+=this._memory[r].score*s,r===this._front)break;r=(this._capacity+r-1)%this._capacity,t++}return e<=.5}acceptStandardWheelEvent(i){if(zt){let e=se(i.browserEvent),t=$r(e);this.accept(Date.now(),i.deltaX*t,i.deltaY*t)}else this.accept(Date.now(),i.deltaX,i.deltaY)}accept(i,e,t){let r=null,s=new Zr(i,e,t);this._front===-1&&this._rear===-1?(this._memory[0]=s,this._front=0,this._rear=0):(r=this._memory[this._rear],this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=s),s.score=this._computeScore(s,r)}_computeScore(i,e){if(Math.abs(i.deltaX)>0&&Math.abs(i.deltaY)>0)return 1;let t=.5;if((!this._isAlmostInt(i.deltaX)||!this._isAlmostInt(i.deltaY))&&(t+=.25),e){let r=Math.abs(i.deltaX),s=Math.abs(i.deltaY),o=Math.abs(e.deltaX),a=Math.abs(e.deltaY),l=Math.max(Math.min(r,o),1),h=Math.max(Math.min(s,a),1),d=Math.max(r,o),c=Math.max(s,a);d%l===0&&c%h===0&&(t-=.5)}return Math.min(Math.max(t,0),1)}_isAlmostInt(i){return Math.abs(Math.round(i)-i)<.01}};Pi.INSTANCE=new Pi;var Jr=Pi,Mi=class extends Ne{constructor(e,t,r){super();this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;t=t??{};let s,o=!r;r?s=r:(t.mouseWheelSmoothScroll=!1,s=new lt({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:l=>tt(se(e),l)})),this._options=$n(t),this._scrollable=s,this._register(this._scrollable.onScroll(l=>{this._handleScroll(l),this._onScroll.fire(l)})),o&&this._register(this._scrollable);let a={handleMouseWheel:l=>this._handleMouseWheel(l),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new ki(this._scrollable,this._options,a)),this._horizontalScrollbar=this._register(new Ai(this._scrollable,this._options,a)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new we(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new we(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new we(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,l=>this._handleMouseOver(l)),this._onmouseleave(this._listenOnDomNode,l=>this._handleMouseLeave(l)),this._hideTimeout=this._register(new Ie),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=Oe(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,ie&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){typeof e.handleMouseWheel<"u"&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<"u"&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<"u"&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<"u"&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<"u"&&(this._options.horizontal=e.horizontal),typeof e.vertical<"u"&&(this._options.vertical=e.vertical),typeof e.horizontalHasArrows<"u"&&(this._options.horizontalHasArrows=e.horizontalHasArrows),typeof e.verticalHasArrows<"u"&&(this._options.verticalHasArrows=e.verticalHasArrows),typeof e.horizontalScrollbarSize<"u"&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<"u"&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<"u"&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new Vt(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=Oe(this._mouseWheelToDispose),e)){let r=s=>{this._handleMouseWheel(new Vt(s))};this._mouseWheelToDispose.push(C(this._listenOnDomNode,le.MOUSE_WHEEL,r,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let t=Jr.INSTANCE;t.acceptStandardWheelEvent(e);let r=!1;if(e.deltaY||e.deltaX){let o=e.deltaY*this._options.mouseWheelScrollSensitivity,a=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&a+o===0?a=o=0:Math.abs(o)>=Math.abs(a)?a=0:o=0),this._options.flipAxes&&([o,a]=[a,o]);let l=!ie&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||l)&&!a&&(a=o,o=0),e.browserEvent&&e.browserEvent.altKey&&(a=a*this._options.fastScrollSensitivity,o=o*this._options.fastScrollSensitivity);let h=this._scrollable.getFutureScrollPosition(),d={};if(o){let c=50*o,u=h.scrollTop-(c<0?Math.floor(c):Math.ceil(c));this._verticalScrollbar.writeScrollPosition(d,u)}if(a){let c=50*a,u=h.scrollLeft-(c<0?Math.floor(c):Math.ceil(c));this._horizontalScrollbar.writeScrollPosition(d,u)}d=this._scrollable.validateScrollPosition(d),(h.scrollLeft!==d.scrollLeft||h.scrollTop!==d.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(d):this._scrollable.setScrollPositionNow(d),r=!0)}let s=r;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,r=e.scrollLeft>0,s=r?" xterm-shadow-left":"",o=t?" xterm-shadow-top":"",a=r||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${o}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${a}${o}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),500)}};function $n(n){let i={lazyRender:typeof n.lazyRender<"u"?n.lazyRender:!1,className:typeof n.className<"u"?n.className:"",useShadows:typeof n.useShadows<"u"?n.useShadows:!0,handleMouseWheel:typeof n.handleMouseWheel<"u"?n.handleMouseWheel:!0,flipAxes:typeof n.flipAxes<"u"?n.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof n.consumeMouseWheelIfScrollbarIsNeeded<"u"?n.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof n.alwaysConsumeMouseWheel<"u"?n.alwaysConsumeMouseWheel:!1,scrollYToX:typeof n.scrollYToX<"u"?n.scrollYToX:!1,mouseWheelScrollSensitivity:typeof n.mouseWheelScrollSensitivity<"u"?n.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof n.fastScrollSensitivity<"u"?n.fastScrollSensitivity:5,scrollPredominantAxis:typeof n.scrollPredominantAxis<"u"?n.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof n.mouseWheelSmoothScroll<"u"?n.mouseWheelSmoothScroll:!0,listenOnDomNode:typeof n.listenOnDomNode<"u"?n.listenOnDomNode:null,horizontal:typeof n.horizontal<"u"?n.horizontal:1,horizontalScrollbarSize:typeof n.horizontalScrollbarSize<"u"?n.horizontalScrollbarSize:10,horizontalSliderSize:typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:0,horizontalHasArrows:typeof n.horizontalHasArrows<"u"?n.horizontalHasArrows:!1,vertical:typeof n.vertical<"u"?n.vertical:1,verticalScrollbarSize:typeof n.verticalScrollbarSize<"u"?n.verticalScrollbarSize:10,verticalHasArrows:typeof n.verticalHasArrows<"u"?n.verticalHasArrows:!1,verticalSliderSize:typeof n.verticalSliderSize<"u"?n.verticalSliderSize:0,scrollByPage:typeof n.scrollByPage<"u"?n.scrollByPage:!1};return i.horizontalSliderSize=typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:i.horizontalScrollbarSize,i.verticalSliderSize=typeof n.verticalSliderSize<"u"?n.verticalSliderSize:i.verticalScrollbarSize,ie&&(i.className+=" xterm-mac"),i}var dt=class extends g{constructor(e,t,r,s,o,a,l,h,d){super();this._bufferService=r;this._coreService=o;this._optionsService=h;this._renderService=d;this._onRequestScrollLines=this._register(new b);this.onRequestScrollLines=this._onRequestScrollLines.event;this._isSyncing=!1;this._isHandlingScroll=!1;this._suppressOnScrollHandler=!1;this._needsSyncOnRender=!1;let c=this._register(new lt({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:u=>tt(s.window,u)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{c.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new Mi(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},c)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(a.onProtocolChange(u=>{this._scrollableElement.updateOptions({handleMouseWheel:!(u&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(j.runAndSubscribe(l.onChangeColors,()=>{e.style.backgroundColor=l.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=l.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(E(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register(E(()=>this._styleElement.remove())),this._register(j.runAndSubscribe(l.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${l.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${l.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${l.colors.scrollbarSliderActiveBackground.css};`,"}"].join(` +-`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(u=>this._handleScroll(u)))}scrollLines(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){let e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,r=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:r,verticalHasArrows:t}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){if(!(!this._renderService||this._isSyncing)){if(this._coreService.decPrivateModes.synchronizedOutput){this._needsSyncOnRender=!0;return}this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1}}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),r=t-this._bufferService.buffer.ydisp;r!==0&&(this._latestYDisp=t,this._onRequestScrollLines.fire(r)),this._isHandlingScroll=!1}handleTouchScroll(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};dt=y([m(2,D),m(3,G),m(4,Y),m(5,Me),m(6,_e),m(7,R),m(8,V)],dt);var ut=class extends g{constructor(e,t,r,s,o){super();this._screenElement=e;this._bufferService=t;this._coreBrowserService=r;this._decorationService=s;this._renderService=o;this._decorationElements=new Map;this._altBufferIsActive=!1;this._dimensionsChanged=!1;this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(a=>this._removeDecoration(a))),this._register(E(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer",e?.options?.layer==="top"),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,t.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let r=e.options.x??0;return r&&r>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let r=this._decorationElements.get(e);r||(r=this._createElement(e),e.element=r,this._decorationElements.set(e,r),this._container.appendChild(r),e.onDispose(()=>{this._decorationElements.delete(e),r.remove()})),r.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(r.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,r.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,r.style.top=`${t*this._renderService.dimensions.css.cell.height}px`,r.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(r)}}_refreshXPosition(e,t=e.element){if(!t)return;let r=e.options.x??0;(e.options.anchor||"left")==="right"?t.style.right=r?`${r*this._renderService.dimensions.css.cell.width}px`:"":t.style.left=r?`${r*this._renderService.dimensions.css.cell.width}px`:""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};ut=y([m(1,D),m(2,G),m(3,ge),m(4,V)],ut);var Bi=class{constructor(){this._zones=[];this._zonePool=[];this._zonePoolIndex=0;this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(i){if(i.options.overviewRulerOptions){for(let e of this._zones)if(e.color===i.options.overviewRulerOptions.color&&e.position===i.options.overviewRulerOptions.position){if(this._lineIntersectsZone(e,i.marker.line))return;if(this._lineAdjacentToZone(e,i.marker.line,i.options.overviewRulerOptions.position)){this._addLineToZone(e,i.marker.line);return}}if(this._zonePoolIndex=i.startBufferLine&&e<=i.endBufferLine}_lineAdjacentToZone(i,e,t){return e>=i.startBufferLine-this._linePadding[t||"full"]&&e<=i.endBufferLine+this._linePadding[t||"full"]}_addLineToZone(i,e){i.startBufferLine=Math.min(i.startBufferLine,e),i.endBufferLine=Math.max(i.endBufferLine,e)}};var Ce={full:0,left:0,center:0,right:0},Fe={full:0,left:0,center:0,right:0},qt={full:0,left:0,center:0,right:0},ze=class extends g{constructor(e,t,r,s,o,a,l,h){super();this._viewportElement=e;this._screenElement=t;this._bufferService=r;this._decorationService=s;this._renderService=o;this._optionsService=a;this._themeService=l;this._coreBrowserService=h;this._colorZoneStore=new Bi;this._shouldUpdateDimensions=!0;this._shouldUpdateAnchor=!0;this._lastKnownBufferLength=0;this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(E(()=>this._canvas?.remove()));let d=this._canvas.getContext("2d");if(d)this._ctx=d;else throw new Error("Ctx cannot be null");this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register(E(()=>{this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}get _width(){let e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??!0?e?.width??0:0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);Fe.full=this._canvas.width,Fe.left=e,Fe.center=t,Fe.right=e,this._refreshDrawHeightConstants(),qt.full=1,qt.left=1,qt.center=1+Fe.left,qt.right=1+Fe.left+Fe.center}_refreshDrawHeightConstants(){Ce.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);Ce.left=t,Ce.center=t,Ce.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ce.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;let e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let t of this._decorationService.decorations)this._colorZoneStore.addDecoration(t);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let t of e)t.position!=="full"&&this._renderColorZone(t);for(let t of e)t.position==="full"&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(qt[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-Ce[e.position||"full"]/2),Fe[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+Ce[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};ze=y([m(2,D),m(3,ge),m(4,V),m(5,R),m(6,_e),m(7,G)],ze);var ft=class{constructor(i,e,t,r,s,o){this._textarea=i;this._compositionView=e;this._bufferService=t;this._optionsService=r;this._coreService=s;this._renderService=o;this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._compositionSuffix="",this._dataAlreadySent=""}get isComposing(){return this._isComposing}compositionstart(){this._isComposing=!0;let i=this._textarea.selectionStart??this._textarea.value.length,e=this._textarea.selectionEnd??i;this._compositionPosition.start=Math.min(i,e),this._compositionPosition.end=Math.max(i,e),this._compositionSuffix=this._textarea.value.substring(this._compositionPosition.end),this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(i){this._compositionView.textContent=`\u200E${i.data}\u200E`,this.updateCompositionElements(),setTimeout(()=>{let e=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,e)},0)}compositionend(){this._finalizeComposition(!0)}keydown(i){if(this._isComposing||this._isSendingComposition){if(i.keyCode===20||i.keyCode===229||i.keyCode===16||i.keyCode===17||i.keyCode===18)return!1;this._finalizeComposition(!1)}return i.keyCode===229?(this._handleAnyTextareaChanges(),!1):!0}_finalizeComposition(i){if(this._compositionView.classList.remove("active"),this._isComposing=!1,i){let e={start:this._compositionPosition.start,end:this._compositionPosition.end},t=this._compositionSuffix;this._isSendingComposition=!0,setTimeout(()=>{if(this._isSendingComposition){this._isSendingComposition=!1;let r;if(e.start+=this._dataAlreadySent.length,this._isComposing)r=this._textarea.value.substring(e.start,this._compositionPosition.start);else{let s=this._textarea.value,o=t.length>0&&s.endsWith(t)?s.length-t.length:s.length;r=s.substring(e.start,Math.max(e.start,o))}r.length>0&&this._coreService.triggerDataEvent(r,!0)}},0)}else{this._isSendingComposition=!1;let e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;let i=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){let e=this._textarea.value,t=e.replace(i,"");this._dataAlreadySent=t,e.length>i.length?this._coreService.triggerDataEvent(t,!0):e.lengththis.updateCompositionElements(!0),0)}}};ft=y([m(2,D),m(3,R),m(4,Y),m(5,V)],ft);var J=0,Q=0,ee=0,W=0,Qr={css:"#00000000",rgba:0},O;(t=>{function n(r,s,o,a){return a!==void 0?`#${Ve(r)}${Ve(s)}${Ve(o)}${Ve(a)}`:`#${Ve(r)}${Ve(s)}${Ve(o)}`}t.toCss=n;function i(r,s,o,a=255){return(r<<24|s<<16|o<<8|a)>>>0}t.toRgba=i;function e(r,s,o,a){return{css:t.toCss(r,s,o,a),rgba:t.toRgba(r,s,o,a)}}t.toColor=e})(O||={});var k;(a=>{function n(l,h){if(W=(h.rgba&255)/255,W===1)return{css:h.css,rgba:h.rgba};let d=h.rgba>>24&255,c=h.rgba>>16&255,u=h.rgba>>8&255,_=l.rgba>>24&255,p=l.rgba>>16&255,v=l.rgba>>8&255;J=_+Math.round((d-_)*W),Q=p+Math.round((c-p)*W),ee=v+Math.round((u-v)*W);let f=O.toCss(J,Q,ee),S=O.toRgba(J,Q,ee);return{css:f,rgba:S}}a.blend=n;function i(l){return(l.rgba&255)===255}a.isOpaque=i;function e(l,h,d){let c=Oi.ensureContrastRatio(l.rgba,h.rgba,d);if(c)return O.toColor(c>>24&255,c>>16&255,c>>8&255)}a.ensureContrastRatio=e;function t(l){let h=(l.rgba|255)>>>0;return[J,Q,ee]=Oi.toChannels(h),{css:O.toCss(J,Q,ee),rgba:h}}a.opaque=t;function r(l,h){return W=Math.round(h*255),[J,Q,ee]=Oi.toChannels(l.rgba),{css:O.toCss(J,Q,ee,W),rgba:O.toRgba(J,Q,ee,W)}}a.opacity=r;function s(l,h){return W=l.rgba&255,r(l,W*h/255)}a.multiplyOpacity=s;function o(l){return[l.rgba>>24&255,l.rgba>>16&255,l.rgba>>8&255]}a.toColorRGB=o})(k||={});var P;(t=>{let n,i;try{let r=document.createElement("canvas");r.width=1,r.height=1;let s=r.getContext("2d",{willReadFrequently:!0});s&&(n=s,n.globalCompositeOperation="copy",i=n.createLinearGradient(0,0,1,1))}catch{}function e(r){if(r.match(/#[\da-f]{3,8}/i))switch(r.length){case 4:return J=parseInt(r.slice(1,2).repeat(2),16),Q=parseInt(r.slice(2,3).repeat(2),16),ee=parseInt(r.slice(3,4).repeat(2),16),O.toColor(J,Q,ee);case 5:return J=parseInt(r.slice(1,2).repeat(2),16),Q=parseInt(r.slice(2,3).repeat(2),16),ee=parseInt(r.slice(3,4).repeat(2),16),W=parseInt(r.slice(4,5).repeat(2),16),O.toColor(J,Q,ee,W);case 7:return{css:r,rgba:(parseInt(r.slice(1),16)<<8|255)>>>0};case 9:return{css:r,rgba:parseInt(r.slice(1),16)>>>0}}let s=r.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(s)return J=parseInt(s[1],10),Q=parseInt(s[2],10),ee=parseInt(s[3],10),W=Math.round((s[5]===void 0?1:parseFloat(s[5]))*255),O.toColor(J,Q,ee,W);if(r==="transparent")return{css:"transparent",rgba:0};if(!n||!i)throw new Error("css.toColor: Unsupported css format");if(n.fillStyle=i,n.fillStyle=r,typeof n.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(n.fillRect(0,0,1,1),[J,Q,ee,W]=n.getImageData(0,0,1,1).data,W!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:O.toRgba(J,Q,ee,W),css:r}}t.toColor=e})(P||={});var Z;(e=>{function n(t){return i(t>>16&255,t>>8&255,t&255)}e.relativeLuminance=n;function i(t,r,s){let o=t/255,a=r/255,l=s/255,h=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),d=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4),c=l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4);return h*.2126+d*.7152+c*.0722}e.relativeLuminance2=i})(Z||={});var Oi;(s=>{function n(o,a){if(W=(a&255)/255,W===1)return a;let l=a>>24&255,h=a>>16&255,d=a>>8&255,c=o>>24&255,u=o>>16&255,_=o>>8&255;return J=c+Math.round((l-c)*W),Q=u+Math.round((h-u)*W),ee=_+Math.round((d-_)*W),O.toRgba(J,Q,ee)}s.blend=n;function i(o,a,l){let h=Z.relativeLuminance(o>>8),d=Z.relativeLuminance(a>>8);if(Te(h,d)>8));if(v>8));return v>S?p:f}return p}let u=t(o,a,l),_=Te(h,Z.relativeLuminance(u>>8));if(_>8));return _>v?u:p}return u}}s.ensureContrastRatio=i;function e(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,_=a>>16&255,p=a>>8&255,v=Te(Z.relativeLuminance2(u,_,p),Z.relativeLuminance2(h,d,c));for(;v0||_>0||p>0);)u-=Math.max(0,Math.ceil(u*.1)),_-=Math.max(0,Math.ceil(_*.1)),p-=Math.max(0,Math.ceil(p*.1)),v=Te(Z.relativeLuminance2(u,_,p),Z.relativeLuminance2(h,d,c));return(u<<24|_<<16|p<<8|255)>>>0}s.reduceLuminance=e;function t(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,_=a>>16&255,p=a>>8&255,v=Te(Z.relativeLuminance2(u,_,p),Z.relativeLuminance2(h,d,c));for(;v>>0}s.increaseLuminance=t;function r(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}s.toChannels=r})(Oi||={});function Ve(n){let i=n.toString(16);return i.length<2?"0"+i:i}function Te(n,i){return n1){let u=this._getJoinedRanges(r,l,a,e,o);for(let _=0;_1){let c=this._getJoinedRanges(r,l,a,e,o);for(let u=0;u=As,Dr=ae,x=this._workCell;if(v.length>0&&ae===v[0][0]&&je){let A=v.shift(),Mr=this._isCellInSelection(A[0],e);for(T=A[0]+1;T=A[1],je?(fi=!0,x=new Ni(this._workCell,i.translateToString(!0,A[0],A[1]),A[1]-A[0]),Dr=A[1]-1,Tr=x.getWidth()):As=A[1]}let Ft=this._isCellInSelection(ae,e),Rr=t&&ae===o,Lr=Rn&&ae>=c&&ae<=u;_&&x.isBlink()&&(_.hasBlinkingCells=!0),!l&&x.isBlink()&&N.push("xterm-blink-hidden");let Ar=!1;this._decorationService.forEachDecorationAtCell(ae,e,void 0,A=>{Ar=!0});let _i=x.getChars()||" ";if(_i===" "&&(x.isUnderline()||x.isOverline())&&(_i="\xA0"),Nt=Tr*h-d.get(_i,x.isBold(),x.isItalic()),!I)I=this._document.createElement("span");else if(w&&(Ft&&ui||!Ft&&!ui&&x.bg===te)&&(Ft&&ui&&f.selectionForeground||x.fg===Ts)&&x.extended.ext===Ds&&Lr===Rs&&Nt===Ls&&!Rr&&!fi&&!Ar&&je){x.isInvisible()?L+=" ":L+=_i,w++;continue}else w&&(I.textContent=L),I=this._document.createElement("span"),w=0,L="";if(te=x.bg,Ts=x.fg,Ds=x.extended.ext,Rs=Lr,Ls=Nt,ui=Ft,fi&&o>=ae&&o<=Dr&&(o=ae),!this._coreService.isCursorHidden&&Rr&&this._coreService.isCursorInitialized){if(N.push("xterm-cursor"),this._coreBrowserService.isFocused)a&&N.push("xterm-cursor-blink"),N.push(r==="bar"?"xterm-cursor-bar":r==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(s)switch(s){case"outline":N.push("xterm-cursor-outline");break;case"block":N.push("xterm-cursor-block");break;case"bar":N.push("xterm-cursor-bar");break;case"underline":N.push("xterm-cursor-underline");break;default:break}}if(x.isBold()&&N.push("xterm-bold"),x.isItalic()&&N.push("xterm-italic"),x.isDim()&&N.push("xterm-dim"),x.isInvisible()?L=" ":L=x.getChars()||" ",x.isUnderline()&&(N.push(`xterm-underline-${x.extended.underlineStyle}`),L===" "&&(L="\xA0"),!x.isUnderlineColorDefault()))if(x.isUnderlineColorRGB())I.style.textDecorationColor=`rgb(${ue.toColorRGB(x.getUnderlineColor()).join(",")})`;else{let A=x.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&x.isBold()&&A<8&&(A+=8),I.style.textDecorationColor=f.ansi[A].css}x.isOverline()&&(N.push("xterm-overline"),L===" "&&(L="\xA0")),x.isStrikethrough()&&N.push("xterm-strikethrough"),Lr&&(I.style.textDecoration="underline");let de=x.getFgColor(),Ht=x.getFgColorMode(),Se=x.getBgColor(),Wt=x.getBgColorMode(),kr=!!x.isInverse();if(kr){let A=de;de=Se,Se=A;let Mr=Ht;Ht=Wt,Wt=Mr}let Le,pi,Ut=!1;this._decorationService.forEachDecorationAtCell(ae,e,void 0,A=>{A.options.layer!=="top"&&Ut||(A.backgroundColorRGB&&(Wt=50331648,Se=A.backgroundColorRGB.rgba>>8&16777215,Le=A.backgroundColorRGB),A.foregroundColorRGB&&(Ht=50331648,de=A.foregroundColorRGB.rgba>>8&16777215,pi=A.foregroundColorRGB),Ut=A.options.layer==="top")}),!Ut&&Ft&&(Le=this._coreBrowserService.isFocused?f.selectionBackgroundOpaque:f.selectionInactiveBackgroundOpaque,Se=Le.rgba>>8&16777215,Wt=50331648,Ut=!0,f.selectionForeground&&(Ht=50331648,de=f.selectionForeground.rgba>>8&16777215,pi=f.selectionForeground)),Ut&&N.push("xterm-decoration-top");let Ae;switch(Wt){case 16777216:case 33554432:Ae=f.ansi[Se],N.push(`xterm-bg-${Se}`);break;case 50331648:Ae=O.toColor(Se>>16,Se>>8&255,Se&255),this._addStyle(I,`background-color:#${(Se>>>0).toString(16).padStart(6,"0")}`);break;case 0:default:kr?(Ae=f.foreground,N.push(`xterm-bg-${257}`)):Ae=f.background}switch(Le||x.isDim()&&(Le=k.multiplyOpacity(Ae,.5)),Ht){case 16777216:case 33554432:x.isBold()&&de<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(de+=8),this._applyMinimumContrast(I,Ae,f.ansi[de],x,Le,void 0)||N.push(`xterm-fg-${de}`);break;case 50331648:let A=O.toColor(de>>16&255,de>>8&255,de&255);this._applyMinimumContrast(I,Ae,A,x,Le,pi)||this._addStyle(I,`color:#${de.toString(16).padStart(6,"0")}`);break;case 0:default:this._applyMinimumContrast(I,Ae,f.foreground,x,Le,pi)||kr&&N.push(`xterm-fg-${257}`)}N.length&&(I.className=N.join(" "),N.length=0),!Rr&&!fi&&!Ar&&je?w++:I.textContent=L,Nt!==this.defaultSpacing&&(I.style.letterSpacing=`${Nt}px`),p.push(I),ae=Dr}return I&&w&&(I.textContent=L),p}_applyMinimumContrast(i,e,t,r,s,o){if(this._optionsService.rawOptions.minimumContrastRatio===1||Xs(r.getCode()))return!1;let a=this._getContrastCache(r),l;if(!s&&!o&&(l=a.getColor(e.rgba,t.rgba)),l===void 0){let h=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);l=k.ensureContrastRatio(s??e,o??t,h),a.setColor((s??e).rgba,(o??t).rgba,l??null)}return l?(this._addStyle(i,`color:${l.css}`),!0):!1}_getContrastCache(i){return i.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(i,e){i.setAttribute("style",`${i.getAttribute("style")||""}${e};`)}_isCellInSelection(i,e){let t=this._selectionStart,r=this._selectionEnd;return!t||!r?!1:this._columnSelectMode?t[0]<=r[0]?i>=t[0]&&e>=t[1]&&i=t[1]&&i>=r[0]&&e<=r[1]:e>t[1]&&e=t[0]&&i=t[0]}};_t=y([m(1,gi),m(2,R),m(3,G),m(4,Y),m(5,ge),m(6,_e)],_t);var Hi=class{constructor(i=()=>new ts){this._flat=new Float32Array(256);this._font="";this._fontSize=0;this._weight="normal";this._weightBold="bold";this._canvasElements=[];this._canvasElements=[i(),i(),i(),i()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(i,e,t,r){i===this._font&&e===this._fontSize&&t===this._weight&&r===this._weightBold||(this._font=i,this._fontSize=e,this._weight=t,this._weightBold=r,this._canvasElements[0].setFont(i,e,t,!1),this._canvasElements[1].setFont(i,e,r,!1),this._canvasElements[2].setFont(i,e,t,!0),this._canvasElements[3].setFont(i,e,r,!0),this.clear())}get(i,e,t){let r;if(!e&&!t&&i.length===1&&(r=i.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];let a=this._measure(i,0);return a>0&&(this._flat[r]=a),a}let s=i;e&&(s+="B"),t&&(s+="I");let o=this._holey.get(s);if(o===void 0){let a=0;e&&(a|=1),t&&(a|=2),o=this._measure(i,a),o>0&&this._holey.set(s,o)}return o}_measure(i,e){return this._canvasElements[e].measure(i)}},ts=class{constructor(){typeof OffscreenCanvas<"u"?(this._canvas=new OffscreenCanvas(1,1),this._ctx=es(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=es(this._canvas.getContext("2d")))}setFont(i,e,t,r){let s=r?"italic":"";this._ctx.font=`${s} ${t} ${e}px ${i}`.trim()}measure(i){return this._ctx.measureText(i).width}};var is=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(i,e,t,r=!1){if(this.selectionStart=e,this.selectionEnd=t,!e||!t||e[0]===t[0]&&e[1]===t[1]){this.clear();return}let s=i.buffers.active.ydisp,o=e[1]-s,a=t[1]-s,l=Math.max(o,0),h=Math.min(a,i.rows-1);if(l>=i.rows||h<0){this.clear();return}this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=o,this.viewportEndRow=a,this.viewportCappedStartRow=l,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=t[0]}isCellSelected(i,e,t){return this.hasSelection?(t-=i.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&t>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&t<=this.viewportCappedEndRow:t>this.viewportStartRow&&t=this.startCol&&e=this.startCol):!1}};function js(){return new is}var Wi=class extends g{constructor(e,t,r){super();this._renderCallback=e;this._coreBrowserService=t;this._optionsService=r;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",s=>{this.setIntervalDuration(s)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(E(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let t=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),t||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var Yn=1,mt=class extends g{constructor(e,t,r,s,o,a,l,h,d,c,u,_,p,v){super();this._terminal=e;this._document=t;this._element=r;this._screenElement=s;this._viewportElement=o;this._helperContainer=a;this._linkifier2=l;this._charSizeService=d;this._optionsService=c;this._bufferService=u;this._coreService=_;this._coreBrowserService=p;this._themeService=v;this._terminalClass=Yn++;this._rowElements=[];this._selectionRenderModel=js();this._lastSelectionColumnMode=!1;this._rowHasBlinkingCells=[];this._rowHasBlinkingCellsCount=0;this._onRequestRedraw=this._register(new b);this.onRequestRedraw=this._onRequestRedraw.event;this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=Ys(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(f=>this._injectCss(f))),this._injectCss(this._themeService.colors),this._rowFactory=h.createInstance(_t,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(f=>this._handleLinkHover(f))),this._register(this._linkifier2.onHideLinkUnderline(f=>this._handleLinkLeave(f))),this._cursorBlinkStateManager=new rs(this._rowContainer,this._coreBrowserService),this._register(C(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register(E(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new Wi(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register(E(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Hi,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let r of this._rowElements)r.style.width=`${this.dimensions.css.canvas.width}px`,r.style.height=`${this.dimensions.css.cell.height}px`,r.style.lineHeight=`${this.dimensions.css.cell.height}px`,r.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${k.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;let r=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,o=`blink_block_${this._terminalClass}`;t+=`@keyframes ${r} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${o} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${o} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[a,l]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${a} { color: ${l.css}; }${this._terminalSelector} .xterm-fg-${a}.xterm-dim { color: ${k.multiplyOpacity(l,.5).css}; }${this._terminalSelector} .xterm-bg-${a} { background-color: ${l.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${257} { color: ${k.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${257}.xterm-dim { color: ${k.multiplyOpacity(k.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${257} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let r=this._rowElements.length;r<=t;r++){let s=this._document.createElement("div");this._rowContainer.appendChild(s),this._rowElements.push(s),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,r){let s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,r);let o=0,a=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(o=this._selectionRenderModel.viewportCappedStartRow,a=this._selectionRenderModel.viewportCappedEndRow));let l=0,h=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,r),this._selectionRenderModel.hasSelection){let u=this._selectionRenderModel.viewportStartRow,_=this._selectionRenderModel.viewportEndRow,p=this._selectionRenderModel.viewportCappedStartRow,v=this._selectionRenderModel.viewportCappedEndRow;l=p,h=v;let f=this._document.createDocumentFragment();if(r){let S=e[0]>t[0];f.appendChild(this._createSelectionElement(p,S?t[0]:e[0],S?e[0]:t[0],v-p+1))}else{let S=u===p?e[0]:0,I=p===_?t[0]:this._bufferService.cols;f.appendChild(this._createSelectionElement(p,S,I));let w=v-p-1;if(f.appendChild(this._createSelectionElement(p+1,0,this._bufferService.cols,w)),p!==v){let L=_===v?t[0]:this._bufferService.cols;f.appendChild(this._createSelectionElement(v,0,L))}}this._selectionContainer.appendChild(f)}let d=Math.min(o,l),c=Math.max(a,h);if(c>=0){d=Math.max(d,0),c=Math.min(c,s-1);let _=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&_>=0&&_this.dimensions.css.canvas.width&&(l=this.dimensions.css.canvas.width-a),o.style.height=`${s*this.dimensions.css.cell.height}px`,o.style.top=`${e*this.dimensions.css.cell.height}px`,o.style.left=`${a}px`,o.style.width=`${l}px`,o}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){let r=this._bufferService.buffer,s=r.ybase+r.y,o=Math.min(r.x,this._bufferService.cols-1),a=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,l=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,h=this._optionsService.rawOptions.cursorInactiveStyle,d={hasBlinkingCells:!1};for(let c=e;c<=t;c++){let u=c+r.ydisp,_=this._rowElements[c];if(!_)continue;let p=r.lines.get(u);if(!p){_.replaceChildren(),this._setRowBlinkState(c,!1);continue}_.replaceChildren(...this._rowFactory.createRow(p,u,u===s,l,h,o,a,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,d)),this._setRowBlinkState(c,d.hasBlinkingCells)}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,r,s,o,a){r<0&&(e=0),s<0&&(t=0);let l=this._bufferService.rows-1;r=Math.max(Math.min(r,l),0),s=Math.max(Math.min(s,l),0),o=Math.min(o,this._bufferService.cols);let h=this._bufferService.buffer,d=h.ybase+h.y,c=Math.min(h.x,o-1),u=this._optionsService.rawOptions.cursorBlink,_=this._optionsService.rawOptions.cursorStyle,p=this._optionsService.rawOptions.cursorInactiveStyle,v={hasBlinkingCells:!1};for(let f=r;f<=s;++f){let S=f+h.ydisp,I=this._rowElements[f];if(!I)continue;let w=h.lines.get(S);if(!w){I.replaceChildren(),this._setRowBlinkState(f,!1);continue}I.replaceChildren(...this._rowFactory.createRow(w,S,S===d,_,p,c,u,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,a?f===r?e:0:-1,a?(f===s?t:o)-1:-1,v)),this._setRowBlinkState(f,v.hasBlinkingCells)}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};mt=y([m(7,Qe),m(8,Pe),m(9,R),m(10,D),m(11,Y),m(12,G),m(13,_e)],mt);var rs=class{constructor(i,e){this._rowContainer=i;this._coreBrowserService=e;this._isIdlePaused=!1;this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){this._idleTimeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}};var bt=class extends g{constructor(e,t,r){super();this._optionsService=r;this.width=0;this.height=0;this._onCharSizeChange=this._register(new b);this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new ns(this._optionsService))}catch{this._measureStrategy=this._register(new ss(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};bt=y([m(2,R)],bt);var Ui=class extends g{constructor(){super(...arguments);this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}},ss=class extends Ui{constructor(e,t,r){super();this._document=e;this._parentElement=t;this._optionsService=r;this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},ns=class extends Ui{constructor(e){super();this._optionsService=e;this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");let t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}};var Ki=class extends g{constructor(e,t,r){super();this._textarea=e;this._window=t;this.mainDocument=r;this._isFocused=!1;this._cachedIsFocused=void 0;this._onDprChange=this._register(new b);this.onDprChange=this._onDprChange.event;this._onWindowChange=this._register(new b);this.onWindowChange=this._onWindowChange.event;this._screenDprMonitor=this._register(new os(this._window)),this._register(this.onWindowChange(s=>this._screenDprMonitor.setWindow(s))),this._register(j.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(C(this._textarea,"focus",()=>this._isFocused=!0)),this._register(C(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},os=class extends g{constructor(e){super();this._parentWindow=e;this._windowResizeListener=this._register(new B);this._onDprChange=this._register(new b);this.onDprChange=this._onDprChange.event;this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(E(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=C(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}};var zi=class extends g{constructor(){super();this.linkProviders=[];this._register(E(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}};function Xt(n,i,e){let t=e.getBoundingClientRect(),r=n.getComputedStyle(e),s=parseInt(r.getPropertyValue("padding-left"),10),o=parseInt(r.getPropertyValue("padding-top"),10);return[i.clientX-t.left-s,i.clientY-t.top-o]}function Zs(n,i,e,t,r,s,o,a,l){if(!s)return;let h=Xt(n,i,e);return h[0]=Math.ceil((h[0]+(l?o/2:0))/o),h[1]=Math.ceil(h[1]/a),h[0]=Math.min(Math.max(h[0],1),t+(l?1:0)),h[1]=Math.min(Math.max(h[1],1),r),h}var vt=class{constructor(i,e){this._charSizeService=i;this._renderService=e}getCoords(i,e,t,r,s){return Zs(se(e),i,e,t,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,s)}getMouseReportCoords(i,e){let t=Xt(se(e),i,e);if(this._charSizeService.hasValidSize)return t[0]=Math.min(Math.max(t[0],0),this._renderService.dimensions.css.canvas.width-1),t[1]=Math.min(Math.max(t[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(t[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(t[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(t[0]),y:Math.floor(t[1])}}};vt=y([m(0,Pe),m(1,V)],vt);var Js=typeof window=="object"?window:globalThis;function ce(n,i=0){return n[n.length-(1+i)]}function jn(n,i,e){let t=null,r=null;if(typeof e.value=="function"?(t="value",r=e.value,r.length!==0&&console.warn("Memoize should only be used in functions with zero parameters")):typeof e.get=="function"&&(t="get",r=e.get),!r||!t)throw new Error("not supported");let s=`$memoize$${i}`,o=e;o[t]=function(...a){return this.hasOwnProperty(s)||Object.defineProperty(this,s,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,a)}),this[s]}}var St=class St{constructor(i){this.element=i,this.next=St.Undefined,this.prev=St.Undefined}};St.Undefined=new St(void 0);var re=St,Gi=class{constructor(){this._first=re.Undefined;this._last=re.Undefined}push(i){return this._insert(i,!0)}_insert(i,e){let t=new re(i);if(this._first===re.Undefined)this._first=t,this._last=t;else if(e){let s=this._last;this._last=t,t.prev=s,s.next=t}else{let s=this._first;this._first=t,t.next=s,s.prev=t}let r=!1;return()=>{r||(r=!0,this._remove(t))}}_remove(i){if(i.prev!==re.Undefined&&i.next!==re.Undefined){let e=i.prev;e.next=i.next,i.next.prev=e}else i.prev===re.Undefined&&i.next===re.Undefined?(this._first=re.Undefined,this._last=re.Undefined):i.next===re.Undefined?(this._last=this._last.prev,this._last.next=re.Undefined):i.prev===re.Undefined&&(this._first=this._first.next,this._first.prev=re.Undefined)}*[Symbol.iterator](){let i=this._first;for(;i!==re.Undefined;)yield i.element,i=i.next}},he;(s=>(s.TAP="-xterm-gesturetap",s.CHANGE="-xterm-gesturechange",s.START="-xterm-gesturestart",s.END="-xterm-gesturesend",s.CONTEXT_MENU="-xterm-gesturecontextmenu"))(he||={});var K=class K extends g{constructor(){super();this._dispatched=!1;this._targets=new Gi;this._ignoreTargets=new Gi;this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;let e=Js;this._register(C(e.document,"touchstart",t=>this._handleTouchStart(t),{passive:!1})),this._register(C(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(C(e.document,"touchmove",t=>this._handleTouchMove(t),{passive:!1}))}static addTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._targets.push(e);return E(t)}static ignoreTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._ignoreTargets.push(e);return E(t)}static isTouchDevice(){return"ontouchstart"in Js||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){let t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let r=0,s=e.targetTouches.length;r=K._holdDelay&&Math.abs(h.initialPageX-ce(h.rollingPageX))<30&&Math.abs(h.initialPageY-ce(h.rollingPageY))<30){let c=this._newGestureEvent(he.CONTEXT_MENU,h.initialTarget);c.pageX=ce(h.rollingPageX),c.pageY=ce(h.rollingPageY),this._dispatchEvent(c)}else if(s===1){let c=ce(h.rollingPageX),u=ce(h.rollingPageY),_=ce(h.rollingTimestamps)-h.rollingTimestamps[0],p=c-h.rollingPageX[0],v=u-h.rollingPageY[0],f=[...this._targets].filter(S=>h.initialTarget instanceof Node&&S.contains(h.initialTarget));this._inertia(e,f,r,Math.abs(p)/_,p>0?1:-1,c,Math.abs(v)/_,v>0?1:-1,u)}this._dispatchEvent(this._newGestureEvent(he.END,h.initialTarget)),delete this._activeTouches[l.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){let r=document.createEvent("CustomEvent");return r.initEvent(e,!1,!0),r.initialTarget=t,r.tapCount=0,r}_dispatchEvent(e){if(e.type===he.TAP){let t=new Date().getTime(),r;t-this._lastSetTapCountTime>K._clearTapCountTime?r=1:r=2,this._lastSetTapCountTime=t,e.tapCount=r}else(e.type===he.CHANGE||e.type===he.CONTEXT_MENU)&&(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(let r of this._ignoreTargets)if(r.contains(e.initialTarget))return;let t=[];for(let r of this._targets)if(r.contains(e.initialTarget)){let s=0,o=e.initialTarget;for(;o&&o!==r;)s++,o=o.parentElement;t.push([s,r])}t.sort((r,s)=>r[0]-s[0]);for(let[,r]of t)r.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,r,s,o,a,l,h,d){this._handle=tt(e,()=>{let c=Date.now(),u=c-r,_=0,p=0,v=!0;s+=K._scrollFriction*u,l+=K._scrollFriction*u,s>0&&(v=!1,_=o*s*u),l>0&&(v=!1,p=h*l*u);let f=this._newGestureEvent(he.CHANGE);f.translationX=_,f.translationY=p,t.forEach(S=>S.dispatchEvent(f)),v||this._inertia(e,t,c,s,o,a+_,l,h,d+p)})}_handleTouchMove(e){let t=Date.now();for(let r=0,s=e.changedTouches.length;r3&&(a.rollingPageX.shift(),a.rollingPageY.shift(),a.rollingTimestamps.shift()),a.rollingPageX.push(o.pageX),a.rollingPageY.push(o.pageY),a.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}};K._scrollFriction=-.005,K._holdDelay=700,K._clearTapCountTime=400,y([jn],K,"isTouchDevice",1);var Vi=K;var gt=class{constructor(i,e,t,r,s,o,a,l,h){this._renderService=i;this._mouseCoordsService=e;this._mouseStateService=t;this._coreService=r;this._bufferService=s;this._optionsService=o;this._selectionService=a;this._logService=l;this._coreBrowserService=h;this._lastEvent=null;this._wheelPartialScroll=0;this._touchScrollAccumulator=0}bindMouse(i,e,t){let{element:r,document:s}=i,o={mouseup:null,wheel:null,mousedrag:null,mousemove:null},a=new B,l=new B;e(a),e(l);let h={target:i,focus:t,requestedEvents:o,mouseupListener:a,mousedragListener:l},d={mouseup:c=>this._handleMouseUp(h,c),wheel:c=>this._handleWheel(h,c),mousedrag:c=>this._handleMouseDrag(h,c),mousemove:c=>this._handleMouseMove(h,c)};this._altMouseCursor=new as(r,s,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),e(this._altMouseCursor),e(this._mouseStateService.onProtocolChange(c=>{this._handleProtocolChange(h,d,c)})),e(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(r),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,e(C(r,"mousedown",c=>this._handleMouseDown(h,c))),e(C(r,"wheel",c=>this._handlePassiveWheel(h,c),{passive:!1})),e(Vi.addTarget(i.screenElement)),e(C(i.screenElement,he.START,()=>this._handleTouchStart())),e(C(i.screenElement,he.CHANGE,c=>this._handleTouchChange(h,c)))}_sendEvent(i,e){let t=this._mouseCoordsService.getMouseReportCoords(e,i.target.screenElement);if(!t)return!1;let r,s;switch(e.overrideType||e.type){case"mousemove":s=32,e.buttons===void 0?(r=3,e.button!==void 0&&(r=e.button<3?e.button:3)):r=e.buttons&1?0:e.buttons&4?1:e.buttons&2?2:3;break;case"mouseup":s=0,r=e.button<3?e.button:3;break;case"mousedown":s=1,r=e.button<3?e.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;let a=e.deltaY;if(a===0||this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return!1;s=a<0?0:1,r=4;break;default:return!1}if(s===void 0||r===void 0||r>4||r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!e.altKey)return!1;let o=r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:t.col,row:t.row,x:t.x,y:t.y,button:r,action:s,ctrl:e.ctrlKey,alt:o?!1:e.altKey,shift:e.shiftKey})}_handleMouseUp(i,e){this._sendEvent(i,e),e.buttons||(i.mouseupListener.clear(),i.mousedragListener.clear())}_handleWheel(i,e){return this._sendEvent(i,e),e.preventDefault(),e.stopPropagation(),!1}_handleMouseDrag(i,e){e.buttons&&this._sendEvent(i,e)}_handleMouseMove(i,e){e.buttons||this._sendEvent(i,e)}_handleMouseDown(i,e){if(e.preventDefault(),i.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(e))return;this._sendEvent(i,e);let{element:t,document:r}=i.target,s=t.ownerDocument??r;i.requestedEvents.mouseup&&(i.mouseupListener.value=C(s,"mouseup",i.requestedEvents.mouseup)),i.requestedEvents.mousedrag&&(i.mousedragListener.value=C(s,"mousemove",i.requestedEvents.mousedrag))}_handlePassiveWheel(i,e){if(!i.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;if(!this._bufferService.buffer.hasScrollback){if(e.deltaY===0)return!1;if(this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return e.preventDefault(),e.stopPropagation(),!1;let s="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(e.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(s,!0),e.preventDefault(),e.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(i,e){if(e.preventDefault(),e.stopPropagation(),i.requestedEvents.wheel){this._handleTouchScrollAsWheel(i,e);return}if(!this._bufferService.buffer.hasScrollback){this._handleTouchScrollAsKeys(e);return}i.target.handleTouchScroll?.(e.translationY)}_handleTouchScrollAsKeys(i){let e=this._renderService?.dimensions.css.cell.height;if(!e)return;this._touchScrollAccumulator-=i.translationY;let t=Math.trunc(this._touchScrollAccumulator/e);if(t===0)return;this._touchScrollAccumulator-=t*e;let r="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t<0?"A":"B");for(let s=0;s0?1:-1),this._wheelPartialScroll%=1):i.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(s*=this._bufferService.rows),s}_triggerMouseEvent(i){if(i.col<0||i.col>=this._bufferService.cols||i.row<0||i.row>=this._bufferService.rows||i.button===4&&i.action===32||i.button===3&&i.action!==32||i.button!==4&&(i.action===2||i.action===3)||(i.col++,i.row++,i.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,i,this._mouseStateService.isPixelEncoding))||!this._mouseStateService.restrictMouseEvent(i))return!1;let e=this._mouseStateService.encodeMouseEvent(i);return e&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(e):this._coreService.triggerDataEvent(e,!0)),this._lastEvent=i,!0}_explainEvents(i){return{down:!!(i&1),up:!!(i&2),drag:!!(i&4),move:!!(i&8),wheel:!!(i&16)}}_equalEvents(i,e,t){if(t){if(i.x!==e.x||i.y!==e.y)return!1}else if(i.col!==e.col||i.row!==e.row)return!1;return!(i.button!==e.button||i.action!==e.action||i.ctrl!==e.ctrl||i.alt!==e.alt||i.shift!==e.shift)}};gt=y([m(0,V),m(1,Be),m(2,Me),m(3,Y),m(4,D),m(5,R),m(6,Si),m(7,fe),m(8,G)],gt);var as=class{constructor(i,e,t){this._element=i;this._document=e;this._isActive=t;this._listeners=new B}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;let i=new pe,e=r=>this.syncFromModifier(r);i.add(C(this._document,"keydown",e)),i.add(C(this._document,"keyup",e)),i.add(C(this._element,"mousemove",e));let t=this._element.ownerDocument?.defaultView;t&&i.add(C(t,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=i}resetClass(){this._updateClass(!1)}syncFromModifier(i){this._isActive()&&this._updateClass(i.getModifierState("Alt"))}_updateClass(i){i?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}};var $i=class{constructor(i,e){this._renderCallback=i;this._coreBrowserService=e;this._refreshCallbacks=[]}dispose(){this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(i){return this._refreshCallbacks.push(i),this._animationFrame??=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()),this._animationFrame}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let i of this._refreshCallbacks)i(0);this._refreshCallbacks=[]}};var qi=class{constructor(i){this._tasks=[];this._i=0;this._logService=i}enqueue(i){this._tasks.push(i),this._start()}flush(){for(;this._is){r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),this._start();return}r=s}this.clear()}},ls=class extends qi{_requestCallback(i){return setTimeout(()=>i(this._createDeadline(16)))}_cancelCallback(i){clearTimeout(i)}_createDeadline(i){let e=performance.now()+i;return{timeRemaining:()=>Math.max(0,e-performance.now())}}},cs=class extends qi{_requestCallback(i){return requestIdleCallback(i)}_cancelCallback(i){cancelIdleCallback(i)}},It="requestIdleCallback"in globalThis?cs:ls,Xi=class{constructor(i){this._queue=new It(i)}set(i){this._queue.clear(),this._queue.enqueue(i)}flush(){this._queue.flush()}dispose(){this._queue.clear()}};var Ct=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._rowCount=e;this._optionsService=r;this._logService=s;this._charSizeService=o;this._coreService=a;this._coreBrowserService=d;this._renderer=this._register(new B);this._observerDisposable=this._register(new B);this._isPaused=!1;this._needsFullRefresh=!1;this._isNextRenderRedrawOnly=!0;this._needsSelectionRefresh=!1;this._canvasWidth=0;this._canvasHeight=0;this._selectionState={start:void 0,end:void 0,columnSelectMode:!1};this._onDimensionsChange=this._register(new b);this.onDimensionsChange=this._onDimensionsChange.event;this._onRenderedViewportChange=this._register(new b);this.onRenderedViewportChange=this._onRenderedViewportChange.event;this._onRender=this._register(new b);this.onRender=this._onRender.event;this._onRefreshRequest=this._register(new b);this.onRefreshRequest=this._onRefreshRequest.event;this._pausedResizeTask=this._register(new Xi(this._logService)),this._renderDebouncer=new $i((u,_)=>this._renderRows(u,_),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new hs(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(E(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(h.onResize(()=>this._fullRefresh())),this._register(h.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(h.cols,h.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(h.buffer.y,h.buffer.y,void 0,!0))),this._register(c.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(u=>this._registerIntersectionObserver(u,t)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){let r=new e.IntersectionObserver(s=>this._handleIntersectionChange(s[s.length-1]),{threshold:0});this._observerDisposable.value=E(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=r,r.observe(t)}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,r=!1,s=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}let o=this._syncOutputHandler.flush();o&&(e=Math.min(e,o.start),t=Math.max(t,o.end)),s||(this._isNextRenderRedrawOnly=!1),r?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0}}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(t=>this.refreshRows(t.start,t.end,t.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.value?.handleSelectionChanged(e,t,r)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};Ct=y([m(2,R),m(3,fe),m(4,Pe),m(5,Y),m(6,ge),m(7,D),m(8,G),m(9,_e)],Ct);var hs=class{constructor(i,e,t){this._coreBrowserService=i;this._coreService=e;this._onTimeout=t;this._start=0;this._end=0;this._isBuffering=!1}bufferRows(i,e){this._isBuffering?(this._start=Math.min(this._start,i),this._end=Math.max(this._end,e)):(this._start=i,this._end=e,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let i={start:this._start,end:this._end};return this._isBuffering=!1,i}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function Qs(n,i,e,t){let r=e.buffer.x,s=e.buffer.y;if(!e.buffer.hasScrollback)return to(r,s,n,i,e,t)+Yi(s,i,e,t)+io(r,s,n,i,e,t);let o;if(s===i)return o=r>n?"D":"C",jt(Math.abs(r-n),Yt(o,t));o=s>i?"D":"C";let a=Math.abs(s-i),l=eo(s>i?n:r,e)+(a-1)*e.cols+1+Qn(s>i?r:n,e);return jt(l,Yt(o,t))}function Qn(n,i){return n-1}function eo(n,i){return i.cols-n}function to(n,i,e,t,r,s){return Yi(i,t,r,s).length===0?"":jt(tn(n,i,n,i-$e(i,r),!1,r).length,Yt("D",s))}function Yi(n,i,e,t){let r=n-$e(n,e),s=i-$e(i,e),o=Math.abs(r-s)-ro(n,i,e);return jt(o,Yt(en(n,i),t))}function io(n,i,e,t,r,s){let o;Yi(i,t,r,s).length>0?o=t-$e(t,r):o=i;let a=t,l=so(n,i,e,t,r,s);return jt(tn(n,o,e,a,l==="C",r).length,Yt(l,s))}function ro(n,i,e){let t=0,r=n-$e(n,e),s=i-$e(i,e);for(let o=0;o=0&&n0?o=t-$e(t,r):o=i,n=e&&oi?"A":"B"}function tn(n,i,e,t,r,s){let o=n,a=i,l="";for(;(o!==e||a!==t)&&a>=0&&as.cols-1?(l+=s.buffer.translateBufferLineToString(a,!1,n,o),o=0,n=0,a++):!r&&o<0&&(l+=s.buffer.translateBufferLineToString(a,!1,0,n+1),o=s.cols-1,n=o,a--);return l+s.buffer.translateBufferLineToString(a,!1,n,o)}function Yt(n,i){let e=i?"O":"[";return"\x1B"+e+n}function jt(n,i){n=Math.floor(n);let e="";for(let t=0;tthis._bufferService.cols?i%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)-1]:[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[i,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let i=this.selectionStart[0]+this.selectionStartLength;return i>this._bufferService.cols?[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[Math.max(i,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let i=this.selectionStart,e=this.selectionEnd;return!i||!e?!1:i[1]>e[1]||i[1]===e[1]&&i[0]>e[0]}handleTrim(i){return this.selectionStart&&(this.selectionStart[1]-=i),this.selectionEnd&&(this.selectionEnd[1]-=i),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):this.selectionStart&&this.selectionStart[1]<0?(this.selectionStart=[0,0],!0):!1}};function ds(n,i){if(n.start.y>n.end.y)throw new Error(`Buffer range end (${n.end.x}, ${n.end.y}) cannot be before start (${n.start.x}, ${n.start.y})`);return i*(n.end.y-n.start.y)+(n.end.x-n.start.x+1)}var no="\xA0",oo=new RegExp(no,"g");var Et=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._element=e;this._screenElement=t;this._linkifier=r;this._bufferService=s;this._coreService=o;this._mouseCoordsService=a;this._optionsService=l;this._mouseStateService=h;this._renderService=d;this._coreBrowserService=c;this._dragScrollAmount=0;this._enabled=!0;this._trimListener=this._register(new B);this._workCell=new F;this._mouseDownTimeStamp=0;this._oldHasSelection=!1;this._oldSelectionStart=void 0;this._oldSelectionEnd=void 0;this._onLinuxMouseSelection=this._register(new b);this.onLinuxMouseSelection=this._onLinuxMouseSelection.event;this._onRedrawRequest=this._register(new b);this.onRequestRedraw=this._onRedrawRequest.event;this._onSelectionChange=this._register(new b);this.onSelectionChange=this._onSelectionChange.event;this._onRequestScrollLines=this._register(new b);this.onRequestScrollLines=this._onRequestScrollLines.event;this._mouseMoveListener=u=>this._handleMouseMove(u),this._mouseUpListener=u=>this._handleMouseUp(u),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(u=>this._handleTrim(u)),this._register(this._bufferService.buffers.onBufferActivate(u=>this._handleBufferActivate(u))),this.enable(),this._model=new ji(this._bufferService),this._activeSelectionMode=0,this._register(E(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(u=>{u.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!e||!t?!1:e[0]!==t[0]||e[1]!==t[1]}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";let r=this._bufferService.buffer,s=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return"";let a=e[0]a.replace(oo," ")).join(Ue?`\r ++WARNING: This link could potentially be dangerous`)){let t=window.open();if(t){try{t.opener=null}catch{}t.location.href=i}else console.warn("Opening link blocked as opener could not be cleared")}}var Be=H("CharSizeService"),z=H("CoreBrowserService"),Oe=H("MouseCoordsService"),Ks=H("MouseService"),G=H("RenderService"),Ci=H("SelectionService"),Ii=H("CharacterJoinerService"),le=H("ThemeService"),Ei=H("LinkProviderService"),zs=H("KeyboardService");function E(n){return{dispose:n}}function Ne(n){if(!n)return n;if(Array.isArray(n)){for(let i of n)i.dispose();return[]}return n.dispose(),n}var pe=class{constructor(){this._disposables=new Set;this._isDisposed=!1}get isDisposed(){return this._isDisposed}add(i){return this._isDisposed?i.dispose():this._disposables.add(i),i}dispose(){if(!this._isDisposed){this._isDisposed=!0;for(let i of this._disposables)i.dispose();this._disposables.clear()}}clear(){for(let i of this._disposables)i.dispose();this._disposables.clear()}},g=class{constructor(){this._store=new pe}dispose(){this._store.dispose()}_register(i){return this._store.add(i)}};g.None=Object.freeze({dispose(){}});var B=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(i){this._isDisposed||i===this._value||(this._value?.dispose(),this._value=i)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}};var Ce=class{constructor(){this._token=-1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(i,e){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed TimeoutTimer");this.cancel(),this._token=setTimeout(()=>{this._token=-1,i()},e)}setIfNotSet(i,e){if(this._isDisposed)throw new Error("Calling setIfNotSet on a disposed TimeoutTimer");this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,i()},e))}},yi=class{constructor(){this._isScheduled=!1;this._isDisposed=!1}dispose(){this.cancel(),this._isDisposed=!0}cancel(){this._isScheduled=!1}set(i){if(this._isDisposed)throw new Error("Calling set on a disposed MicrotaskTimer");this._isScheduled||(this._isScheduled=!0,queueMicrotask(()=>{this._isScheduled&&(this._isScheduled=!1,i())}))}},xi=class{constructor(){this._isDisposed=!1}cancel(){this._disposable?.dispose(),this._disposable=void 0}cancelAndSet(i,e,t=globalThis){if(this._isDisposed)throw new Error("Calling cancelAndSet on a disposed IntervalTimer");this.cancel();let r=t.setInterval(()=>{i()},e);this._disposable={dispose:()=>{t.clearInterval(r),this._disposable=void 0}}}dispose(){this.cancel(),this._isDisposed=!0}};function re(n){let i=n;if(i?.ownerDocument?.defaultView)return i.ownerDocument.defaultView;let e=n;return e?.view?e.view:window}var Gr=class{constructor(i,e,t,r){this._node=i,this._type=e,this._handler=t,this._options=r,i.addEventListener(e,t,r)}dispose(){!this._node||!this._handler||(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}};function I(n,i,e,t){return new Gr(n,i,e,t)}function Vr(n,i,e,t){return I(n,i,e,t)}var ae={CLICK:"click",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_LEAVE:"mouseleave",KEY_DOWN:"keydown",KEY_UP:"keyup",INPUT:"input",BLUR:"blur",FOCUS:"focus",CHANGE:"change",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_UP:"pointerup",MOUSE_WHEEL:"wheel",WHEEL:"wheel"};function Vs(n){let i=n.getBoundingClientRect(),e=re(n);return{left:i.left+e.scrollX,top:i.top+e.scrollY,width:i.width,height:i.height}}var wi=class{constructor(i,e){this._runner=i;this.priority=e;this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(i){console.error(i)}}static sort(i,e){return e.priority-i.priority}},Gs=new Map;function $s(n){let i=Gs.get(n);return i||(i={next:[],current:[],animFrameRequested:!1,inAnimationFrameRunner:!1},Gs.set(n,i)),i}function Wn(n){let i=$s(n);for(i.animFrameRequested=!1,i.current=i.next,i.next=[],i.inAnimationFrameRunner=!0;i.current.length>0;)i.current.sort(wi.sort),i.current.shift().execute();i.inAnimationFrameRunner=!1}function it(n,i,e=0){let t=$s(n),r=new wi(i,e);return t.next.push(r),t.animFrameRequested||(t.animFrameRequested=!0,n.requestAnimationFrame(()=>Wn(n))),r}var Ti=class extends xi{constructor(i){super(),this._defaultTarget=i?re(i):void 0}cancelAndSet(i,e,t){super.cancelAndSet(i,e,t??this._defaultTarget??window)}};var Te=class{constructor(i){this.domNode=i;this._width="";this._height="";this._top="";this._left="";this._bottom="";this._right="";this._className="";this._position="";this._layerHint=!1;this._contain="none"}setWidth(i){let e=st(i);this._width!==e&&(this._width=e,this.domNode.style.width=this._width)}setHeight(i){let e=st(i);this._height!==e&&(this._height=e,this.domNode.style.height=this._height)}setTop(i){let e=st(i);this._top!==e&&(this._top=e,this.domNode.style.top=this._top)}setLeft(i){let e=st(i);this._left!==e&&(this._left=e,this.domNode.style.left=this._left)}setBottom(i){let e=st(i);this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom)}setRight(i){let e=st(i);this._right!==e&&(this._right=e,this.domNode.style.right=this._right)}setClassName(i){this._className!==i&&(this._className=i,this.domNode.className=this._className)}toggleClassName(i,e){this.domNode.classList.toggle(i,e),this._className=this.domNode.className}setPosition(i){this._position!==i&&(this._position=i,this.domNode.style.position=this._position)}setLayerHinting(i){this._layerHint!==i&&(this._layerHint=i,i?this.domNode.style.transform="translate3d(0px, 0px, 0px)":this.domNode.style.transform="")}setContain(i){this._contain!==i&&(this._contain=i,this.domNode.style.contain=this._contain)}setAttribute(i,e){this.domNode.setAttribute(i,e)}};function st(n){return typeof n=="number"?`${n}px`:n}var ze={};Pn(ze,{getSafariVersion:()=>Kn,getZoomFactor:()=>Xr,isChrome:()=>zt,isChromeOS:()=>Yr,isFirefox:()=>ot,isLegacyEdge:()=>Un,isLinux:()=>Gt,isMac:()=>te,isNode:()=>$r,isSafari:()=>Di,isWindows:()=>Ke});var $r=!!(typeof process<"u"&&"title"in process&&(typeof navigator>"u"||navigator.userAgent.startsWith("Node.js/"))),nt=$r?"node":navigator.userAgent,qr=$r?"node":navigator.platform,ot=nt.includes("Firefox"),zt=nt.includes("Chrome"),Un=nt.includes("Edge"),Di=/^((?!chrome|android).)*safari/i.test(nt);function Xr(n){return 1}function Kn(){if(!Di)return 0;let n=nt.match(/Version\/(\d+)/);return n===null||n.length<2?0:parseInt(n[1],10)}var te=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(qr),Ke=["Windows","Win16","Win32","WinCE"].includes(qr),Gt=qr.indexOf("Linux")>=0,Yr=/\bCrOS\b/.test(nt);var qs=new WeakMap;function zn(n){if(!n.parent||n.parent===n)return null;try{let i=n.location,e=n.parent.location;if(i.origin!=="null"&&e.origin!=="null"&&i.origin!==e.origin)return null}catch{return null}return n.parent}var jr=class{static _getSameOriginWindowChain(i){let e=qs.get(i);if(!e){e=[],qs.set(i,e);let t=i,r;do r=zn(t),r?e.push({window:new WeakRef(t),iframeElement:t.frameElement??null}):e.push({window:new WeakRef(t),iframeElement:null}),t=r;while(t)}return e.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(i,e){if(!e||i===e)return{top:0,left:0};let t=0,r=0,s=this._getSameOriginWindowChain(i);for(let o of s){let a=o.window.deref();if(t+=a?.scrollY??0,r+=a?.scrollX??0,a===e||!o.iframeElement)break;let l=o.iframeElement.getBoundingClientRect();t+=l.top,r+=l.left}return{top:t,left:r}}},at=class{constructor(i,e){this.timestamp=Date.now(),this.browserEvent=e,this.leftButton=e.button===0,this.middleButton=e.button===1,this.rightButton=e.button===2,this.buttons=e.buttons,this.target=e.target,this.detail=e.detail??1,e.type==="dblclick"&&(this.detail=2),this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,typeof e.pageX=="number"?(this.posx=e.pageX,this.posy=e.pageY):(this.posx=e.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=e.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);let t=jr.getPositionOfChildWindowRelativeToAncestorWindow(i,e.view);this.posx-=t.left,this.posy-=t.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}},Vt=class{constructor(i,e=0,t=0){this.browserEvent=i??null,this.target=i?i.target??i.targetNode??i.srcElement??null:null,this.deltaY=t,this.deltaX=e;let r=!1;if(zt){let s=navigator.userAgent.match(/Chrome\/(\d+)/);r=(s?parseInt(s[1],10):123)<=122}if(i){let s=i,o=i,a=i.view?.devicePixelRatio??1;if(typeof s.wheelDeltaY<"u")r?this.deltaY=s.wheelDeltaY/(120*a):this.deltaY=s.wheelDeltaY/120;else if(typeof o.VERTICAL_AXIS<"u"&&o.axis===o.VERTICAL_AXIS)this.deltaY=-o.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?ot&&!te?this.deltaY=-i.deltaY/3:this.deltaY=-i.deltaY:this.deltaY=-i.deltaY/40}if(typeof s.wheelDeltaX<"u")Di&&Ke?this.deltaX=-(s.wheelDeltaX/120):r?this.deltaX=s.wheelDeltaX/(120*a):this.deltaX=s.wheelDeltaX/120;else if(typeof o.HORIZONTAL_AXIS<"u"&&o.axis===o.HORIZONTAL_AXIS)this.deltaX=-i.detail/3;else if(i.type==="wheel"){let l=i;l.deltaMode===l.DOM_DELTA_LINE?ot&&!te?this.deltaX=-i.deltaX/3:this.deltaX=-i.deltaX:this.deltaX=-i.deltaX/40}this.deltaY===0&&this.deltaX===0&&i.wheelDelta&&(r?this.deltaY=i.wheelDelta/(120*a):this.deltaY=i.wheelDelta/120)}}preventDefault(){this.browserEvent?.preventDefault()}stopPropagation(){this.browserEvent?.stopPropagation()}};var lt=class{constructor(){this._hooks=new pe;this._pointerMoveCallback=null;this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(i){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;let e=this._onStopCallback;this._onStopCallback=null,i&&e&&e()}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(i,e,t,r,s){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=r,this._onStopCallback=s;let o=i;try{i.setPointerCapture(e),this._hooks.add(E(()=>{try{i.releasePointerCapture(e)}catch{}}))}catch{o=re(i)}this._hooks.add(I(o,ae.POINTER_MOVE,a=>{if(a.buttons!==t){this.stopMonitoring(!0);return}a.preventDefault(),this._pointerMoveCallback(a)})),this._hooks.add(I(o,ae.POINTER_UP,a=>this.stopMonitoring(!0)))}};var Fe=class extends g{_onclick(i,e){this._register(I(i,ae.CLICK,t=>e(new at(re(i),t))))}_onmouseover(i,e){this._register(I(i,ae.MOUSE_OVER,t=>e(new at(re(i),t))))}_onmouseleave(i,e){this._register(I(i,ae.MOUSE_LEAVE,t=>e(new at(re(i),t))))}};var Ri=class extends Fe{constructor(i){super(),this._handleActivate=i.handleActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="xterm-arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=i.bgWidth+"px",this.bgDomNode.style.height=i.bgHeight+"px",typeof i.top<"u"&&(this.bgDomNode.style.top="0px"),typeof i.left<"u"&&(this.bgDomNode.style.left="0px"),typeof i.bottom<"u"&&(this.bgDomNode.style.bottom="0px"),typeof i.right<"u"&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=i.className,this.domNode.style.position="absolute";let e=Math.min(i.bgWidth,i.bgHeight);this.domNode.style.width=e+"px",this.domNode.style.height=e+"px",typeof i.top<"u"&&(this.domNode.style.top=i.top+"px"),typeof i.left<"u"&&(this.domNode.style.left=i.left+"px"),typeof i.bottom<"u"&&(this.domNode.style.bottom=i.bottom+"px"),typeof i.right<"u"&&(this.domNode.style.right=i.right+"px"),this._pointerMoveMonitor=this._register(new lt),this._register(Vr(this.bgDomNode,ae.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._register(Vr(this.domNode,ae.POINTER_DOWN,t=>this._arrowPointerDown(t))),this._pointerdownRepeatTimer=this._register(new Ti),this._pointerdownScheduleRepeatTimer=this._register(new Ce)}_arrowPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._handleActivate(),1e3/24,re(i))};this._handleActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(e,200),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,t=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),i.preventDefault()}};var v=class{constructor(){this._listeners=[];this._disposed=!1}get event(){return this._event?this._event:(this._event=(i,e,t)=>{if(this._disposed)return E(()=>{});let r={fn:i,thisArgs:e};this._listeners=this._listeners.slice(),this._listeners.push(r);let s=E(()=>{let o=this._listeners.indexOf(r);o!==-1&&(this._listeners=this._listeners.slice(),this._listeners.splice(o,1))});return t&&(Array.isArray(t)?t.push(s):t.add(s)),s},this._event)}fire(i){if(this._disposed||!this._listeners.length)return;if(this._listeners.length===1){this._listeners[0].fn.call(this._listeners[0].thisArgs,i);return}let e=this._listeners;for(let t=0,r=e.length;t{function n(s,o){return s(a=>o.fire(a))}r.forward=n;function i(s,o){return(a,l,h)=>s(d=>a.call(l,o(d)),void 0,h)}r.map=i;function e(...s){return(o,a,l)=>{let h=new pe;for(let d of s)h.add(d(c=>o.call(a,c)));return l&&(Array.isArray(l)?l.push(h):l.add(h)),h}}r.any=e;function t(s,o,a){return o(a),s(l=>o(l))}r.runAndSubscribe=t})(Y||={});var Zr=class n{constructor(i,e,t,r,s,o,a){this._forceIntegerValues=i;this._scrollStateBrand=void 0;this._forceIntegerValues&&(e=e|0,t=t|0,r=r|0,s=s|0,o=o|0,a=a|0),this.rawScrollLeft=r,this.rawScrollTop=a,e<0&&(e=0),r+e>t&&(r=t-e),r<0&&(r=0),s<0&&(s=0),a+s>o&&(a=o-s),a<0&&(a=0),this.width=e,this.scrollWidth=t,this.scrollLeft=r,this.height=s,this.scrollHeight=o,this.scrollTop=a}equals(i){return this.rawScrollLeft===i.rawScrollLeft&&this.rawScrollTop===i.rawScrollTop&&this.width===i.width&&this.scrollWidth===i.scrollWidth&&this.scrollLeft===i.scrollLeft&&this.height===i.height&&this.scrollHeight===i.scrollHeight&&this.scrollTop===i.scrollTop}withScrollDimensions(i,e){return new n(this._forceIntegerValues,typeof i.width<"u"?i.width:this.width,typeof i.scrollWidth<"u"?i.scrollWidth:this.scrollWidth,e?this.rawScrollLeft:this.scrollLeft,typeof i.height<"u"?i.height:this.height,typeof i.scrollHeight<"u"?i.scrollHeight:this.scrollHeight,e?this.rawScrollTop:this.scrollTop)}withScrollPosition(i){return new n(this._forceIntegerValues,this.width,this.scrollWidth,typeof i.scrollLeft<"u"?i.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof i.scrollTop<"u"?i.scrollTop:this.rawScrollTop)}createScrollEvent(i,e){let t=this.width!==i.width,r=this.scrollWidth!==i.scrollWidth,s=this.scrollLeft!==i.scrollLeft,o=this.height!==i.height,a=this.scrollHeight!==i.scrollHeight,l=this.scrollTop!==i.scrollTop;return{inSmoothScrolling:e,oldWidth:i.width,oldScrollWidth:i.scrollWidth,oldScrollLeft:i.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:i.height,oldScrollHeight:i.scrollHeight,oldScrollTop:i.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:t,scrollWidthChanged:r,scrollLeftChanged:s,heightChanged:o,scrollHeightChanged:a,scrollTopChanged:l}}},ct=class extends g{constructor(e){super();this._scrollableBrand=void 0;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new Zr(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){let r=this._state.withScrollDimensions(e,t);this._setState(r,!!this._smoothScrolling),this._smoothScrolling?.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){let t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(this._smoothScrollDuration===0){this.setScrollPositionNow(e);return}if(this._smoothScrolling){e={scrollLeft:typeof e.scrollLeft>"u"?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:typeof e.scrollTop>"u"?this._smoothScrolling.to.scrollTop:e.scrollTop};let r=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===r.scrollLeft&&this._smoothScrolling.to.scrollTop===r.scrollTop)return;let s;t?s=new $t(this._smoothScrolling.from,r,this._smoothScrolling.startTime,this._smoothScrolling.duration):s=$t.start(this._state,r,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=s}else{let r=this._state.withScrollPosition(e);this._smoothScrolling=$t.start(this._state,r,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;let e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);if(this._setState(t,!0),!!this._smoothScrolling){if(e.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(e,t){let r=this._state;r.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(r,t)))}},Li=class{constructor(i,e,t){this.scrollLeft=i,this.scrollTop=e,this.isDone=t}};function Jr(n,i){let e=i-n;return function(t){return n+e*$n(t)}}function Gn(n,i,e){return function(t){return t2.5*t){let s,o;return i{this._domNode?.setClassName(this._visibleClassName)},0))}_hide(i){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode?.setClassName(this._invisibleClassName+(i?" xterm-fade":"")))}};var qn=140,ht=class extends Fe{constructor(i){super(),this._lazyRender=i.lazyRender,this._host=i.host,this._scrollable=i.scrollable,this._scrollByPage=i.scrollByPage,this._scrollbarState=i.scrollbarState,this._visibilityController=this._register(new Ai(i.visibility,"xterm-visible xterm-scrollbar "+i.extraScrollbarClassName,"xterm-invisible xterm-scrollbar "+i.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new lt),this._shouldRender=!0,this.domNode=new Te(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this._register(I(this.domNode.domNode,ae.POINTER_DOWN,e=>this._domNodePointerDown(e)))}_createArrow(i){let e=this._register(new Ri(i));return this.domNode.domNode.appendChild(e.bgDomNode),this.domNode.domNode.appendChild(e.domNode),e}_createSlider(i,e,t,r){this.slider=new Te(document.createElement("div")),this.slider.setClassName("xterm-slider"),this.slider.setPosition("absolute"),this.slider.setTop(i),this.slider.setLeft(e),typeof t=="number"&&this.slider.setWidth(t),typeof r=="number"&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(I(this.slider.domNode,ae.POINTER_DOWN,s=>{s.button===0&&(s.preventDefault(),this._sliderPointerDown(s))})),this._onclick(this.slider.domNode,s=>{s.leftButton&&s.stopPropagation()})}_handleElementSize(i){return this._scrollbarState.setVisibleSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollSize(i){return this._scrollbarState.setScrollSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_handleElementScrollPosition(i){return this._scrollbarState.setScrollPosition(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(i){i.target===this.domNode.domNode&&this._handlePointerDown(i)}delegatePointerDown(i){let e=this.domNode.domNode.getClientRects()[0].top,t=e+this._scrollbarState.getSliderPosition(),r=e+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),s=this._sliderPointerPosition(i);t<=s&&s<=r?i.button===0&&(i.preventDefault(),this._sliderPointerDown(i)):this._handlePointerDown(i)}_handlePointerDown(i){let e,t;if(i.target===this.domNode.domNode&&typeof i.offsetX=="number"&&typeof i.offsetY=="number")e=i.offsetX,t=i.offsetY;else{let s=Vs(this.domNode.domNode);e=i.pageX-s.left,t=i.pageY-s.top}let r=this._pointerDownRelativePosition(e,t);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),i.button===0&&(i.preventDefault(),this._sliderPointerDown(i))}_sliderPointerDown(i){if(!i.target||!(i.target instanceof Element))return;let e=this._sliderPointerPosition(i),t=this._sliderOrthogonalPointerPosition(i),r=this._scrollbarState.clone();this.slider.toggleClassName("xterm-active",!0),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,s=>{let o=this._sliderOrthogonalPointerPosition(s),a=Math.abs(o-t);if(Ke&&a>qn){this._setDesiredScrollPositionNow(r.getScrollPosition());return}let h=this._sliderPointerPosition(s)-e;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(h))},()=>{this.slider.toggleClassName("xterm-active",!1),this._host.handleDragEnd()}),this._host.handleDragStart()}_setDesiredScrollPositionNow(i){let e={};this.writeScrollPosition(e,i),this._scrollable.setScrollPositionNow(e)}updateScrollbarSize(i){this._updateScrollbarSize(i),this._scrollbarState.setScrollbarSize(i),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}};var dt=class n{constructor(i,e,t,r,s,o){this._scrollbarSize=Math.round(e),this._oppositeScrollbarSize=Math.round(t),this._arrowSize=Math.round(i),this._visibleSize=r,this._scrollSize=s,this._scrollPosition=o,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new n(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(i){let e=Math.round(i);return this._visibleSize!==e?(this._visibleSize=e,this._refreshComputedValues(),!0):!1}setScrollSize(i){let e=Math.round(i);return this._scrollSize!==e?(this._scrollSize=e,this._refreshComputedValues(),!0):!1}setScrollPosition(i){let e=Math.round(i);return this._scrollPosition!==e?(this._scrollPosition=e,this._refreshComputedValues(),!0):!1}setScrollbarSize(i){this._scrollbarSize=Math.round(i)}setArrowSize(i){let e=Math.round(i);this._arrowSize!==e&&(this._arrowSize=e,this._refreshComputedValues())}setOppositeScrollbarSize(i){this._oppositeScrollbarSize=Math.round(i)}static _computeValues(i,e,t,r,s){let o=Math.max(0,t-i),a=Math.max(0,o-2*e),l=r>0&&r>t;if(!l)return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(a),computedSliderRatio:0,computedSliderPosition:0};let h=Math.round(Math.max(20,Math.floor(t*a/r))),d=(a-h)/(r-t),c=s*d;return{computedAvailableSize:Math.round(o),computedIsNeeded:l,computedSliderSize:Math.round(h),computedSliderRatio:d,computedSliderPosition:Math.round(c)}}_refreshComputedValues(){let i=n._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=i.computedAvailableSize,this._computedIsNeeded=i.computedIsNeeded,this._computedSliderSize=i.computedSliderSize,this._computedSliderRatio=i.computedSliderRatio,this._computedSliderPosition=i.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize-this._computedSliderSize/2;return Math.round(e/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(i){if(!this._computedIsNeeded)return 0;let e=i-this._arrowSize,t=this._scrollPosition;return ethis._arrowScroll(-this._arrowScrollDelta)}),this._arrowDown=this._createArrow({className:"xterm-scra xterm-arrow-down",bottom:0,left:0,bgWidth:t,bgHeight:t,handleActivate:()=>this._arrowScroll(this._arrowScrollDelta)})),this._updateArrowSize(this._arrowUp,t),this._updateArrowSize(this._arrowDown,t),!this._arrowUp||!this._arrowDown)return;let r=e?"":"none";this._arrowUp.bgDomNode.style.display=r,this._arrowUp.domNode.style.display=r,this._arrowDown.bgDomNode.style.display=r,this._arrowDown.domNode.style.display=r}_updateArrowSize(e,t){e&&(e.bgDomNode.style.width=`${t}px`,e.bgDomNode.style.height=`${t}px`,e.domNode.style.width=`${t}px`,e.domNode.style.height=`${t}px`)}updateOptions(e){let t=e.verticalHasArrows?e.verticalScrollbarSize:0;this._scrollbarState.setArrowSize(t),this._setArrows(e.verticalHasArrows,e.verticalScrollbarSize),this.updateScrollbarSize(e.vertical===2?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}};var Qr=class{constructor(i,e,t){this.timestamp=i,this.deltaX=e,this.deltaY=t,this.score=0}},Oi=class Oi{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let i=1,e=0,t=1,r=this._rear;for(;r!==-1;){let s=r===this._front?i:Math.pow(2,-t);if(i-=s,e+=this._memory[r].score*s,r===this._front)break;r=(this._capacity+r-1)%this._capacity,t++}return e<=.5}acceptStandardWheelEvent(i){if(zt){let e=re(i.browserEvent),t=Xr(e);this.accept(Date.now(),i.deltaX*t,i.deltaY*t)}else this.accept(Date.now(),i.deltaX,i.deltaY)}accept(i,e,t){let r=null,s=new Qr(i,e,t);this._front===-1&&this._rear===-1?(this._memory[0]=s,this._front=0,this._rear=0):(r=this._memory[this._rear],this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=s),s.score=this._computeScore(s,r)}_computeScore(i,e){if(Math.abs(i.deltaX)>0&&Math.abs(i.deltaY)>0)return 1;let t=.5;if((!this._isAlmostInt(i.deltaX)||!this._isAlmostInt(i.deltaY))&&(t+=.25),e){let r=Math.abs(i.deltaX),s=Math.abs(i.deltaY),o=Math.abs(e.deltaX),a=Math.abs(e.deltaY),l=Math.max(Math.min(r,o),1),h=Math.max(Math.min(s,a),1),d=Math.max(r,o),c=Math.max(s,a);d%l===0&&c%h===0&&(t-=.5)}return Math.min(Math.max(t,0),1)}_isAlmostInt(i){return Math.abs(Math.round(i)-i)<.01}};Oi.INSTANCE=new Oi;var es=Oi,Bi=class extends Fe{constructor(e,t,r){super();this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;t=t??{};let s,o=!r;r?s=r:(t.mouseWheelSmoothScroll=!1,s=new ct({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:l=>it(re(e),l)})),this._options=Xn(t),this._scrollable=s,this._register(this._scrollable.onScroll(l=>{this._handleScroll(l),this._onScroll.fire(l)})),o&&this._register(this._scrollable);let a={handleMouseWheel:l=>this._handleMouseWheel(l),handleDragStart:()=>this._handleDragStart(),handleDragEnd:()=>this._handleDragEnd()};this._verticalScrollbar=this._register(new Mi(this._scrollable,this._options,a)),this._horizontalScrollbar=this._register(new Pi(this._scrollable,this._options,a)),this._domNode=document.createElement("div"),this._domNode.className="xterm-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=new Te(document.createElement("div")),this._leftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=new Te(document.createElement("div")),this._topShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=new Te(document.createElement("div")),this._topLeftShadowDomNode.setClassName("xterm-shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode??this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this._onmouseover(this._listenOnDomNode,l=>this._handleMouseOver(l)),this._onmouseleave(this._listenOnDomNode,l=>this._handleMouseLeave(l)),this._hideTimeout=this._register(new Ce),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}get options(){return this._options}dispose(){this._mouseWheelToDispose=Ne(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}updateClassName(e){this._options.className=e,te&&(this._options.className+=" xterm-mac"),this._domNode.className="xterm-scrollable-element "+this._options.className}updateOptions(e){typeof e.handleMouseWheel<"u"&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof e.mouseWheelScrollSensitivity<"u"&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),typeof e.fastScrollSensitivity<"u"&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),typeof e.scrollPredominantAxis<"u"&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),typeof e.horizontal<"u"&&(this._options.horizontal=e.horizontal),typeof e.vertical<"u"&&(this._options.vertical=e.vertical),typeof e.horizontalHasArrows<"u"&&(this._options.horizontalHasArrows=e.horizontalHasArrows),typeof e.verticalHasArrows<"u"&&(this._options.verticalHasArrows=e.verticalHasArrows),typeof e.horizontalScrollbarSize<"u"&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),typeof e.verticalScrollbarSize<"u"&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),typeof e.scrollByPage<"u"&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._handleMouseWheel(new Vt(e))}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=Ne(this._mouseWheelToDispose),e)){let r=s=>{this._handleMouseWheel(new Vt(s))};this._mouseWheelToDispose.push(I(this._listenOnDomNode,ae.MOUSE_WHEEL,r,{passive:!1}))}}_handleMouseWheel(e){if(e.browserEvent?.defaultPrevented)return;let t=es.INSTANCE;t.acceptStandardWheelEvent(e);let r=!1;if(e.deltaY||e.deltaX){let o=e.deltaY*this._options.mouseWheelScrollSensitivity,a=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&a+o===0?a=o=0:Math.abs(o)>=Math.abs(a)?a=0:o=0),this._options.flipAxes&&([o,a]=[a,o]);let l=!te&&e.browserEvent&&e.browserEvent.shiftKey;(this._options.scrollYToX||l)&&!a&&(a=o,o=0),e.browserEvent&&e.browserEvent.altKey&&(a=a*this._options.fastScrollSensitivity,o=o*this._options.fastScrollSensitivity);let h=this._scrollable.getFutureScrollPosition(),d={};if(o){let c=50*o,u=h.scrollTop-(c<0?Math.floor(c):Math.ceil(c));this._verticalScrollbar.writeScrollPosition(d,u)}if(a){let c=50*a,u=h.scrollLeft-(c<0?Math.floor(c):Math.ceil(c));this._horizontalScrollbar.writeScrollPosition(d,u)}d=this._scrollable.validateScrollPosition(d),(h.scrollLeft!==d.scrollLeft||h.scrollTop!==d.scrollTop)&&(this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(d):this._scrollable.setScrollPositionNow(d),r=!0)}let s=r;!s&&this._options.alwaysConsumeMouseWheel&&(s=!0),!s&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(s=!0),s&&(e.preventDefault(),e.stopPropagation())}_handleScroll(e){this._shouldRender=this._horizontalScrollbar.handleScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.handleScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){let e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,r=e.scrollLeft>0,s=r?" xterm-shadow-left":"",o=t?" xterm-shadow-top":"",a=r||t?" xterm-shadow-top-left-corner":"";this._leftShadowDomNode.setClassName(`xterm-shadow${s}`),this._topShadowDomNode.setClassName(`xterm-shadow${o}`),this._topLeftShadowDomNode.setClassName(`xterm-shadow${a}${o}${s}`)}}_handleDragStart(){this._isDragging=!0,this._reveal()}_handleDragEnd(){this._isDragging=!1,this._hide()}_handleMouseLeave(e){this._mouseIsOver=!1,this._hide()}_handleMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),500)}};function Xn(n){let i={lazyRender:typeof n.lazyRender<"u"?n.lazyRender:!1,className:typeof n.className<"u"?n.className:"",useShadows:typeof n.useShadows<"u"?n.useShadows:!0,handleMouseWheel:typeof n.handleMouseWheel<"u"?n.handleMouseWheel:!0,flipAxes:typeof n.flipAxes<"u"?n.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof n.consumeMouseWheelIfScrollbarIsNeeded<"u"?n.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof n.alwaysConsumeMouseWheel<"u"?n.alwaysConsumeMouseWheel:!1,scrollYToX:typeof n.scrollYToX<"u"?n.scrollYToX:!1,mouseWheelScrollSensitivity:typeof n.mouseWheelScrollSensitivity<"u"?n.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof n.fastScrollSensitivity<"u"?n.fastScrollSensitivity:5,scrollPredominantAxis:typeof n.scrollPredominantAxis<"u"?n.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof n.mouseWheelSmoothScroll<"u"?n.mouseWheelSmoothScroll:!0,listenOnDomNode:typeof n.listenOnDomNode<"u"?n.listenOnDomNode:null,horizontal:typeof n.horizontal<"u"?n.horizontal:1,horizontalScrollbarSize:typeof n.horizontalScrollbarSize<"u"?n.horizontalScrollbarSize:10,horizontalSliderSize:typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:0,horizontalHasArrows:typeof n.horizontalHasArrows<"u"?n.horizontalHasArrows:!1,vertical:typeof n.vertical<"u"?n.vertical:1,verticalScrollbarSize:typeof n.verticalScrollbarSize<"u"?n.verticalScrollbarSize:10,verticalHasArrows:typeof n.verticalHasArrows<"u"?n.verticalHasArrows:!1,verticalSliderSize:typeof n.verticalSliderSize<"u"?n.verticalSliderSize:0,scrollByPage:typeof n.scrollByPage<"u"?n.scrollByPage:!1};return i.horizontalSliderSize=typeof n.horizontalSliderSize<"u"?n.horizontalSliderSize:i.horizontalScrollbarSize,i.verticalSliderSize=typeof n.verticalSliderSize<"u"?n.verticalSliderSize:i.verticalScrollbarSize,te&&(i.className+=" xterm-mac"),i}var ut=class extends g{constructor(e,t,r,s,o,a,l,h,d){super();this._bufferService=r;this._coreService=o;this._optionsService=h;this._renderService=d;this._onRequestScrollLines=this._register(new v);this.onRequestScrollLines=this._onRequestScrollLines.event;this._isSyncing=!1;this._isHandlingScroll=!1;this._suppressOnScrollHandler=!1;this._needsSyncOnRender=!1;let c=this._register(new ct({forceIntegerValues:!1,smoothScrollDuration:this._optionsService.rawOptions.smoothScrollDuration,scheduleAtNextAnimationFrame:u=>it(s.window,u)}));this._register(this._optionsService.onSpecificOptionChange("smoothScrollDuration",()=>{c.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration)})),this._scrollableElement=this._register(new Bi(t,{vertical:1,horizontal:2,useShadows:!1,mouseWheelSmoothScroll:!0,verticalHasArrows:this._optionsService.rawOptions.scrollbar?.showArrows??!1,...this._getChangeOptions()},c)),this._register(this._optionsService.onMultipleOptionChange(["scrollSensitivity","fastScrollSensitivity","scrollbar"],()=>this._scrollableElement.updateOptions(this._getChangeOptions()))),this._register(a.onProtocolChange(u=>{this._scrollableElement.updateOptions({handleMouseWheel:!(u&16)})})),this._scrollableElement.setScrollDimensions({height:0,scrollHeight:0}),this._register(Y.runAndSubscribe(l.onChangeColors,()=>{e.style.backgroundColor=l.colors.background.css,this._scrollableElement.getDomNode().style.backgroundColor=l.colors.background.css})),e.appendChild(this._scrollableElement.getDomNode()),this._register(E(()=>this._scrollableElement.getDomNode().remove())),this._styleElement=s.mainDocument.createElement("style"),t.appendChild(this._styleElement),this._register(E(()=>this._styleElement.remove())),this._register(Y.runAndSubscribe(l.onChangeColors,()=>{this._styleElement.textContent=[".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {",` background: ${l.colors.scrollbarSliderBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {",` background: ${l.colors.scrollbarSliderHoverBackground.css};`,"}",".xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {",` background: ${l.colors.scrollbarSliderActiveBackground.css};`,"}"].join(` ++`)})),this._register(this._bufferService.onResize(()=>this.queueSync())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._latestYDisp=void 0,this.queueSync()})),this._register(this._bufferService.onScroll(()=>this._sync())),this._register(this._renderService.onRender(()=>{this._needsSyncOnRender&&(this._needsSyncOnRender=!1,this._sync())})),this._register(this._scrollableElement.onScroll(u=>this._handleScroll(u)))}scrollLines(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({reuseAnimation:!0,scrollTop:t.scrollTop+e*this._renderService.dimensions.css.cell.height})}scrollToLine(e,t){t&&(this._latestYDisp=e),this._scrollableElement.setScrollPosition({reuseAnimation:!t,scrollTop:e*this._renderService.dimensions.css.cell.height})}_getChangeOptions(){let e=this._optionsService.rawOptions.scrollbar?.showScrollbar??!0,t=this._optionsService.rawOptions.scrollbar?.showArrows??!1,r=e?this._optionsService.rawOptions.scrollbar?.width??14:0;return{mouseWheelScrollSensitivity:this._optionsService.rawOptions.scrollSensitivity,fastScrollSensitivity:this._optionsService.rawOptions.fastScrollSensitivity,vertical:e?1:2,verticalScrollbarSize:r,verticalHasArrows:t}}queueSync(e){e!==void 0&&(this._latestYDisp=e),this._queuedAnimationFrame===void 0&&(this._queuedAnimationFrame=this._renderService.addRefreshCallback(()=>{this._queuedAnimationFrame=void 0,this._sync(this._latestYDisp)}))}_sync(e=this._bufferService.buffer.ydisp){if(!(!this._renderService||this._isSyncing)){if(this._coreService.decPrivateModes.synchronizedOutput){this._needsSyncOnRender=!0;return}this._isSyncing=!0,this._suppressOnScrollHandler=!0,this._scrollableElement.setScrollDimensions({height:this._renderService.dimensions.css.canvas.height,scrollHeight:this._renderService.dimensions.css.cell.height*this._bufferService.buffer.lines.length}),this._suppressOnScrollHandler=!1,e!==this._latestYDisp&&this._scrollableElement.setScrollPosition({scrollTop:e*this._renderService.dimensions.css.cell.height}),this._isSyncing=!1}}_handleScroll(e){if(!this._renderService||this._isHandlingScroll||this._suppressOnScrollHandler)return;this._isHandlingScroll=!0;let t=Math.round(e.scrollTop/this._renderService.dimensions.css.cell.height),r=t-this._bufferService.buffer.ydisp;r!==0&&(this._latestYDisp=t,this._onRequestScrollLines.fire(r)),this._isHandlingScroll=!1}handleTouchScroll(e){let t=this._scrollableElement.getScrollPosition();this._scrollableElement.setScrollPosition({scrollTop:t.scrollTop-e})}};ut=y([m(2,D),m(3,z),m(4,X),m(5,Me),m(6,le),m(7,R),m(8,G)],ut);var ft=class extends g{constructor(e,t,r,s,o){super();this._screenElement=e;this._bufferService=t;this._coreBrowserService=r;this._decorationService=s;this._renderService=o;this._decorationElements=new Map;this._altBufferIsActive=!1;this._dimensionsChanged=!1;this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this._register(this._renderService.onRenderedViewportChange(()=>this._doRefreshDecorations())),this._register(this._renderService.onDimensionsChange(()=>{this._dimensionsChanged=!0,this._queueRefresh()})),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt})),this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh())),this._register(this._decorationService.onDecorationRemoved(a=>this._removeDecoration(a))),this._register(E(()=>{this._container.remove(),this._decorationElements.clear()}))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback(()=>{this._doRefreshDecorations(),this._animationFrame=void 0}))}_doRefreshDecorations(){for(let e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){let t=this._coreBrowserService.mainDocument.createElement("div");t.classList.add("xterm-decoration"),t.classList.toggle("xterm-decoration-top-layer",e?.options?.layer==="top"),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,t.style.top=`${(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height}px`,t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;let r=e.options.x??0;return r&&r>this._bufferService.cols&&(t.style.display="none"),this._refreshXPosition(e,t),t}_refreshStyle(e){let t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let r=this._decorationElements.get(e);r||(r=this._createElement(e),e.element=r,this._decorationElements.set(e,r),this._container.appendChild(r),e.onDispose(()=>{this._decorationElements.delete(e),r.remove()})),r.style.display=this._altBufferIsActive?"none":"block",this._altBufferIsActive||(r.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,r.style.height=`${(e.options.height||1)*this._renderService.dimensions.css.cell.height}px`,r.style.top=`${t*this._renderService.dimensions.css.cell.height}px`,r.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`),e.onRenderEmitter.fire(r)}}_refreshXPosition(e,t=e.element){if(!t)return;let r=e.options.x??0;(e.options.anchor||"left")==="right"?t.style.right=r?`${r*this._renderService.dimensions.css.cell.width}px`:"":t.style.left=r?`${r*this._renderService.dimensions.css.cell.width}px`:""}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};ft=y([m(1,D),m(2,z),m(3,ge),m(4,G)],ft);var Ni=class{constructor(){this._zones=[];this._zonePool=[];this._zonePoolIndex=0;this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(i){if(i.options.overviewRulerOptions){for(let e of this._zones)if(e.color===i.options.overviewRulerOptions.color&&e.position===i.options.overviewRulerOptions.position){if(this._lineIntersectsZone(e,i.marker.line))return;if(this._lineAdjacentToZone(e,i.marker.line,i.options.overviewRulerOptions.position)){this._addLineToZone(e,i.marker.line);return}}if(this._zonePoolIndex=i.startBufferLine&&e<=i.endBufferLine}_lineAdjacentToZone(i,e,t){return e>=i.startBufferLine-this._linePadding[t||"full"]&&e<=i.endBufferLine+this._linePadding[t||"full"]}_addLineToZone(i,e){i.startBufferLine=Math.min(i.startBufferLine,e),i.endBufferLine=Math.max(i.endBufferLine,e)}};var Ie={full:0,left:0,center:0,right:0},He={full:0,left:0,center:0,right:0},qt={full:0,left:0,center:0,right:0},Ge=class extends g{constructor(e,t,r,s,o,a,l,h){super();this._viewportElement=e;this._screenElement=t;this._bufferService=r;this._decorationService=s;this._renderService=o;this._optionsService=a;this._themeService=l;this._coreBrowserService=h;this._colorZoneStore=new Ni;this._shouldUpdateDimensions=!0;this._shouldUpdateAnchor=!0;this._lastKnownBufferLength=0;this._canvas=this._coreBrowserService.mainDocument.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement),this._register(E(()=>this._canvas?.remove()));let d=this._canvas.getContext("2d");if(d)this._ctx=d;else throw new Error("Ctx cannot be null");this._register(this._decorationService.onDecorationRegistered(()=>this._queueRefresh(void 0,!0))),this._register(this._decorationService.onDecorationRemoved(()=>this._queueRefresh(void 0,!0))),this._register(this._renderService.onRenderedViewportChange(()=>this._queueRefresh())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"})),this._register(this._bufferService.onScroll(()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})),this._register(this._renderService.onDimensionsChange(()=>this._queueRefresh(!0))),this._register(this._coreBrowserService.onDprChange(()=>this._queueRefresh(!0))),this._register(this._optionsService.onSpecificOptionChange("scrollbar",()=>this._queueRefresh(!0))),this._register(this._themeService.onChangeColors(()=>this._queueRefresh())),this._register(E(()=>{this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)})),this._queueRefresh(!0)}get _width(){let e=this._optionsService.rawOptions.scrollbar;return e?.showScrollbar??!0?e?.width??0:0}_refreshDrawConstants(){let e=Math.floor((this._canvas.width-1)/3),t=Math.ceil((this._canvas.width-1)/3);He.full=this._canvas.width,He.left=e,He.center=t,He.right=e,this._refreshDrawHeightConstants(),qt.full=1,qt.left=1,qt.center=1+He.left,qt.right=1+He.left+He.center}_refreshDrawHeightConstants(){Ie.full=Math.round(2*this._coreBrowserService.dpr);let e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);Ie.left=t,Ie.center=t,Ie.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*Ie.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;let e=this._renderService.dimensions.css.canvas.height,t=this._renderService.dimensions.device.canvas.height;this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${e}px`,this._canvas.height=t,this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){if(this._store.isDisposed||!this._renderService.hasRenderer())return;this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(let t of this._decorationService.decorations)this._colorZoneStore.addDecoration(t);this._ctx.lineWidth=1,this._renderRulerOutline();let e=this._colorZoneStore.zones;for(let t of e)t.position!=="full"&&this._renderColorZone(t);for(let t of e)t.position==="full"&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderRulerOutline(){this._ctx.fillStyle=this._themeService.colors.overviewRulerBorder.css,this._ctx.fillRect(0,0,1,this._canvas.height),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder&&this._ctx.fillRect(1,0,this._canvas.width-1,1),this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder&&this._ctx.fillRect(1,this._canvas.height-1,this._canvas.width-1,this._canvas.height)}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(qt[e.position||"full"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-Ie[e.position||"full"]/2),He[e.position||"full"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+Ie[e.position||"full"]))}_queueRefresh(e,t){this._store.isDisposed||(this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>{this._store.isDisposed||this._refreshDecorations(),this._animationFrame=void 0})))}};Ge=y([m(2,D),m(3,ge),m(4,G),m(5,R),m(6,le),m(7,z)],Ge);function ts(n){if(!n)throw new Error("value must not be falsy");return n}function Yn(n){return 57508<=n&&n<=57558}function jn(n){return 9472<=n&&n<=9631}function Ys(n){return Yn(n)||jn(n)}function js(){return{css:{canvas:Fi(),cell:Fi()},device:{canvas:Fi(),cell:Fi(),char:{width:0,height:0,left:0,top:0}}}}function Fi(){return{width:0,height:0}}var Hi=class{constructor(i=()=>new Xt){this._flat=new Float32Array(256);this._font="";this._fontSize=0;this._weight="normal";this._weightBold="bold";this._canvasElements=[];this._canvasElements=[i(),i(),i(),i()],this.clear()}dispose(){this._canvasElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(i,e,t,r){i===this._font&&e===this._fontSize&&t===this._weight&&r===this._weightBold||(this._font=i,this._fontSize=e,this._weight=t,this._weightBold=r,this._canvasElements[0].setFont(i,e,t,!1),this._canvasElements[1].setFont(i,e,r,!1),this._canvasElements[2].setFont(i,e,t,!0),this._canvasElements[3].setFont(i,e,r,!0),this.clear())}get(i,e,t){let r;if(!e&&!t&&i.length===1&&(r=i.charCodeAt(0))<256){if(this._flat[r]!==-9999)return this._flat[r];let a=this._measure(i,0);return a>0&&(this._flat[r]=a),a}let s=i;e&&(s+="B"),t&&(s+="I");let o=this._holey.get(s);if(o===void 0){let a=0;e&&(a|=1),t&&(a|=2),o=this._measure(i,a),o>0&&this._holey.set(s,o)}return o}_measure(i,e){return this._canvasElements[e].measure(i)}},Xt=class{constructor(){typeof OffscreenCanvas<"u"?(this._canvas=new OffscreenCanvas(1,1),this._ctx=ts(this._canvas.getContext("2d"))):(this._canvas=document.createElement("canvas"),this._canvas.width=1,this._canvas.height=1,this._ctx=ts(this._canvas.getContext("2d")))}setFont(i,e,t,r){let s=r?"italic":"";this._ctx.font=`${s} ${t} ${e}px ${i}`.trim()}measure(i){return this._ctx.measureText(i).width}};var J=0,Z=0,Q=0,W=0,is={css:"#00000000",rgba:0},O;(t=>{function n(r,s,o,a){return a!==void 0?`#${Ve(r)}${Ve(s)}${Ve(o)}${Ve(a)}`:`#${Ve(r)}${Ve(s)}${Ve(o)}`}t.toCss=n;function i(r,s,o,a=255){return(r<<24|s<<16|o<<8|a)>>>0}t.toRgba=i;function e(r,s,o,a){return{css:t.toCss(r,s,o,a),rgba:t.toRgba(r,s,o,a)}}t.toColor=e})(O||={});var L;(a=>{function n(l,h){if(W=(h.rgba&255)/255,W===1)return{css:h.css,rgba:h.rgba};let d=h.rgba>>24&255,c=h.rgba>>16&255,u=h.rgba>>8&255,f=l.rgba>>24&255,p=l.rgba>>16&255,b=l.rgba>>8&255;J=f+Math.round((d-f)*W),Z=p+Math.round((c-p)*W),Q=b+Math.round((u-b)*W);let _=O.toCss(J,Z,Q),S=O.toRgba(J,Z,Q);return{css:_,rgba:S}}a.blend=n;function i(l){return(l.rgba&255)===255}a.isOpaque=i;function e(l,h,d){let c=Wi.ensureContrastRatio(l.rgba,h.rgba,d);if(c)return O.toColor(c>>24&255,c>>16&255,c>>8&255)}a.ensureContrastRatio=e;function t(l){let h=(l.rgba|255)>>>0;return[J,Z,Q]=Wi.toChannels(h),{css:O.toCss(J,Z,Q),rgba:h}}a.opaque=t;function r(l,h){return W=Math.round(h*255),[J,Z,Q]=Wi.toChannels(l.rgba),{css:O.toCss(J,Z,Q,W),rgba:O.toRgba(J,Z,Q,W)}}a.opacity=r;function s(l,h){return W=l.rgba&255,r(l,W*h/255)}a.multiplyOpacity=s;function o(l){return[l.rgba>>24&255,l.rgba>>16&255,l.rgba>>8&255]}a.toColorRGB=o})(L||={});var M;(t=>{let n,i;try{let r=document.createElement("canvas");r.width=1,r.height=1;let s=r.getContext("2d",{willReadFrequently:!0});s&&(n=s,n.globalCompositeOperation="copy",i=n.createLinearGradient(0,0,1,1))}catch{}function e(r){if(r.match(/#[\da-f]{3,8}/i))switch(r.length){case 4:return J=parseInt(r.slice(1,2).repeat(2),16),Z=parseInt(r.slice(2,3).repeat(2),16),Q=parseInt(r.slice(3,4).repeat(2),16),O.toColor(J,Z,Q);case 5:return J=parseInt(r.slice(1,2).repeat(2),16),Z=parseInt(r.slice(2,3).repeat(2),16),Q=parseInt(r.slice(3,4).repeat(2),16),W=parseInt(r.slice(4,5).repeat(2),16),O.toColor(J,Z,Q,W);case 7:return{css:r,rgba:(parseInt(r.slice(1),16)<<8|255)>>>0};case 9:return{css:r,rgba:parseInt(r.slice(1),16)>>>0}}let s=r.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(s)return J=parseInt(s[1],10),Z=parseInt(s[2],10),Q=parseInt(s[3],10),W=Math.round((s[5]===void 0?1:parseFloat(s[5]))*255),O.toColor(J,Z,Q,W);if(r==="transparent")return{css:"transparent",rgba:0};if(!n||!i)throw new Error("css.toColor: Unsupported css format");if(n.fillStyle=i,n.fillStyle=r,typeof n.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(n.fillRect(0,0,1,1),[J,Z,Q,W]=n.getImageData(0,0,1,1).data,W!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:O.toRgba(J,Z,Q,W),css:r}}t.toColor=e})(M||={});var j;(e=>{function n(t){return i(t>>16&255,t>>8&255,t&255)}e.relativeLuminance=n;function i(t,r,s){let o=t/255,a=r/255,l=s/255,h=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4),d=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4),c=l<=.03928?l/12.92:Math.pow((l+.055)/1.055,2.4);return h*.2126+d*.7152+c*.0722}e.relativeLuminance2=i})(j||={});var Wi;(s=>{function n(o,a){if(W=(a&255)/255,W===1)return a;let l=a>>24&255,h=a>>16&255,d=a>>8&255,c=o>>24&255,u=o>>16&255,f=o>>8&255;return J=c+Math.round((l-c)*W),Z=u+Math.round((h-u)*W),Q=f+Math.round((d-f)*W),O.toRgba(J,Z,Q)}s.blend=n;function i(o,a,l){let h=j.relativeLuminance(o>>8),d=j.relativeLuminance(a>>8);if(De(h,d)>8));if(b>8));return b>S?p:_}return p}let u=t(o,a,l),f=De(h,j.relativeLuminance(u>>8));if(f>8));return f>b?u:p}return u}}s.ensureContrastRatio=i;function e(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,f=a>>16&255,p=a>>8&255,b=De(j.relativeLuminance2(u,f,p),j.relativeLuminance2(h,d,c));for(;b0||f>0||p>0);)u-=Math.max(0,Math.ceil(u*.1)),f-=Math.max(0,Math.ceil(f*.1)),p-=Math.max(0,Math.ceil(p*.1)),b=De(j.relativeLuminance2(u,f,p),j.relativeLuminance2(h,d,c));return(u<<24|f<<16|p<<8|255)>>>0}s.reduceLuminance=e;function t(o,a,l){let h=o>>24&255,d=o>>16&255,c=o>>8&255,u=a>>24&255,f=a>>16&255,p=a>>8&255,b=De(j.relativeLuminance2(u,f,p),j.relativeLuminance2(h,d,c));for(;b>>0}s.increaseLuminance=t;function r(o){return[o>>24&255,o>>16&255,o>>8&255,o&255]}s.toChannels=r})(Wi||={});function Ve(n){let i=n.toString(16);return i.length<2?"0"+i:i}function De(n,i){return n0&&(this._lastCompositionData=i.data),this._renderCompositionView(i.data??""),this._compositionView.classList.toggle("active",!!i.data),this.updateCompositionElements();let e=this._compositionTransactionId;this._cancelDeferredTimer(this._compositionPositionTimer),this._compositionPositionTimer=this._defer(()=>{if(this._isComposing&&this._compositionTransactionId===e){this._compositionHasObservedProgress||=this._hasCompositionProgress();let t=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,t)}})}compositionend(i){if(!this._isAwaitingCompositionEnd)return!1;if(!this._isComposing){let t=this._pendingComposition;return t?.transactionId===this._compositionTransactionId&&(t.endData=i?.data??"",this._updatePostCompositionInputExpectation(t)),!1}let e=i?.data??"";if(this._compositionHasObservedProgress||=this._hasCompositionProgress(),!this._compositionEndBelongsToCurrentTransaction(e)){let t=this._pendingComposition;return t&&t.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(t),this._deferCompositionEnd(e),!1}return this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._finalizeComposition(!0,e),!0}blur(){if(this._cancelDeferredTimer(this._compositionEndTimer),this._compositionEndTimer=void 0,this._isComposing){let i=this._textarea.selectionEnd??this._textarea.value.length;this._compositionPosition.end=Math.max(this._compositionPosition.start,i)}(this._isComposing||this.hasPendingCompositionFinalization)&&this._finalizeComposition(!1)}dispose(){this._textareaChangeTimer!==void 0&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0);for(let i of this._compositionTimers)clearTimeout(i);this._compositionTimers.clear(),this._compositionPositionTimer=void 0,this._compositionViewTimer=void 0,this._compositionEndTimer=void 0,this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionTransactionId++,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._preeditRenderer?.dispose(),this._preeditRenderer=void 0}keydown(i){if(this._canceledKey?.code===i.code&&this._canceledKey.timeStamp===i.timeStamp)return this._canceledKey=void 0,!1;if(i.key==="Escape"&&(this._isComposing||this.hasPendingCompositionFinalization))return this._canceledKey={code:i.code,timeStamp:i.timeStamp},this._cancelComposition(),!1;if(this._isComposing||this.hasPendingCompositionFinalization){if(this._deferPreeditResync(this._composedRegionLength()>0),i.keyCode===20||i.keyCode===229||i.keyCode===16||i.keyCode===17||i.keyCode===18)return!1;this._finalizeComposition(!1)}return this._imeKeydownAwaitingCommit=i.keyCode===229,i.keyCode===229?(this._handleAnyTextareaChanges(),!1):!0}keypress(i){let e=this._pendingComposition;return e?e.keypressMayOverlapComposition?(e.keypressData+=i,!0):e.expectsPostCompositionInput&&e.keypressData.length===0?(e.keypressData=i,!0):(this._sendPendingComposition(e),!1):!1}input(i){if(this._isComposing)return this._compositionHasObservedProgress||=this._hasCompositionProgress(),this._compositionInputData+=i,!0;let e=this._pendingComposition;if(!e)return this._claimImeKeydownCommit(i);if(e.expectsPostCompositionInput)return e.inputData+=i,e.expectsPostCompositionInput=!1,this._sendPendingComposition(e),!0;let t=i.length>0&&this._getPendingTextareaInput(e)===i&&this._getPendingTextareaInput(e,!0)===i;return this._sendPendingComposition(e),t||this._coreService.triggerDataEvent(i,!0),!0}_claimImeKeydownCommit(i){return this._imeKeydownAwaitingCommit?(this._imeKeydownAwaitingCommit=!1,this._textareaChangeTimer!==void 0&&(clearTimeout(this._textareaChangeTimer),this._textareaChangeTimer=void 0),this._coreService.triggerDataEvent(i,!0),!0):!1}_finalizeComposition(i,e=""){let t=this._isComposing;if(this._compositionView.classList.remove("active"),this._resetCompositionView(),this._isComposing=!1,!(i&&!t)){if(i){this._pendingComposition&&this._sendPendingComposition(this._pendingComposition);let r={transactionId:this._compositionTransactionId,lifecycleSettled:!1,sessionEnded:!1,position:{start:this._compositionPosition.start,end:this._compositionPosition.end},suffix:this._compositionSuffix,dataAlreadySent:this._dataAlreadySent,compositionData:this._lastCompositionData,endData:e,inputData:this._compositionInputData,keypressData:"",keypressMayOverlapComposition:this._lastCompositionData.length===0&&e.length===0,expectsPostCompositionInput:!1};this._updatePostCompositionInputExpectation(r),this._pendingComposition=r,r.finalizerTimer=this._defer(()=>{r.finalizerTimer=void 0,this._compositionTransactionId===r.transactionId&&(this._isAwaitingCompositionEnd=!1),this._pendingComposition===r&&this._sendPendingComposition(r,!0)})}else if(this._pendingComposition&&this._sendPendingComposition(this._pendingComposition,!0),t){let r=this._getCompositionInput(this._compositionPosition.start+this._dataAlreadySent.length,this._compositionSuffix);this._sendCompositionInput(this._compositionTransactionId,r)}}}_sendPendingComposition(i,e=!1){this._cancelPendingFinalizer(i),this._pendingComposition===i&&(this._pendingComposition=void 0);let t=this._getPendingTextareaInput(i,e),r=this._removeAlreadySentData(i.inputData||i.keypressData,i.dataAlreadySent),s=this._mergeTextObservations(t||i.endData||(r?i.compositionData:""),r,i.keypressMayOverlapComposition);this._sendCompositionInput(i.transactionId,s,!i.sessionEnded),this._settlePendingComposition(i)}_cancelPendingFinalizer(i){i.finalizerTimer!==void 0&&(clearTimeout(i.finalizerTimer),this._compositionTimers.delete(i.finalizerTimer),i.finalizerTimer=void 0)}_settlePendingComposition(i){i.lifecycleSettled||(i.lifecycleSettled=!0,this._dispatchCompositionTransactionSettled())}_mergeTextObservations(i,e,t){if(!e||i.includes(e))return i;if(!i||e.includes(i))return e;if(t){let s=Math.min(i.length,e.length);for(;s>0&&!i.endsWith(e.substring(0,s));)s--;let o=Math.min(i.length,e.length);for(;o>0&&!e.endsWith(i.substring(0,o));)o--;return s>o?i+e.substring(s):e+i.substring(o)}let r=Math.min(i.length,e.length);for(;r>0&&!i.endsWith(e.substring(0,r));)r--;return i+e.substring(r)}_updatePostCompositionInputExpectation(i){i.expectsPostCompositionInput=(i.endData.length>0||i.compositionData.length>0)&&i.inputData.length===0&&this._getPendingTextareaInput(i).length===0}_getPendingTextareaInput(i,e=!1){let t=this._textarea.value,r=i.position.start+i.dataAlreadySent.length;if(i.nextCompositionStart!==void 0)return t.substring(r,Math.max(r,i.nextCompositionStart));let s=i.suffix.length>0&&t.endsWith(i.suffix)?t.length-i.suffix.length:t.length,o=(i.endData||i.compositionData).length,a=e?s:Math.max(i.position.end,r+o);return t.substring(r,Math.max(r,Math.min(s,a)))}_getCompositionInput(i,e){let t=this._textarea.value,r=e.length>0&&t.endsWith(e)?t.length-e.length:t.length;return t.substring(i,Math.max(i,r))}_removeAlreadySentData(i,e){return e.length===0?i:i.startsWith(e)?i.substring(e.length):e.includes(i)?"":i}_cancelComposition(){let i=this._pendingComposition;i&&this._isComposing&&i.transactionId!==this._compositionTransactionId&&this._sendPendingComposition(i);let e=this._isComposing?this._compositionTransactionId:this._pendingComposition?.transactionId??0,t=i!==void 0&&this._pendingComposition===i;this._pendingComposition=void 0,this._isAwaitingCompositionEnd=!1,this._isComposing=!1,this._compositionView.classList.remove("active"),this._resetCompositionView(),this._textarea.value=this._textarea.value.substring(0,this._compositionPosition.start)+this._compositionSuffix,this._sendCompositionInput(e,""),t&&i&&this._settlePendingComposition(i)}_sendCompositionInput(i,e,t=!0){let r=!1;if(t){let s=new CustomEvent(Js,{bubbles:!0,cancelable:!0,detail:{id:i,data:e}});this._dispatchCompositionSessionEvent(s),r=s.defaultPrevented}e.length>0&&!r&&this._coreService.triggerDataEvent(e,!0)}_endPendingCompositionSession(i){if(i.sessionEnded)return;i.sessionEnded=!0;let e=this._getPendingTextareaInput(i)||i.endData||i.compositionData;this._dispatchCompositionSessionEvent(new CustomEvent(Js,{bubbles:!0,cancelable:!0,detail:{id:i.transactionId,data:e,dataPendingReconciliation:!0}}))}_dispatchCompositionSessionEvent(i){typeof this._textarea.dispatchEvent=="function"&&this._textarea.dispatchEvent(i)}_dispatchCompositionTransactionSettled(){this._dispatchCompositionSessionEvent(new CustomEvent("xterm-composition-transaction-settled",{bubbles:!0}))}_deferCompositionEnd(i){this._cancelDeferredTimer(this._compositionEndTimer);let e=this._compositionTransactionId,t=this._defer(()=>{if(this._compositionEndTimer!==t||!this._isComposing||this._compositionTransactionId!==e)return;if(this._compositionEndTimer=void 0,!this._compositionEndBelongsToCurrentTransaction(i)){i.length===0&&!this._hasCompositionProgress()&&this._cancelComposition();return}this._finalizeComposition(!0,i),this._dispatchCompositionSessionEvent(new CustomEvent(Zn,{bubbles:!0}));let r=this._pendingComposition;r?.transactionId===e&&this._sendPendingComposition(r,!0)});this._compositionEndTimer=t}_composedRegionLength(){let i=this._textarea.value.length-this._compositionSuffix.length;return Math.max(0,i-this._compositionPosition.start)}_deferPreeditResync(i){if(!i||!this._isComposing)return;let e=this._compositionTransactionId;this._defer(()=>{this._isComposing&&this._compositionTransactionId===e&&this._composedRegionLength()===0&&this._cancelComposition()})}_hasCompositionProgress(){let i=this._textarea.selectionStart??this._textarea.value.length,e=this._textarea.selectionEnd??i;return this._compositionHasObservedProgress||this._textarea.value!==this._compositionStartValue||i!==this._compositionStartSelection.start||e!==this._compositionStartSelection.end}_compositionEndBelongsToCurrentTransaction(i){return this._hasCompositionProgress()||i.length>0&&i===this._lastCompositionData}_defer(i){let e=setTimeout(()=>{this._compositionTimers.delete(e),i()},0);return this._compositionTimers.add(e),e}_cancelDeferredTimer(i){i!==void 0&&(clearTimeout(i),this._compositionTimers.delete(i))}_handleAnyTextareaChanges(){if(this._textareaChangeTimer)return;let i=this._textarea.value;this._textareaChangeTimer=window.setTimeout(()=>{if(this._textareaChangeTimer=void 0,!this._isComposing){let e=this._textarea.value,t=e.replace(i,"");e!==i&&(this._imeKeydownAwaitingCommit=!1),this._dataAlreadySent=t,e.length>i.length?this._coreService.triggerDataEvent(t,!0):e.lengththis.updateCompositionElements(!0)),this._preeditRenderer.render(this._compositionPreedit));let a=this._bufferService.cols*this._renderService.dimensions.css.cell.width-o;this._compositionView.style.maxWidth=a+"px",this._compositionView.style.overflow="hidden";let l=(this._compositionPreedit??this._compositionView).getBoundingClientRect(),h=o+Math.min(0,a-l.width),d=!!this._compositionRemainder&&l.widththis.updateCompositionElements(!0)))}};Ee=y([m(2,D),m(3,R),m(4,X),m(5,G),m(6,le),m(7,gi)],Ee);var Qn=/^[\p{Script_Extensions=Han}\p{Script_Extensions=Hiragana}\p{Script_Extensions=Katakana}\uac00-\ud7a3\u3131-\u318e\uff01-\uff60]$/u,eo=/[\p{Mark}\p{Extended_Pictographic}]/u,to=128,rs=class extends g{constructor(e,t,r){super();this._unicodeService=e;this._segmenter=new Intl.Segmenter(void 0,{granularity:"grapheme"});this._font="";t.fonts&&this._register(I(t.fonts,"loadingdone",()=>{this._font="",this._preedit&&r()}))}clear(){this._preedit=void 0,this._font=""}dispose(){this.clear(),this._measure=void 0,super.dispose()}render(e){let t=e.ownerDocument,r=t.defaultView?.getComputedStyle(e);if(!r)return;let s=[r.fontFamily,r.fontSize,r.fontWeight,r.fontStyle,t.defaultView?.devicePixelRatio].join("|");if(this._preedit===e&&this._font===s)return;this._preedit=e,this._font=s;let o=(e.textContent??"").slice(1,-1),a=new Map,l=[t.createTextNode("\u200E")],h=0,d,c=0,u=f=>{if(f===h)return;let p=o.slice(h,f);if(d===void 0)l.push(t.createTextNode(p));else{let b=t.createElement("span");b.style.letterSpacing=d,b.style.fontKerning="none",b.style.textDecoration="inherit",b.textContent=p,l.push(b),c++}h=f};for(let{segment:f,index:p}of this._segmenter.segment(o)){if(c>=to){u(p),d=void 0;break}let b,_=this._unicodeService.wcwidth(f.codePointAt(0));if(Qn.test(f)&&!eo.test(f)&&(_===2||/^[\uff61-\uff9f]$/u.test(f))){let S=a.get(f);S===void 0&&(this._measure??=new Xt,this._measure.setFont(r.fontFamily,parseFloat(r.fontSize),parseFloat(r.fontWeight)||400,r.fontStyle==="italic"),S=this._measure.measure(f),a.set(f,S),c++),b=`calc(var(--xterm-composition-cell-width) * ${_} - ${S}px)`}b!==d&&(u(p),d=b)}u(o.length),l.push(t.createTextNode("\u200E")),e.replaceChildren(...l)}};var Ui=class extends fe{constructor(e,t,r){super();this.content=0;this.combinedData="";this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=r}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},We=class{constructor(i){this._bufferService=i;this._characterJoiners=[];this._nextCharacterJoinerId=0;this._workCell=new F}register(i){let e={id:this._nextCharacterJoinerId++,handler:i};return this._characterJoiners.push(e),e.id}deregister(i){for(let e=0;e1){let u=this._getJoinedRanges(r,l,a,e,o);for(let f=0;f1){let c=this._getJoinedRanges(r,l,a,e,o);for(let u=0;u=Ps,Lr=oe,x=this._workCell;if(b.length>0&&oe===b[0][0]&&Je){let k=b.shift(),Br=this._isCellInSelection(k[0],e);for(T=k[0]+1;T=k[1],Je?(_i=!0,x=new Ui(this._workCell,i.translateToString(!0,k[0],k[1]),k[1]-k[0]),Lr=k[1]-1,Rr=x.getWidth()):Ps=k[1]}let Ft=this._isCellInSelection(oe,e),Ar=t&&oe===o,kr=An&&oe>=c&&oe<=u;f&&x.isBlink()&&(f.hasBlinkingCells=!0),!l&&x.isBlink()&&N.push("xterm-blink-hidden");let Pr=!1;this._decorationService.forEachDecorationAtCell(oe,e,void 0,k=>{Pr=!0});let pi=x.getChars()||" ";if(pi===" "&&(x.isUnderline()||x.isOverline())&&(pi="\xA0"),Nt=Rr*h-d.get(pi,x.isBold(),x.isItalic()),!C)C=this._document.createElement("span");else if(w&&(Ft&&fi||!Ft&&!fi&&x.bg===ee)&&(Ft&&fi&&_.selectionForeground||x.fg===Rs)&&x.extended.ext===Ls&&kr===As&&Nt===ks&&!Ar&&!_i&&!Pr&&Je){x.isInvisible()?A+=" ":A+=pi,w++;continue}else w&&(C.textContent=A),C=this._document.createElement("span"),w=0,A="";if(ee=x.bg,Rs=x.fg,Ls=x.extended.ext,As=kr,ks=Nt,fi=Ft,_i&&o>=oe&&o<=Lr&&(o=oe),!this._coreService.isCursorHidden&&Ar&&this._coreService.isCursorInitialized){if(N.push("xterm-cursor"),this._coreBrowserService.isFocused)a&&N.push("xterm-cursor-blink"),N.push(r==="bar"?"xterm-cursor-bar":r==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(s)switch(s){case"outline":N.push("xterm-cursor-outline");break;case"block":N.push("xterm-cursor-block");break;case"bar":N.push("xterm-cursor-bar");break;case"underline":N.push("xterm-cursor-underline");break;default:break}}if(x.isBold()&&N.push("xterm-bold"),x.isItalic()&&N.push("xterm-italic"),x.isDim()&&N.push("xterm-dim"),x.isInvisible()?A=" ":A=x.getChars()||" ",x.isUnderline()&&(N.push(`xterm-underline-${x.extended.underlineStyle}`),A===" "&&(A="\xA0"),!x.isUnderlineColorDefault()))if(x.isUnderlineColorRGB())C.style.textDecorationColor=`rgb(${fe.toColorRGB(x.getUnderlineColor()).join(",")})`;else{let k=x.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&x.isBold()&&k<8&&(k+=8),C.style.textDecorationColor=_.ansi[k].css}x.isOverline()&&(N.push("xterm-overline"),A===" "&&(A="\xA0")),x.isStrikethrough()&&N.push("xterm-strikethrough"),kr&&(C.style.textDecoration="underline");let ue=x.getFgColor(),Ht=x.getFgColorMode(),Se=x.getBgColor(),Wt=x.getBgColorMode(),Mr=!!x.isInverse();if(Mr){let k=ue;ue=Se,Se=k;let Br=Ht;Ht=Wt,Wt=Br}let Ae,mi,Ut=!1;this._decorationService.forEachDecorationAtCell(oe,e,void 0,k=>{k.options.layer!=="top"&&Ut||(k.backgroundColorRGB&&(Wt=50331648,Se=k.backgroundColorRGB.rgba>>8&16777215,Ae=k.backgroundColorRGB),k.foregroundColorRGB&&(Ht=50331648,ue=k.foregroundColorRGB.rgba>>8&16777215,mi=k.foregroundColorRGB),Ut=k.options.layer==="top")}),!Ut&&Ft&&(Ae=this._coreBrowserService.isFocused?_.selectionBackgroundOpaque:_.selectionInactiveBackgroundOpaque,Se=Ae.rgba>>8&16777215,Wt=50331648,Ut=!0,_.selectionForeground&&(Ht=50331648,ue=_.selectionForeground.rgba>>8&16777215,mi=_.selectionForeground)),Ut&&N.push("xterm-decoration-top");let ke;switch(Wt){case 16777216:case 33554432:ke=_.ansi[Se],N.push(`xterm-bg-${Se}`);break;case 50331648:ke=O.toColor(Se>>16,Se>>8&255,Se&255),this._addStyle(C,`background-color:#${(Se>>>0).toString(16).padStart(6,"0")}`);break;case 0:default:Mr?(ke=_.foreground,N.push(`xterm-bg-${257}`)):ke=_.background}switch(Ae||x.isDim()&&(Ae=L.multiplyOpacity(ke,.5)),Ht){case 16777216:case 33554432:x.isBold()&&ue<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(ue+=8),this._applyMinimumContrast(C,ke,_.ansi[ue],x,Ae,void 0)||N.push(`xterm-fg-${ue}`);break;case 50331648:let k=O.toColor(ue>>16&255,ue>>8&255,ue&255);this._applyMinimumContrast(C,ke,k,x,Ae,mi)||this._addStyle(C,`color:#${ue.toString(16).padStart(6,"0")}`);break;case 0:default:this._applyMinimumContrast(C,ke,_.foreground,x,Ae,mi)||Mr&&N.push(`xterm-fg-${257}`)}N.length&&(C.className=N.join(" "),N.length=0),!Ar&&!_i&&!Pr&&Je?w++:C.textContent=A,Nt!==this.defaultSpacing&&(C.style.letterSpacing=`${Nt}px`),p.push(C),oe=Lr}return C&&w&&(C.textContent=A),p}_applyMinimumContrast(i,e,t,r,s,o){if(this._optionsService.rawOptions.minimumContrastRatio===1||Ys(r.getCode()))return!1;let a=this._getContrastCache(r),l;if(!s&&!o&&(l=a.getColor(e.rgba,t.rgba)),l===void 0){let h=this._optionsService.rawOptions.minimumContrastRatio/(r.isDim()?2:1);l=L.ensureContrastRatio(s??e,o??t,h),a.setColor((s??e).rgba,(o??t).rgba,l??null)}return l?(this._addStyle(i,`color:${l.css}`),!0):!1}_getContrastCache(i){return i.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(i,e){i.setAttribute("style",`${i.getAttribute("style")||""}${e};`)}_isCellInSelection(i,e){let t=this._selectionStart,r=this._selectionEnd;return!t||!r?!1:this._columnSelectMode?t[0]<=r[0]?i>=t[0]&&e>=t[1]&&i=t[1]&&i>=r[0]&&e<=r[1]:e>t[1]&&e=t[0]&&i=t[0]}};_t=y([m(1,Ii),m(2,R),m(3,z),m(4,X),m(5,ge),m(6,le)],_t);var ss=class{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(i,e,t,r=!1){if(this.selectionStart=e,this.selectionEnd=t,!e||!t||e[0]===t[0]&&e[1]===t[1]){this.clear();return}let s=i.buffers.active.ydisp,o=e[1]-s,a=t[1]-s,l=Math.max(o,0),h=Math.min(a,i.rows-1);if(l>=i.rows||h<0){this.clear();return}this.hasSelection=!0,this.columnSelectMode=r,this.viewportStartRow=o,this.viewportEndRow=a,this.viewportCappedStartRow=l,this.viewportCappedEndRow=h,this.startCol=e[0],this.endCol=t[0]}isCellSelected(i,e,t){return this.hasSelection?(t-=i.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?e>=this.startCol&&t>=this.viewportCappedStartRow&&e=this.viewportCappedStartRow&&e>=this.endCol&&t<=this.viewportCappedEndRow:t>this.viewportStartRow&&t=this.startCol&&e=this.startCol):!1}};function Zs(){return new ss}var Ki=class extends g{constructor(e,t,r){super();this._renderCallback=e;this._coreBrowserService=t;this._optionsService=r;this._intervalDuration=0;this._blinkOn=!0;this._needsBlinkInViewport=!1;this._isViewportVisible=!0;this._register(this._optionsService.onSpecificOptionChange("blinkIntervalDuration",s=>{this.setIntervalDuration(s)})),this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration),this._register(E(()=>this._clearInterval()))}get isBlinkOn(){return this._blinkOn}get isEnabled(){return this._intervalDuration>0}setNeedsBlinkInViewport(e){this._needsBlinkInViewport!==e&&(this._needsBlinkInViewport=e,this._updateIntervalState())}setViewportVisible(e){this._isViewportVisible!==e&&(this._isViewportVisible=e,this._updateIntervalState())}setIntervalDuration(e){e!==this._intervalDuration&&(this._intervalDuration=e,this._clearInterval(),this._updateIntervalState())}_updateIntervalState(){if(this._intervalDuration>0&&this._needsBlinkInViewport&&this._isViewportVisible){if(this._interval!==void 0)return;let t=this._blinkOn;this._blinkOn=!0,this._interval=this._coreBrowserService.window.setInterval(()=>{this._blinkOn=!this._blinkOn,this._renderCallback()},this._intervalDuration),t||this._renderCallback();return}this._clearInterval(),this._blinkOn||(this._blinkOn=!0,this._renderCallback())}_clearInterval(){this._interval!==void 0&&(this._coreBrowserService.window.clearInterval(this._interval),this._interval=void 0)}};var io=1,mt=class extends g{constructor(e,t,r,s,o,a,l,h,d,c,u,f,p,b){super();this._terminal=e;this._document=t;this._element=r;this._screenElement=s;this._viewportElement=o;this._helperContainer=a;this._linkifier2=l;this._charSizeService=d;this._optionsService=c;this._bufferService=u;this._coreService=f;this._coreBrowserService=p;this._themeService=b;this._terminalClass=io++;this._rowElements=[];this._selectionRenderModel=Zs();this._lastSelectionColumnMode=!1;this._rowHasBlinkingCells=[];this._rowHasBlinkingCellsCount=0;this._onRequestRedraw=this._register(new v);this.onRequestRedraw=this._onRequestRedraw.event;this._rowContainer=this._document.createElement("div"),this._rowContainer.classList.add("xterm-rows"),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement("div"),this._selectionContainer.classList.add("xterm-selection"),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=js(),this._updateDimensions(),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._themeService.onChangeColors(_=>this._injectCss(_))),this._injectCss(this._themeService.colors),this._rowFactory=h.createInstance(_t,document),this._element.classList.add("xterm-dom-renderer-owner-"+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this._register(this._linkifier2.onShowLinkUnderline(_=>this._handleLinkHover(_))),this._register(this._linkifier2.onHideLinkUnderline(_=>this._handleLinkLeave(_))),this._cursorBlinkStateManager=new ns(this._rowContainer,this._coreBrowserService),this._register(I(this._document,"mousedown",()=>this._cursorBlinkStateManager.restartBlinkAnimation())),this._register(E(()=>this._cursorBlinkStateManager.dispose())),this._textBlinkStateManager=this._register(new Ki(()=>this._onRequestRedraw.fire({start:0,end:this._bufferService.rows-1}),this._coreBrowserService,this._optionsService)),this._register(E(()=>{this._element.classList.remove("xterm-dom-renderer-owner-"+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()})),this._widthCache=new Hi,this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){let e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(let r of this._rowElements)r.style.width=`${this.dimensions.css.canvas.width}px`,r.style.height=`${this.dimensions.css.cell.height}px`,r.style.lineHeight=`${this.dimensions.css.cell.height}px`,r.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));let t=`${this._terminalSelector} .xterm-rows span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .xterm-rows { pointer-events: none; color: ${e.foreground.css};}`;t+=`${this._terminalSelector} .xterm-rows, ${this._terminalSelector} .xterm-rows span { font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`,t+=`${this._terminalSelector} .xterm-rows .xterm-dim { color: ${L.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}${this._terminalSelector} span.xterm-blink-hidden { visibility: hidden;}`;let r=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,o=`blink_block_${this._terminalClass}`;t+=`@keyframes ${r} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${o} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-focus .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${o} 1s step-end infinite;}${this._terminalSelector} .xterm-rows.xterm-cursor-blink-idle .xterm-cursor.xterm-cursor-blink { animation: none !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .xterm-rows .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .xterm-selection { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .xterm-selection div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .xterm-selection div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(let[a,l]of e.ansi.entries())t+=`${this._terminalSelector} .xterm-fg-${a} { color: ${l.css}; }${this._terminalSelector} .xterm-fg-${a}.xterm-dim { color: ${L.multiplyOpacity(l,.5).css}; }${this._terminalSelector} .xterm-bg-${a} { background-color: ${l.css}; }`;t+=`${this._terminalSelector} .xterm-fg-${257} { color: ${L.opaque(e.background).css}; }${this._terminalSelector} .xterm-fg-${257}.xterm-dim { color: ${L.multiplyOpacity(L.opaque(e.background),.5).css}; }${this._terminalSelector} .xterm-bg-${257} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){let e=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let r=this._rowElements.length;r<=t;r++){let s=this._document.createElement("div");this._rowContainer.appendChild(s),this._rowElements.push(s),this._rowHasBlinkingCells.push(!1)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop()),this._rowHasBlinkingCells.pop()&&this._rowHasBlinkingCellsCount--}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove("xterm-focus"),this._cursorBlinkStateManager.pause(),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add("xterm-focus"),this._cursorBlinkStateManager.resume(),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleViewportVisibilityChange(e){this._textBlinkStateManager.setViewportVisible(e)}handleSelectionChanged(e,t,r){let s=this._bufferService.rows;this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,r);let o=0,a=-1;this._lastSelectionStart&&this._lastSelectionEnd&&(this._selectionRenderModel.update(this._terminal,this._lastSelectionStart,this._lastSelectionEnd,this._lastSelectionColumnMode),this._selectionRenderModel.hasSelection&&(o=this._selectionRenderModel.viewportCappedStartRow,a=this._selectionRenderModel.viewportCappedEndRow));let l=0,h=-1;if(!e||!t)return;if(this._selectionRenderModel.update(this._terminal,e,t,r),this._selectionRenderModel.hasSelection){let u=this._selectionRenderModel.viewportStartRow,f=this._selectionRenderModel.viewportEndRow,p=this._selectionRenderModel.viewportCappedStartRow,b=this._selectionRenderModel.viewportCappedEndRow;l=p,h=b;let _=this._document.createDocumentFragment();if(r){let S=e[0]>t[0];_.appendChild(this._createSelectionElement(p,S?t[0]:e[0],S?e[0]:t[0],b-p+1))}else{let S=u===p?e[0]:0,C=p===f?t[0]:this._bufferService.cols;_.appendChild(this._createSelectionElement(p,S,C));let w=b-p-1;if(_.appendChild(this._createSelectionElement(p+1,0,this._bufferService.cols,w)),p!==b){let A=f===b?t[0]:this._bufferService.cols;_.appendChild(this._createSelectionElement(b,0,A))}}this._selectionContainer.appendChild(_)}let d=Math.min(o,l),c=Math.max(a,h);if(c>=0){d=Math.max(d,0),c=Math.min(c,s-1);let f=this._bufferService.buffer.y;this._selectionRenderModel.hasSelection&&f>=0&&fthis.dimensions.css.canvas.width&&(l=this.dimensions.css.canvas.width-a),o.style.height=`${s*this.dimensions.css.cell.height}px`,o.style.top=`${e*this.dimensions.css.cell.height}px`,o.style.left=`${a}px`,o.style.width=`${l}px`,o}handleCursorMove(){this._cursorBlinkStateManager.restartBlinkAnimation()}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(let e of this._rowElements)e.replaceChildren();this._rowHasBlinkingCellsCount>0&&(this._rowHasBlinkingCells.fill(!1),this._rowHasBlinkingCellsCount=0,this._textBlinkStateManager.setNeedsBlinkInViewport(!1))}renderRows(e,t){let r=this._bufferService.buffer,s=r.ybase+r.y,o=Math.min(r.x,this._bufferService.cols-1),a=this._coreService.decPrivateModes.cursorBlink??this._optionsService.rawOptions.cursorBlink,l=this._coreService.decPrivateModes.cursorStyle??this._optionsService.rawOptions.cursorStyle,h=this._optionsService.rawOptions.cursorInactiveStyle,d={hasBlinkingCells:!1};for(let c=e;c<=t;c++){let u=c+r.ydisp,f=this._rowElements[c];if(!f)continue;let p=r.lines.get(u);if(!p){f.replaceChildren(),this._setRowBlinkState(c,!1);continue}f.replaceChildren(...this._rowFactory.createRow(p,u,u===s,l,h,o,a,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,-1,-1,d)),this._setRowBlinkState(c,d.hasBlinkingCells)}this._updateTextBlinkState()}get _terminalSelector(){return`.xterm-dom-renderer-owner-${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,r,s,o,a){r<0&&(e=0),s<0&&(t=0);let l=this._bufferService.rows-1;r=Math.max(Math.min(r,l),0),s=Math.max(Math.min(s,l),0),o=Math.min(o,this._bufferService.cols);let h=this._bufferService.buffer,d=h.ybase+h.y,c=Math.min(h.x,o-1),u=this._optionsService.rawOptions.cursorBlink,f=this._optionsService.rawOptions.cursorStyle,p=this._optionsService.rawOptions.cursorInactiveStyle,b={hasBlinkingCells:!1};for(let _=r;_<=s;++_){let S=_+h.ydisp,C=this._rowElements[_];if(!C)continue;let w=h.lines.get(S);if(!w){C.replaceChildren(),this._setRowBlinkState(_,!1);continue}C.replaceChildren(...this._rowFactory.createRow(w,S,S===d,f,p,c,u,this._textBlinkStateManager.isBlinkOn,this.dimensions.css.cell.width,this._widthCache,a?_===r?e:0:-1,a?(_===s?t:o)-1:-1,b)),this._setRowBlinkState(_,b.hasBlinkingCells)}this._updateTextBlinkState()}_setRowBlinkState(e,t){this._rowHasBlinkingCells[e]!==t&&(this._rowHasBlinkingCells[e]=t,this._rowHasBlinkingCellsCount+=t?1:-1)}_updateTextBlinkState(){this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount>0)}};mt=y([m(7,et),m(8,Be),m(9,R),m(10,D),m(11,X),m(12,z),m(13,le)],mt);var ns=class{constructor(i,e){this._rowContainer=i;this._coreBrowserService=e;this._isIdlePaused=!1;this._coreBrowserService.isFocused&&this._resetIdleTimer()}dispose(){this._clearIdleTimer()}restartBlinkAnimation(){this._isIdlePaused&&this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}pause(){this._isIdlePaused=!1,this._clearIdleTimer()}resume(){this._isIdlePaused=!1,this._rowContainer.classList.remove("xterm-cursor-blink-idle"),this._resetIdleTimer()}_resetIdleTimer(){this._isIdlePaused=!1,this._clearIdleTimer(),this._idleTimeout=this._coreBrowserService.window.setTimeout(()=>{this._stopBlinkingDueToIdle()},3e5)}_clearIdleTimer(){this._idleTimeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._idleTimeout),this._idleTimeout=void 0)}_stopBlinkingDueToIdle(){this._rowContainer.classList.add("xterm-cursor-blink-idle"),this._isIdlePaused=!0,this._idleTimeout=void 0}};var bt=class extends g{constructor(e,t,r){super();this._optionsService=r;this.width=0;this.height=0;this._onCharSizeChange=this._register(new v);this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this._register(new as(this._optionsService))}catch{this._measureStrategy=this._register(new os(e,t,this._optionsService))}this._register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],()=>this.measure()))}get hasValidSize(){return this.width>0&&this.height>0}measure(){let e=this._measureStrategy.measure();(e.width!==this.width||e.height!==this.height)&&(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};bt=y([m(2,R)],bt);var zi=class extends g{constructor(){super(...arguments);this._result={width:0,height:0}}_validateAndSet(e,t){e!==void 0&&e>0&&t!==void 0&&t>0&&(this._result.width=e,this._result.height=t)}},os=class extends zi{constructor(e,t,r){super();this._document=e;this._parentElement=t;this._optionsService=r;this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}},as=class extends zi{constructor(e){super();this._optionsService=e;this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext("2d");let t=this._ctx.measureText("W");if(!("width"in t&&"fontBoundingBoxAscent"in t&&"fontBoundingBoxDescent"in t))throw new Error("Required font metrics not supported")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;let e=this._ctx.measureText("W");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}};var Gi=class extends g{constructor(e,t,r){super();this._textarea=e;this._window=t;this.mainDocument=r;this._isFocused=!1;this._cachedIsFocused=void 0;this._onDprChange=this._register(new v);this.onDprChange=this._onDprChange.event;this._onWindowChange=this._register(new v);this.onWindowChange=this._onWindowChange.event;this._screenDprMonitor=this._register(new ls(this._window)),this._register(this.onWindowChange(s=>this._screenDprMonitor.setWindow(s))),this._register(Y.forward(this._screenDprMonitor.onDprChange,this._onDprChange)),this._register(I(this._textarea,"focus",()=>this._isFocused=!0)),this._register(I(this._textarea,"blur",()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask(()=>this._cachedIsFocused=void 0)),this._cachedIsFocused}},ls=class extends g{constructor(e){super();this._parentWindow=e;this._windowResizeListener=this._register(new B);this._onDprChange=this._register(new v);this.onDprChange=this._onDprChange.event;this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this._register(E(()=>this.clearListener()))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=I(this._parentWindow,"resize",()=>this._setDprAndFireIfDiffers())}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){!this._resolutionMediaMatchList||!this._outerListener||(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}};var Vi=class extends g{constructor(){super();this.linkProviders=[];this._register(E(()=>this.linkProviders.length=0))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{let t=this.linkProviders.indexOf(e);t!==-1&&this.linkProviders.splice(t,1)}}}};function Yt(n,i,e){let t=e.getBoundingClientRect(),r=n.getComputedStyle(e),s=parseInt(r.getPropertyValue("padding-left"),10),o=parseInt(r.getPropertyValue("padding-top"),10);return[i.clientX-t.left-s,i.clientY-t.top-o]}function Qs(n,i,e,t,r,s,o,a,l){if(!s)return;let h=Yt(n,i,e);return h[0]=Math.ceil((h[0]+(l?o/2:0))/o),h[1]=Math.ceil(h[1]/a),h[0]=Math.min(Math.max(h[0],1),t+(l?1:0)),h[1]=Math.min(Math.max(h[1],1),r),h}var vt=class{constructor(i,e){this._charSizeService=i;this._renderService=e}getCoords(i,e,t,r,s){return Qs(re(e),i,e,t,r,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,s)}getMouseReportCoords(i,e){let t=Yt(re(e),i,e);if(this._charSizeService.hasValidSize)return t[0]=Math.min(Math.max(t[0],0),this._renderService.dimensions.css.canvas.width-1),t[1]=Math.min(Math.max(t[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(t[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(t[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(t[0]),y:Math.floor(t[1])}}};vt=y([m(0,Be),m(1,G)],vt);var en=typeof window=="object"?window:globalThis;function he(n,i=0){return n[n.length-(1+i)]}function ro(n,i,e){let t=null,r=null;if(typeof e.value=="function"?(t="value",r=e.value,r.length!==0&&console.warn("Memoize should only be used in functions with zero parameters")):typeof e.get=="function"&&(t="get",r=e.get),!r||!t)throw new Error("not supported");let s=`$memoize$${i}`,o=e;o[t]=function(...a){return this.hasOwnProperty(s)||Object.defineProperty(this,s,{configurable:!1,enumerable:!1,writable:!1,value:r.apply(this,a)}),this[s]}}var St=class St{constructor(i){this.element=i,this.next=St.Undefined,this.prev=St.Undefined}};St.Undefined=new St(void 0);var ie=St,$i=class{constructor(){this._first=ie.Undefined;this._last=ie.Undefined}push(i){return this._insert(i,!0)}_insert(i,e){let t=new ie(i);if(this._first===ie.Undefined)this._first=t,this._last=t;else if(e){let s=this._last;this._last=t,t.prev=s,s.next=t}else{let s=this._first;this._first=t,t.next=s,s.prev=t}let r=!1;return()=>{r||(r=!0,this._remove(t))}}_remove(i){if(i.prev!==ie.Undefined&&i.next!==ie.Undefined){let e=i.prev;e.next=i.next,i.next.prev=e}else i.prev===ie.Undefined&&i.next===ie.Undefined?(this._first=ie.Undefined,this._last=ie.Undefined):i.next===ie.Undefined?(this._last=this._last.prev,this._last.next=ie.Undefined):i.prev===ie.Undefined&&(this._first=this._first.next,this._first.prev=ie.Undefined)}*[Symbol.iterator](){let i=this._first;for(;i!==ie.Undefined;)yield i.element,i=i.next}},de;(s=>(s.TAP="-xterm-gesturetap",s.CHANGE="-xterm-gesturechange",s.START="-xterm-gesturestart",s.END="-xterm-gesturesend",s.CONTEXT_MENU="-xterm-gesturecontextmenu"))(de||={});var K=class K extends g{constructor(){super();this._dispatched=!1;this._targets=new $i;this._ignoreTargets=new $i;this._activeTouches={},this._handle=null,this._lastSetTapCountTime=0;let e=en;this._register(I(e.document,"touchstart",t=>this._handleTouchStart(t),{passive:!1})),this._register(I(e.document,"touchend",t=>this._handleTouchEnd(e,t))),this._register(I(e.document,"touchmove",t=>this._handleTouchMove(t),{passive:!1}))}static addTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._targets.push(e);return E(t)}static ignoreTarget(e){if(!K.isTouchDevice())return g.None;K._instance||(K._instance=new K);let t=K._instance._ignoreTargets.push(e);return E(t)}static isTouchDevice(){return"ontouchstart"in en||navigator.maxTouchPoints>0}dispose(){this._handle&&(this._handle.dispose(),this._handle=null),super.dispose()}_handleTouchStart(e){let t=Date.now();this._handle&&(this._handle.dispose(),this._handle=null);for(let r=0,s=e.targetTouches.length;r=K._holdDelay&&Math.abs(h.initialPageX-he(h.rollingPageX))<30&&Math.abs(h.initialPageY-he(h.rollingPageY))<30){let c=this._newGestureEvent(de.CONTEXT_MENU,h.initialTarget);c.pageX=he(h.rollingPageX),c.pageY=he(h.rollingPageY),this._dispatchEvent(c)}else if(s===1){let c=he(h.rollingPageX),u=he(h.rollingPageY),f=he(h.rollingTimestamps)-h.rollingTimestamps[0],p=c-h.rollingPageX[0],b=u-h.rollingPageY[0],_=[...this._targets].filter(S=>h.initialTarget instanceof Node&&S.contains(h.initialTarget));this._inertia(e,_,r,Math.abs(p)/f,p>0?1:-1,c,Math.abs(b)/f,b>0?1:-1,u)}this._dispatchEvent(this._newGestureEvent(de.END,h.initialTarget)),delete this._activeTouches[l.identifier]}this._dispatched&&(t.preventDefault(),t.stopPropagation(),this._dispatched=!1)}_newGestureEvent(e,t){let r=document.createEvent("CustomEvent");return r.initEvent(e,!1,!0),r.initialTarget=t,r.tapCount=0,r}_dispatchEvent(e){if(e.type===de.TAP){let t=new Date().getTime(),r;t-this._lastSetTapCountTime>K._clearTapCountTime?r=1:r=2,this._lastSetTapCountTime=t,e.tapCount=r}else(e.type===de.CHANGE||e.type===de.CONTEXT_MENU)&&(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(let r of this._ignoreTargets)if(r.contains(e.initialTarget))return;let t=[];for(let r of this._targets)if(r.contains(e.initialTarget)){let s=0,o=e.initialTarget;for(;o&&o!==r;)s++,o=o.parentElement;t.push([s,r])}t.sort((r,s)=>r[0]-s[0]);for(let[,r]of t)r.dispatchEvent(e),this._dispatched=!0}}_inertia(e,t,r,s,o,a,l,h,d){this._handle=it(e,()=>{let c=Date.now(),u=c-r,f=0,p=0,b=!0;s+=K._scrollFriction*u,l+=K._scrollFriction*u,s>0&&(b=!1,f=o*s*u),l>0&&(b=!1,p=h*l*u);let _=this._newGestureEvent(de.CHANGE);_.translationX=f,_.translationY=p,t.forEach(S=>S.dispatchEvent(_)),b||this._inertia(e,t,c,s,o,a+f,l,h,d+p)})}_handleTouchMove(e){let t=Date.now();for(let r=0,s=e.changedTouches.length;r3&&(a.rollingPageX.shift(),a.rollingPageY.shift(),a.rollingTimestamps.shift()),a.rollingPageX.push(o.pageX),a.rollingPageY.push(o.pageY),a.rollingTimestamps.push(t)}this._dispatched&&(e.preventDefault(),e.stopPropagation(),this._dispatched=!1)}};K._scrollFriction=-.005,K._holdDelay=700,K._clearTapCountTime=400,y([ro],K,"isTouchDevice",1);var qi=K;var gt=class{constructor(i,e,t,r,s,o,a,l,h){this._renderService=i;this._mouseCoordsService=e;this._mouseStateService=t;this._coreService=r;this._bufferService=s;this._optionsService=o;this._selectionService=a;this._logService=l;this._coreBrowserService=h;this._lastEvent=null;this._wheelPartialScroll=0;this._touchScrollAccumulator=0}bindMouse(i,e,t){let{element:r,document:s}=i,o={mouseup:null,wheel:null,mousedrag:null,mousemove:null},a=new B,l=new B;e(a),e(l);let h={target:i,focus:t,requestedEvents:o,mouseupListener:a,mousedragListener:l},d={mouseup:c=>this._handleMouseUp(h,c),wheel:c=>this._handleWheel(h,c),mousedrag:c=>this._handleMouseDrag(h,c),mousemove:c=>this._handleMouseMove(h,c)};this._altMouseCursor=new cs(r,s,()=>this._mouseStateService.areMouseEventsActive&&!!this._optionsService.rawOptions.mouseEventsRequireAlt),e(this._altMouseCursor),e(this._mouseStateService.onProtocolChange(c=>{this._handleProtocolChange(h,d,c)})),e(this._optionsService.onSpecificOptionChange("mouseEventsRequireAlt",()=>{this._syncMouseModeState(r),this._altMouseCursor?.sync()})),this._mouseStateService.activeProtocol=this._mouseStateService.activeProtocol,e(I(r,"mousedown",c=>this._handleMouseDown(h,c))),e(I(r,"wheel",c=>this._handlePassiveWheel(h,c),{passive:!1})),e(qi.addTarget(i.screenElement)),e(I(i.screenElement,de.START,()=>this._handleTouchStart())),e(I(i.screenElement,de.CHANGE,c=>this._handleTouchChange(h,c)))}_sendEvent(i,e){let t=this._mouseCoordsService.getMouseReportCoords(e,i.target.screenElement);if(!t)return!1;let r,s;switch(e.overrideType||e.type){case"mousemove":s=32,e.buttons===void 0?(r=3,e.button!==void 0&&(r=e.button<3?e.button:3)):r=e.buttons&1?0:e.buttons&4?1:e.buttons&2?2:3;break;case"mouseup":s=0,r=e.button<3?e.button:3;break;case"mousedown":s=1,r=e.button<3?e.button:3;break;case"wheel":if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;let a=e.deltaY;if(a===0||this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return!1;s=a<0?0:1,r=4;break;default:return!1}if(s===void 0||r===void 0||r>4||r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&!e.altKey)return!1;let o=r!==4&&this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive;return this._triggerMouseEvent({col:t.col,row:t.row,x:t.x,y:t.y,button:r,action:s,ctrl:e.ctrlKey,alt:o?!1:e.altKey,shift:e.shiftKey})}_handleMouseUp(i,e){this._sendEvent(i,e),e.buttons||(i.mouseupListener.clear(),i.mousedragListener.clear())}_handleWheel(i,e){return this._sendEvent(i,e),e.preventDefault(),e.stopPropagation(),!1}_handleMouseDrag(i,e){e.buttons&&this._sendEvent(i,e)}_handleMouseMove(i,e){e.buttons||this._sendEvent(i,e)}_handleMouseDown(i,e){if(e.preventDefault(),i.focus(),!this._mouseStateService.areMouseEventsActive||this._selectionService.shouldForceSelection(e))return;this._sendEvent(i,e);let{element:t,document:r}=i.target,s=t.ownerDocument??r;i.requestedEvents.mouseup&&(i.mouseupListener.value=I(s,"mouseup",i.requestedEvents.mouseup)),i.requestedEvents.mousedrag&&(i.mousedragListener.value=I(s,"mousemove",i.requestedEvents.mousedrag))}_handlePassiveWheel(i,e){if(!i.requestedEvents.wheel){if(!this._mouseStateService.allowCustomWheelEvent(e))return!1;if(!this._bufferService.buffer.hasScrollback){if(e.deltaY===0)return!1;if(this._consumeWheelEvent(e,this._renderService?.dimensions?.device?.cell?.height,this._coreBrowserService?.dpr)===0)return e.preventDefault(),e.stopPropagation(),!1;let s="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(e.deltaY<0?"A":"B");return this._coreService.triggerDataEvent(s,!0),e.preventDefault(),e.stopPropagation(),!1}}}_handleTouchStart(){this._touchScrollAccumulator=0}_handleTouchChange(i,e){if(e.preventDefault(),e.stopPropagation(),i.requestedEvents.wheel){this._handleTouchScrollAsWheel(i,e);return}if(!this._bufferService.buffer.hasScrollback){this._handleTouchScrollAsKeys(e);return}i.target.handleTouchScroll?.(e.translationY)}_handleTouchScrollAsKeys(i){let e=this._renderService?.dimensions.css.cell.height;if(!e)return;this._touchScrollAccumulator-=i.translationY;let t=Math.trunc(this._touchScrollAccumulator/e);if(t===0)return;this._touchScrollAccumulator-=t*e;let r="\x1B"+(this._coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t<0?"A":"B");for(let s=0;s0?1:-1),this._wheelPartialScroll%=1):i.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(s*=this._bufferService.rows),s}_triggerMouseEvent(i){if(i.col<0||i.col>=this._bufferService.cols||i.row<0||i.row>=this._bufferService.rows||i.button===4&&i.action===32||i.button===3&&i.action!==32||i.button!==4&&(i.action===2||i.action===3)||(i.col++,i.row++,i.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,i,this._mouseStateService.isPixelEncoding))||!this._mouseStateService.restrictMouseEvent(i))return!1;let e=this._mouseStateService.encodeMouseEvent(i);return e&&(this._mouseStateService.isDefaultEncoding?this._coreService.triggerBinaryEvent(e):this._coreService.triggerDataEvent(e,!0)),this._lastEvent=i,!0}_explainEvents(i){return{down:!!(i&1),up:!!(i&2),drag:!!(i&4),move:!!(i&8),wheel:!!(i&16)}}_equalEvents(i,e,t){if(t){if(i.x!==e.x||i.y!==e.y)return!1}else if(i.col!==e.col||i.row!==e.row)return!1;return!(i.button!==e.button||i.action!==e.action||i.ctrl!==e.ctrl||i.alt!==e.alt||i.shift!==e.shift)}};gt=y([m(0,G),m(1,Oe),m(2,Me),m(3,X),m(4,D),m(5,R),m(6,Ci),m(7,_e),m(8,z)],gt);var cs=class{constructor(i,e,t){this._element=i;this._document=e;this._isActive=t;this._listeners=new B}dispose(){this._listeners.dispose()}sync(){if(this._listeners.clear(),!this._isActive())return;let i=new pe,e=r=>this.syncFromModifier(r);i.add(I(this._document,"keydown",e)),i.add(I(this._document,"keyup",e)),i.add(I(this._element,"mousemove",e));let t=this._element.ownerDocument?.defaultView;t&&i.add(I(t,"blur",()=>{this._isActive()&&this.resetClass()})),this._listeners.value=i}resetClass(){this._updateClass(!1)}syncFromModifier(i){this._isActive()&&this._updateClass(i.getModifierState("Alt"))}_updateClass(i){i?this._element.classList.add("enable-mouse-events"):this._element.classList.remove("enable-mouse-events")}};var Xi=class{constructor(i,e){this._renderCallback=i;this._coreBrowserService=e;this._refreshCallbacks=[]}dispose(){this._animationFrame!==void 0&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(i){return this._refreshCallbacks.push(i),this._animationFrame??=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()),this._animationFrame}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._innerRefresh()))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0){this._runRefreshCallbacks();return}let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(let i of this._refreshCallbacks)i(0);this._refreshCallbacks=[]}};var Yi=class{constructor(i){this._tasks=[];this._i=0;this._logService=i}enqueue(i){this._tasks.push(i),this._start()}flush(){for(;this._is){r-e<-20&&this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(r-e))}ms`),this._start();return}r=s}this.clear()}},hs=class extends Yi{_requestCallback(i){return setTimeout(()=>i(this._createDeadline(16)))}_cancelCallback(i){clearTimeout(i)}_createDeadline(i){let e=performance.now()+i;return{timeRemaining:()=>Math.max(0,e-performance.now())}}},ds=class extends Yi{_requestCallback(i){return requestIdleCallback(i)}_cancelCallback(i){cancelIdleCallback(i)}},Ct="requestIdleCallback"in globalThis?ds:hs,ji=class{constructor(i){this._queue=new Ct(i)}set(i){this._queue.clear(),this._queue.enqueue(i)}flush(){this._queue.flush()}dispose(){this._queue.clear()}};var It=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._rowCount=e;this._optionsService=r;this._logService=s;this._charSizeService=o;this._coreService=a;this._coreBrowserService=d;this._renderer=this._register(new B);this._observerDisposable=this._register(new B);this._isPaused=!1;this._needsFullRefresh=!1;this._isNextRenderRedrawOnly=!0;this._needsSelectionRefresh=!1;this._canvasWidth=0;this._canvasHeight=0;this._selectionState={start:void 0,end:void 0,columnSelectMode:!1};this._onDimensionsChange=this._register(new v);this.onDimensionsChange=this._onDimensionsChange.event;this._onRenderedViewportChange=this._register(new v);this.onRenderedViewportChange=this._onRenderedViewportChange.event;this._onRender=this._register(new v);this.onRender=this._onRender.event;this._onRefreshRequest=this._register(new v);this.onRefreshRequest=this._onRefreshRequest.event;this._pausedResizeTask=this._register(new ji(this._logService)),this._renderDebouncer=new Xi((u,f)=>this._renderRows(u,f),this._coreBrowserService),this._register(this._renderDebouncer),this._syncOutputHandler=new us(this._coreBrowserService,this._coreService,()=>this._fullRefresh()),this._register(E(()=>this._syncOutputHandler.dispose())),this._register(this._coreBrowserService.onDprChange(()=>this.handleDevicePixelRatioChange())),this._register(h.onResize(()=>this._fullRefresh())),this._register(h.buffers.onBufferActivate(()=>this._renderer.value?.clear())),this._register(this._optionsService.onOptionChange(()=>this._handleOptionsChanged())),this._register(this._charSizeService.onCharSizeChange(()=>this.handleCharSizeChanged())),this._register(l.onDecorationRegistered(()=>this._fullRefresh())),this._register(l.onDecorationRemoved(()=>this._fullRefresh())),this._register(this._optionsService.onMultipleOptionChange(["drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio","rescaleOverlappingGlyphs"],()=>{this.clear(),this.handleResize(h.cols,h.rows),this._fullRefresh()})),this._register(this._optionsService.onMultipleOptionChange(["cursorBlink","cursorStyle"],()=>this.refreshRows(h.buffer.y,h.buffer.y,void 0,!0))),this._register(c.onChangeColors(()=>this._fullRefresh())),this._registerIntersectionObserver(this._coreBrowserService.window,t),this._register(this._coreBrowserService.onWindowChange(u=>this._registerIntersectionObserver(u,t)))}get dimensions(){return this._renderer.value.dimensions}_registerIntersectionObserver(e,t){if("IntersectionObserver"in e){let r=new e.IntersectionObserver(s=>this._handleIntersectionChange(s[s.length-1]),{threshold:0});this._observerDisposable.value=E(()=>{this._intersectionObserver?.disconnect(),this._intersectionObserver=void 0}),this._intersectionObserver=r,r.observe(t)}}_handleIntersectionChange(e){this._isPaused=e.isIntersecting===void 0?e.intersectionRatio===0:!e.isIntersecting,this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused),!this._isPaused&&!this._charSizeService.hasValidSize&&this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,r=!1,s=!1){if(this._isPaused){this._needsFullRefresh=!0;return}if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}let o=this._syncOutputHandler.flush();o&&(e=Math.min(e,o.start),t=Math.max(t,o.end)),s||(this._isNextRenderRedrawOnly=!1),r?this._renderRows(e,t):this._renderDebouncer.refresh(e,t,this._rowCount)}_renderRows(e,t){if(this._renderer.value){if(this._coreService.decPrivateModes.synchronizedOutput){this._syncOutputHandler.bufferRows(e,t);return}e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0}}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw(t=>this.refreshRows(t.start,t.end,t.sync,!0)),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set(()=>this._renderer.value?.handleResize(e,t)):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.value?.handleSelectionChanged(e,t,r)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};It=y([m(2,R),m(3,_e),m(4,Be),m(5,X),m(6,ge),m(7,D),m(8,z),m(9,le)],It);var us=class{constructor(i,e,t){this._coreBrowserService=i;this._coreService=e;this._onTimeout=t;this._start=0;this._end=0;this._isBuffering=!1}bufferRows(i,e){this._isBuffering?(this._start=Math.min(this._start,i),this._end=Math.max(this._end,e)):(this._start=i,this._end=e,this._isBuffering=!0),this._timeout??=this._coreBrowserService.window.setTimeout(()=>{this._timeout=void 0,this._coreService.decPrivateModes.synchronizedOutput=!1,this._onTimeout()},1e3)}flush(){if(this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0),!this._isBuffering)return;let i={start:this._start,end:this._end};return this._isBuffering=!1,i}dispose(){this._timeout!==void 0&&(this._coreBrowserService.window.clearTimeout(this._timeout),this._timeout=void 0)}};function tn(n,i,e,t){let r=e.buffer.x,s=e.buffer.y;if(!e.buffer.hasScrollback)return lo(r,s,n,i,e,t)+Ji(s,i,e,t)+co(r,s,n,i,e,t);let o;if(s===i)return o=r>n?"D":"C",Jt(Math.abs(r-n),jt(o,t));o=s>i?"D":"C";let a=Math.abs(s-i),l=ao(s>i?n:r,e)+(a-1)*e.cols+1+oo(s>i?r:n,e);return Jt(l,jt(o,t))}function oo(n,i){return n-1}function ao(n,i){return i.cols-n}function lo(n,i,e,t,r,s){return Ji(i,t,r,s).length===0?"":Jt(sn(n,i,n,i-qe(i,r),!1,r).length,jt("D",s))}function Ji(n,i,e,t){let r=n-qe(n,e),s=i-qe(i,e),o=Math.abs(r-s)-ho(n,i,e);return Jt(o,jt(rn(n,i),t))}function co(n,i,e,t,r,s){let o;Ji(i,t,r,s).length>0?o=t-qe(t,r):o=i;let a=t,l=uo(n,i,e,t,r,s);return Jt(sn(n,o,e,a,l==="C",r).length,jt(l,s))}function ho(n,i,e){let t=0,r=n-qe(n,e),s=i-qe(i,e);for(let o=0;o=0&&n0?o=t-qe(t,r):o=i,n=e&&oi?"A":"B"}function sn(n,i,e,t,r,s){let o=n,a=i,l="";for(;(o!==e||a!==t)&&a>=0&&as.cols-1?(l+=s.buffer.translateBufferLineToString(a,!1,n,o),o=0,n=0,a++):!r&&o<0&&(l+=s.buffer.translateBufferLineToString(a,!1,0,n+1),o=s.cols-1,n=o,a--);return l+s.buffer.translateBufferLineToString(a,!1,n,o)}function jt(n,i){let e=i?"O":"[";return"\x1B"+e+n}function Jt(n,i){n=Math.floor(n);let e="";for(let t=0;tthis._bufferService.cols?i%this._bufferService.cols===0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)-1]:[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[i,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){let i=this.selectionStart[0]+this.selectionStartLength;return i>this._bufferService.cols?[i%this._bufferService.cols,this.selectionStart[1]+Math.floor(i/this._bufferService.cols)]:[Math.max(i,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){let i=this.selectionStart,e=this.selectionEnd;return!i||!e?!1:i[1]>e[1]||i[1]===e[1]&&i[0]>e[0]}handleTrim(i){return this.selectionStart&&(this.selectionStart[1]-=i),this.selectionEnd&&(this.selectionEnd[1]-=i),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):this.selectionStart&&this.selectionStart[1]<0?(this.selectionStart=[0,0],!0):!1}};function fs(n,i){if(n.start.y>n.end.y)throw new Error(`Buffer range end (${n.end.x}, ${n.end.y}) cannot be before start (${n.start.x}, ${n.start.y})`);return i*(n.end.y-n.start.y)+(n.end.x-n.start.x+1)}var fo="\xA0",_o=new RegExp(fo,"g");var Et=class extends g{constructor(e,t,r,s,o,a,l,h,d,c){super();this._element=e;this._screenElement=t;this._linkifier=r;this._bufferService=s;this._coreService=o;this._mouseCoordsService=a;this._optionsService=l;this._mouseStateService=h;this._renderService=d;this._coreBrowserService=c;this._dragScrollAmount=0;this._enabled=!0;this._trimListener=this._register(new B);this._workCell=new F;this._mouseDownTimeStamp=0;this._oldHasSelection=!1;this._oldSelectionStart=void 0;this._oldSelectionEnd=void 0;this._onLinuxMouseSelection=this._register(new v);this.onLinuxMouseSelection=this._onLinuxMouseSelection.event;this._onRedrawRequest=this._register(new v);this.onRequestRedraw=this._onRedrawRequest.event;this._onSelectionChange=this._register(new v);this.onSelectionChange=this._onSelectionChange.event;this._onRequestScrollLines=this._register(new v);this.onRequestScrollLines=this._onRequestScrollLines.event;this._mouseMoveListener=u=>this._handleMouseMove(u),this._mouseUpListener=u=>this._handleMouseUp(u),this._coreService.onUserInput(()=>{this.hasSelection&&this.clearSelection()}),this._trimListener.value=this._bufferService.buffer.lines.onTrim(u=>this._handleTrim(u)),this._register(this._bufferService.buffers.onBufferActivate(u=>this._handleBufferActivate(u))),this.enable(),this._model=new Zi(this._bufferService),this._activeSelectionMode=0,this._register(E(()=>{this._removeMouseDownListeners()})),this._register(this._bufferService.onResize(u=>{u.rowsChanged&&this.clearSelection()}))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!e||!t?!1:e[0]!==t[0]||e[1]!==t[1]}get selectionText(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";let r=this._bufferService.buffer,s=[];if(this._activeSelectionMode===3){if(e[0]===t[0])return"";let a=e[0]a.replace(_o," ")).join(Ke?`\r `:` --`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),zt&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s||!t?!1:this._areCoordsInSelection(t,r,s)}isCellInSelection(e,t){let r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s?!1:this._areCoordsInSelection([e,t],r,s)}_areCoordsInSelection(e,t,r){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){let r=this._linkifier.currentLink?.link?.range;if(r)return this._model.selectionStart=[r.start.x-1,r.start.y-1],this._model.selectionStartLength=hs(r,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let s=this._getMouseBufferCoords(e);return s?(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=qt(this._coreBrowserService.window,e,this._screenElement)[1],r=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(t*14))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:ie?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0&&!(this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){let t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);let r=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);r&&r.length!==this._model.selectionStart[0]&&r.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!1:e.altKey&&!(ie&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let r=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){let r=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&r[0]!==void 0&&r[1]!==void 0){let s=Qs(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(s,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!!e&&!!t&&(e[0]!==t[0]||e[1]!==t[1]);if(!r){this._oldHasSelection&&this._fireOnSelectionChange(e,t,r);return}!e||!t||(!this._oldSelectionStart||!this._oldSelectionEnd||e[0]!==this._oldSelectionStart[0]||e[1]!==this._oldSelectionStart[1]||t[0]!==this._oldSelectionEnd[0]||t[1]!==this._oldSelectionEnd[1])&&this._fireOnSelectionChange(e,t,r)}_fireOnSelectionChange(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(t=>this._handleTrim(t))}_convertViewportColToCharacterIndex(e,t){let r=t;for(let s=0;t>=s;s++){let o=e.loadCell(s,this._workCell).getChars().length;this._workCell.getWidth()===0?r--:o>1&&t!==s&&(r+=o-1)}return r}setSelection(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,r=!0,s=!0){if(e[0]>=this._bufferService.cols)return;let o=this._bufferService.buffer,a=o.lines.get(e[1]);if(!a)return;let l=o.translateBufferLineToString(e[1],!1),h=this._convertViewportColToCharacterIndex(a,e[0]),d=h,c=e[0]-h,u=0,_=0,p=0,v=0;if(l.charAt(h)===" "){for(;h>0&&l.charAt(h-1)===" ";)h--;for(;d1&&(v+=L-1,d+=L-1);I>0&&h>0&&!this._isCharWordSeparator(a.loadCell(I-1,this._workCell));){a.loadCell(I-1,this._workCell);let T=this._workCell.getChars().length;this._workCell.getWidth()===0?(u++,I--):T>1&&(p+=T-1,h-=T-1),h--,I--}for(;w1&&(v+=T-1,d+=T-1),d++,w++}}d++;let f=h+c-u+p,S=Math.min(this._bufferService.cols,d-h+u+_-p-v);if(!(!t&&l.slice(h,d).trim()==="")){if(r&&f===0&&a.getCodePoint(0)!==32){let I=o.lines.get(e[1]-1);if(I&&a.isWrapped&&I.getCodePoint(this._bufferService.cols-1)!==32){let w=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(w){let L=this._bufferService.cols-w.start;f-=L,S+=L}}}if(s&&f+S===this._bufferService.cols&&a.getCodePoint(this._bufferService.cols-1)!==32){let I=o.lines.get(e[1]+1);if(I?.isWrapped&&I.getCodePoint(0)!==32){let w=this._getWordAt([0,e[1]+1],!1,!1,!0);w&&(S+=w.length)}}return{start:f,length:S}}}_selectWordAt(e,t){let r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}}_selectToWordAt(e){let t=this._getWordAt(e,!0);if(t){let r=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}}_isCharWordSeparator(e){return e.getWidth()===0?!1:this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let t=this._bufferService.buffer.getWrappedRangeForLine(e),r={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=hs(r,this._bufferService.cols)}};Et=y([m(3,D),m(4,Y),m(5,Be),m(6,R),m(7,Me),m(8,V),m(9,G)],Et);var jt=class{constructor(){this._data={}}set(i,e,t){this._data[i]||(this._data[i]={}),this._data[i][e]=t}get(i,e){return this._data[i]?this._data[i][e]:void 0}clear(){this._data={}}};var Zt=class{constructor(){this._color=new jt;this._css=new jt}setCss(i,e,t){this._css.set(i,e,t)}getCss(i,e){return this._css.get(i,e)}setColor(i,e,t){this._color.set(i,e,t)}getColor(i,e){return this._color.get(i,e)}clear(){this._color.clear(),this._css.clear()}};var $=Object.freeze((()=>{let n=[P.toColor("#2e3436"),P.toColor("#cc0000"),P.toColor("#4e9a06"),P.toColor("#c4a000"),P.toColor("#3465a4"),P.toColor("#75507b"),P.toColor("#06989a"),P.toColor("#d3d7cf"),P.toColor("#555753"),P.toColor("#ef2929"),P.toColor("#8ae234"),P.toColor("#fce94f"),P.toColor("#729fcf"),P.toColor("#ad7fa8"),P.toColor("#34e2e2"),P.toColor("#eeeeec")],i=[0,95,135,175,215,255];for(let e=0;e<216;e++){let t=i[e/36%6|0],r=i[e/6%6|0],s=i[e%6];n.push({css:O.toCss(t,r,s),rgba:O.toRgba(t,r,s)})}for(let e=0;e<24;e++){let t=8+e*10;n.push({css:O.toCss(t,t,t),rgba:O.toRgba(t,t,t)})}return n})());var qe=P.toColor("#ffffff"),Qt=P.toColor("#000000"),rn=P.toColor("#ffffff"),sn=Qt,Jt={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},ao=qe,yt=class extends g{constructor(e){super();this._optionsService=e;this._contrastCache=new Zt;this._halfContrastCache=new Zt;this._onChangeColors=this._register(new b);this.onChangeColors=this._onChangeColors.event;this._colors={foreground:qe,background:Qt,cursor:rn,cursorAccent:sn,selectionForeground:void 0,selectionBackgroundTransparent:Jt,selectionBackgroundOpaque:k.blend(Qt,Jt),selectionInactiveBackgroundTransparent:Jt,selectionInactiveBackgroundOpaque:k.blend(Qt,Jt),scrollbarSliderBackground:k.opacity(qe,.2),scrollbarSliderHoverBackground:k.opacity(qe,.4),scrollbarSliderActiveBackground:k.opacity(qe,.5),overviewRulerBorder:qe,ansi:$.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let t=this._colors;if(t.foreground=M(e.foreground,qe),t.background=M(e.background,Qt),t.cursor=k.blend(t.background,M(e.cursor,rn)),t.cursorAccent=k.blend(t.background,M(e.cursorAccent,sn)),t.selectionBackgroundTransparent=M(e.selectionBackground,Jt),t.selectionBackgroundOpaque=k.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=M(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=k.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?M(e.selectionForeground,Jr):void 0,t.selectionForeground===Jr&&(t.selectionForeground=void 0),k.isOpaque(t.selectionBackgroundTransparent)&&(t.selectionBackgroundTransparent=k.opacity(t.selectionBackgroundTransparent,.3)),k.isOpaque(t.selectionInactiveBackgroundTransparent)&&(t.selectionInactiveBackgroundTransparent=k.opacity(t.selectionInactiveBackgroundTransparent,.3)),t.scrollbarSliderBackground=M(e.scrollbarSliderBackground,k.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=M(e.scrollbarSliderHoverBackground,k.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=M(e.scrollbarSliderActiveBackground,k.opacity(t.foreground,.5)),t.overviewRulerBorder=M(e.overviewRulerBorder,ao),t.ansi=$.slice(),t.ansi[0]=M(e.black,$[0]),t.ansi[1]=M(e.red,$[1]),t.ansi[2]=M(e.green,$[2]),t.ansi[3]=M(e.yellow,$[3]),t.ansi[4]=M(e.blue,$[4]),t.ansi[5]=M(e.magenta,$[5]),t.ansi[6]=M(e.cyan,$[6]),t.ansi[7]=M(e.white,$[7]),t.ansi[8]=M(e.brightBlack,$[8]),t.ansi[9]=M(e.brightRed,$[9]),t.ansi[10]=M(e.brightGreen,$[10]),t.ansi[11]=M(e.brightYellow,$[11]),t.ansi[12]=M(e.brightBlue,$[12]),t.ansi[13]=M(e.brightMagenta,$[13]),t.ansi[14]=M(e.brightCyan,$[14]),t.ansi[15]=M(e.brightWhite,$[15]),e.extendedAnsi){let r=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;s"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};function on(n,i,e,t){let r={type:0,cancel:!1,key:void 0},s=(n.shiftKey?1:0)|(n.altKey?2:0)|(n.ctrlKey?4:0)|(n.metaKey?8:0);switch(n.keyCode){case 0:n.key==="UIKeyInputUpArrow"?i?r.key="\x1BOA":r.key="\x1B[A":n.key==="UIKeyInputLeftArrow"?i?r.key="\x1BOD":r.key="\x1B[D":n.key==="UIKeyInputRightArrow"?i?r.key="\x1BOC":r.key="\x1B[C":n.key==="UIKeyInputDownArrow"&&(i?r.key="\x1BOB":r.key="\x1B[B");break;case 8:r.key=n.ctrlKey?"\b":"\x7F",n.altKey&&(r.key="\x1B"+r.key);break;case 9:if(n.shiftKey){r.key="\x1B[Z";break}r.key=" ",r.cancel=!0;break;case 13:n.key==="c"&&n.ctrlKey?r.key="":r.key=n.altKey?"\x1B\r":"\r",r.cancel=!0;break;case 27:r.key="\x1B",n.altKey&&(r.key="\x1B\x1B"),r.cancel=!0;break;case 37:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"D":i?r.key="\x1BOD":r.key="\x1B[D";break;case 39:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"C":i?r.key="\x1BOC":r.key="\x1B[C";break;case 38:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"A":i?r.key="\x1BOA":r.key="\x1B[A";break;case 40:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"B":i?r.key="\x1BOB":r.key="\x1B[B";break;case 45:!n.shiftKey&&!n.ctrlKey&&(r.key="\x1B[2~");break;case 46:s?r.key="\x1B[3;"+(s+1)+"~":r.key="\x1B[3~";break;case 36:s?r.key="\x1B[1;"+(s+1)+"H":i?r.key="\x1BOH":r.key="\x1B[H";break;case 35:s?r.key="\x1B[1;"+(s+1)+"F":i?r.key="\x1BOF":r.key="\x1B[F";break;case 33:n.shiftKey?r.type=2:n.ctrlKey?r.key="\x1B[5;"+(s+1)+"~":r.key="\x1B[5~";break;case 34:n.shiftKey?r.type=3:n.ctrlKey?r.key="\x1B[6;"+(s+1)+"~":r.key="\x1B[6~";break;case 112:s?r.key="\x1B[1;"+(s+1)+"P":r.key="\x1BOP";break;case 113:s?r.key="\x1B[1;"+(s+1)+"Q":r.key="\x1BOQ";break;case 114:s?r.key="\x1B[1;"+(s+1)+"R":r.key="\x1BOR";break;case 115:s?r.key="\x1B[1;"+(s+1)+"S":r.key="\x1BOS";break;case 116:s?r.key="\x1B[15;"+(s+1)+"~":r.key="\x1B[15~";break;case 117:s?r.key="\x1B[17;"+(s+1)+"~":r.key="\x1B[17~";break;case 118:s?r.key="\x1B[18;"+(s+1)+"~":r.key="\x1B[18~";break;case 119:s?r.key="\x1B[19;"+(s+1)+"~":r.key="\x1B[19~";break;case 120:s?r.key="\x1B[20;"+(s+1)+"~":r.key="\x1B[20~";break;case 121:s?r.key="\x1B[21;"+(s+1)+"~":r.key="\x1B[21~";break;case 122:s?r.key="\x1B[23;"+(s+1)+"~":r.key="\x1B[23~";break;case 123:s?r.key="\x1B[24;"+(s+1)+"~":r.key="\x1B[24~";break;default:if(n.ctrlKey&&!n.shiftKey&&!n.altKey&&!n.metaKey)n.keyCode>=65&&n.keyCode<=90?r.key=String.fromCharCode(n.keyCode-64):n.keyCode===32?r.key="\0":n.keyCode>=51&&n.keyCode<=55?r.key=String.fromCharCode(n.keyCode-51+27):n.keyCode===56?r.key="\x7F":n.key==="/"?r.key="":n.keyCode===219?r.key="\x1B":n.keyCode===220?r.key="":n.keyCode===221&&(r.key="");else if((!e||t)&&n.altKey&&!n.metaKey){let a=lo[n.keyCode]?.[n.shiftKey?1:0];if(a)r.key="\x1B"+a;else if(n.keyCode>=65&&n.keyCode<=90){let l=n.ctrlKey?n.keyCode-64:n.keyCode+32,h=String.fromCharCode(l);n.shiftKey&&(h=h.toUpperCase()),r.key="\x1B"+h}else if(n.keyCode===32)r.key="\x1B"+(n.ctrlKey?"\0":" ");else if(n.key==="Dead"&&n.code.startsWith("Key")){let l=n.code.slice(3,4);n.shiftKey||(l=l.toLowerCase()),r.key="\x1B"+l,r.cancel=!0}}else if(e&&!n.altKey&&!n.ctrlKey&&!n.shiftKey&&n.metaKey)n.keyCode===65&&(r.type=1);else if(n.key&&!n.ctrlKey&&!n.altKey&&!n.metaKey&&n.keyCode>=48&&n.key.length===1)r.key=n.key;else if(n.key&&n.ctrlKey&&n.shiftKey)switch(n.code){case"Minus":r.key="";break;case"Digit2":r.key="\0";break;case"Digit6":r.key="";break}break}return r}var ei=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440};this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24};this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"};this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(i){if(i.code.startsWith("Numpad")){let e=i.code.slice(6);if(e>="0"&&e<="9")return 57399+parseInt(e,10);switch(e){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(i){switch(i.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(i){let e=0;return i.shiftKey&&(e|=1),i.altKey&&(e|=2),i.ctrlKey&&(e|=4),i.metaKey&&(e|=8),e>0?e+1:0}_getKeyCode(i,e){let t=this._getNumpadKeyCode(i);if(t!==void 0)return t;let r=this._getModifierKeyCode(i);if(r!==void 0)return r;let s=this._functionalKeyCodes[i.key];if(s!==void 0)return s;if((i.shiftKey||e&&i.altKey)&&i.code){if(i.code.startsWith("Digit")&&i.code.length===6){let o=i.code.charAt(5);if(o>="0"&&o<="9")return o.charCodeAt(0)}if(i.code.startsWith("Key")&&i.code.length===4)return i.code.charAt(3).toLowerCase().charCodeAt(0)}if(i.key.length===1){let o=i.key.codePointAt(0);return o>=65&&o<=90?o+32:o}}_isModifierKey(i){return i.key==="Shift"||i.key==="Control"||i.key==="Alt"||i.key==="Meta"}_isLockKey(i){return i.key==="CapsLock"||i.key==="NumLock"||i.key==="ScrollLock"}_buildCsiLetterSequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1B["+i}_buildSs3Sequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1BO"+i}_buildCsiTildeSequence(i,e,t,r){let s=r&&t!==1,o="\x1B["+i;return(e>0||s)&&(o+=";"+(e>0?e:"1"),s&&(o+=":"+t)),o+="~",o}_buildCsiUSequence(i,e,t,r,s,o,a){let l=!!(s&2),h=!!(s&4),d="\x1B["+e,c;h&&i.shiftKey&&i.key.length===1&&!o&&!a&&(c=i.key.codePointAt(0),d+=":"+c);let _=!!(s&16)&&r!==3&&i.key.length===1&&!o&&!a&&!i.ctrlKey?i.key.codePointAt(0):void 0,p=l&&r!==1&&(r===3||_===void 0);return(t>0||p||_!==void 0)&&(d+=";",t>0?d+=t:p&&(d+="1"),p&&(d+=":"+r)),_!==void 0&&(d+=";"+_),d+="u",d}evaluate(i,e,t=1,r=!1){let s={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(i),a=this._isModifierKey(i),l=!!(e&2);if(!l&&t===3||a&&!(e&8)||this._isLockKey(i)&&!(e&8))return s;let h=this._csiLetterKeys[i.key];if(h)return s.key=this._buildCsiLetterSequence(h,o,t,l),s.cancel=!0,s;let d=this._ss3FunctionKeys[i.key];if(d)return s.key=this._buildSs3Sequence(d,o,t,l),s.cancel=!0,s;let c=this._csiTildeKeys[i.key];if(c!==void 0)return s.key=this._buildCsiTildeSequence(c,o,t,l),s.cancel=!0,s;let u=this._getKeyCode(i,r);if(u===void 0)return s;let _=u===13||u===9||u===127;if(_&&t===3&&!(e&8))return s;let p=this._functionalKeyCodes[i.key]!==void 0||this._getNumpadKeyCode(i)!==void 0;if(!!(e&8||l&&t===3||(e&1||l)&&(p&&!_||o>0&&i.key.length!==1||o-1>1)))s.key=this._buildCsiUSequence(i,u,o,t,e,p,a),s.cancel=!0;else{let f=u===13?"\r":u===9?" ":u===127?"\x7F":void 0;f?s.key=f:i.key.length===1&&!i.ctrlKey&&!i.altKey&&!i.metaKey&&(s.key=i.key)}return s}static shouldUseProtocol(i){return i>0}};var ji=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226};this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40};this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]);this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(i){let e=this._codeToVk[i.code];return e!==void 0?e:i.keyCode||0}_getScanCode(i){return this._codeToScancode[i.code]||0}_getUnicodeChar(i){if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(i.key==="Enter")return 10;if(i.key==="Backspace")return 127}let e=this._keyToControlChar[i.key];if(e!==void 0)return e;if(i.key.length===1){let t=i.key.codePointAt(0)||0;if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(i){let e=0;return i.shiftKey&&(e|=16),i.ctrlKey&&(i.code==="ControlRight"?e|=4:e|=8),i.altKey&&(i.code==="AltRight"?e|=1:e|=2),this._enhancedKeyCodes.has(i.code)&&(e|=256),e}evaluateKeyboardEvent(i,e){let t=this._getVirtualKeyCode(i),r=this._getScanCode(i),s=this._getUnicodeChar(i),o=e?1:0,a=this._getControlKeyState(i);return{type:0,cancel:!0,key:`\x1B[${t};${r};${s};${o};${a};1_`}}};var xt=class{constructor(i,e){this._coreService=i;this._optionsService=e}_getWin32InputMode(){return this._win32InputMode??=new ji,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new ei,this._kittyKeyboard}evaluateKeyDown(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!0);let e=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(i,e,i.repeat?2:1,ie&&this._optionsService.rawOptions.macOptionIsMeta):on(i,this._coreService.decPrivateModes.applicationCursorKeys,ie,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!1);let e=this._coreService.kittyKeyboard.flags;if(this.useKitty&&e&2)return this._getKittyKeyboard().evaluate(i,e,3,ie&&this._optionsService.rawOptions.macOptionIsMeta)}get useKitty(){let i=this._coreService.kittyKeyboard.flags;return!!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard&&ei.shouldUseProtocol(i))}get useWin32InputMode(){return!!(this._optionsService.rawOptions.vtExtensions?.win32InputMode&&this._coreService.decPrivateModes.win32InputMode)}};xt=y([m(0,Y),m(1,R)],xt);var us=class{constructor(...i){this._entries=new Map;for(let[e,t]of i)this.set(e,t)}set(i,e){let t=this._entries.get(i);return this._entries.set(i,e),t}forEach(i){for(let[e,t]of this._entries.entries())i(e,t)}has(i){return this._entries.has(i)}get(i){return this._entries.get(i)}},Zi=class{constructor(){this._services=new us;this._services.set(Qe,this)}setService(i,e){this._services.set(i,e)}getService(i){return this._services.get(i)}createInstance(i,...e){let t=Fs(i).sort((o,a)=>o.index-a.index),r=[];for(let o of t){let a=this._services.get(o.id);if(!a)throw new Error(`[createInstance] ${i.name} depends on UNKNOWN service ${o.id._id}.`);r.push(a)}let s=t.length>0?t[0].index:e.length;if(e.length!==s)throw new Error(`[createInstance] First service dependency of ${i.name} at position ${s+1} conflicts with ${e.length} static arguments`);return new i(...e,...r)}};var co={trace:0,debug:1,info:2,warn:3,error:4,off:5},ho="xterm.js: ",wt=class extends g{constructor(e){super();this._optionsService=e;this._logLevel=5;this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=co[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tthis._length)for(let t=this._length;t=e;s--)this._array[this._getCyclicIndex(s+r.length)]=this._array[this._getCyclicIndex(s)];for(let s=0;sthis._maxLength){let s=this._length+r.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=r.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(let o=t-1;o>=0;o--)this.set(e+o+r,this.get(e+o));let s=e+t+r-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>22,e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):t]}set(i,e){this._cacheValid=!1,this._data[i*3+1]=e[0],e[1].length>1?(this._combined[i]=e[1],this._data[i*3+0]=i|2097152|e[2]<<22):this._data[i*3+0]=e[1].charCodeAt(0)|e[2]<<22}getWidth(i){return this._data[i*3+0]>>22}hasWidth(i){return this._data[i*3+0]&12582912}getFg(i){return this._data[i*3+1]}getBg(i){return this._data[i*3+2]}hasContent(i){return this._data[i*3+0]&4194303}getCodePoint(i){let e=this._data[i*3+0];return e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):e&2097151}isCombined(i){return this._data[i*3+0]&2097152}getString(i){let e=this._data[i*3+0];return e&2097152?this._combined[i]:e&2097151?be(e&2097151):""}isProtected(i){return this._data[i*3+2]&536870912}loadCell(i,e){return Ji=i*3,e.content=this._data[Ji+0],e.fg=this._data[Ji+1],e.bg=this._data[Ji+2],e.content&2097152?e.combinedData=this._combined[i]:e.combinedData="",e.bg&268435456?e.extended=this._extendedAttrs[i]:(fs._ext=0,fs._urlId=0,e.extended=fs),e}setCell(i,e){this._cacheValid=!1,e.content&2097152&&(this._combined[i]=e.combinedData),e.bg&268435456&&(this._extendedAttrs[i]=e.extended),this._data[i*3+0]=e.content,this._data[i*3+1]=e.fg,this._data[i*3+2]=e.bg}setCellFromCodepoint(i,e,t,r){this._cacheValid=!1,r.bg&268435456&&(this._extendedAttrs[i]=r.extended);let s=i*3;this._data[s+0]=e|t<<22,this._data[s+1]=r.fg,this._data[s+2]=r.bg}addCodepointToCell(i,e,t){this._cacheValid=!1;let r=this._data[i*3+0];r&2097152?this._combined[i]+=be(e):r&2097151?(this._combined[i]=be(r&2097151)+be(e),r&=-2097152,r|=2097152):r=e|1<<22,t&&(r&=-12582913,r|=t<<22),this._data[i*3+0]=r}insertCells(i,e,t){if(this._cacheValid=!1,i%=this.length,i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,t),e=0;--r)this.setCell(i+e+r,this.loadCell(i+r,ln));for(let r=0;rthis.length){if(this._data.buffer.byteLength>=t*4)this._data=new Uint32Array(this._data.buffer,0,t);else{let r=new Uint32Array(t);r.set(this._data),this._data=r}for(let r=this.length;r=i&&delete this._combined[a]}let s=Object.keys(this._extendedAttrs);for(let o=0;o=i&&delete this._extendedAttrs[a]}}return this.length=i,t*4*2=0;--i)if(this._data[i*3+0]&4194303)return i+(this._data[i*3+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(this._data[i*3+0]&4194303||this._data[i*3+2]&50331648)return i+(this._data[i*3+0]>>22);return 0}copyCellsFrom(i,e,t,r,s){this._cacheValid=!1;let o=i._data;if(s)for(let a=r-1;a>=0;a--){for(let l=0;l<3;l++)this._data[(t+a)*3+l]=o[(e+a)*3+l];this._copyCellMapsFrom(i,e+a,t+a)}else for(let a=0;a>22||1}r&&r.push(e);let a=o.join("");return s&&(this._cache=a,this._cacheValid=!0,this._cacheTrimmed=!!i),a}_copyCellMapsFrom(i,e,t){let r=e*3;i._data[r+0]&2097152&&(this._combined[t]=i._combined[e]),i._data[r+2]&268435456&&(this._extendedAttrs[t]=i._extendedAttrs[e])}_copySparseMapsFrom(i){this._combined={},this._extendedAttrs={};for(let e=0;e=a&&t0&&(f>c||d[f].getTrimmedLength()===0);f--)v++;v>0&&(o.push(a+d.length-v),o.push(v)),a+=d.length-1}return o}function hn(n,i){let e=[],t=0,r=i[t],s=0;for(let o=0;ol&&(s-=l,o++);let h=n[o].getWidth(s-1)===2;h&&s--;let d=h?e-1:e;t.push(d),a+=d}return t}function Tt(n,i,e){if(i===n.length-1)return n[i].getTrimmedLength();let t=!n[i].hasContent(e-1)&&n[i].getWidth(e-1)===1,r=n[i+1].getWidth(0)===2;return t&&r?e-1:e}var er=class er{constructor(i){this.line=i;this.isDisposed=!1;this._disposables=[];this._id=er._nextId++;this._onDispose=this.register(new b);this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),Oe(this._disposables),this._disposables.length=0)}register(i){return this._disposables.push(i),i}};er._nextId=1;var Qi=er;var q={},Re=q.B;q[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"};q.A={"#":"\xA3"};q.B=void 0;q[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"};q.C=q[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};q.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"};q.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"};q.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"};q.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"};q.E=q[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"};q.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"};q.H=q[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};q["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"};var fn=4294967295,ri=class extends g{constructor(e,t,r,s){super();this._hasScrollback=e;this._optionsService=t;this._bufferService=r;this._logService=s;this.ydisp=0;this.ybase=0;this.y=0;this.x=0;this.tabs={};this.savedY=0;this.savedX=0;this.savedCurAttrData=U.clone();this.savedCharset=Re;this.savedCharsets=[];this.savedGlevel=0;this.savedOriginMode=!1;this.savedWraparoundMode=!0;this.markers=[];this._nullCell=F.fromCharData([0,"",1,0]);this._whitespaceCell=F.fromCharData([0," ",1,32]);this._isClearing=!1;this._memoryCleanupPosition=0;this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new ti(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new It(this._logService),this._register(E(()=>this._memoryCleanupQueue.clear())),this._register(E(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new ke),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new ke),this._whitespaceCell}getBlankLine(e,t){return new De(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let t=this.ybase+this.y-this.ydisp;return t>=0&&tfn?fn:t}fillViewportRows(e){if(this.lines.length===0){e??=U;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new ti(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){let r=this.getNullCell(U),s=0,o=this._getCorrectBufferLength(t);if(o>this.lines.maxLength&&(this.lines.maxLength=o),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(new De(e,r,!1)));else for(let l=this._rows;l>t;l--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(o0&&(this.lines.trimStart(l),this.ybase=Math.max(this.ybase-l,0),this.ydisp=Math.max(this.ydisp-l,0),this.savedY=Math.max(this.savedY-l,0)),this.lines.maxLength=o}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),a&&(this.y+=a),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let a=0;a0){let a=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,a)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){let e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend==="conpty"&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){let r=this._optionsService.rawOptions.reflowCursorLine,s=cn(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(U),r);if(s.length>0){let o=hn(this.lines,s);dn(this.lines,o.layout),this._reflowLargerAdjustViewport(e,t,o.countRemoved)}}_reflowLargerAdjustViewport(e,t,r){let s=this.getNullCell(U),o=r;for(;o-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;l--){let h=this.lines.get(l);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;let d=[h];for(;h.isWrapped&&l>0;)h=this.lines.get(--l),d.unshift(h);if(!r){let T=this.ybase+this.y;if(T>=l&&T0&&(o.push({start:l+d.length+a,newLines:v}),a+=v.length),d.push(...v);let f=u.length-1,S=u[f];S===0&&(f--,S=u[f]);let I=d.length-_-1,w=c;for(;I>=0;){let T=Math.min(w,S);if(d[f]===void 0)break;if(d[f].copyCellsFrom(d[I],w-T,S-T,T,!0),S-=T,S===0&&(f--,S=u[f]),w-=T,w===0){I--;let te=Math.max(I,0);w=Tt(d,te,this._cols)}}for(let T=0;T0;)this.ybase===0?this.y0){let l=[],h=[];for(let S=0;S=0;S--)if(_&&_.start>c+p){for(let I=_.newLines.length-1;I>=0;I--)this.lines.set(S--,_.newLines[I]);S++,l.push({index:c+1,amount:_.newLines.length}),p+=_.newLines.length,_=o[++u]}else this.lines.set(S,h[c--]);let v=0;for(let S=l.length-1;S>=0;S--)l[S].index+=v,this.lines.onInsertEmitter.fire(l[S]),v+=l[S].amount;let f=Math.max(0,d+a-this.lines.maxLength);f>0&&this.lines.onTrimEmitter.fire(f)}}translateBufferLineToString(e,t,r=0,s){let o=this.lines.get(e);return o?o.translateToString(t,r,s):""}getWrappedRangeForLine(e){let t=e,r=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=r,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(r=>{t.line>=r.index&&(t.line+=r.amount)})),t.register(this.lines.onDelete(r=>{t.line>=r.index&&t.liner.index&&(t.line-=r.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}};var tr=class extends g{constructor(e,t,r){super();this._optionsService=e;this._bufferService=t;this._logService=r;this._normalBuffer=this._register(new B);this._altBuffer=this._register(new B);this._onBufferActivate=this._register(new b);this.onBufferActivate=this._onBufferActivate.event;this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new ri(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new ri(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}};var Dt=class extends g{constructor(e,t){super();this.isUserScrolling=!1;this._onResize=this._register(new b);this.onResize=this._onResize.event;this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new tr(e,this,t)),this._register(this.buffers.onBufferActivate(r=>{this._onScroll.fire(r.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,t){let r=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:r,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){let r=this.buffer,s;s=this._cachedBlankLine,(!s||s.length!==this.cols||s.getFg(0)!==e.fg||s.getBg(0)!==e.bg)&&(s=r.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;let o=r.ybase+r.scrollTop,a=r.ybase+r.scrollBottom;if(r.scrollTop===0){let l=r.lines.isFull;a===r.lines.length-1?l?r.lines.recycle().copyFrom(s,!0):r.lines.push(s.clone(!0)):r.lines.splice(a+1,0,s.clone(!0)),l?this.isUserScrolling&&(r.ydisp=Math.max(r.ydisp-1,0)):(r.ybase++,this.isUserScrolling||r.ydisp++)}else{let l=a-o+1;r.lines.shiftElements(o+1,l-1,-1),r.lines.set(a,s.clone(!0))}this.isUserScrolling||(r.ydisp=r.ybase),this._onScroll.fire(r.ydisp)}scrollLines(e,t){let r=this.buffer;if(e<0){if(r.ydisp===0)return;this.isUserScrolling=!0}else e+r.ydisp>=r.ybase&&(this.isUserScrolling=!1);let s=r.ydisp;r.ydisp=Math.max(Math.min(r.ydisp+e,r.ybase),0),s!==r.ydisp&&(t||this._onScroll.fire(r.ydisp))}};Dt=y([m(0,R),m(1,fe)],Dt);var Rt={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:ie,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}},fo=["normal","bold","100","200","300","400","500","600","700","800","900"],ir=class extends g{constructor(e){super();this._onOptionChange=this._register(new b);this.onOptionChange=this._onOptionChange.event;let t={...Rt};for(let r in e)if(r in t)try{let s=e[r];t[r]=this._sanitizeAndValidateOption(r,s)}catch(s){console.error(s)}this.rawOptions=t,this.options={...t},this._setupOptions(),this._register(E(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(r=>{r===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(r=>{e.indexOf(r)!==-1&&t()})}_setupOptions(){let e=r=>{if(!(r in Rt))throw new Error(`No option with key "${r}"`);return this.rawOptions[r]},t=(r,s)=>{if(!(r in Rt))throw new Error(`No option with key "${r}"`);s=this._sanitizeAndValidateOption(r,s),this.rawOptions[r]!==s&&(this.rawOptions[r]=s,this._onOptionChange.fire(r))};for(let r in this.rawOptions){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this.options,r,s)}}_sanitizeAndValidateOption(e,t){switch(e){case"cursorStyle":if(t||(t=Rt[e]),!_o(t))throw new Error(`"${t}" is not a valid value for ${e}`);break;case"wordSeparator":t||(t=Rt[e]);break;case"fontWeight":case"fontWeightBold":if(typeof t=="number"&&1<=t&&t<=1e3)break;t=fo.includes(t)?t:Rt[e];break;case"blinkIntervalDuration":if(t=Math.floor(t),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"cursorWidth":t=Math.floor(t);case"lineHeight":case"tabStopWidth":if(t<1)throw new Error(`${e} cannot be less than 1, value: ${t}`);break;case"minimumContrastRatio":t=Math.max(1,Math.min(21,Math.round(t*10)/10));break;case"scrollback":if(t=Math.min(t,4294967295),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(t<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${t}`);break;case"rows":case"cols":if(!t&&t!==0)throw new Error(`${e} must be numeric, value: ${t}`);break;case"windowsPty":t=t??{};break}return t}};function _o(n){return n==="block"||n==="underline"||n==="bar"}var _n=Object.freeze({insertMode:!1}),pn=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0}),mn=()=>({flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}),Lt=class extends g{constructor(e,t,r){super();this._bufferService=e;this._logService=t;this._optionsService=r;this.isCursorHidden=!1;this._onData=this._register(new b);this.onData=this._onData.event;this._onUserInput=this._register(new b);this.onUserInput=this._onUserInput.event;this._onBinary=this._register(new b);this.onBinary=this._onBinary.event;this._onRequestScrollToBottom=this._register(new b);this.onRequestScrollToBottom=this._onRequestScrollToBottom.event;this.isCursorInitialized=r.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(_n),this.decPrivateModes=structuredClone(pn),this.kittyKeyboard=mn()}reset(){this.modes=structuredClone(_n),this.decPrivateModes=structuredClone(pn),this.kittyKeyboard=mn()}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;let r=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&r.ybase!==r.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(s=>s.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(t=>t.charCodeAt(0))),this._onBinary.fire(e))}};Lt=y([m(0,D),m(1,fe),m(2,R)],Lt);var bn={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:n=>n.button===4||n.action!==1?!1:(n.ctrl=!1,n.alt=!1,n.shift=!1,!0)},VT200:{events:19,restrict:n=>n.action!==32},DRAG:{events:23,restrict:n=>!(n.action===32&&n.button===3)},ANY:{events:31,restrict:n=>!0}};function ms(n,i){let e=(n.ctrl?16:0)|(n.shift?4:0)|(n.alt?8:0);return n.button===4?(e|=64,e|=n.action):(e|=n.button&3,n.button&4&&(e|=64),n.button&8&&(e|=128),n.action===32?e|=32:n.action===0&&!i&&(e|=3)),e}var bs=String.fromCharCode,vn={DEFAULT:n=>{let i=[ms(n,!1)+32,n.col+32,n.row+32];return i[0]>255||i[1]>255||i[2]>255?"":`\x1B[M${bs(i[0])}${bs(i[1])}${bs(i[2])}`},SGR:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${ms(n,!0)};${n.col};${n.row}${i}`},SGR_PIXELS:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${ms(n,!0)};${n.x};${n.y}${i}`}},rr=class extends g{constructor(){super();this._protocols={};this._encodings={};this._activeProtocol="";this._activeEncoding="";this._onProtocolChange=this._register(new b);this.onProtocolChange=this._onProtocolChange.event;for(let e of Object.keys(bn))this.addProtocol(e,bn[e]);for(let e of Object.keys(vn))this.addEncoding(e,vn[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return this._customWheelEventHandler?this._customWheelEventHandler(e)!==!1:!0}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return this._activeEncoding==="DEFAULT"}get isPixelEncoding(){return this._activeEncoding==="SGR_PIXELS"}};var me=class n{constructor(){this._providers=Object.create(null);this._active="";this._onChange=new b;this.onChange=this._onChange.event}static extractShouldJoin(i){return(i&1)!==0}static extractWidth(i){return i>>1&3}static extractCharKind(i){return i>>3}static createPropertyValue(i,e,t=!1){return(i&16777215)<<3|(e&3)<<1|(t?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(i){if(!this._providers[i])throw new Error(`unknown Unicode version "${i}"`);this._active=i,this._activeProvider=this._providers[i],this._onChange.fire(i)}register(i){this._providers[i.version]=i,this._active||(this.activeVersion=i.version)}wcwidth(i){return this._activeProvider.wcwidth(i)}getStringCellWidth(i){let e=0,t=0,r=i.length;for(let s=0;s=r)return e+this.wcwidth(o);let h=i.charCodeAt(s);56320<=h&&h<=57343?o=(o-55296)*1024+h-56320+65536:e+=this.wcwidth(h)}let a=this.charProperties(o,t),l=n.extractWidth(a);n.extractShouldJoin(a)&&(l-=n.extractWidth(t)),e+=l,t=a}return e}charProperties(i,e){return this._activeProvider.charProperties(i,e)}};var vs=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],po=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],X;function mo(n,i){let e=0,t=i.length-1,r;if(ni[t][1])return!1;for(;t>=e;)if(r=e+t>>1,n>i[r][1])e=r+1;else if(n=131072&&i<=196605||i>=196608&&i<=262141?2:1}charProperties(i,e){let t=this.wcwidth(i),r=t===0&&e!==0;if(r){let s=me.extractWidth(e);s===0?r=!1:s>t&&(t=s)}return me.createPropertyValue(0,t,r)}};var nr=class{constructor(){this.glevel=0;this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(i){this.glevel=i,this.charset=this._charsets[i]}setgCharset(i,e){this._charsets[i]=e,this.glevel===i&&(this.charset=e)}};function Ss(n){let e=n.buffer.lines.get(n.buffer.ybase+n.buffer.y-1)?.get(n.cols-1),t=n.buffer.lines.get(n.buffer.ybase+n.buffer.y);t&&e&&(t.isWrapped=e[3]!==0&&e[3]!==32)}var At=class n{constructor(i=32,e=32){this.maxLength=i;this.maxSubParamsLength=e;if(e>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(i),this.length=0,this._subParams=new Int32Array(e),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(i),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(i){let e=new n;if(!i.length)return e;for(let t=Array.isArray(i[0])?1:0;t>8,r=this._subParamsIdx[e]&255;r-t>0&&i.push(Array.prototype.slice.call(this._subParams,t,r))}return i}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(i){if(this._digitIsSub=!1,this.length>=this.maxLength){this._rejectDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=i>2147483647?2147483647:i}addSubParam(i){if(this._digitIsSub=!0,!!this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=i>2147483647?2147483647:i,this._subParamsIdx[this.length-1]++}}hasSubParams(i){return(this._subParamsIdx[i]&255)-(this._subParamsIdx[i]>>8)>0}getSubParams(i){let e=this._subParamsIdx[i]>>8,t=this._subParamsIdx[i]&255;return t-e>0?this._subParams.subarray(e,t):null}getSubParamsAll(){let i={};for(let e=0;e>8,r=this._subParamsIdx[e]&255;r-t>0&&(i[e]=this._subParams.slice(t,r))}return i}addDigit(i){let e;if(this._rejectDigits||!(e=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let t=this._digitIsSub?this._subParams:this.params,r=t[e-1];t[e-1]=~r?Math.min(r*10+i,2147483647):i}};var gs=class{constructor(){this._chunks=[];this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(i){this._chunks.push(i),this._length+=i.length}toString(){return this._chunks.join("")}},We=class{constructor(i){this._limit=i;this._builder=new gs}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(i){return this._builder.append(i),this._builder.length>this._limit?(this._builder.reset(),!0):!1}toString(){return this._builder.toString()}};var si=[],or=class{constructor(){this._state=0;this._active=si;this._id=-1;this._handlers=Object.create(null);this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=si}reset(){if(this._state===2)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=si,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||si,!this._active.length)this._handlerFb(this._id,"START");else for(let i=this._active.length-1;i>=0;i--)this._active[i].start()}_put(i,e,t){if(!this._active.length)this._handlerFb(this._id,"PUT",ye(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}start(){this.reset(),this._state=1}put(i,e,t){if(this._state!==3){if(this._state===1)for(;e0&&this._put(i,e,t)}}end(i,e=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=si,this._id=-1,this._state=0}}},ar=class ar{constructor(i){this._handler=i;this._data=new We(ar._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(ye(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};ar._payloadLimit=1e7;var ne=ar;var ni=[],lr=class{constructor(){this._handlers=Object.create(null);this._active=ni;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=ni}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].unhook(!1);this._stack.paused=!1,this._active=ni,this._ident=0}hook(i,e){if(this.reset(),this._ident=i,this._active=this._handlers[i]||ni,!this._active.length)this._handlerFb(this._ident,"HOOK",e);else for(let t=this._active.length-1;t>=0;t--)this._active[t].hook(e)}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",ye(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}unhook(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"UNHOOK",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].unhook(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].unhook(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=ni,this._ident=0}},oi=new At;oi.addParam(0);var cr=class cr{constructor(i){this._handler=i;this._data=new We(cr._payloadLimit);this._params=oi;this._hitLimit=!1}hook(i){this._params=i.length>1||i.params[0]?i.clone():oi,this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(ye(i,e,t))&&(this._hitLimit=!0)}unhook(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString(),this._params),e instanceof Promise))return e.then(t=>(this._params=oi,this._data.reset(),this._hitLimit=!1,t));return this._params=oi,this._data.reset(),this._hitLimit=!1,e}};cr._payloadLimit=1e7;var ai=cr;var li=[],hr=class{constructor(){this._handlers=Object.create(null);this._active=li;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=li}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=li,this._ident=0}start(i){if(this.reset(),this._ident=i,this._active=this._handlers[i]||li,!this._active.length)this._handlerFb(this._ident,"START");else for(let e=this._active.length-1;e>=0;e--)this._active[e].start()}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",ye(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}end(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=li,this._ident=0}},ur=class ur{constructor(i){this._handler=i;this._data=new We(ur._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(ye(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};ur._payloadLimit=1e7;var dr=ur;var Is=class{constructor(i){this.table=new Uint16Array(i)}setDefault(i,e){this.table.fill(i<<8|e)}add(i,e,t,r){this.table[e<<8|i]=t<<8|r}addMany(i,e,t,r){for(let s=0;sl),t=(a,l)=>e.slice(a,l),r=t(32,127),s=t(0,24);s.push(25),s.push.apply(s,t(28,32));let o=t(0,17);n.setDefault(1,0),n.addMany(r,0,2,0);for(let a of o)n.addMany([24,26,153,154],a,3,0),n.addMany(t(128,144),a,3,0),n.addMany(t(144,152),a,3,0),n.add(156,a,0,0),n.add(27,a,11,1),n.add(157,a,4,8),n.addMany([152,158],a,0,7),n.add(159,a,11,14),n.add(155,a,11,3),n.add(144,a,11,9);return n.addMany(s,0,3,0),n.addMany(s,1,3,1),n.add(127,1,0,1),n.addMany(s,8,0,8),n.addMany(s,3,3,3),n.add(127,3,0,3),n.addMany(s,4,3,4),n.add(127,4,0,4),n.addMany(s,6,3,6),n.addMany(s,5,3,5),n.add(127,5,0,5),n.addMany(s,2,3,2),n.add(127,2,0,2),n.add(93,1,4,8),n.addMany(r,8,5,8),n.add(127,8,5,8),n.addMany([156,27,24,26,7],8,6,0),n.addMany(t(28,32),8,0,8),n.addMany([88,94],1,0,7),n.addMany(r,7,0,7),n.addMany(s,7,0,7),n.add(156,7,0,0),n.add(127,7,0,7),n.add(95,1,11,14),n.addMany(s,14,0,14),n.add(127,14,0,14),n.addMany(t(32,48),14,9,15),n.addMany(t(48,127),14,15,16),n.addMany(t(48,127),15,15,16),n.addMany(s,15,0,15),n.addMany(t(32,48),15,9,15),n.add(127,15,0,15),n.addMany(r,16,16,16),n.addMany(s,16,0,16),n.addMany(t(8,14),16,16,16),n.add(127,16,0,16),n.addMany([27,156,24,26],16,17,0),n.add(91,1,11,3),n.addMany(t(64,127),3,7,0),n.addMany(t(48,60),3,8,4),n.addMany([60,61,62,63],3,9,4),n.addMany(t(48,60),4,8,4),n.addMany(t(64,127),4,7,0),n.addMany([60,61,62,63],4,0,6),n.addMany(t(32,64),6,0,6),n.add(127,6,0,6),n.addMany(t(64,127),6,0,0),n.addMany(t(32,48),3,9,5),n.addMany(t(32,48),5,9,5),n.addMany(t(48,64),5,0,6),n.addMany(t(64,127),5,7,0),n.addMany(t(32,48),4,9,5),n.addMany(t(32,48),1,9,2),n.addMany(t(32,48),2,9,2),n.addMany(t(48,127),2,10,0),n.addMany(t(48,80),1,10,0),n.addMany(t(81,88),1,10,0),n.addMany([89,90,92],1,10,0),n.addMany(t(96,127),1,10,0),n.add(80,1,11,9),n.addMany(s,9,0,9),n.add(127,9,0,9),n.addMany(t(32,48),9,9,12),n.addMany(t(48,60),9,8,10),n.addMany([60,61,62,63],9,9,10),n.addMany(s,11,0,11),n.addMany(t(32,128),11,0,11),n.addMany(s,10,0,10),n.add(127,10,0,10),n.addMany(t(48,60),10,8,10),n.addMany([60,61,62,63],10,0,11),n.addMany(t(32,48),10,9,12),n.addMany(s,12,0,12),n.add(127,12,0,12),n.addMany(t(32,48),12,9,12),n.addMany(t(48,64),12,0,11),n.addMany(t(64,127),12,12,13),n.addMany(t(64,127),10,12,13),n.addMany(t(64,127),9,12,13),n.addMany(s,13,13,13),n.addMany(r,13,13,13),n.add(127,13,0,13),n.addMany([27,156,24,26],13,14,0),n.add(oe,0,2,0),n.add(oe,8,5,8),n.add(oe,6,0,6),n.add(oe,11,0,11),n.add(oe,13,13,13),n.add(oe,16,16,16),n})(),fr=class extends g{constructor(e=bo){super();this._transitions=e;this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0};this.initialState=0,this.currentState=this.initialState,this._params=new At,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(t,r,s)=>{},this._executeHandlerFb=t=>{},this._csiHandlerFb=(t,r)=>{},this._escHandlerFb=t=>{},this._errorHandlerFb=t=>t,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(E(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new or),this._dcsParser=this._register(new lr),this._apcParser=this._register(new hr),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let r=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(r=e.prefix.charCodeAt(0),r<60||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let o=0;oa||a>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=a}}if(e.final.length!==1)throw new Error("final must be a single byte");let s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return r<<=8,r|=s,r}identToString(e){let t=[];for(;e;)t.push(String.fromCharCode(e&255)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){let r=this._identifier(e,[48,126]);this._escHandlers[r]??=[];let s=this._escHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){let r=e.charCodeAt(0);this._executeHandlers[r]=t,r<24&&(this._executeHandlersArr[r]=t)}clearExecuteHandler(e){let t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){let r=this._identifier(e);this._csiHandlers[r]??=[];let s=this._csiHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,r,s,o){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=s,this._parseStack.chunkPos=o}parse(e,t,r){let s,o,a=0,l;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(r===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let h=this._parseStack.handlers,d=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](this._params),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 4:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],l=this._dcsParser.unhook(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],l=this._oscParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],l=this._apcParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&255}for(let h=a;h=60&&c<=63&&(this._collect=c,d++);let u=!1;for(;d=48&&c<=57)this._params.addDigit(c-48);else if(c===59)this._params.addParam(0);else if(c===58)this._params.addSubParam(-1);else if(c>=64&&c<=126){let _=this._csiHandlers[this._collect<<8|c],p=_?_.length-1:-1;for(;p>=0&&(l=_[p](this._params),l!==!0);p--)if(l instanceof Promise)return o=1792,this._preserveStack(3,_,p,o,d),l;p<0&&this._csiHandlerFb(this._collect<<8|c,this._params),this.precedingJoinState=0,h=d,this.currentState=0,u=!0;break}else break;u||(h=d-1,this.currentState=4);continue}switch(o=this._transitions.table[this.currentState<<8|(s>8){case 2:let d=h,c=t-4;for(;d=32&&(e[d]<=126||e[d]>=oe)&&e[++d]>=32&&(e[d]<=126||e[d]>=oe)&&e[++d]>=32&&(e[d]<=126||e[d]>=oe)&&e[++d]>=32&&(e[d]<=126||e[d]>=oe););if(d>=c)for(;d=32&&(e[d]<=126||e[d]>=oe);)d++;this._printHandler(e,h,d),h=d-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:h,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let _=this._csiHandlers[this._collect<<8|s],p=_?_.length-1:-1;for(;p>=0&&(l=_[p](this._params),l!==!0);p--)if(l instanceof Promise)return this._preserveStack(3,_,p,o,h),l;p<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}while(++h47&&s<60);h--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:let v=this._escHandlers[this._collect<<8|s],f=v?v.length-1:-1;for(;f>=0&&(l=v[f](),l!==!0);f--)if(l instanceof Promise)return this._preserveStack(4,v,f,o,h),l;f<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let S=h+1;;++S)if(S>=t||(s=e[S])===24||s===26||s===27||s>127&&s=t||(s=e[S])<32||s>127&&s=32&&e[S]<127||e[S]>=8&&e[S]<14||e[S]>=oe))){this._apcParser.put(e,h,S),h=S-1;break}break;case 17:if(l=this._apcParser.end(s!==24&&s!==26),l)return this._preserveStack(7,[],0,o,h),l;s===27&&(o|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0;break}this.currentState=o&255}}};var vo=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,So=/^[\da-f]+$/;function Es(n){if(!n)return;let i=n.toLowerCase();if(i.startsWith("rgb:")){i=i.slice(4);let e=vo.exec(i);if(e){let t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(i.startsWith("#")&&(i=i.slice(1),So.exec(i)&&[3,6,9,12].includes(i.length))){let e=i.length/3,t=[0,0,0];for(let r=0;r<3;++r){let s=parseInt(i.slice(e*r,e*r+e),16);t[r]=e===1?s<<4:e===2?s:e===3?s>>4:s>>8}return t}}function Cs(n,i){let e=n.toString(16),t=e.length<2?"0"+e:e;switch(i){case 4:return e[0];case 8:return t;case 12:return(t+t).slice(0,3);default:return t+t}}function In(n,i=16){let[e,t,r]=n;return`rgb:${Cs(e,i)}/${Cs(t,i)}/${Cs(r,i)}`}var Cn="6.1.0-beta.303";var Io={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function En(n,i){if(n>24)return i.setWinLines||!1;switch(n){case 1:return!!i.restoreWin;case 2:return!!i.minimizeWin;case 3:return!!i.setWinPosition;case 4:return!!i.setWinSizePixels;case 5:return!!i.raiseWin;case 6:return!!i.lowerWin;case 7:return!!i.refreshWin;case 8:return!!i.setWinSizeChars;case 9:return!!i.maximizeWin;case 10:return!!i.fullscreenWin;case 11:return!!i.getWinState;case 13:return!!i.getWinPosition;case 14:return!!i.getWinSizePixels;case 15:return!!i.getScreenSizePixels;case 16:return!!i.getCellSizePixels;case 18:return!!i.getWinSizeChars;case 19:return!!i.getScreenSizeChars;case 20:return!!i.getIconTitle;case 21:return!!i.getWinTitle;case 22:return!!i.pushTitle;case 23:return!!i.popTitle;case 24:return!!i.setWinLines}return!1}var yn=0,_r=class extends g{constructor(e,t,r,s,o,a,l,h,d=new fr){super();this._bufferService=e;this._charsetService=t;this._coreService=r;this._logService=s;this._optionsService=o;this._oscLinkService=a;this._mouseStateService=l;this._unicodeService=h;this._parser=d;this._parseBuffer=new Uint32Array(4096);this._stringDecoder=new pi;this._utf8Decoder=new mi;this._windowTitle="";this._iconName="";this._windowTitleStack=[];this._iconNameStack=[];this._curAttrData=U.clone();this._eraseAttrDataInternal=U.clone();this._onRequestBell=this._register(new b);this.onRequestBell=this._onRequestBell.event;this._onRequestRefreshRows=this._register(new b);this.onRequestRefreshRows=this._onRequestRefreshRows.event;this._onRequestReset=this._register(new b);this.onRequestReset=this._onRequestReset.event;this._onRequestSendFocus=this._register(new b);this.onRequestSendFocus=this._onRequestSendFocus.event;this._onRequestSyncScrollBar=this._register(new b);this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event;this._onRequestWindowsOptionsReport=this._register(new b);this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event;this._onA11yChar=this._register(new b);this.onA11yChar=this._onA11yChar.event;this._onA11yTab=this._register(new b);this.onA11yTab=this._onA11yTab.event;this._onCursorMove=this._register(new b);this.onCursorMove=this._onCursorMove.event;this._onLineFeed=this._register(new b);this.onLineFeed=this._onLineFeed.event;this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;this._onTitleChange=this._register(new b);this.onTitleChange=this._onTitleChange.event;this._onColor=this._register(new b);this.onColor=this._onColor.event;this._onRequestColorSchemeQuery=this._register(new b);this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event;this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0};this._specialColors=[256,257,258];this._register(this._parser),this._dirtyRowTracker=new ci(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(c=>this._activeBuffer=c.activeBuffer)),this._parser.setCsiHandlerFallback((c,u)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(c),params:u.toArray()})}),this._parser.setEscHandlerFallback(c=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(c)})}),this._parser.setExecuteHandlerFallback(c=>{this._logService.debug("Unknown EXECUTE code: ",{code:c})}),this._parser.setOscHandlerFallback((c,u,_)=>{this._logService.debug("Unknown OSC code: ",{identifier:c,action:u,data:_})}),this._parser.setDcsHandlerFallback((c,u,_)=>{u==="HOOK"&&(_=_.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(c),action:u,payload:_})}),this._parser.setApcHandlerFallback((c,u,_)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(c),action:u,payload:_})}),this._parser.setPrintHandler((c,u,_)=>this.print(c,u,_)),this._parser.registerCsiHandler({final:"@"},c=>this.insertChars(c)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},c=>this.scrollLeft(c)),this._parser.registerCsiHandler({final:"A"},c=>this.cursorUp(c)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},c=>this.scrollRight(c)),this._parser.registerCsiHandler({final:"B"},c=>this.cursorDown(c)),this._parser.registerCsiHandler({final:"C"},c=>this.cursorForward(c)),this._parser.registerCsiHandler({final:"D"},c=>this.cursorBackward(c)),this._parser.registerCsiHandler({final:"E"},c=>this.cursorNextLine(c)),this._parser.registerCsiHandler({final:"F"},c=>this.cursorPrecedingLine(c)),this._parser.registerCsiHandler({final:"G"},c=>this.cursorCharAbsolute(c)),this._parser.registerCsiHandler({final:"H"},c=>this.cursorPosition(c)),this._parser.registerCsiHandler({final:"I"},c=>this.cursorForwardTab(c)),this._parser.registerCsiHandler({final:"J"},c=>this.eraseInDisplay(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},c=>this.eraseInDisplay(c,!0)),this._parser.registerCsiHandler({final:"K"},c=>this.eraseInLine(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},c=>this.eraseInLine(c,!0)),this._parser.registerCsiHandler({final:"L"},c=>this.insertLines(c)),this._parser.registerCsiHandler({final:"M"},c=>this.deleteLines(c)),this._parser.registerCsiHandler({final:"P"},c=>this.deleteChars(c)),this._parser.registerCsiHandler({final:"S"},c=>this.scrollUp(c)),this._parser.registerCsiHandler({final:"T"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"X"},c=>this.eraseChars(c)),this._parser.registerCsiHandler({final:"Z"},c=>this.cursorBackwardTab(c)),this._parser.registerCsiHandler({final:"^"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"`"},c=>this.charPosAbsolute(c)),this._parser.registerCsiHandler({final:"a"},c=>this.hPositionRelative(c)),this._parser.registerCsiHandler({final:"b"},c=>this.repeatPrecedingCharacter(c)),this._parser.registerCsiHandler({final:"c"},c=>this.sendDeviceAttributesPrimary(c)),this._parser.registerCsiHandler({prefix:">",final:"c"},c=>this.sendDeviceAttributesSecondary(c)),this._parser.registerCsiHandler({final:"d"},c=>this.linePosAbsolute(c)),this._parser.registerCsiHandler({final:"e"},c=>this.vPositionRelative(c)),this._parser.registerCsiHandler({final:"f"},c=>this.hVPosition(c)),this._parser.registerCsiHandler({final:"g"},c=>this.tabClear(c)),this._parser.registerCsiHandler({final:"h"},c=>this.setMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"h"},c=>this.setModePrivate(c)),this._parser.registerCsiHandler({final:"l"},c=>this.resetMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"l"},c=>this.resetModePrivate(c)),this._parser.registerCsiHandler({final:"m"},c=>this.charAttributes(c)),this._parser.registerCsiHandler({final:"n"},c=>this.deviceStatus(c)),this._parser.registerCsiHandler({prefix:"?",final:"n"},c=>this.deviceStatusPrivate(c)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},c=>this.softReset(c)),this._parser.registerCsiHandler({prefix:">",final:"q"},c=>this.sendXtVersion(c)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},c=>this.setCursorStyle(c)),this._parser.registerCsiHandler({final:"r"},c=>this.setScrollRegion(c)),this._parser.registerCsiHandler({final:"s"},c=>this.saveCursor(c)),this._parser.registerCsiHandler({final:"t"},c=>this.windowOptions(c)),this._parser.registerCsiHandler({final:"u"},c=>this.restoreCursor(c)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},c=>this.insertColumns(c)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},c=>this.deleteColumns(c)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},c=>this.selectProtected(c)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},c=>this.requestMode(c,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},c=>this.requestMode(c,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},c=>this.kittyKeyboardSet(c)),this._parser.registerCsiHandler({prefix:"?",final:"u"},c=>this.kittyKeyboardQuery(c)),this._parser.registerCsiHandler({prefix:">",final:"u"},c=>this.kittyKeyboardPush(c)),this._parser.registerCsiHandler({prefix:"<",final:"u"},c=>this.kittyKeyboardPop(c)),this._parser.setExecuteHandler("\x07",()=>this.bell()),this._parser.setExecuteHandler(` --`,()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler(" ",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("\x84",()=>this.index()),this._parser.setExecuteHandler("\x85",()=>this.nextLine()),this._parser.setExecuteHandler("\x88",()=>this.tabSet()),this._parser.registerOscHandler(0,new ne(c=>(this.setTitle(c),this.setIconName(c),!0))),this._parser.registerOscHandler(1,new ne(c=>this.setIconName(c))),this._parser.registerOscHandler(2,new ne(c=>this.setTitle(c))),this._parser.registerOscHandler(4,new ne(c=>this.setOrReportIndexedColor(c))),this._parser.registerOscHandler(8,new ne(c=>this.setHyperlink(c))),this._parser.registerOscHandler(10,new ne(c=>this.setOrReportFgColor(c))),this._parser.registerOscHandler(11,new ne(c=>this.setOrReportBgColor(c))),this._parser.registerOscHandler(12,new ne(c=>this.setOrReportCursorColor(c))),this._parser.registerOscHandler(104,new ne(c=>this.restoreIndexedColor(c))),this._parser.registerOscHandler(110,new ne(c=>this.restoreFgColor(c))),this._parser.registerOscHandler(111,new ne(c=>this.restoreBgColor(c))),this._parser.registerOscHandler(112,new ne(c=>this.restoreCursorColor(c))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(let c in q)this._parser.registerEscHandler({intermediates:"(",final:c},()=>this.selectCharset("("+c)),this._parser.registerEscHandler({intermediates:")",final:c},()=>this.selectCharset(")"+c)),this._parser.registerEscHandler({intermediates:"*",final:c},()=>this.selectCharset("*"+c)),this._parser.registerEscHandler({intermediates:"+",final:c},()=>this.selectCharset("+"+c)),this._parser.registerEscHandler({intermediates:"-",final:c},()=>this.selectCharset("-"+c)),this._parser.registerEscHandler({intermediates:".",final:c},()=>this.selectCharset("."+c)),this._parser.registerEscHandler({intermediates:"/",final:c},()=>this.selectCharset("/"+c));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(c=>(this._logService.error("Parsing error: ",c),c)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new ai((c,u)=>this.requestStatusString(c,u)))}getAttrData(){return this._curAttrData}_preserveStack(e,t,r,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=3){let t,r=new Promise((s,o)=>{t=setTimeout(()=>o("#SLOW_TIMEOUT"),5e3)});Promise.race([e,r]).then(()=>{t!==void 0&&clearTimeout(t)},s=>{if(t!==void 0&&clearTimeout(t),s!=="#SLOW_TIMEOUT")throw s;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let r,s=this._activeBuffer.x,o=this._activeBuffer.y,a=0,l=this._parseStack.paused;if(l){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;s=this._parseStack.cursorStartX,o=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(a=this._parseStack.position+131072)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e=="string"?` "${e}"`:` "${Array.prototype.map.call(e,c=>String.fromCharCode(c)).join("")}"`}`),this._logService.logLevel===0&&this._logService.trace("parsing data (codes)",typeof e=="string"?e.split("").map(c=>c.charCodeAt(0)):e),this._parseBuffer.length131072)for(let c=a;c0&&_.getWidth(this._activeBuffer.x-1)===2&&_.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let p=this._parser.precedingJoinState;for(let v=t;vh){if(d){let L=_,T=this._activeBuffer.x-I;if(this._activeBuffer.x=I,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),_=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!_)return;for(I>0&&_ instanceof De&&_.copyCellsFrom(L,T,0,I,!1);T=0;)_.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(c&&(_.insertCells(this._activeBuffer.x,o-I,this._activeBuffer.getNullCell(u)),_.getWidth(h-1)===2&&_.setCellFromCodepoint(h-1,0,1,u)),_.setCellFromCodepoint(this._activeBuffer.x++,s,o,u),o>0)for(;--o;)_.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=p,this._activeBuffer.x0&&_.getWidth(this._activeBuffer.x)===0&&!_.hasContent(this._activeBuffer.x)&&_.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return e.final==="t"&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,r=>En(r.params[0],this._optionsService.rawOptions.windowOptions)?t(r):!0):this._parser.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new ai(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new ne(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new dr(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){let t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let t=e.params[0];return t===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:t===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let t=e.params[0];return t===1&&(this._curAttrData.bg|=536870912),(t===2||t===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,r,s=!1,o=!1){let a=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);a&&(a.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),o),s&&(a.isWrapped=!1))}_resetBufferLine(e,t=!1){let r=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);r&&(r.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),r.isWrapped=!1)}eraseInDisplay(e,t=!1){this._restrictCursor(this._bufferService.cols);let r;switch(e.params[0]){case 0:for(r=this._activeBuffer.y,this._dirtyRowTracker.markDirty(r),this._eraseInBufferLine(r++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);r=this._bufferService.cols){let o=this._activeBuffer.lines.get(r+1);o&&(o.isWrapped=!1)}for(;r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(r=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,r-1);r--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+r)?.getTrimmedLength(););for(;r>=0;r--)this._bufferService.scroll(this._eraseAttrData())}else{for(r=this._bufferService.rows,this._dirtyRowTracker.markDirty(r-1);r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0)}break;case 3:let s=this._activeBuffer.lines.length-this._bufferService.rows;s>0&&(this._activeBuffer.lines.trimStart(s),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-s,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-s,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0));break}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t);break}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let c=d;for(let u=1;u0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("\x1B[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("\x1B[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("\x1B[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("\x1B[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("\x1B[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`\x1BP>|xterm.js(${Cn})\x1B\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(te[te.NOT_RECOGNIZED=0]="NOT_RECOGNIZED",te[te.SET=1]="SET",te[te.RESET=2]="RESET",te[te.PERMANENTLY_SET=3]="PERMANENTLY_SET",te[te.PERMANENTLY_RESET=4]="PERMANENTLY_RESET"))(r||={});let s=this._coreService.decPrivateModes,{activeProtocol:o,activeEncoding:a}=this._mouseStateService,l=this._coreService,{buffers:h,cols:d}=this._bufferService,{active:c,alt:u}=h,_=this._optionsService.rawOptions,p=(S,I)=>(l.triggerDataEvent(`\x1B[${t?"":"?"}${S};${I}$y`),!0),v=S=>S?1:2,f=e.params[0];return t?f===2?p(f,4):f===4?p(f,v(l.modes.insertMode)):f===12?p(f,3):f===20?p(f,v(_.convertEol)):p(f,0):f===1?p(f,v(s.applicationCursorKeys)):f===3?p(f,_.windowOptions.setWinLines?d===80?2:d===132?1:0:0):f===6?p(f,v(s.origin)):f===7?p(f,v(s.wraparound)):f===8?p(f,3):f===9?p(f,v(o==="X10")):f===12?p(f,v(_.cursorBlink)):f===25?p(f,v(!l.isCursorHidden)):f===45?p(f,v(s.reverseWraparound)):f===66?p(f,v(s.applicationKeypad)):f===67?p(f,4):f===1e3?p(f,v(o==="VT200")):f===1002?p(f,v(o==="DRAG")):f===1003?p(f,v(o==="ANY")):f===1004?p(f,v(s.sendFocus)):f===1005?p(f,4):f===1006?p(f,v(a==="SGR")):f===1015?p(f,4):f===1016?p(f,v(a==="SGR_PIXELS")):f===1048?p(f,1):f===47||f===1047||f===1049?p(f,v(c===u)):f===2004?p(f,v(s.bracketedPasteMode)):f===2026?p(f,v(s.synchronizedOutput)):f===9001&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?p(f,v(s.win32InputMode)):p(f,0)}_updateAttrColor(e,t,r,s,o){return t===2?(e|=50331648,e&=-16777216,e|=ue.fromColorRGB([r,s,o])):t===5&&(e&=-67108864,e|=33554432|r&255),e}_extractColor(e,t,r){let s=[0,0,-1,0,0,0],o=0,a=0;do{if(s[a+o]=e.params[t+a],e.hasSubParams(t+a)){let l=e.getSubParams(t+a),h=0;do s[1]===5&&(o=1),s[a+h+1+o]=l[h];while(++h=2||s[1]===2&&a+o>=5)break;s[1]&&(o=1)}while(++a+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,e===0&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=U.fg,e.bg=U.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let t=e.length,r,s=this._curAttrData;for(let o=0;o=30&&r<=37?(s.fg&=-67108864,s.fg|=16777216|r-30):r>=40&&r<=47?(s.bg&=-67108864,s.bg|=16777216|r-40):r>=90&&r<=97?(s.fg&=-67108864,s.fg|=16777216|r-90|8):r>=100&&r<=107?(s.bg&=-67108864,s.bg|=16777216|r-100|8):r===0?this._processSGR0(s):r===1?s.fg|=134217728:r===3?s.bg|=67108864:r===4?(s.fg|=268435456,this._processUnderline(e.hasSubParams(o)?e.getSubParams(o)[0]:1,s)):r===5?s.fg|=536870912:r===7?s.fg|=67108864:r===8?s.fg|=1073741824:r===9?s.fg|=2147483648:r===2?s.bg|=134217728:r===21?this._processUnderline(2,s):r===22?(s.fg&=-134217729,s.bg&=-134217729):r===23?s.bg&=-67108865:r===24?(s.fg&=-268435457,this._processUnderline(0,s)):r===25?s.fg&=-536870913:r===27?s.fg&=-67108865:r===28?s.fg&=-1073741825:r===29?s.fg&=2147483647:r===39?(s.fg&=-67108864,s.fg|=U.fg&16777215):r===49?(s.bg&=-67108864,s.bg|=U.bg&16777215):r===38||r===48||r===58?o+=this._extractColor(e,o,s):r===53?s.bg|=1073741824:r===55?s.bg&=-1073741825:r===221&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.fg&=-134217729:r===222&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.bg&=-134217729:r===59?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",r);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("\x1B[0n");break;case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[${t};${r}R`);break}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[?${t};${r}R`);break;case 15:break;case 25:break;case 26:break;case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??!0)&&this._onRequestColorSchemeQuery.fire();break}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=U.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let t=e.length===0?1:e.params[0];if(t===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar";break}let r=t%2===1;this._coreService.decPrivateModes.cursorBlink=r}return!0}setScrollRegion(e){let t=e.params[0]||1,r;return(e.length<2||(r=e.params[1])>this._bufferService.rows||r===0)&&(r=this._bufferService.rows),r>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=r-1,this._setCursor(0,0)),!0}windowOptions(e){if(!En(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:t!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`\x1B[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(t===0||t===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),(t===0||t===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:(t===0||t===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(t===0||t===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop());break}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let t=0;t1;){let s=r.shift(),o=r.shift();if(/^\d+$/.exec(s)){let a=parseInt(s,10);if(xn(a))if(o==="?")t.push({type:0,index:a});else{let l=Es(o);l&&t.push({type:1,index:a,color:l})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){let t=e.indexOf(";");if(t===-1)return!0;let r=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(r,s):r.trim()?!1:this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();let r=e.split(":"),s,o=r.findIndex(a=>a.startsWith("id="));return o!==-1&&(s=r[o].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){let r=e.split(";");for(let s=0;s=this._specialColors.length);++s,++t)if(r[s]==="?")this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{let o=Es(r[s]);o&&this._onColor.fire([{type:1,index:this._specialColors[t],color:o}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let t=[],r=e.split(";");for(let s=0;s=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=U.clone(),this._eraseAttrDataInternal=U.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new F;e.content=1<<22|69,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`\x1B${l}\x1B\\`),!0),s=this._bufferService.buffer,o=this._optionsService.rawOptions,a={block:2,underline:4,bar:6};return r(e==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:e==='"p'?'P1$r61;1"p':e==="r"?`P1$r${s.scrollTop+1};${s.scrollBottom+1}r`:e==="m"?"P1$r0m":e===" q"?`P1$r${a[o.cursorStyle]-(o.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(r){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t;break}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`\x1B[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;return o.length>=16&&o.shift(),o.push(r.flags),r.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=Math.max(1,e.params[0]||1),r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;for(let a=0;a0;a++)r.flags=o.pop();return o.length===0&&t>0&&(r.flags=0),!0}},ci=class{constructor(i){this._bufferService=i;this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(i){ithis.end&&(this.end=i)}markRangeDirty(i,e){i>e&&(yn=i,i=e,e=yn),ithis.end&&(this.end=e)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};ci=y([m(0,D)],ci);function xn(n){return 0<=n&&n<256}var pr=class extends g{constructor(e){super();this._action=e;this._writeBuffer=[];this._callbacks=[];this._pendingData=0;this._bufferOffset=0;this._isSyncWriting=!1;this._syncCalls=0;this._didUserInput=!1;this._innerWriteTimer=this._register(new Ie);this._onWriteParsed=this._register(new b);this.onWriteParsed=this._onWriteParsed.event;this._register(E(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed||this._isSyncWriting)return;this._isSyncWriting=!0;let e,t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);let r=this._callbacks.shift();r&&r()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(t!==void 0&&this._syncCalls>t){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let r;for(;r=this._writeBuffer.shift();){this._action(r);let s=this._callbacks.shift();s&&s()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),this._innerWrite();return}this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;let r=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let s=this._writeBuffer[this._bufferOffset],o=this._action(s,t);if(o){let l=h=>{this._store.isDisposed||(performance.now()-r>=12?this._scheduleInnerWrite(0,h):this._innerWrite(r,h))};o.catch(h=>(queueMicrotask(()=>{throw h}),Promise.resolve(!1))).then(l);return}let a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=s.length,performance.now()-r>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}};var kt=class{constructor(i){this._bufferService=i;this._nextId=1;this._entriesWithId=new Map;this._dataByLinkId=new Map}registerLink(i){let e=this._bufferService.buffer;if(i.id===void 0){let l=e.addMarker(e.ybase+e.y),h={data:i,id:this._nextId++,lines:[l]};return l.onDispose(()=>this._removeMarkerFromLink(h,l)),this._dataByLinkId.set(h.id,h),h.id}let t=i,r=this._getEntryIdKey(t),s=this._entriesWithId.get(r);if(s)return this.addLineToLink(s.id,e.ybase+e.y),s.id;let o=e.addMarker(e.ybase+e.y),a={id:this._nextId++,key:this._getEntryIdKey(t),data:t,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(a,o)),this._entriesWithId.set(a.key,a),this._dataByLinkId.set(a.id,a),a.id}addLineToLink(i,e){let t=this._dataByLinkId.get(i);if(t&&t.lines.every(r=>r.line!==e)){let r=this._bufferService.buffer.addMarker(e);t.lines.push(r),r.onDispose(()=>this._removeMarkerFromLink(t,r))}}getLinkData(i){return this._dataByLinkId.get(i)?.data}_getEntryIdKey(i){return`${i.id};;${i.uri}`}_removeMarkerFromLink(i,e){let t=i.lines.indexOf(e);t!==-1&&(i.lines.splice(t,1),i.lines.length===0&&(i.data.id!==void 0&&this._entriesWithId.delete(i.key),this._dataByLinkId.delete(i.id)))}};kt=y([m(0,D)],kt);var wn=!1,mr=class extends g{constructor(e){super();this._windowsWrappingHeuristics=this._register(new B);this._onBinary=this._register(new b);this.onBinary=this._onBinary.event;this._onData=this._register(new b);this.onData=this._onData.event;this._onLineFeed=this._register(new b);this.onLineFeed=this._onLineFeed.event;this._onRender=this._register(new b);this.onRender=this._onRender.event;this._onResize=this._register(new b);this.onResize=this._onResize.event;this._onWriteParsed=this._register(new b);this.onWriteParsed=this._onWriteParsed.event;this._onScroll=this._register(new b);this._instantiationService=new Zi,this.optionsService=this._register(new ir(e)),this._instantiationService.setService(R,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(wt)),this._instantiationService.setService(fe,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(Dt)),this._instantiationService.setService(D,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(Lt)),this._instantiationService.setService(Y,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(rr)),this._instantiationService.setService(Me,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(me)),this.unicodeService.register(new sr),this._instantiationService.setService(Ws,this.unicodeService),this._charsetService=this._instantiationService.createInstance(nr),this._instantiationService.setService(Hs,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(kt),this._instantiationService.setService(bi,this._oscLinkService),this._inputHandler=this._register(new _r(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(j.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(j.forward(this._bufferService.onResize,this._onResize)),this._register(j.forward(this.coreService.onData,this._onData)),this._register(j.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new pr((t,r)=>this._inputHandler.parse(t,r))),this._register(j.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new b),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let t in e)this.optionsService.options[t]=e[t]}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=3&&!wn&&(this._logService.warn("writeSync is unreliable and will be removed soon."),wn=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1,t=this.optionsService.rawOptions.windowsPty;t&&t.backend!==void 0&&t.buildNumber!==void 0&&(e=t.backend==="conpty"&&t.buildNumber<21376),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Ss.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>(Ss(this._bufferService),!1))),this._windowsWrappingHeuristics.value=E(()=>{for(let t of e)t.dispose()})}}};var z=0,br=class{constructor(i,e){this._getKey=i;this._array=[];this._insertedValues=[];this._isFlushingInserted=!1;this._deletedIndices=[];this._isFlushingDeleted=!1;this._flushInsertedTask=new It(e),this._flushDeletedTask=new It(e)}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(i){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(i)}_flushInserted(){let i=this._insertedValues.sort((s,o)=>this._getKey(s)-this._getKey(o)),e=0,t=0,r=new Array(this._array.length+this._insertedValues.length);for(let s=0;s=this._array.length||this._getKey(i[e])<=this._getKey(this._array[t])?(r[s]=i[e],e++):r[s]=this._array[t++];this._array=r,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(i){if(this._flushCleanupInserted(),this._array.length===0)return!1;let e=this._getKey(i);if(e===void 0||(z=this._search(e),z===-1)||this._getKey(this._array[z])!==e)return!1;do if(this._array[z]===i)return this._deletedIndices.length===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(z),!0;while(++zs-o),e=0,t=new Array(this._array.length-i.length),r=0;for(let s=0;s0&&this._flushDeletedTask.flush()}*getKeyIterator(i){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(z=this._search(i),!(z<0||z>=this._array.length)&&this._getKey(this._array[z])===i))do yield this._array[z];while(++z=this._array.length)&&this._getKey(this._array[z])===i))do e(this._array[z]);while(++z=e;){let r=e+t>>1,s=this._getKey(this._array[r]);if(s>i)t=r-1;else if(s0&&this._getKey(this._array[r-1])===i;)r--;return r}}return e}};var Mt=0,vr=0,Pt=class extends g{constructor(e,t){super();this._logService=e;this._bufferService=t;this._lineCache=this._register(new ys);this._onDecorationRegistered=this._register(new b);this.onDecorationRegistered=this._onDecorationRegistered.event;this._onDecorationRemoved=this._register(new b);this.onDecorationRemoved=this._onDecorationRemoved.event;this._decorations=new br(r=>r?.marker.line,this._logService),this._register(E(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let t=new xs(e);if(t){let r=t.marker.onDispose(()=>t.dispose()),s=t.onDispose(()=>{s.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),r.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,r){let s=this._lineCache.getDecorationsOnLine(t);if(s)for(let o of s)Mt=o.options.x??0,vr=Mt+(o.options.width??1),e>=Mt&&e=Mt&&ethis._handleBufferLinesTrim(r))),t.add(e.onInsert(r=>this._handleBufferLinesInsert(r))),t.add(e.onDelete(r=>this._handleBufferLinesDelete(r)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){let t=e.marker.line;if(t<0)return;e._indexedStartLine=t;let r=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{let t=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(let r of t)r()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;let t=new Map;for(let[r,s]of this._decorationsByLine){let o=r-e;o<0||this._mergeLineBucket(t,o,s)}this._decorationsByLine.clear();for(let[r,s]of t)this._decorationsByLine.set(r,s);for(let r of this._decorations)r.marker.isDisposed||(r._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,r){let s=e.get(t);if(s)for(let o=0,a=r.length;ot&&(s.push(a),this._removeFromLineBuckets(a))}let o=new Map;for(let[a,l]of this._decorationsByLine){let h=a>=t?a+r:a;this._mergeLineBucket(o,h,l)}this._decorationsByLine.clear();for(let[a,l]of o)this._decorationsByLine.set(a,l);for(let a of this._decorations)a.marker.isDisposed||a._indexedStartLine>=t&&(a._indexedStartLine=a.marker.line);for(let a of s)this._addToLineBuckets(a)}_applyBufferLinesDelete(e){let t=e.index+e.amount,r=new Map;for(let[o,a]of this._decorationsByLine){if(o>=e.index&&o=t?o-e.amount:o;this._mergeLineBucket(r,l,a)}this._decorationsByLine.clear();for(let[o,a]of r)this._decorationsByLine.set(o,a);let s=[];for(let o of this._decorations){if(o.marker.isDisposed)continue;let a=o._indexedStartLine,l=this._getDecorationHeight(o);a>=t?o._indexedStartLine=o.marker.line:at&&s.push(o)}for(let o of s)this._reindexDecoration(o)}},xs=class extends pe{constructor(e){super();this.options=e;this.onRenderEmitter=this.add(new b);this.onRender=this.onRenderEmitter.event;this._onDispose=this.add(new b);this.onDispose=this._onDispose.event;this._cachedBg=null;this._cachedFg=null;this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}get backgroundColorRGB(){return this._cachedBg===null&&(this.options.backgroundColor?this._cachedBg=P.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return this._cachedFg===null&&(this.options.foregroundColor?this._cachedFg=P.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}dispose(){this._onDispose.fire(),super.dispose()}};var Co=1e3,Sr=class{constructor(i,e=Co){this._renderCallback=i;this._debounceThresholdMS=e;this._lastRefreshMs=0;this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e;let r=performance.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._refreshTimeoutID!==void 0&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let s=r-this._lastRefreshMs,o=this._debounceThresholdMS-s;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},o)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e)}};var Tn=!1,Ye=class extends g{constructor(e,t,r,s){super();this._terminal=e;this._coreBrowserService=r;this._renderService=s;this._rowColumns=new WeakMap;this._liveRegionLineCount=0;this._charsToConsume=[];this._charsToAnnounce="";let o=this._coreBrowserService.mainDocument;this._accessibilityContainer=o.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=o.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let a=0;athis._handleBoundaryFocus(a,0),this._bottomBoundaryFocusListener=a=>this._handleBoundaryFocus(a,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=o.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new Sr(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");Tn?(this._accessibilityContainer.classList.add("debug"),this._rowContainer.classList.add("debug"),this._debugRootContainer=o.createElement("div"),this._debugRootContainer.classList.add("xterm"),this._debugRootContainer.appendChild(o.createTextNode("------start a11y------")),this._debugRootContainer.appendChild(this._accessibilityContainer),this._debugRootContainer.appendChild(o.createTextNode("------end a11y------")),this._terminal.element.insertAdjacentElement("afterend",this._debugRootContainer)):this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(a=>this._handleResize(a.rows))),this._register(this._terminal.onRender(a=>this._refreshRows(a.start,a.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(a=>this._handleChar(a))),this._register(this._terminal.onLineFeed(()=>this._handleChar(` +-`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),Gt&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s||!t?!1:this._areCoordsInSelection(t,r,s)}isCellInSelection(e,t){let r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s?!1:this._areCoordsInSelection([e,t],r,s)}_areCoordsInSelection(e,t,r){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){let r=this._linkifier.currentLink?.link?.range;if(r)return this._model.selectionStart=[r.start.x-1,r.start.y-1],this._model.selectionStartLength=ds(r,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let s=this._getMouseBufferCoords(e);return s?(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=Xt(this._coreBrowserService.window,e,this._screenElement)[1],r=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(t*14))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:ie?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0&&!(this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){let t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);let r=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);r&&r.length!==this._model.selectionStart[0]&&r.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!1:e.altKey&&!(ie&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let r=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){let r=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&r[0]!==void 0&&r[1]!==void 0){let s=Qs(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(s,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!!e&&!!t&&(e[0]!==t[0]||e[1]!==t[1]);if(!r){this._oldHasSelection&&this._fireOnSelectionChange(e,t,r);return}!e||!t||(!this._oldSelectionStart||!this._oldSelectionEnd||e[0]!==this._oldSelectionStart[0]||e[1]!==this._oldSelectionStart[1]||t[0]!==this._oldSelectionEnd[0]||t[1]!==this._oldSelectionEnd[1])&&this._fireOnSelectionChange(e,t,r)}_fireOnSelectionChange(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(t=>this._handleTrim(t))}_convertViewportColToCharacterIndex(e,t){let r=t;for(let s=0;t>=s;s++){let o=e.loadCell(s,this._workCell).getChars().length;this._workCell.getWidth()===0?r--:o>1&&t!==s&&(r+=o-1)}return r}setSelection(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,r=!0,s=!0){if(e[0]>=this._bufferService.cols)return;let o=this._bufferService.buffer,a=o.lines.get(e[1]);if(!a)return;let l=o.translateBufferLineToString(e[1],!1),h=this._convertViewportColToCharacterIndex(a,e[0]),d=h,c=e[0]-h,u=0,_=0,p=0,v=0;if(l.charAt(h)===" "){for(;h>0&&l.charAt(h-1)===" ";)h--;for(;d1&&(v+=L-1,d+=L-1);I>0&&h>0&&!this._isCharWordSeparator(a.loadCell(I-1,this._workCell));){a.loadCell(I-1,this._workCell);let T=this._workCell.getChars().length;this._workCell.getWidth()===0?(u++,I--):T>1&&(p+=T-1,h-=T-1),h--,I--}for(;w1&&(v+=T-1,d+=T-1),d++,w++}}d++;let f=h+c-u+p,S=Math.min(this._bufferService.cols,d-h+u+_-p-v);if(!(!t&&l.slice(h,d).trim()==="")){if(r&&f===0&&a.getCodePoint(0)!==32){let I=o.lines.get(e[1]-1);if(I&&a.isWrapped&&I.getCodePoint(this._bufferService.cols-1)!==32){let w=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(w){let L=this._bufferService.cols-w.start;f-=L,S+=L}}}if(s&&f+S===this._bufferService.cols&&a.getCodePoint(this._bufferService.cols-1)!==32){let I=o.lines.get(e[1]+1);if(I?.isWrapped&&I.getCodePoint(0)!==32){let w=this._getWordAt([0,e[1]+1],!1,!1,!0);w&&(S+=w.length)}}return{start:f,length:S}}}_selectWordAt(e,t){let r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}}_selectToWordAt(e){let t=this._getWordAt(e,!0);if(t){let r=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}}_isCharWordSeparator(e){return e.getWidth()===0?!1:this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let t=this._bufferService.buffer.getWrappedRangeForLine(e),r={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=ds(r,this._bufferService.cols)}};Et=y([m(3,D),m(4,Y),m(5,Be),m(6,R),m(7,Me),m(8,V),m(9,G)],Et);var Zt=class{constructor(){this._data={}}set(i,e,t){this._data[i]||(this._data[i]={}),this._data[i][e]=t}get(i,e){return this._data[i]?this._data[i][e]:void 0}clear(){this._data={}}};var Jt=class{constructor(){this._color=new Zt;this._css=new Zt}setCss(i,e,t){this._css.set(i,e,t)}getCss(i,e){return this._css.get(i,e)}setColor(i,e,t){this._color.set(i,e,t)}getColor(i,e){return this._color.get(i,e)}clear(){this._color.clear(),this._css.clear()}};var $=Object.freeze((()=>{let n=[P.toColor("#2e3436"),P.toColor("#cc0000"),P.toColor("#4e9a06"),P.toColor("#c4a000"),P.toColor("#3465a4"),P.toColor("#75507b"),P.toColor("#06989a"),P.toColor("#d3d7cf"),P.toColor("#555753"),P.toColor("#ef2929"),P.toColor("#8ae234"),P.toColor("#fce94f"),P.toColor("#729fcf"),P.toColor("#ad7fa8"),P.toColor("#34e2e2"),P.toColor("#eeeeec")],i=[0,95,135,175,215,255];for(let e=0;e<216;e++){let t=i[e/36%6|0],r=i[e/6%6|0],s=i[e%6];n.push({css:O.toCss(t,r,s),rgba:O.toRgba(t,r,s)})}for(let e=0;e<24;e++){let t=8+e*10;n.push({css:O.toCss(t,t,t),rgba:O.toRgba(t,t,t)})}return n})());var qe=P.toColor("#ffffff"),ei=P.toColor("#000000"),rn=P.toColor("#ffffff"),sn=ei,Qt={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},ao=qe,yt=class extends g{constructor(e){super();this._optionsService=e;this._contrastCache=new Jt;this._halfContrastCache=new Jt;this._onChangeColors=this._register(new b);this.onChangeColors=this._onChangeColors.event;this._colors={foreground:qe,background:ei,cursor:rn,cursorAccent:sn,selectionForeground:void 0,selectionBackgroundTransparent:Qt,selectionBackgroundOpaque:k.blend(ei,Qt),selectionInactiveBackgroundTransparent:Qt,selectionInactiveBackgroundOpaque:k.blend(ei,Qt),scrollbarSliderBackground:k.opacity(qe,.2),scrollbarSliderHoverBackground:k.opacity(qe,.4),scrollbarSliderActiveBackground:k.opacity(qe,.5),overviewRulerBorder:qe,ansi:$.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let t=this._colors;if(t.foreground=M(e.foreground,qe),t.background=M(e.background,ei),t.cursor=k.blend(t.background,M(e.cursor,rn)),t.cursorAccent=k.blend(t.background,M(e.cursorAccent,sn)),t.selectionBackgroundTransparent=M(e.selectionBackground,Qt),t.selectionBackgroundOpaque=k.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=M(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=k.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?M(e.selectionForeground,Qr):void 0,t.selectionForeground===Qr&&(t.selectionForeground=void 0),k.isOpaque(t.selectionBackgroundTransparent)&&(t.selectionBackgroundTransparent=k.opacity(t.selectionBackgroundTransparent,.3)),k.isOpaque(t.selectionInactiveBackgroundTransparent)&&(t.selectionInactiveBackgroundTransparent=k.opacity(t.selectionInactiveBackgroundTransparent,.3)),t.scrollbarSliderBackground=M(e.scrollbarSliderBackground,k.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=M(e.scrollbarSliderHoverBackground,k.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=M(e.scrollbarSliderActiveBackground,k.opacity(t.foreground,.5)),t.overviewRulerBorder=M(e.overviewRulerBorder,ao),t.ansi=$.slice(),t.ansi[0]=M(e.black,$[0]),t.ansi[1]=M(e.red,$[1]),t.ansi[2]=M(e.green,$[2]),t.ansi[3]=M(e.yellow,$[3]),t.ansi[4]=M(e.blue,$[4]),t.ansi[5]=M(e.magenta,$[5]),t.ansi[6]=M(e.cyan,$[6]),t.ansi[7]=M(e.white,$[7]),t.ansi[8]=M(e.brightBlack,$[8]),t.ansi[9]=M(e.brightRed,$[9]),t.ansi[10]=M(e.brightGreen,$[10]),t.ansi[11]=M(e.brightYellow,$[11]),t.ansi[12]=M(e.brightBlue,$[12]),t.ansi[13]=M(e.brightMagenta,$[13]),t.ansi[14]=M(e.brightCyan,$[14]),t.ansi[15]=M(e.brightWhite,$[15]),e.extendedAnsi){let r=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;s"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};function on(n,i,e,t){let r={type:0,cancel:!1,key:void 0},s=(n.shiftKey?1:0)|(n.altKey?2:0)|(n.ctrlKey?4:0)|(n.metaKey?8:0);switch(n.keyCode){case 0:n.key==="UIKeyInputUpArrow"?i?r.key="\x1BOA":r.key="\x1B[A":n.key==="UIKeyInputLeftArrow"?i?r.key="\x1BOD":r.key="\x1B[D":n.key==="UIKeyInputRightArrow"?i?r.key="\x1BOC":r.key="\x1B[C":n.key==="UIKeyInputDownArrow"&&(i?r.key="\x1BOB":r.key="\x1B[B");break;case 8:r.key=n.ctrlKey?"\b":"\x7F",n.altKey&&(r.key="\x1B"+r.key);break;case 9:if(n.shiftKey){r.key="\x1B[Z";break}r.key=" ",r.cancel=!0;break;case 13:n.key==="c"&&n.ctrlKey?r.key="":r.key=n.altKey?"\x1B\r":"\r",r.cancel=!0;break;case 27:r.key="\x1B",n.altKey&&(r.key="\x1B\x1B"),r.cancel=!0;break;case 37:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"D":i?r.key="\x1BOD":r.key="\x1B[D";break;case 39:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"C":i?r.key="\x1BOC":r.key="\x1B[C";break;case 38:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"A":i?r.key="\x1BOA":r.key="\x1B[A";break;case 40:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"B":i?r.key="\x1BOB":r.key="\x1B[B";break;case 45:!n.shiftKey&&!n.ctrlKey&&(r.key="\x1B[2~");break;case 46:s?r.key="\x1B[3;"+(s+1)+"~":r.key="\x1B[3~";break;case 36:s?r.key="\x1B[1;"+(s+1)+"H":i?r.key="\x1BOH":r.key="\x1B[H";break;case 35:s?r.key="\x1B[1;"+(s+1)+"F":i?r.key="\x1BOF":r.key="\x1B[F";break;case 33:n.shiftKey?r.type=2:n.ctrlKey?r.key="\x1B[5;"+(s+1)+"~":r.key="\x1B[5~";break;case 34:n.shiftKey?r.type=3:n.ctrlKey?r.key="\x1B[6;"+(s+1)+"~":r.key="\x1B[6~";break;case 112:s?r.key="\x1B[1;"+(s+1)+"P":r.key="\x1BOP";break;case 113:s?r.key="\x1B[1;"+(s+1)+"Q":r.key="\x1BOQ";break;case 114:s?r.key="\x1B[1;"+(s+1)+"R":r.key="\x1BOR";break;case 115:s?r.key="\x1B[1;"+(s+1)+"S":r.key="\x1BOS";break;case 116:s?r.key="\x1B[15;"+(s+1)+"~":r.key="\x1B[15~";break;case 117:s?r.key="\x1B[17;"+(s+1)+"~":r.key="\x1B[17~";break;case 118:s?r.key="\x1B[18;"+(s+1)+"~":r.key="\x1B[18~";break;case 119:s?r.key="\x1B[19;"+(s+1)+"~":r.key="\x1B[19~";break;case 120:s?r.key="\x1B[20;"+(s+1)+"~":r.key="\x1B[20~";break;case 121:s?r.key="\x1B[21;"+(s+1)+"~":r.key="\x1B[21~";break;case 122:s?r.key="\x1B[23;"+(s+1)+"~":r.key="\x1B[23~";break;case 123:s?r.key="\x1B[24;"+(s+1)+"~":r.key="\x1B[24~";break;default:if(n.ctrlKey&&!n.shiftKey&&!n.altKey&&!n.metaKey)n.keyCode>=65&&n.keyCode<=90?r.key=String.fromCharCode(n.keyCode-64):n.keyCode===32?r.key="\0":n.keyCode>=51&&n.keyCode<=55?r.key=String.fromCharCode(n.keyCode-51+27):n.keyCode===56?r.key="\x7F":n.key==="/"?r.key="":n.keyCode===219?r.key="\x1B":n.keyCode===220?r.key="":n.keyCode===221&&(r.key="");else if((!e||t)&&n.altKey&&!n.metaKey){let a=lo[n.keyCode]?.[n.shiftKey?1:0];if(a)r.key="\x1B"+a;else if(n.keyCode>=65&&n.keyCode<=90){let l=n.ctrlKey?n.keyCode-64:n.keyCode+32,h=String.fromCharCode(l);n.shiftKey&&(h=h.toUpperCase()),r.key="\x1B"+h}else if(n.keyCode===32)r.key="\x1B"+(n.ctrlKey?"\0":" ");else if(n.key==="Dead"&&n.code.startsWith("Key")){let l=n.code.slice(3,4);n.shiftKey||(l=l.toLowerCase()),r.key="\x1B"+l,r.cancel=!0}}else if(e&&!n.altKey&&!n.ctrlKey&&!n.shiftKey&&n.metaKey)n.keyCode===65&&(r.type=1);else if(n.key&&!n.ctrlKey&&!n.altKey&&!n.metaKey&&n.keyCode>=48&&n.key.length===1)r.key=n.key;else if(n.key&&n.ctrlKey&&n.shiftKey)switch(n.code){case"Minus":r.key="";break;case"Digit2":r.key="\0";break;case"Digit6":r.key="";break}break}return r}var ti=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440};this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24};this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"};this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(i){if(i.code.startsWith("Numpad")){let e=i.code.slice(6);if(e>="0"&&e<="9")return 57399+parseInt(e,10);switch(e){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(i){switch(i.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(i){let e=0;return i.shiftKey&&(e|=1),i.altKey&&(e|=2),i.ctrlKey&&(e|=4),i.metaKey&&(e|=8),e>0?e+1:0}_getKeyCode(i,e){let t=this._getNumpadKeyCode(i);if(t!==void 0)return t;let r=this._getModifierKeyCode(i);if(r!==void 0)return r;let s=this._functionalKeyCodes[i.key];if(s!==void 0)return s;if((i.shiftKey||e&&i.altKey)&&i.code){if(i.code.startsWith("Digit")&&i.code.length===6){let o=i.code.charAt(5);if(o>="0"&&o<="9")return o.charCodeAt(0)}if(i.code.startsWith("Key")&&i.code.length===4)return i.code.charAt(3).toLowerCase().charCodeAt(0)}if(i.key.length===1){let o=i.key.codePointAt(0);return o>=65&&o<=90?o+32:o}}_isModifierKey(i){return i.key==="Shift"||i.key==="Control"||i.key==="Alt"||i.key==="Meta"}_isLockKey(i){return i.key==="CapsLock"||i.key==="NumLock"||i.key==="ScrollLock"}_buildCsiLetterSequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1B["+i}_buildSs3Sequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1BO"+i}_buildCsiTildeSequence(i,e,t,r){let s=r&&t!==1,o="\x1B["+i;return(e>0||s)&&(o+=";"+(e>0?e:"1"),s&&(o+=":"+t)),o+="~",o}_buildCsiUSequence(i,e,t,r,s,o,a){let l=!!(s&2),h=!!(s&4),d="\x1B["+e,c;h&&i.shiftKey&&i.key.length===1&&!o&&!a&&(c=i.key.codePointAt(0),d+=":"+c);let _=!!(s&16)&&r!==3&&i.key.length===1&&!o&&!a&&!i.ctrlKey?i.key.codePointAt(0):void 0,p=l&&r!==1&&(r===3||_===void 0);return(t>0||p||_!==void 0)&&(d+=";",t>0?d+=t:p&&(d+="1"),p&&(d+=":"+r)),_!==void 0&&(d+=";"+_),d+="u",d}evaluate(i,e,t=1,r=!1){let s={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(i),a=this._isModifierKey(i),l=!!(e&2);if(!l&&t===3||a&&!(e&8)||this._isLockKey(i)&&!(e&8))return s;let h=this._csiLetterKeys[i.key];if(h)return s.key=this._buildCsiLetterSequence(h,o,t,l),s.cancel=!0,s;let d=this._ss3FunctionKeys[i.key];if(d)return s.key=this._buildSs3Sequence(d,o,t,l),s.cancel=!0,s;let c=this._csiTildeKeys[i.key];if(c!==void 0)return s.key=this._buildCsiTildeSequence(c,o,t,l),s.cancel=!0,s;let u=this._getKeyCode(i,r);if(u===void 0)return s;let _=u===13||u===9||u===127;if(_&&t===3&&!(e&8))return s;let p=this._functionalKeyCodes[i.key]!==void 0||this._getNumpadKeyCode(i)!==void 0;if(!!(e&8||l&&t===3||(e&1||l)&&(p&&!_||o>0&&i.key.length!==1||o-1>1)))s.key=this._buildCsiUSequence(i,u,o,t,e,p,a),s.cancel=!0;else{let f=u===13?"\r":u===9?" ":u===127?"\x7F":void 0;f?s.key=f:i.key.length===1&&!i.ctrlKey&&!i.altKey&&!i.metaKey&&(s.key=i.key)}return s}static shouldUseProtocol(i){return i>0}};var Zi=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226};this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40};this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]);this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(i){let e=this._codeToVk[i.code];return e!==void 0?e:i.keyCode||0}_getScanCode(i){return this._codeToScancode[i.code]||0}_getUnicodeChar(i){if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(i.key==="Enter")return 10;if(i.key==="Backspace")return 127}let e=this._keyToControlChar[i.key];if(e!==void 0)return e;if(i.key.length===1){let t=i.key.codePointAt(0)||0;if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(i){let e=0;return i.shiftKey&&(e|=16),i.ctrlKey&&(i.code==="ControlRight"?e|=4:e|=8),i.altKey&&(i.code==="AltRight"?e|=1:e|=2),this._enhancedKeyCodes.has(i.code)&&(e|=256),e}evaluateKeyboardEvent(i,e){let t=this._getVirtualKeyCode(i),r=this._getScanCode(i),s=this._getUnicodeChar(i),o=e?1:0,a=this._getControlKeyState(i);return{type:0,cancel:!0,key:`\x1B[${t};${r};${s};${o};${a};1_`}}};var xt=class{constructor(i,e){this._coreService=i;this._optionsService=e}_getWin32InputMode(){return this._win32InputMode??=new Zi,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new ti,this._kittyKeyboard}evaluateKeyDown(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!0);let e=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(i,e,i.repeat?2:1,ie&&this._optionsService.rawOptions.macOptionIsMeta):on(i,this._coreService.decPrivateModes.applicationCursorKeys,ie,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!1);let e=this._coreService.kittyKeyboard.flags;if(this.useKitty&&e&2)return this._getKittyKeyboard().evaluate(i,e,3,ie&&this._optionsService.rawOptions.macOptionIsMeta)}get useKitty(){let i=this._coreService.kittyKeyboard.flags;return!!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard&&ti.shouldUseProtocol(i))}get useWin32InputMode(){return!!(this._optionsService.rawOptions.vtExtensions?.win32InputMode&&this._coreService.decPrivateModes.win32InputMode)}};xt=y([m(0,Y),m(1,R)],xt);var fs=class{constructor(...i){this._entries=new Map;for(let[e,t]of i)this.set(e,t)}set(i,e){let t=this._entries.get(i);return this._entries.set(i,e),t}forEach(i){for(let[e,t]of this._entries.entries())i(e,t)}has(i){return this._entries.has(i)}get(i){return this._entries.get(i)}},Ji=class{constructor(){this._services=new fs;this._services.set(Qe,this)}setService(i,e){this._services.set(i,e)}getService(i){return this._services.get(i)}createInstance(i,...e){let t=Fs(i).sort((o,a)=>o.index-a.index),r=[];for(let o of t){let a=this._services.get(o.id);if(!a)throw new Error(`[createInstance] ${i.name} depends on UNKNOWN service ${o.id._id}.`);r.push(a)}let s=t.length>0?t[0].index:e.length;if(e.length!==s)throw new Error(`[createInstance] First service dependency of ${i.name} at position ${s+1} conflicts with ${e.length} static arguments`);return new i(...e,...r)}};var co={trace:0,debug:1,info:2,warn:3,error:4,off:5},ho="xterm.js: ",wt=class extends g{constructor(e){super();this._optionsService=e;this._logLevel=5;this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=co[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tthis._length)for(let t=this._length;t=e;s--)this._array[this._getCyclicIndex(s+r.length)]=this._array[this._getCyclicIndex(s)];for(let s=0;sthis._maxLength){let s=this._length+r.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=r.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(let o=t-1;o>=0;o--)this.set(e+o+r,this.get(e+o));let s=e+t+r-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>22,e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):t]}set(i,e){this._cacheValid=!1,this._data[i*3+1]=e[0],e[1].length>1?(this._combined[i]=e[1],this._data[i*3+0]=i|2097152|e[2]<<22):this._data[i*3+0]=e[1].charCodeAt(0)|e[2]<<22}getWidth(i){return this._data[i*3+0]>>22}hasWidth(i){return this._data[i*3+0]&12582912}getFg(i){return this._data[i*3+1]}getBg(i){return this._data[i*3+2]}hasContent(i){return this._data[i*3+0]&4194303}getCodePoint(i){let e=this._data[i*3+0];return e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):e&2097151}isCombined(i){return this._data[i*3+0]&2097152}getString(i){let e=this._data[i*3+0];return e&2097152?this._combined[i]:e&2097151?be(e&2097151):""}isProtected(i){return this._data[i*3+2]&536870912}loadCell(i,e){return Tt=i*3,e.content=this._data[Tt+0],e.fg=this._data[Tt+1],e.bg=this._data[Tt+2],e.content&2097152?e.combinedData=this._combined[i]:e.combinedData="",e.extended=this.getExtended(i),e}getExtended(i){return Tt=i*3,this._data[Tt+2]&268435456?this._extendedAttrs[i]:(Qi._ext=0,Qi._urlId=0,Qi.payload=void 0,Qi)}setCell(i,e){this._cacheValid=!1,e.content&2097152&&(this._combined[i]=e.combinedData),e.bg&268435456&&(this._extendedAttrs[i]=e.extended),this._data[i*3+0]=e.content,this._data[i*3+1]=e.fg,this._data[i*3+2]=e.bg}setCellFromCodepoint(i,e,t,r){this._cacheValid=!1,r.bg&268435456&&(this._extendedAttrs[i]=r.extended);let s=i*3;this._data[s+0]=e|t<<22,this._data[s+1]=r.fg,this._data[s+2]=r.bg}addCodepointToCell(i,e,t){this._cacheValid=!1;let r=this._data[i*3+0];r&2097152?this._combined[i]+=be(e):r&2097151?(this._combined[i]=be(r&2097151)+be(e),r&=-2097152,r|=2097152):r=e|1<<22,t&&(r&=-12582913,r|=t<<22),this._data[i*3+0]=r}insertCells(i,e,t){if(this._cacheValid=!1,i%=this.length,i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,t),e=0;--r)this.setCell(i+e+r,this.loadCell(i+r,ln));for(let r=0;rthis.length){if(this._data.buffer.byteLength>=t*4)this._data=new Uint32Array(this._data.buffer,0,t);else{let r=new Uint32Array(t);r.set(this._data),this._data=r}for(let r=this.length;r=i&&delete this._combined[a]}let s=Object.keys(this._extendedAttrs);for(let o=0;o=i&&delete this._extendedAttrs[a]}}return this.length=i,t*4*2=0;--i)if(this._data[i*3+0]&4194303)return i+(this._data[i*3+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(this._data[i*3+0]&4194303||this._data[i*3+2]&50331648)return i+(this._data[i*3+0]>>22);return 0}copyCellsFrom(i,e,t,r,s){this._cacheValid=!1;let o=i._data;if(s)for(let a=r-1;a>=0;a--){for(let l=0;l<3;l++)this._data[(t+a)*3+l]=o[(e+a)*3+l];this._copyCellMapsFrom(i,e+a,t+a)}else for(let a=0;a>22||1}r&&r.push(e);let a=o.join("");return s&&(this._cache=a,this._cacheValid=!0,this._cacheTrimmed=!!i),a}_copyCellMapsFrom(i,e,t){let r=e*3;i._data[r+0]&2097152&&(this._combined[t]=i._combined[e]),i._data[r+2]&268435456&&(this._extendedAttrs[t]=i._extendedAttrs[e])}_copySparseMapsFrom(i){this._combined={},this._extendedAttrs={};for(let e=0;e=a&&t0&&(f>c||d[f].getTrimmedLength()===0);f--)v++;v>0&&(o.push(a+d.length-v),o.push(v)),a+=d.length-1}return o}function hn(n,i){let e=[],t=0,r=i[t],s=0;for(let o=0;ol&&(s-=l,o++);let h=n[o].getWidth(s-1)===2;h&&s--;let d=h?e-1:e;t.push(d),a+=d}return t}function Dt(n,i,e){if(i===n.length-1)return n[i].getTrimmedLength();let t=!n[i].hasContent(e-1)&&n[i].getWidth(e-1)===1,r=n[i+1].getWidth(0)===2;return t&&r?e-1:e}var tr=class tr{constructor(i){this.line=i;this.isDisposed=!1;this._disposables=[];this._id=tr._nextId++;this._onDispose=this.register(new b);this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),Oe(this._disposables),this._disposables.length=0)}register(i){return this._disposables.push(i),i}};tr._nextId=1;var er=tr;var q={},Re=q.B;q[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"};q.A={"#":"\xA3"};q.B=void 0;q[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"};q.C=q[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};q.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"};q.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"};q.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"};q.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"};q.E=q[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"};q.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"};q.H=q[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};q["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"};var fn=4294967295,si=class extends g{constructor(e,t,r,s){super();this._hasScrollback=e;this._optionsService=t;this._bufferService=r;this._logService=s;this.ydisp=0;this.ybase=0;this.y=0;this.x=0;this.tabs={};this.savedY=0;this.savedX=0;this.savedCurAttrData=U.clone();this.savedCharset=Re;this.savedCharsets=[];this.savedGlevel=0;this.savedOriginMode=!1;this.savedWraparoundMode=!0;this.markers=[];this._nullCell=F.fromCharData([0,"",1,0]);this._whitespaceCell=F.fromCharData([0," ",1,32]);this._isClearing=!1;this._memoryCleanupPosition=0;this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new ii(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new It(this._logService),this._register(E(()=>this._memoryCleanupQueue.clear())),this._register(E(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new ke),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new ke),this._whitespaceCell}getBlankLine(e,t){return new De(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let t=this.ybase+this.y-this.ydisp;return t>=0&&tfn?fn:t}fillViewportRows(e){if(this.lines.length===0){e??=U;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new ii(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){let r=this.getNullCell(U),s=0,o=this._getCorrectBufferLength(t);if(o>this.lines.maxLength&&(this.lines.maxLength=o),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(new De(e,r,!1)));else for(let l=this._rows;l>t;l--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(o0&&(this.lines.trimStart(l),this.ybase=Math.max(this.ybase-l,0),this.ydisp=Math.max(this.ydisp-l,0),this.savedY=Math.max(this.savedY-l,0)),this.lines.maxLength=o}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),a&&(this.y+=a),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let a=0;a0){let a=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,a)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){let e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend==="conpty"&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){let r=this._optionsService.rawOptions.reflowCursorLine,s=cn(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(U),r);if(s.length>0){let o=hn(this.lines,s);dn(this.lines,o.layout),this._reflowLargerAdjustViewport(e,t,o.countRemoved)}}_reflowLargerAdjustViewport(e,t,r){let s=this.getNullCell(U),o=r;for(;o-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;l--){let h=this.lines.get(l);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;let d=[h];for(;h.isWrapped&&l>0;)h=this.lines.get(--l),d.unshift(h);if(!r){let T=this.ybase+this.y;if(T>=l&&T0&&(o.push({start:l+d.length+a,newLines:v}),a+=v.length),d.push(...v);let f=u.length-1,S=u[f];S===0&&(f--,S=u[f]);let I=d.length-_-1,w=c;for(;I>=0;){let T=Math.min(w,S);if(d[f]===void 0)break;if(d[f].copyCellsFrom(d[I],w-T,S-T,T,!0),S-=T,S===0&&(f--,S=u[f]),w-=T,w===0){I--;let te=Math.max(I,0);w=Dt(d,te,this._cols)}}for(let T=0;T0;)this.ybase===0?this.y0){let l=[],h=[];for(let S=0;S=0;S--)if(_&&_.start>c+p){for(let I=_.newLines.length-1;I>=0;I--)this.lines.set(S--,_.newLines[I]);S++,l.push({index:c+1,amount:_.newLines.length}),p+=_.newLines.length,_=o[++u]}else this.lines.set(S,h[c--]);let v=0;for(let S=l.length-1;S>=0;S--)l[S].index+=v,this.lines.onInsertEmitter.fire(l[S]),v+=l[S].amount;let f=Math.max(0,d+a-this.lines.maxLength);f>0&&this.lines.onTrimEmitter.fire(f)}}translateBufferLineToString(e,t,r=0,s){let o=this.lines.get(e);return o?o.translateToString(t,r,s):""}getWrappedRangeForLine(e){let t=e,r=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=r,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(r=>{t.line>=r.index&&(t.line+=r.amount)})),t.register(this.lines.onDelete(r=>{t.line>=r.index&&t.liner.index&&(t.line-=r.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}};var ir=class extends g{constructor(e,t,r){super();this._optionsService=e;this._bufferService=t;this._logService=r;this._normalBuffer=this._register(new B);this._altBuffer=this._register(new B);this._onBufferActivate=this._register(new b);this.onBufferActivate=this._onBufferActivate.event;this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new si(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new si(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}};var Rt=class extends g{constructor(e,t){super();this.isUserScrolling=!1;this._onResize=this._register(new b);this.onResize=this._onResize.event;this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new ir(e,this,t)),this._register(this.buffers.onBufferActivate(r=>{this._onScroll.fire(r.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,t){let r=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:r,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){let r=this.buffer,s;s=this._cachedBlankLine,(!s||s.length!==this.cols||s.getFg(0)!==e.fg||s.getBg(0)!==e.bg)&&(s=r.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;let o=r.ybase+r.scrollTop,a=r.ybase+r.scrollBottom;if(r.scrollTop===0){let l=r.lines.isFull;a===r.lines.length-1?l?r.lines.recycle().copyFrom(s,!0):r.lines.push(s.clone(!0)):r.lines.splice(a+1,0,s.clone(!0)),l?this.isUserScrolling&&(r.ydisp=Math.max(r.ydisp-1,0)):(r.ybase++,this.isUserScrolling||r.ydisp++)}else{let l=a-o+1;r.lines.shiftElements(o+1,l-1,-1),r.lines.set(a,s.clone(!0))}this.isUserScrolling||(r.ydisp=r.ybase),this._onScroll.fire(r.ydisp)}scrollLines(e,t){let r=this.buffer;if(e<0){if(r.ydisp===0)return;this.isUserScrolling=!0}else e+r.ydisp>=r.ybase&&(this.isUserScrolling=!1);let s=r.ydisp;r.ydisp=Math.max(Math.min(r.ydisp+e,r.ybase),0),s!==r.ydisp&&(t||this._onScroll.fire(r.ydisp))}};Rt=y([m(0,R),m(1,fe)],Rt);var Lt={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:ie,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}},fo=["normal","bold","100","200","300","400","500","600","700","800","900"],rr=class extends g{constructor(e){super();this._onOptionChange=this._register(new b);this.onOptionChange=this._onOptionChange.event;let t={...Lt};for(let r in e)if(r in t)try{let s=e[r];t[r]=this._sanitizeAndValidateOption(r,s)}catch(s){console.error(s)}this.rawOptions=t,this.options={...t},this._setupOptions(),this._register(E(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(r=>{r===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(r=>{e.indexOf(r)!==-1&&t()})}_setupOptions(){let e=r=>{if(!(r in Lt))throw new Error(`No option with key "${r}"`);return this.rawOptions[r]},t=(r,s)=>{if(!(r in Lt))throw new Error(`No option with key "${r}"`);s=this._sanitizeAndValidateOption(r,s),this.rawOptions[r]!==s&&(this.rawOptions[r]=s,this._onOptionChange.fire(r))};for(let r in this.rawOptions){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this.options,r,s)}}_sanitizeAndValidateOption(e,t){switch(e){case"cursorStyle":if(t||(t=Lt[e]),!_o(t))throw new Error(`"${t}" is not a valid value for ${e}`);break;case"wordSeparator":t||(t=Lt[e]);break;case"fontWeight":case"fontWeightBold":if(typeof t=="number"&&1<=t&&t<=1e3)break;t=fo.includes(t)?t:Lt[e];break;case"blinkIntervalDuration":if(t=Math.floor(t),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"cursorWidth":t=Math.floor(t);case"lineHeight":case"tabStopWidth":if(t<1)throw new Error(`${e} cannot be less than 1, value: ${t}`);break;case"minimumContrastRatio":t=Math.max(1,Math.min(21,Math.round(t*10)/10));break;case"scrollback":if(t=Math.min(t,4294967295),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(t<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${t}`);break;case"rows":case"cols":if(!t&&t!==0)throw new Error(`${e} must be numeric, value: ${t}`);break;case"windowsPty":t=t??{};break}return t}};function _o(n){return n==="block"||n==="underline"||n==="bar"}var _n=Object.freeze({insertMode:!1}),pn=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0}),mn=()=>({flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}),At=class extends g{constructor(e,t,r){super();this._bufferService=e;this._logService=t;this._optionsService=r;this.isCursorHidden=!1;this._onData=this._register(new b);this.onData=this._onData.event;this._onUserInput=this._register(new b);this.onUserInput=this._onUserInput.event;this._onBinary=this._register(new b);this.onBinary=this._onBinary.event;this._onRequestScrollToBottom=this._register(new b);this.onRequestScrollToBottom=this._onRequestScrollToBottom.event;this.isCursorInitialized=r.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(_n),this.decPrivateModes=structuredClone(pn),this.kittyKeyboard=mn()}reset(){this.modes=structuredClone(_n),this.decPrivateModes=structuredClone(pn),this.kittyKeyboard=mn()}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;let r=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&r.ybase!==r.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(s=>s.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(t=>t.charCodeAt(0))),this._onBinary.fire(e))}};At=y([m(0,D),m(1,fe),m(2,R)],At);var bn={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:n=>n.button===4||n.action!==1?!1:(n.ctrl=!1,n.alt=!1,n.shift=!1,!0)},VT200:{events:19,restrict:n=>n.action!==32},DRAG:{events:23,restrict:n=>!(n.action===32&&n.button===3)},ANY:{events:31,restrict:n=>!0}};function ms(n,i){let e=(n.ctrl?16:0)|(n.shift?4:0)|(n.alt?8:0);return n.button===4?(e|=64,e|=n.action):(e|=n.button&3,n.button&4&&(e|=64),n.button&8&&(e|=128),n.action===32?e|=32:n.action===0&&!i&&(e|=3)),e}var bs=String.fromCharCode,vn={DEFAULT:n=>{let i=[ms(n,!1)+32,n.col+32,n.row+32];return i[0]>255||i[1]>255||i[2]>255?"":`\x1B[M${bs(i[0])}${bs(i[1])}${bs(i[2])}`},SGR:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${ms(n,!0)};${n.col};${n.row}${i}`},SGR_PIXELS:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${ms(n,!0)};${n.x};${n.y}${i}`}},sr=class extends g{constructor(){super();this._protocols={};this._encodings={};this._activeProtocol="";this._activeEncoding="";this._onProtocolChange=this._register(new b);this.onProtocolChange=this._onProtocolChange.event;for(let e of Object.keys(bn))this.addProtocol(e,bn[e]);for(let e of Object.keys(vn))this.addEncoding(e,vn[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return this._customWheelEventHandler?this._customWheelEventHandler(e)!==!1:!0}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return this._activeEncoding==="DEFAULT"}get isPixelEncoding(){return this._activeEncoding==="SGR_PIXELS"}};var me=class n{constructor(){this._providers=Object.create(null);this._active="";this._onChange=new b;this.onChange=this._onChange.event}static extractShouldJoin(i){return(i&1)!==0}static extractWidth(i){return i>>1&3}static extractCharKind(i){return i>>3}static createPropertyValue(i,e,t=!1){return(i&16777215)<<3|(e&3)<<1|(t?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(i){if(!this._providers[i])throw new Error(`unknown Unicode version "${i}"`);this._active=i,this._activeProvider=this._providers[i],this._onChange.fire(i)}register(i){this._providers[i.version]=i,this._active||(this.activeVersion=i.version)}wcwidth(i){return this._activeProvider.wcwidth(i)}getStringCellWidth(i){let e=0,t=0,r=i.length;for(let s=0;s=r)return e+this.wcwidth(o);let h=i.charCodeAt(s);56320<=h&&h<=57343?o=(o-55296)*1024+h-56320+65536:e+=this.wcwidth(h)}let a=this.charProperties(o,t),l=n.extractWidth(a);n.extractShouldJoin(a)&&(l-=n.extractWidth(t)),e+=l,t=a}return e}charProperties(i,e){return this._activeProvider.charProperties(i,e)}};var vs=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],po=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],X;function mo(n,i){let e=0,t=i.length-1,r;if(ni[t][1])return!1;for(;t>=e;)if(r=e+t>>1,n>i[r][1])e=r+1;else if(n=131072&&i<=196605||i>=196608&&i<=262141?2:1}charProperties(i,e){let t=this.wcwidth(i),r=t===0&&e!==0;if(r){let s=me.extractWidth(e);s===0?r=!1:s>t&&(t=s)}return me.createPropertyValue(0,t,r)}};var or=class{constructor(){this.glevel=0;this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(i){this.glevel=i,this.charset=this._charsets[i]}setgCharset(i,e){this._charsets[i]=e,this.glevel===i&&(this.charset=e)}};function Ss(n){let e=n.buffer.lines.get(n.buffer.ybase+n.buffer.y-1)?.get(n.cols-1),t=n.buffer.lines.get(n.buffer.ybase+n.buffer.y);t&&e&&(t.isWrapped=e[3]!==0&&e[3]!==32)}var kt=class n{constructor(i=32,e=32){this.maxLength=i;this.maxSubParamsLength=e;if(e>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(i),this.length=0,this._subParams=new Int32Array(e),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(i),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(i){let e=new n;if(!i.length)return e;for(let t=Array.isArray(i[0])?1:0;t>8,r=this._subParamsIdx[e]&255;r-t>0&&i.push(Array.prototype.slice.call(this._subParams,t,r))}return i}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(i){if(this._digitIsSub=!1,this.length>=this.maxLength){this._rejectDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=i>2147483647?2147483647:i}addSubParam(i){if(this._digitIsSub=!0,!!this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=i>2147483647?2147483647:i,this._subParamsIdx[this.length-1]++}}hasSubParams(i){return(this._subParamsIdx[i]&255)-(this._subParamsIdx[i]>>8)>0}getSubParams(i){let e=this._subParamsIdx[i]>>8,t=this._subParamsIdx[i]&255;return t-e>0?this._subParams.subarray(e,t):null}getSubParamsAll(){let i={};for(let e=0;e>8,r=this._subParamsIdx[e]&255;r-t>0&&(i[e]=this._subParams.slice(t,r))}return i}addDigit(i){let e;if(this._rejectDigits||!(e=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let t=this._digitIsSub?this._subParams:this.params,r=t[e-1];t[e-1]=~r?Math.min(r*10+i,2147483647):i}};var gs=class{constructor(){this._chunks=[];this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(i){this._chunks.push(i),this._length+=i.length}toString(){return this._chunks.join("")}},We=class{constructor(i){this._limit=i;this._builder=new gs}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(i){return this._builder.append(i),this._builder.length>this._limit?(this._builder.reset(),!0):!1}toString(){return this._builder.toString()}};var ni=[],ar=class{constructor(){this._state=0;this._active=ni;this._id=-1;this._handlers=Object.create(null);this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=ni}reset(){if(this._state===2)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=ni,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||ni,!this._active.length)this._handlerFb(this._id,"START");else for(let i=this._active.length-1;i>=0;i--)this._active[i].start()}_put(i,e,t){if(!this._active.length)this._handlerFb(this._id,"PUT",ye(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}start(){this.reset(),this._state=1}put(i,e,t){if(this._state!==3){if(this._state===1)for(;e0&&this._put(i,e,t)}}end(i,e=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=ni,this._id=-1,this._state=0}}},lr=class lr{constructor(i){this._handler=i;this._data=new We(lr._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(ye(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};lr._payloadLimit=1e7;var ne=lr;var oi=[],cr=class{constructor(){this._handlers=Object.create(null);this._active=oi;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=oi}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].unhook(!1);this._stack.paused=!1,this._active=oi,this._ident=0}hook(i,e){if(this.reset(),this._ident=i,this._active=this._handlers[i]||oi,!this._active.length)this._handlerFb(this._ident,"HOOK",e);else for(let t=this._active.length-1;t>=0;t--)this._active[t].hook(e)}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",ye(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}unhook(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"UNHOOK",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].unhook(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].unhook(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=oi,this._ident=0}},ai=new kt;ai.addParam(0);var hr=class hr{constructor(i){this._handler=i;this._data=new We(hr._payloadLimit);this._params=ai;this._hitLimit=!1}hook(i){this._params=i.length>1||i.params[0]?i.clone():ai,this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(ye(i,e,t))&&(this._hitLimit=!0)}unhook(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString(),this._params),e instanceof Promise))return e.then(t=>(this._params=ai,this._data.reset(),this._hitLimit=!1,t));return this._params=ai,this._data.reset(),this._hitLimit=!1,e}};hr._payloadLimit=1e7;var li=hr;var ci=[],dr=class{constructor(){this._handlers=Object.create(null);this._active=ci;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=ci}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=ci,this._ident=0}start(i){if(this.reset(),this._ident=i,this._active=this._handlers[i]||ci,!this._active.length)this._handlerFb(this._ident,"START");else for(let e=this._active.length-1;e>=0;e--)this._active[e].start()}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",ye(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}end(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=ci,this._ident=0}},fr=class fr{constructor(i){this._handler=i;this._data=new We(fr._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(ye(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};fr._payloadLimit=1e7;var ur=fr;var Is=class{constructor(i){this.table=new Uint16Array(i)}setDefault(i,e){this.table.fill(i<<8|e)}add(i,e,t,r){this.table[e<<8|i]=t<<8|r}addMany(i,e,t,r){for(let s=0;sl),t=(a,l)=>e.slice(a,l),r=t(32,127),s=t(0,24);s.push(25),s.push.apply(s,t(28,32));let o=t(0,17);n.setDefault(1,0),n.addMany(r,0,2,0);for(let a of o)n.addMany([24,26,153,154],a,3,0),n.addMany(t(128,144),a,3,0),n.addMany(t(144,152),a,3,0),n.add(156,a,0,0),n.add(27,a,11,1),n.add(157,a,4,8),n.addMany([152,158],a,0,7),n.add(159,a,11,14),n.add(155,a,11,3),n.add(144,a,11,9);return n.addMany(s,0,3,0),n.addMany(s,1,3,1),n.add(127,1,0,1),n.addMany(s,8,0,8),n.addMany(s,3,3,3),n.add(127,3,0,3),n.addMany(s,4,3,4),n.add(127,4,0,4),n.addMany(s,6,3,6),n.addMany(s,5,3,5),n.add(127,5,0,5),n.addMany(s,2,3,2),n.add(127,2,0,2),n.add(93,1,4,8),n.addMany(r,8,5,8),n.add(127,8,5,8),n.addMany([156,27,24,26,7],8,6,0),n.addMany(t(28,32),8,0,8),n.addMany([88,94],1,0,7),n.addMany(r,7,0,7),n.addMany(s,7,0,7),n.add(156,7,0,0),n.add(127,7,0,7),n.add(95,1,11,14),n.addMany(s,14,0,14),n.add(127,14,0,14),n.addMany(t(32,48),14,9,15),n.addMany(t(48,127),14,15,16),n.addMany(t(48,127),15,15,16),n.addMany(s,15,0,15),n.addMany(t(32,48),15,9,15),n.add(127,15,0,15),n.addMany(r,16,16,16),n.addMany(s,16,0,16),n.addMany(t(8,14),16,16,16),n.add(127,16,0,16),n.addMany([27,156,24,26],16,17,0),n.add(91,1,11,3),n.addMany(t(64,127),3,7,0),n.addMany(t(48,60),3,8,4),n.addMany([60,61,62,63],3,9,4),n.addMany(t(48,60),4,8,4),n.addMany(t(64,127),4,7,0),n.addMany([60,61,62,63],4,0,6),n.addMany(t(32,64),6,0,6),n.add(127,6,0,6),n.addMany(t(64,127),6,0,0),n.addMany(t(32,48),3,9,5),n.addMany(t(32,48),5,9,5),n.addMany(t(48,64),5,0,6),n.addMany(t(64,127),5,7,0),n.addMany(t(32,48),4,9,5),n.addMany(t(32,48),1,9,2),n.addMany(t(32,48),2,9,2),n.addMany(t(48,127),2,10,0),n.addMany(t(48,80),1,10,0),n.addMany(t(81,88),1,10,0),n.addMany([89,90,92],1,10,0),n.addMany(t(96,127),1,10,0),n.add(80,1,11,9),n.addMany(s,9,0,9),n.add(127,9,0,9),n.addMany(t(32,48),9,9,12),n.addMany(t(48,60),9,8,10),n.addMany([60,61,62,63],9,9,10),n.addMany(s,11,0,11),n.addMany(t(32,128),11,0,11),n.addMany(s,10,0,10),n.add(127,10,0,10),n.addMany(t(48,60),10,8,10),n.addMany([60,61,62,63],10,0,11),n.addMany(t(32,48),10,9,12),n.addMany(s,12,0,12),n.add(127,12,0,12),n.addMany(t(32,48),12,9,12),n.addMany(t(48,64),12,0,11),n.addMany(t(64,127),12,12,13),n.addMany(t(64,127),10,12,13),n.addMany(t(64,127),9,12,13),n.addMany(s,13,13,13),n.addMany(r,13,13,13),n.add(127,13,0,13),n.addMany([27,156,24,26],13,14,0),n.add(oe,0,2,0),n.add(oe,8,5,8),n.add(oe,6,0,6),n.add(oe,11,0,11),n.add(oe,13,13,13),n.add(oe,16,16,16),n})(),_r=class extends g{constructor(e=bo){super();this._transitions=e;this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0};this.initialState=0,this.currentState=this.initialState,this._params=new kt,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(t,r,s)=>{},this._executeHandlerFb=t=>{},this._csiHandlerFb=(t,r)=>{},this._escHandlerFb=t=>{},this._errorHandlerFb=t=>t,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(E(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new ar),this._dcsParser=this._register(new cr),this._apcParser=this._register(new dr),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let r=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(r=e.prefix.charCodeAt(0),r<60||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let o=0;oa||a>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=a}}if(e.final.length!==1)throw new Error("final must be a single byte");let s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return r<<=8,r|=s,r}identToString(e){let t=[];for(;e;)t.push(String.fromCharCode(e&255)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){let r=this._identifier(e,[48,126]);this._escHandlers[r]??=[];let s=this._escHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){let r=e.charCodeAt(0);this._executeHandlers[r]=t,r<24&&(this._executeHandlersArr[r]=t)}clearExecuteHandler(e){let t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){let r=this._identifier(e);this._csiHandlers[r]??=[];let s=this._csiHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,r,s,o){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=s,this._parseStack.chunkPos=o}parse(e,t,r){let s,o,a=0,l;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(r===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let h=this._parseStack.handlers,d=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](this._params),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 4:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],l=this._dcsParser.unhook(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],l=this._oscParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],l=this._apcParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&255}for(let h=a;h=60&&c<=63&&(this._collect=c,d++);let u=!1;for(;d=48&&c<=57)this._params.addDigit(c-48);else if(c===59)this._params.addParam(0);else if(c===58)this._params.addSubParam(-1);else if(c>=64&&c<=126){let _=this._csiHandlers[this._collect<<8|c],p=_?_.length-1:-1;for(;p>=0&&(l=_[p](this._params),l!==!0);p--)if(l instanceof Promise)return o=1792,this._preserveStack(3,_,p,o,d),l;p<0&&this._csiHandlerFb(this._collect<<8|c,this._params),this.precedingJoinState=0,h=d,this.currentState=0,u=!0;break}else break;u||(h=d-1,this.currentState=4);continue}switch(o=this._transitions.table[this.currentState<<8|(s>8){case 2:let d=h,c=t-4;for(;d=32&&(e[d]<=126||e[d]>=oe)&&e[++d]>=32&&(e[d]<=126||e[d]>=oe)&&e[++d]>=32&&(e[d]<=126||e[d]>=oe)&&e[++d]>=32&&(e[d]<=126||e[d]>=oe););if(d>=c)for(;d=32&&(e[d]<=126||e[d]>=oe);)d++;this._printHandler(e,h,d),h=d-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:h,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let _=this._csiHandlers[this._collect<<8|s],p=_?_.length-1:-1;for(;p>=0&&(l=_[p](this._params),l!==!0);p--)if(l instanceof Promise)return this._preserveStack(3,_,p,o,h),l;p<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}while(++h47&&s<60);h--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:let v=this._escHandlers[this._collect<<8|s],f=v?v.length-1:-1;for(;f>=0&&(l=v[f](),l!==!0);f--)if(l instanceof Promise)return this._preserveStack(4,v,f,o,h),l;f<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let S=h+1;;++S)if(S>=t||(s=e[S])===24||s===26||s===27||s>127&&s=t||(s=e[S])<32||s>127&&s=32&&e[S]<127||e[S]>=8&&e[S]<14||e[S]>=oe))){this._apcParser.put(e,h,S),h=S-1;break}break;case 17:if(l=this._apcParser.end(s!==24&&s!==26),l)return this._preserveStack(7,[],0,o,h),l;s===27&&(o|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0;break}this.currentState=o&255}}};var vo=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,So=/^[\da-f]+$/;function Es(n){if(!n)return;let i=n.toLowerCase();if(i.startsWith("rgb:")){i=i.slice(4);let e=vo.exec(i);if(e){let t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(i.startsWith("#")&&(i=i.slice(1),So.exec(i)&&[3,6,9,12].includes(i.length))){let e=i.length/3,t=[0,0,0];for(let r=0;r<3;++r){let s=parseInt(i.slice(e*r,e*r+e),16);t[r]=e===1?s<<4:e===2?s:e===3?s>>4:s>>8}return t}}function Cs(n,i){let e=n.toString(16),t=e.length<2?"0"+e:e;switch(i){case 4:return e[0];case 8:return t;case 12:return(t+t).slice(0,3);default:return t+t}}function In(n,i=16){let[e,t,r]=n;return`rgb:${Cs(e,i)}/${Cs(t,i)}/${Cs(r,i)}`}var Cn="6.1.0-beta.304";var Io={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function En(n,i){if(n>24)return i.setWinLines||!1;switch(n){case 1:return!!i.restoreWin;case 2:return!!i.minimizeWin;case 3:return!!i.setWinPosition;case 4:return!!i.setWinSizePixels;case 5:return!!i.raiseWin;case 6:return!!i.lowerWin;case 7:return!!i.refreshWin;case 8:return!!i.setWinSizeChars;case 9:return!!i.maximizeWin;case 10:return!!i.fullscreenWin;case 11:return!!i.getWinState;case 13:return!!i.getWinPosition;case 14:return!!i.getWinSizePixels;case 15:return!!i.getScreenSizePixels;case 16:return!!i.getCellSizePixels;case 18:return!!i.getWinSizeChars;case 19:return!!i.getScreenSizeChars;case 20:return!!i.getIconTitle;case 21:return!!i.getWinTitle;case 22:return!!i.pushTitle;case 23:return!!i.popTitle;case 24:return!!i.setWinLines}return!1}var yn=0,pr=class extends g{constructor(e,t,r,s,o,a,l,h,d=new _r){super();this._bufferService=e;this._charsetService=t;this._coreService=r;this._logService=s;this._optionsService=o;this._oscLinkService=a;this._mouseStateService=l;this._unicodeService=h;this._parser=d;this._parseBuffer=new Uint32Array(4096);this._stringDecoder=new mi;this._utf8Decoder=new bi;this._windowTitle="";this._iconName="";this._windowTitleStack=[];this._iconNameStack=[];this._curAttrData=U.clone();this._eraseAttrDataInternal=U.clone();this._onRequestBell=this._register(new b);this.onRequestBell=this._onRequestBell.event;this._onRequestRefreshRows=this._register(new b);this.onRequestRefreshRows=this._onRequestRefreshRows.event;this._onRequestReset=this._register(new b);this.onRequestReset=this._onRequestReset.event;this._onRequestSendFocus=this._register(new b);this.onRequestSendFocus=this._onRequestSendFocus.event;this._onRequestSyncScrollBar=this._register(new b);this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event;this._onRequestWindowsOptionsReport=this._register(new b);this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event;this._onA11yChar=this._register(new b);this.onA11yChar=this._onA11yChar.event;this._onA11yTab=this._register(new b);this.onA11yTab=this._onA11yTab.event;this._onCursorMove=this._register(new b);this.onCursorMove=this._onCursorMove.event;this._onLineFeed=this._register(new b);this.onLineFeed=this._onLineFeed.event;this._onScroll=this._register(new b);this.onScroll=this._onScroll.event;this._onTitleChange=this._register(new b);this.onTitleChange=this._onTitleChange.event;this._onColor=this._register(new b);this.onColor=this._onColor.event;this._onRequestColorSchemeQuery=this._register(new b);this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event;this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0};this._specialColors=[256,257,258];this._register(this._parser),this._dirtyRowTracker=new hi(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(c=>this._activeBuffer=c.activeBuffer)),this._parser.setCsiHandlerFallback((c,u)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(c),params:u.toArray()})}),this._parser.setEscHandlerFallback(c=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(c)})}),this._parser.setExecuteHandlerFallback(c=>{this._logService.debug("Unknown EXECUTE code: ",{code:c})}),this._parser.setOscHandlerFallback((c,u,_)=>{this._logService.debug("Unknown OSC code: ",{identifier:c,action:u,data:_})}),this._parser.setDcsHandlerFallback((c,u,_)=>{u==="HOOK"&&(_=_.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(c),action:u,payload:_})}),this._parser.setApcHandlerFallback((c,u,_)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(c),action:u,payload:_})}),this._parser.setPrintHandler((c,u,_)=>this.print(c,u,_)),this._parser.registerCsiHandler({final:"@"},c=>this.insertChars(c)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},c=>this.scrollLeft(c)),this._parser.registerCsiHandler({final:"A"},c=>this.cursorUp(c)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},c=>this.scrollRight(c)),this._parser.registerCsiHandler({final:"B"},c=>this.cursorDown(c)),this._parser.registerCsiHandler({final:"C"},c=>this.cursorForward(c)),this._parser.registerCsiHandler({final:"D"},c=>this.cursorBackward(c)),this._parser.registerCsiHandler({final:"E"},c=>this.cursorNextLine(c)),this._parser.registerCsiHandler({final:"F"},c=>this.cursorPrecedingLine(c)),this._parser.registerCsiHandler({final:"G"},c=>this.cursorCharAbsolute(c)),this._parser.registerCsiHandler({final:"H"},c=>this.cursorPosition(c)),this._parser.registerCsiHandler({final:"I"},c=>this.cursorForwardTab(c)),this._parser.registerCsiHandler({final:"J"},c=>this.eraseInDisplay(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},c=>this.eraseInDisplay(c,!0)),this._parser.registerCsiHandler({final:"K"},c=>this.eraseInLine(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},c=>this.eraseInLine(c,!0)),this._parser.registerCsiHandler({final:"L"},c=>this.insertLines(c)),this._parser.registerCsiHandler({final:"M"},c=>this.deleteLines(c)),this._parser.registerCsiHandler({final:"P"},c=>this.deleteChars(c)),this._parser.registerCsiHandler({final:"S"},c=>this.scrollUp(c)),this._parser.registerCsiHandler({final:"T"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"X"},c=>this.eraseChars(c)),this._parser.registerCsiHandler({final:"Z"},c=>this.cursorBackwardTab(c)),this._parser.registerCsiHandler({final:"^"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"`"},c=>this.charPosAbsolute(c)),this._parser.registerCsiHandler({final:"a"},c=>this.hPositionRelative(c)),this._parser.registerCsiHandler({final:"b"},c=>this.repeatPrecedingCharacter(c)),this._parser.registerCsiHandler({final:"c"},c=>this.sendDeviceAttributesPrimary(c)),this._parser.registerCsiHandler({prefix:">",final:"c"},c=>this.sendDeviceAttributesSecondary(c)),this._parser.registerCsiHandler({final:"d"},c=>this.linePosAbsolute(c)),this._parser.registerCsiHandler({final:"e"},c=>this.vPositionRelative(c)),this._parser.registerCsiHandler({final:"f"},c=>this.hVPosition(c)),this._parser.registerCsiHandler({final:"g"},c=>this.tabClear(c)),this._parser.registerCsiHandler({final:"h"},c=>this.setMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"h"},c=>this.setModePrivate(c)),this._parser.registerCsiHandler({final:"l"},c=>this.resetMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"l"},c=>this.resetModePrivate(c)),this._parser.registerCsiHandler({final:"m"},c=>this.charAttributes(c)),this._parser.registerCsiHandler({final:"n"},c=>this.deviceStatus(c)),this._parser.registerCsiHandler({prefix:"?",final:"n"},c=>this.deviceStatusPrivate(c)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},c=>this.softReset(c)),this._parser.registerCsiHandler({prefix:">",final:"q"},c=>this.sendXtVersion(c)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},c=>this.setCursorStyle(c)),this._parser.registerCsiHandler({final:"r"},c=>this.setScrollRegion(c)),this._parser.registerCsiHandler({final:"s"},c=>this.saveCursor(c)),this._parser.registerCsiHandler({final:"t"},c=>this.windowOptions(c)),this._parser.registerCsiHandler({final:"u"},c=>this.restoreCursor(c)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},c=>this.insertColumns(c)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},c=>this.deleteColumns(c)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},c=>this.selectProtected(c)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},c=>this.requestMode(c,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},c=>this.requestMode(c,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},c=>this.kittyKeyboardSet(c)),this._parser.registerCsiHandler({prefix:"?",final:"u"},c=>this.kittyKeyboardQuery(c)),this._parser.registerCsiHandler({prefix:">",final:"u"},c=>this.kittyKeyboardPush(c)),this._parser.registerCsiHandler({prefix:"<",final:"u"},c=>this.kittyKeyboardPop(c)),this._parser.setExecuteHandler("\x07",()=>this.bell()),this._parser.setExecuteHandler(` +-`,()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler(" ",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("\x84",()=>this.index()),this._parser.setExecuteHandler("\x85",()=>this.nextLine()),this._parser.setExecuteHandler("\x88",()=>this.tabSet()),this._parser.registerOscHandler(0,new ne(c=>(this.setTitle(c),this.setIconName(c),!0))),this._parser.registerOscHandler(1,new ne(c=>this.setIconName(c))),this._parser.registerOscHandler(2,new ne(c=>this.setTitle(c))),this._parser.registerOscHandler(4,new ne(c=>this.setOrReportIndexedColor(c))),this._parser.registerOscHandler(8,new ne(c=>this.setHyperlink(c))),this._parser.registerOscHandler(10,new ne(c=>this.setOrReportFgColor(c))),this._parser.registerOscHandler(11,new ne(c=>this.setOrReportBgColor(c))),this._parser.registerOscHandler(12,new ne(c=>this.setOrReportCursorColor(c))),this._parser.registerOscHandler(104,new ne(c=>this.restoreIndexedColor(c))),this._parser.registerOscHandler(110,new ne(c=>this.restoreFgColor(c))),this._parser.registerOscHandler(111,new ne(c=>this.restoreBgColor(c))),this._parser.registerOscHandler(112,new ne(c=>this.restoreCursorColor(c))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(let c in q)this._parser.registerEscHandler({intermediates:"(",final:c},()=>this.selectCharset("("+c)),this._parser.registerEscHandler({intermediates:")",final:c},()=>this.selectCharset(")"+c)),this._parser.registerEscHandler({intermediates:"*",final:c},()=>this.selectCharset("*"+c)),this._parser.registerEscHandler({intermediates:"+",final:c},()=>this.selectCharset("+"+c)),this._parser.registerEscHandler({intermediates:"-",final:c},()=>this.selectCharset("-"+c)),this._parser.registerEscHandler({intermediates:".",final:c},()=>this.selectCharset("."+c)),this._parser.registerEscHandler({intermediates:"/",final:c},()=>this.selectCharset("/"+c));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(c=>(this._logService.error("Parsing error: ",c),c)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new li((c,u)=>this.requestStatusString(c,u)))}getAttrData(){return this._curAttrData}_preserveStack(e,t,r,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=3){let t,r=new Promise((s,o)=>{t=setTimeout(()=>o("#SLOW_TIMEOUT"),5e3)});Promise.race([e,r]).then(()=>{t!==void 0&&clearTimeout(t)},s=>{if(t!==void 0&&clearTimeout(t),s!=="#SLOW_TIMEOUT")throw s;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let r,s=this._activeBuffer.x,o=this._activeBuffer.y,a=0,l=this._parseStack.paused;if(l){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;s=this._parseStack.cursorStartX,o=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(a=this._parseStack.position+131072)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e=="string"?` "${e}"`:` "${Array.prototype.map.call(e,c=>String.fromCharCode(c)).join("")}"`}`),this._logService.logLevel===0&&this._logService.trace("parsing data (codes)",typeof e=="string"?e.split("").map(c=>c.charCodeAt(0)):e),this._parseBuffer.length131072)for(let c=a;c0&&_.getWidth(this._activeBuffer.x-1)===2&&_.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let p=this._parser.precedingJoinState;for(let v=t;vh){if(d){let L=_,T=this._activeBuffer.x-I;if(this._activeBuffer.x=I,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),_=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!_)return;for(I>0&&_ instanceof De&&_.copyCellsFrom(L,T,0,I,!1);T=0;)_.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(c&&(_.insertCells(this._activeBuffer.x,o-I,this._activeBuffer.getNullCell(u)),_.getWidth(h-1)===2&&_.setCellFromCodepoint(h-1,0,1,u)),_.setCellFromCodepoint(this._activeBuffer.x++,s,o,u),o>0)for(;--o;)_.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=p,this._activeBuffer.x0&&_.getWidth(this._activeBuffer.x)===0&&!_.hasContent(this._activeBuffer.x)&&_.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return e.final==="t"&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,r=>En(r.params[0],this._optionsService.rawOptions.windowOptions)?t(r):!0):this._parser.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new li(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new ne(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new ur(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){let t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let t=e.params[0];return t===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:t===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let t=e.params[0];return t===1&&(this._curAttrData.bg|=536870912),(t===2||t===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,r,s=!1,o=!1){let a=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);a&&(a.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),o),s&&(a.isWrapped=!1))}_resetBufferLine(e,t=!1){let r=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);r&&(r.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),r.isWrapped=!1)}eraseInDisplay(e,t=!1){this._restrictCursor(this._bufferService.cols);let r;switch(e.params[0]){case 0:for(r=this._activeBuffer.y,this._dirtyRowTracker.markDirty(r),this._eraseInBufferLine(r++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);r=this._bufferService.cols){let o=this._activeBuffer.lines.get(r+1);o&&(o.isWrapped=!1)}for(;r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(r=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,r-1);r--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+r)?.getTrimmedLength(););for(;r>=0;r--)this._bufferService.scroll(this._eraseAttrData())}else{for(r=this._bufferService.rows,this._dirtyRowTracker.markDirty(r-1);r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0)}break;case 3:let s=this._activeBuffer.lines.length-this._bufferService.rows;s>0&&(this._activeBuffer.lines.trimStart(s),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-s,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-s,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0));break}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t);break}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let c=d;for(let u=1;u0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("\x1B[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("\x1B[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("\x1B[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("\x1B[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("\x1B[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`\x1BP>|xterm.js(${Cn})\x1B\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(te[te.NOT_RECOGNIZED=0]="NOT_RECOGNIZED",te[te.SET=1]="SET",te[te.RESET=2]="RESET",te[te.PERMANENTLY_SET=3]="PERMANENTLY_SET",te[te.PERMANENTLY_RESET=4]="PERMANENTLY_RESET"))(r||={});let s=this._coreService.decPrivateModes,{activeProtocol:o,activeEncoding:a}=this._mouseStateService,l=this._coreService,{buffers:h,cols:d}=this._bufferService,{active:c,alt:u}=h,_=this._optionsService.rawOptions,p=(S,I)=>(l.triggerDataEvent(`\x1B[${t?"":"?"}${S};${I}$y`),!0),v=S=>S?1:2,f=e.params[0];return t?f===2?p(f,4):f===4?p(f,v(l.modes.insertMode)):f===12?p(f,3):f===20?p(f,v(_.convertEol)):p(f,0):f===1?p(f,v(s.applicationCursorKeys)):f===3?p(f,_.windowOptions.setWinLines?d===80?2:d===132?1:0:0):f===6?p(f,v(s.origin)):f===7?p(f,v(s.wraparound)):f===8?p(f,3):f===9?p(f,v(o==="X10")):f===12?p(f,v(_.cursorBlink)):f===25?p(f,v(!l.isCursorHidden)):f===45?p(f,v(s.reverseWraparound)):f===66?p(f,v(s.applicationKeypad)):f===67?p(f,4):f===1e3?p(f,v(o==="VT200")):f===1002?p(f,v(o==="DRAG")):f===1003?p(f,v(o==="ANY")):f===1004?p(f,v(s.sendFocus)):f===1005?p(f,4):f===1006?p(f,v(a==="SGR")):f===1015?p(f,4):f===1016?p(f,v(a==="SGR_PIXELS")):f===1048?p(f,1):f===47||f===1047||f===1049?p(f,v(c===u)):f===2004?p(f,v(s.bracketedPasteMode)):f===2026?p(f,v(s.synchronizedOutput)):f===9001&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?p(f,v(s.win32InputMode)):p(f,0)}_updateAttrColor(e,t,r,s,o){return t===2?(e|=50331648,e&=-16777216,e|=ue.fromColorRGB([r,s,o])):t===5&&(e&=-67108864,e|=33554432|r&255),e}_extractColor(e,t,r){let s=[0,0,-1,0,0,0],o=0,a=0;do{if(s[a+o]=e.params[t+a],e.hasSubParams(t+a)){let l=e.getSubParams(t+a),h=0;do s[1]===5&&(o=1),s[a+h+1+o]=l[h];while(++h=2||s[1]===2&&a+o>=5)break;s[1]&&(o=1)}while(++a+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,e===0&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=U.fg,e.bg=U.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let t=e.length,r,s=this._curAttrData;for(let o=0;o=30&&r<=37?(s.fg&=-67108864,s.fg|=16777216|r-30):r>=40&&r<=47?(s.bg&=-67108864,s.bg|=16777216|r-40):r>=90&&r<=97?(s.fg&=-67108864,s.fg|=16777216|r-90|8):r>=100&&r<=107?(s.bg&=-67108864,s.bg|=16777216|r-100|8):r===0?this._processSGR0(s):r===1?s.fg|=134217728:r===3?s.bg|=67108864:r===4?(s.fg|=268435456,this._processUnderline(e.hasSubParams(o)?e.getSubParams(o)[0]:1,s)):r===5?s.fg|=536870912:r===7?s.fg|=67108864:r===8?s.fg|=1073741824:r===9?s.fg|=2147483648:r===2?s.bg|=134217728:r===21?this._processUnderline(2,s):r===22?(s.fg&=-134217729,s.bg&=-134217729):r===23?s.bg&=-67108865:r===24?(s.fg&=-268435457,this._processUnderline(0,s)):r===25?s.fg&=-536870913:r===27?s.fg&=-67108865:r===28?s.fg&=-1073741825:r===29?s.fg&=2147483647:r===39?(s.fg&=-67108864,s.fg|=U.fg&16777215):r===49?(s.bg&=-67108864,s.bg|=U.bg&16777215):r===38||r===48||r===58?o+=this._extractColor(e,o,s):r===53?s.bg|=1073741824:r===55?s.bg&=-1073741825:r===221&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.fg&=-134217729:r===222&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.bg&=-134217729:r===59?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",r);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("\x1B[0n");break;case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[${t};${r}R`);break}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[?${t};${r}R`);break;case 15:break;case 25:break;case 26:break;case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??!0)&&this._onRequestColorSchemeQuery.fire();break}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=U.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let t=e.length===0?1:e.params[0];if(t===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar";break}let r=t%2===1;this._coreService.decPrivateModes.cursorBlink=r}return!0}setScrollRegion(e){let t=e.params[0]||1,r;return(e.length<2||(r=e.params[1])>this._bufferService.rows||r===0)&&(r=this._bufferService.rows),r>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=r-1,this._setCursor(0,0)),!0}windowOptions(e){if(!En(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:t!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`\x1B[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(t===0||t===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),(t===0||t===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:(t===0||t===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(t===0||t===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop());break}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let t=0;t1;){let s=r.shift(),o=r.shift();if(/^\d+$/.exec(s)){let a=parseInt(s,10);if(xn(a))if(o==="?")t.push({type:0,index:a});else{let l=Es(o);l&&t.push({type:1,index:a,color:l})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){let t=e.indexOf(";");if(t===-1)return!0;let r=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(r,s):r.trim()?!1:this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();let r=e.split(":"),s,o=r.findIndex(a=>a.startsWith("id="));return o!==-1&&(s=r[o].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){let r=e.split(";");for(let s=0;s=this._specialColors.length);++s,++t)if(r[s]==="?")this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{let o=Es(r[s]);o&&this._onColor.fire([{type:1,index:this._specialColors[t],color:o}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let t=[],r=e.split(";");for(let s=0;s=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=U.clone(),this._eraseAttrDataInternal=U.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new F;e.content=1<<22|69,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`\x1B${l}\x1B\\`),!0),s=this._bufferService.buffer,o=this._optionsService.rawOptions,a={block:2,underline:4,bar:6};return r(e==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:e==='"p'?'P1$r61;1"p':e==="r"?`P1$r${s.scrollTop+1};${s.scrollBottom+1}r`:e==="m"?"P1$r0m":e===" q"?`P1$r${a[o.cursorStyle]-(o.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(r){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t;break}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`\x1B[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;return o.length>=16&&o.shift(),o.push(r.flags),r.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=Math.max(1,e.params[0]||1),r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;for(let a=0;a0;a++)r.flags=o.pop();return o.length===0&&t>0&&(r.flags=0),!0}},hi=class{constructor(i){this._bufferService=i;this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(i){ithis.end&&(this.end=i)}markRangeDirty(i,e){i>e&&(yn=i,i=e,e=yn),ithis.end&&(this.end=e)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};hi=y([m(0,D)],hi);function xn(n){return 0<=n&&n<256}var mr=class extends g{constructor(e){super();this._action=e;this._writeBuffer=[];this._callbacks=[];this._pendingData=0;this._bufferOffset=0;this._isSyncWriting=!1;this._syncCalls=0;this._didUserInput=!1;this._innerWriteTimer=this._register(new Ie);this._onWriteParsed=this._register(new b);this.onWriteParsed=this._onWriteParsed.event;this._register(E(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed||this._isSyncWriting)return;this._isSyncWriting=!0;let e,t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);let r=this._callbacks.shift();r&&r()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(t!==void 0&&this._syncCalls>t){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let r;for(;r=this._writeBuffer.shift();){this._action(r);let s=this._callbacks.shift();s&&s()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),this._innerWrite();return}this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;let r=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let s=this._writeBuffer[this._bufferOffset],o=this._action(s,t);if(o){let l=h=>{this._store.isDisposed||(performance.now()-r>=12?this._scheduleInnerWrite(0,h):this._innerWrite(r,h))};o.catch(h=>(queueMicrotask(()=>{throw h}),Promise.resolve(!1))).then(l);return}let a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=s.length,performance.now()-r>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}};var Mt=class{constructor(i){this._bufferService=i;this._nextId=1;this._entriesWithId=new Map;this._dataByLinkId=new Map}registerLink(i){let e=this._bufferService.buffer;if(i.id===void 0){let l=e.addMarker(e.ybase+e.y),h={data:i,id:this._nextId++,lines:[l]};return l.onDispose(()=>this._removeMarkerFromLink(h,l)),this._dataByLinkId.set(h.id,h),h.id}let t=i,r=this._getEntryIdKey(t),s=this._entriesWithId.get(r);if(s)return this.addLineToLink(s.id,e.ybase+e.y),s.id;let o=e.addMarker(e.ybase+e.y),a={id:this._nextId++,key:this._getEntryIdKey(t),data:t,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(a,o)),this._entriesWithId.set(a.key,a),this._dataByLinkId.set(a.id,a),a.id}addLineToLink(i,e){let t=this._dataByLinkId.get(i);if(t&&t.lines.every(r=>r.line!==e)){let r=this._bufferService.buffer.addMarker(e);t.lines.push(r),r.onDispose(()=>this._removeMarkerFromLink(t,r))}}getLinkData(i){return this._dataByLinkId.get(i)?.data}_getEntryIdKey(i){return`${i.id};;${i.uri}`}_removeMarkerFromLink(i,e){let t=i.lines.indexOf(e);t!==-1&&(i.lines.splice(t,1),i.lines.length===0&&(i.data.id!==void 0&&this._entriesWithId.delete(i.key),this._dataByLinkId.delete(i.id)))}};Mt=y([m(0,D)],Mt);var wn=!1,br=class extends g{constructor(e){super();this._windowsWrappingHeuristics=this._register(new B);this._onBinary=this._register(new b);this.onBinary=this._onBinary.event;this._onData=this._register(new b);this.onData=this._onData.event;this._onLineFeed=this._register(new b);this.onLineFeed=this._onLineFeed.event;this._onRender=this._register(new b);this.onRender=this._onRender.event;this._onResize=this._register(new b);this.onResize=this._onResize.event;this._onWriteParsed=this._register(new b);this.onWriteParsed=this._onWriteParsed.event;this._onScroll=this._register(new b);this._instantiationService=new Ji,this.optionsService=this._register(new rr(e)),this._instantiationService.setService(R,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(wt)),this._instantiationService.setService(fe,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(Rt)),this._instantiationService.setService(D,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(At)),this._instantiationService.setService(Y,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(sr)),this._instantiationService.setService(Me,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(me)),this.unicodeService.register(new nr),this._instantiationService.setService(Ws,this.unicodeService),this._charsetService=this._instantiationService.createInstance(or),this._instantiationService.setService(Hs,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(Mt),this._instantiationService.setService(vi,this._oscLinkService),this._inputHandler=this._register(new pr(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(j.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(j.forward(this._bufferService.onResize,this._onResize)),this._register(j.forward(this.coreService.onData,this._onData)),this._register(j.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new mr((t,r)=>this._inputHandler.parse(t,r))),this._register(j.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new b),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let t in e)this.optionsService.options[t]=e[t]}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=3&&!wn&&(this._logService.warn("writeSync is unreliable and will be removed soon."),wn=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1,t=this.optionsService.rawOptions.windowsPty;t&&t.backend!==void 0&&t.buildNumber!==void 0&&(e=t.backend==="conpty"&&t.buildNumber<21376),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Ss.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>(Ss(this._bufferService),!1))),this._windowsWrappingHeuristics.value=E(()=>{for(let t of e)t.dispose()})}}};var z=0,vr=class{constructor(i,e){this._getKey=i;this._array=[];this._insertedValues=[];this._isFlushingInserted=!1;this._deletedIndices=[];this._isFlushingDeleted=!1;this._flushInsertedTask=new It(e),this._flushDeletedTask=new It(e)}clear(){this._array.length=0,this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.length=0,this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(i){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(i)}_flushInserted(){let i=this._insertedValues.sort((s,o)=>this._getKey(s)-this._getKey(o)),e=0,t=0,r=new Array(this._array.length+this._insertedValues.length);for(let s=0;s=this._array.length||this._getKey(i[e])<=this._getKey(this._array[t])?(r[s]=i[e],e++):r[s]=this._array[t++];this._array=r,this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}delete(i){if(this._flushCleanupInserted(),this._array.length===0)return!1;let e=this._getKey(i);if(e===void 0||(z=this._search(e),z===-1)||this._getKey(this._array[z])!==e)return!1;do if(this._array[z]===i)return this._deletedIndices.length===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.push(z),!0;while(++zs-o),e=0,t=new Array(this._array.length-i.length),r=0;for(let s=0;s0&&this._flushDeletedTask.flush()}*getKeyIterator(i){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(z=this._search(i),!(z<0||z>=this._array.length)&&this._getKey(this._array[z])===i))do yield this._array[z];while(++z=this._array.length)&&this._getKey(this._array[z])===i))do e(this._array[z]);while(++z=e;){let r=e+t>>1,s=this._getKey(this._array[r]);if(s>i)t=r-1;else if(s0&&this._getKey(this._array[r-1])===i;)r--;return r}}return e}};var Pt=0,Sr=0,Bt=class extends g{constructor(e,t){super();this._logService=e;this._bufferService=t;this._lineCache=this._register(new ys);this._onDecorationRegistered=this._register(new b);this.onDecorationRegistered=this._onDecorationRegistered.event;this._onDecorationRemoved=this._register(new b);this.onDecorationRemoved=this._onDecorationRemoved.event;this._decorations=new vr(r=>r?.marker.line,this._logService),this._register(E(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let t=new xs(e);if(t){let r=t.marker.onDispose(()=>t.dispose()),s=t.onDispose(()=>{s.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),r.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,r){let s=this._lineCache.getDecorationsOnLine(t);if(s)for(let o of s)Pt=o.options.x??0,Sr=Pt+(o.options.width??1),e>=Pt&&e=Pt&&ethis._handleBufferLinesTrim(r))),t.add(e.onInsert(r=>this._handleBufferLinesInsert(r))),t.add(e.onDelete(r=>this._handleBufferLinesDelete(r)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){let t=e.marker.line;if(t<0)return;e._indexedStartLine=t;let r=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{let t=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(let r of t)r()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;let t=new Map;for(let[r,s]of this._decorationsByLine){let o=r-e;o<0||this._mergeLineBucket(t,o,s)}this._decorationsByLine.clear();for(let[r,s]of t)this._decorationsByLine.set(r,s);for(let r of this._decorations)r.marker.isDisposed||(r._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,r){let s=e.get(t);if(s)for(let o=0,a=r.length;ot&&(s.push(a),this._removeFromLineBuckets(a))}let o=new Map;for(let[a,l]of this._decorationsByLine){let h=a>=t?a+r:a;this._mergeLineBucket(o,h,l)}this._decorationsByLine.clear();for(let[a,l]of o)this._decorationsByLine.set(a,l);for(let a of this._decorations)a.marker.isDisposed||a._indexedStartLine>=t&&(a._indexedStartLine=a.marker.line);for(let a of s)this._addToLineBuckets(a)}_applyBufferLinesDelete(e){let t=e.index+e.amount,r=new Map;for(let[o,a]of this._decorationsByLine){if(o>=e.index&&o=t?o-e.amount:o;this._mergeLineBucket(r,l,a)}this._decorationsByLine.clear();for(let[o,a]of r)this._decorationsByLine.set(o,a);let s=[];for(let o of this._decorations){if(o.marker.isDisposed)continue;let a=o._indexedStartLine,l=this._getDecorationHeight(o);a>=t?o._indexedStartLine=o.marker.line:at&&s.push(o)}for(let o of s)this._reindexDecoration(o)}},xs=class extends pe{constructor(e){super();this.options=e;this.onRenderEmitter=this.add(new b);this.onRender=this.onRenderEmitter.event;this._onDispose=this.add(new b);this.onDispose=this._onDispose.event;this._cachedBg=null;this._cachedFg=null;this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}get backgroundColorRGB(){return this._cachedBg===null&&(this.options.backgroundColor?this._cachedBg=P.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return this._cachedFg===null&&(this.options.foregroundColor?this._cachedFg=P.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}dispose(){this._onDispose.fire(),super.dispose()}};var Co=1e3,gr=class{constructor(i,e=Co){this._renderCallback=i;this._debounceThresholdMS=e;this._lastRefreshMs=0;this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e;let r=performance.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._refreshTimeoutID!==void 0&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let s=r-this._lastRefreshMs,o=this._debounceThresholdMS-s;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},o)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e)}};var Tn=!1,Ye=class extends g{constructor(e,t,r,s){super();this._terminal=e;this._coreBrowserService=r;this._renderService=s;this._rowColumns=new WeakMap;this._liveRegionLineCount=0;this._charsToConsume=[];this._charsToAnnounce="";let o=this._coreBrowserService.mainDocument;this._accessibilityContainer=o.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=o.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let a=0;athis._handleBoundaryFocus(a,0),this._bottomBoundaryFocusListener=a=>this._handleBoundaryFocus(a,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=o.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new gr(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");Tn?(this._accessibilityContainer.classList.add("debug"),this._rowContainer.classList.add("debug"),this._debugRootContainer=o.createElement("div"),this._debugRootContainer.classList.add("xterm"),this._debugRootContainer.appendChild(o.createTextNode("------start a11y------")),this._debugRootContainer.appendChild(this._accessibilityContainer),this._debugRootContainer.appendChild(o.createTextNode("------end a11y------")),this._terminal.element.insertAdjacentElement("afterend",this._debugRootContainer)):this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(a=>this._handleResize(a.rows))),this._register(this._terminal.onRender(a=>this._refreshRows(a.start,a.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(a=>this._handleChar(a))),this._register(this._terminal.onLineFeed(()=>this._handleChar(` -`))),this._register(this._terminal.onA11yTab(a=>this._handleTab(a))),this._register(this._terminal.onKey(a=>this._handleKey(a.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(C(o,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(E(()=>{Tn?this._debugRootContainer.remove():this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===` --`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent=Ze.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let r=this._terminal.buffer,s=r.lines.length.toString();for(let o=e;o<=t;o++){let a=r.lines.get(r.ydisp+o),l=[],h=a?.translateToString(!0,void 0,void 0,l)||"",d=(r.ydisp+o+1).toString(),c=this._rowElements[o];c&&(h.length===0?(c.textContent="\xA0",this._rowColumns.set(c,[0,1])):(c.textContent=h,this._rowColumns.set(c,l)),c.setAttribute("aria-posinset",d),c.setAttribute("aria-setsize",s),this._alignRowWidth(c))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent===Ze.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){let r=e.target,s=this._rowElements[t===0?1:this._rowElements.length-2],o=r.getAttribute("aria-posinset"),a=t===0?"1":`${this._terminal.buffer.lines.length}`;if(o===a||e.relatedTarget!==s)return;let l,h;if(t===0?(l=r,h=this._rowElements.pop(),this._rowContainer.removeChild(h)):(l=this._rowElements.shift(),h=r,this._rowContainer.removeChild(l)),l.removeEventListener("focus",this._topBoundaryFocusListener),h.removeEventListener("focus",this._bottomBoundaryFocusListener),t===0){let d=this._createAccessibilityTreeNode();this._rowElements.unshift(d),this._rowContainer.insertAdjacentElement("afterbegin",d)}else{let d=this._createAccessibilityTreeNode();this._rowElements.push(d),this._rowContainer.appendChild(d)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error("anchorNode and/or focusNode are null");return}let t={node:e.anchorNode,offset:e.anchorOffset},r={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(r.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===r.node&&t.offset>r.offset)&&([t,r]=[r,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let s=this._rowElements.slice(-1)[0];if(r.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(r={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(r.node))return;let o=({node:h,offset:d})=>{let c=h instanceof Text?h.parentNode:h,u=parseInt(c?.getAttribute("aria-posinset"),10)-1;if(isNaN(u))return console.warn("row is invalid. Race condition?"),null;let _=this._rowColumns.get(c);if(!_)return console.warn("columns is null. Race condition?"),null;let p=d<_.length?_[d]:_.slice(-1)[0]+1;return p>=this._terminal.cols&&(++u,p=0),{row:u,column:p}},a=o(t),l=o(r);if(!(!a||!l)){if(a.row>l.row||a.row===l.row&&a.column>=l.column)throw new Error("invalid range");this._terminal.select(a.column,a.row,(l.row-a.row)*this._terminal.cols-a.column+l.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let t=this._rowContainer.children.length;te;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{Oe(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(C(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(C(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register(C(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register(C(this._element,"mouseup",this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;let r=e.composedPath();for(let s=0;s{s?.forEach(o=>{o.link.dispose&&o.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let r=!1;for(let[s,o]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(s)&&(r=this._checkLinkProviderResult(s,e,r)):o.provideLinks(e.y,a=>{if(this._isMouseOut)return;let l=a?.map(h=>({link:h}));this._activeProviderReplies?.set(s,l),r=this._checkLinkProviderResult(s,e,r),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let r=new Set;for(let s=0;se?this._bufferService.cols:l.link.range.end.x;for(let c=h;c<=d;c++){if(r.has(c)){o.splice(a--,1);break}r.add(c)}}}}_checkLinkProviderResult(e,t,r){if(!this._activeProviderReplies)return r;let s=this._activeProviderReplies.get(e),o=!1;for(let a=0;athis._linkAtPosition(l.link,t));a&&(r=!0,this._handleNewLink(a))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!r)for(let a=0;athis._linkAtPosition(h.link,t));if(l){r=!0,this._handleNewLink(l);break}}return r}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element);t&&this._mouseDownLink&&Eo(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,Oe(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0?!0:e.link.decorations.underline,pointerCursor:e.link.decorations===void 0?!0:e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:r=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==r&&(this._currentLink.state.decorations.pointerCursor=r,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",r))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:r=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==r&&(this._currentLink.state.decorations.underline=r,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,r))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(r=>{if(!this._currentLink)return;let s=r.start===0?0:r.start+1+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.ydisp+1+r.end;if(this._currentLink.link.range.start.y>=s&&this._currentLink.link.range.end.y<=o&&(this._clearCurrentLink(s,o),this._lastMouseEvent)){let a=this._positionFromMouseEvent(this._lastMouseEvent,this._element);a&&this._askForLink(a,!1)}})))}_linkHover(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)}_fireUnderlineEvent(e,t){let r=e.range,s=this._bufferService.buffer.ydisp,o=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-s-1,r.end.x,r.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(o)}_linkLeave(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)}_linkAtPosition(e,t){let r=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,o=t.y*this._bufferService.cols+t.x;return r<=o&&o<=s}_positionFromMouseEvent(e,t){let r=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,r,s,o){return{x1:e,y1:t,x2:r,y2:s,cols:this._bufferService.cols,fg:o}}};Bt=y([m(1,Be),m(2,V),m(3,D),m(4,gi)],Bt);function Eo(n,i){return n.text===i.text&&n.range.start.x===i.range.start.x&&n.range.start.y===i.range.start.y&&n.range.end.x===i.range.end.x&&n.range.end.y===i.range.end.y}var gr=class extends mr{constructor(e={}){super(e);this._linkifier=this._register(new B);this.browser=Ke;this._keyDownHandled=!1;this._keyDownSeen=!1;this._keyPressHandled=!1;this._unprocessedDeadKey=!1;this._accessibilityManager=this._register(new B);this._onCursorMove=this._register(new b);this.onCursorMove=this._onCursorMove.event;this._onKey=this._register(new b);this.onKey=this._onKey.event;this._onSelectionChange=this._register(new b);this.onSelectionChange=this._onSelectionChange.event;this._onTitleChange=this._register(new b);this.onTitleChange=this._onTitleChange.event;this._onBell=this._register(new b);this.onBell=this._onBell.event;this._onFocus=this._register(new b);this._onBlur=this._register(new b);this._onA11yCharEmitter=this._register(new b);this._onA11yTabEmitter=this._register(new b);this._onWillOpen=this._register(new b);this._onDimensionsChange=this._register(new b);this.onDimensionsChange=this._onDimensionsChange.event;this._setup(),this._decorationService=this._instantiationService.createInstance(Pt),this._instantiationService.setService(ge,this._decorationService),this._keyboardService=this._instantiationService.createInstance(xt),this._instantiationService.setService(Ks,this._keyboardService),this._linkProviderService=this._instantiationService.createInstance(Ki),this._instantiationService.setService(gi,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(et)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(t=>this.refresh(t?.start??0,t?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(t=>this._reportWindowsOptions(t))),this._register(this._inputHandler.onColor(t=>this._handleColorEvent(t))),this._register(j.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(j.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(j.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(j.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(t=>this._afterResize(t.cols,t.rows))),this._register(E(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}get dimensions(){if(!this._renderService)return;let e=this._renderService.dimensions;return{css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}}_handleColorEvent(e){if(this._themeService)for(let t of e){let r,s;switch(t.index){case 256:r="foreground",s="10";break;case 257:r="background",s="11";break;case 258:r="cursor",s="12";break;default:r="ansi",s="4;"+t.index}switch(t.type){case 0:let o=k.toColorRGB(r==="ansi"?this._themeService.colors.ansi[t.index]:this._themeService.colors[r]);this.coreService.triggerDataEvent(`\x1B]${s};${In(o)}\x1B\\`);break;case 1:if(r==="ansi")this._themeService.modifyColors(a=>a.ansi[t.index]=O.toColor(...t.color));else{let a=r;this._themeService.modifyColors(l=>l[a]=O.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index);break}}}_reportColorScheme(){if(!this._themeService)return;let e=Z.relativeLuminance(this._themeService.colors.background.rgba>>8),t=Z.relativeLuminance(this._themeService.colors.foreground.rgba>>8),r=e{this.hasSelection()&&Bs(t,this._selectionService)}));let e=t=>Os(t,this.textarea,this.coreService,this.optionsService);this._register(C(this.textarea,"paste",e)),this._register(C(this.element,"paste",e)),nt?this._register(C(this.element,"mousedown",t=>{t.button===2&&Or(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(C(this.element,"contextmenu",t=>{Or(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),zt&&this._register(C(this.element,"auxclick",t=>{t.button===1&&Br(t,this.textarea,this.screenElement)}))}_bindKeys(){this._register(C(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register(C(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register(C(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register(C(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register(C(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register(C(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this._register(C(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",l=>this.element.classList.toggle("allow-transparency",l))),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register(C(this.screenElement,"mousemove",l=>this.updateCursorStyle(l))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let r=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",Ut.get()),$r||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>r.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(Ui,this.textarea,e.ownerDocument.defaultView??window,this._document??(typeof window<"u"?window.document:null))),this._instantiationService.setService(G,this._coreBrowserService),this._register(C(this.textarea,"focus",l=>this._handleTextAreaFocus(l))),this._register(C(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(bt,this._document,this._helperContainer),this._instantiationService.setService(Pe,this._charSizeService),this._themeService=this._instantiationService.createInstance(yt),this._instantiationService.setService(_e,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(He),this._instantiationService.setService(Si,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(Ct,this.rows,this.screenElement)),this._instantiationService.setService(V,this._renderService),this._register(this._renderService.onRenderedViewportChange(l=>this._onRender.fire(l))),this._register(this._renderService.onDimensionsChange(l=>this._onDimensionsChange.fire({css:{canvas:{...l.css.canvas},cell:{...l.css.cell}},device:{canvas:{...l.device.canvas},cell:{...l.device.cell},char:{...l.device.char}}}))),this.onResize(l=>this._renderService.resize(l.cols,l.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(ft,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(vt),this._instantiationService.setService(Be,this._mouseCoordsService);let s=this._linkifier.value=this._register(this._instantiationService.createInstance(Bt,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(l){this._logService.error("onWillOpen handler threw an exception",l)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(dt,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(l=>{super.scrollLines(l,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(Et,this.element,this.screenElement,s)),this._instantiationService.setService(vi,this._selectionService),this._mouseService=this._instantiationService.createInstance(gt),this._instantiationService.setService(Us,this._mouseService),this._register(this._selectionService.onRequestScrollLines(l=>this.scrollLines(l.amount,l.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(l=>this._renderService.handleSelectionChanged(l.start,l.end,l.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(l=>{this.textarea.value=l,this.textarea.focus(),this.textarea.select()})),this._register(j.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(ut,this.screenElement)),this._register(C(this.element,"mousedown",l=>this._selectionService.handleMouseDown(l))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(Ye,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",l=>this._handleScreenReaderModeOptionChange(l)));let o=this.options.scrollbar?.showScrollbar??!0,a=this.options.scrollbar?.width;o&&a&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ze,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",l=>{let h=(l?.showScrollbar??!0)&&!!l?.width;!this._overviewRulerRenderer&&h&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ze,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:l=>this._viewport?.handleTouchScroll(l)},l=>this._register(l),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(mt,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,r=!1){this._renderService?.refreshRows(e,t,r)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){Pr(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,r){this._selectionService.setSelection(e,t,r)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(!(!this._selectionService||!this._selectionService.hasSelection))return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;!t&&(e.key==="Dead"||e.key==="AltGraph")&&(this._unprocessedDeadKey=!0);let r=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),r.type===3||r.type===2){let o=this.rows-1;return this.scrollLines(r.type===2?-o:o),e.preventDefault(),e.stopPropagation(),!1}if(r.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(r.cancel&&(e.preventDefault(),e.stopPropagation()),!r.key)||!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;(r.key===""||r.key==="\r")&&(this.textarea.value="");let s=this._keyboardService.useWin32InputMode&&ws(e);if(this._onKey.fire({key:r.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(r.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){let r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return t.type==="keypress"?r:r&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return;ws(e)||this.focus();let t=this._keyboardService.evaluateKeyUp(e);if(t?.key){let r=this._keyboardService.useWin32InputMode&&ws(e);this.coreService.triggerDataEvent(t.key,!r)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType==="insertText"&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){if(e===this.cols&&t===this.rows){this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure();return}super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e=0;i--)this._addons[i].instance.dispose()}loadAddon(i,e){let t={instance:e,dispose:e.dispose,isDisposed:!1};this._addons.push(t),e.dispose=()=>this._wrappedAddonDispose(t),e.activate(i)}_wrappedAddonDispose(i){if(i.isDisposed)return;let e=-1;for(let t=0;t=this._line.length))return e?(this._line.loadCell(i,e),e):this._line.loadCell(i,new F)}translateToString(i,e,t){return this._line.translateToString(i,e,t)}};var hi=class{constructor(i,e){this._buffer=i;this.type=e}init(i){return this._buffer=i,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(i){let e=this._buffer.lines.get(i);if(e)return new Cr(e)}getNullCell(){return new F}};var Er=class extends g{constructor(e){super();this._core=e;this._onBufferChange=this._register(new b);this.onBufferChange=this._onBufferChange.event;this._normal=new hi(this._core.buffers.normal,"normal"),this._alternate=new hi(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}};var yr=class{constructor(i){this._core=i}registerCsiHandler(i,e){return this._core.registerCsiHandler(i,t=>e(t.toArray()))}addCsiHandler(i,e){return this.registerCsiHandler(i,e)}registerDcsHandler(i,e){return this._core.registerDcsHandler(i,(t,r)=>e(t,r.toArray()))}addDcsHandler(i,e){return this.registerDcsHandler(i,e)}registerEscHandler(i,e){return this._core.registerEscHandler(i,e)}addEscHandler(i,e){return this.registerEscHandler(i,e)}registerOscHandler(i,e){return this._core.registerOscHandler(i,e)}addOscHandler(i,e){return this.registerOscHandler(i,e)}registerApcHandler(i,e){return this._core.registerApcHandler(i,e)}};var xr=class{constructor(i){this._core=i}register(i){this._core.unicodeService.register(i)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(i){this._core.unicodeService.activeVersion=i}};var yo=["cols","rows"],Ee=0,Dn=class extends g{constructor(i){super(),this._core=this._register(new gr(i)),this._addonManager=this._register(new Ir),this._publicOptions={...this._core.options};let e=r=>this._core.options[r],t=(r,s)=>{this._checkReadonlyOptions(r),this._core.options[r]=s};for(let r in this._core.options){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this._publicOptions,r,s)}}_checkReadonlyOptions(i){if(yo.includes(i))throw new Error(`Option "${i}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new yr(this._core)}get unicode(){return this._checkProposedApi(),new xr(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new Er(this._core))}get markers(){return this._core.markers}get modes(){let i=this._core.coreService.decPrivateModes,e="none";switch(this._core.mouseStateService.activeProtocol){case"X10":e="x10";break;case"VT200":e="vt200";break;case"DRAG":e="drag";break;case"ANY":e="any";break}return{applicationCursorKeysMode:i.applicationCursorKeys,applicationKeypadMode:i.applicationKeypad,bracketedPasteMode:i.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:e,originMode:i.origin,reverseWraparoundMode:i.reverseWraparound,sendFocusMode:i.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:i.synchronizedOutput,win32InputMode:i.win32InputMode,wraparoundMode:i.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(i){for(let e in i)this._publicOptions[e]=i[e]}blur(){this._core.blur()}focus(){this._core.focus()}input(i,e=!0){this._core.input(i,e)}resize(i,e){this._verifyIntegers(i,e),this._core.resize(i,e)}open(i){this._core.open(i)}attachCustomKeyEventHandler(i){this._core.attachCustomKeyEventHandler(i)}attachCustomWheelEventHandler(i){this._core.attachCustomWheelEventHandler(i)}registerLinkProvider(i){return this._core.registerLinkProvider(i)}registerCharacterJoiner(i){return this._core.registerCharacterJoiner(i)}deregisterCharacterJoiner(i){this._core.deregisterCharacterJoiner(i)}registerMarker(i=0){return this._verifyIntegers(i),this._core.registerMarker(i)}registerDecoration(i){return this._verifyPositiveIntegers(i.x??0,i.width??0,i.height??0),this._core.registerDecoration(i)}hasSelection(){return this._core.hasSelection()}select(i,e,t){this._verifyIntegers(i,e,t),this._core.select(i,e,t)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(i,e){this._verifyIntegers(i,e),this._core.selectLines(i,e)}dispose(){super.dispose()}scrollLines(i){this._verifyIntegers(i),this._core.scrollLines(i)}scrollPages(i){this._verifyIntegers(i),this._core.scrollPages(i)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(i){this._verifyIntegers(i),this._core.scrollToLine(i)}clear(){this._core.clear()}write(i,e){this._core.write(i,e)}writeln(i,e){this._core.write(i),this._core.write(`\r --`,e)}paste(i){this._core.paste(i)}refresh(i,e){this._verifyIntegers(i,e),this._core.refresh(i,e)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(i){this._addonManager.loadAddon(this,i)}static get strings(){return{get promptLabel(){return Ut.get()},set promptLabel(i){Ut.set(i)},get tooMuchOutput(){return Ze.get()},set tooMuchOutput(i){Ze.set(i)}}}_verifyIntegers(...i){for(Ee of i)if(Ee===1/0||isNaN(Ee)||Ee%1!==0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...i){for(Ee of i)if(Ee&&(Ee===1/0||isNaN(Ee)||Ee%1!==0||Ee<0))throw new Error("This API only accepts positive integers")}};export{Dn as Terminal}; -+`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),zt&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s||!t?!1:this._areCoordsInSelection(t,r,s)}isCellInSelection(e,t){let r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s?!1:this._areCoordsInSelection([e,t],r,s)}_areCoordsInSelection(e,t,r){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){let r=this._linkifier.currentLink?.link?.range;if(r)return this._model.selectionStart=[r.start.x-1,r.start.y-1],this._model.selectionStartLength=us(r,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let s=this._getMouseBufferCoords(e);return s?(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=Xt(this._coreBrowserService.window,e,this._screenElement)[1],r=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(t*14))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:te?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0&&!(this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){let t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);let r=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);r&&r.length!==this._model.selectionStart[0]&&r.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!1:e.altKey&&!(te&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let r=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){let r=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&r[0]!==void 0&&r[1]!==void 0){let s=tn(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(s,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!!e&&!!t&&(e[0]!==t[0]||e[1]!==t[1]);if(!r){this._oldHasSelection&&this._fireOnSelectionChange(e,t,r);return}!e||!t||(!this._oldSelectionStart||!this._oldSelectionEnd||e[0]!==this._oldSelectionStart[0]||e[1]!==this._oldSelectionStart[1]||t[0]!==this._oldSelectionEnd[0]||t[1]!==this._oldSelectionEnd[1])&&this._fireOnSelectionChange(e,t,r)}_fireOnSelectionChange(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(t=>this._handleTrim(t))}_convertViewportColToCharacterIndex(e,t){let r=t;for(let s=0;t>=s;s++){let o=e.loadCell(s,this._workCell).getChars().length;this._workCell.getWidth()===0?r--:o>1&&t!==s&&(r+=o-1)}return r}setSelection(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,r=!0,s=!0){if(e[0]>=this._bufferService.cols)return;let o=this._bufferService.buffer,a=o.lines.get(e[1]);if(!a)return;let l=o.translateBufferLineToString(e[1],!1),h=this._convertViewportColToCharacterIndex(a,e[0]),d=h,c=e[0]-h,u=0,f=0,p=0,b=0;if(l.charAt(h)===" "){for(;h>0&&l.charAt(h-1)===" ";)h--;for(;d1&&(b+=A-1,d+=A-1);C>0&&h>0&&!this._isCharWordSeparator(a.loadCell(C-1,this._workCell));){a.loadCell(C-1,this._workCell);let T=this._workCell.getChars().length;this._workCell.getWidth()===0?(u++,C--):T>1&&(p+=T-1,h-=T-1),h--,C--}for(;w1&&(b+=T-1,d+=T-1),d++,w++}}d++;let _=h+c-u+p,S=Math.min(this._bufferService.cols,d-h+u+f-p-b);if(!(!t&&l.slice(h,d).trim()==="")){if(r&&_===0&&a.getCodePoint(0)!==32){let C=o.lines.get(e[1]-1);if(C&&a.isWrapped&&C.getCodePoint(this._bufferService.cols-1)!==32){let w=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(w){let A=this._bufferService.cols-w.start;_-=A,S+=A}}}if(s&&_+S===this._bufferService.cols&&a.getCodePoint(this._bufferService.cols-1)!==32){let C=o.lines.get(e[1]+1);if(C?.isWrapped&&C.getCodePoint(0)!==32){let w=this._getWordAt([0,e[1]+1],!1,!1,!0);w&&(S+=w.length)}}return{start:_,length:S}}}_selectWordAt(e,t){let r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}}_selectToWordAt(e){let t=this._getWordAt(e,!0);if(t){let r=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}}_isCharWordSeparator(e){return e.getWidth()===0?!1:this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let t=this._bufferService.buffer.getWrappedRangeForLine(e),r={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=us(r,this._bufferService.cols)}};Et=y([m(3,D),m(4,X),m(5,Oe),m(6,R),m(7,Me),m(8,G),m(9,z)],Et);var Jt=class{constructor(){this._data={}}set(i,e,t){this._data[i]||(this._data[i]={}),this._data[i][e]=t}get(i,e){return this._data[i]?this._data[i][e]:void 0}clear(){this._data={}}};var Zt=class{constructor(){this._color=new Jt;this._css=new Jt}setCss(i,e,t){this._css.set(i,e,t)}getCss(i,e){return this._css.get(i,e)}setColor(i,e,t){this._color.set(i,e,t)}getColor(i,e){return this._color.get(i,e)}clear(){this._color.clear(),this._css.clear()}};var V=Object.freeze((()=>{let n=[M.toColor("#2e3436"),M.toColor("#cc0000"),M.toColor("#4e9a06"),M.toColor("#c4a000"),M.toColor("#3465a4"),M.toColor("#75507b"),M.toColor("#06989a"),M.toColor("#d3d7cf"),M.toColor("#555753"),M.toColor("#ef2929"),M.toColor("#8ae234"),M.toColor("#fce94f"),M.toColor("#729fcf"),M.toColor("#ad7fa8"),M.toColor("#34e2e2"),M.toColor("#eeeeec")],i=[0,95,135,175,215,255];for(let e=0;e<216;e++){let t=i[e/36%6|0],r=i[e/6%6|0],s=i[e%6];n.push({css:O.toCss(t,r,s),rgba:O.toRgba(t,r,s)})}for(let e=0;e<24;e++){let t=8+e*10;n.push({css:O.toCss(t,t,t),rgba:O.toRgba(t,t,t)})}return n})());var Xe=M.toColor("#ffffff"),ei=M.toColor("#000000"),nn=M.toColor("#ffffff"),on=ei,Qt={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},po=Xe,yt=class extends g{constructor(e){super();this._optionsService=e;this._contrastCache=new Zt;this._halfContrastCache=new Zt;this._onChangeColors=this._register(new v);this.onChangeColors=this._onChangeColors.event;this._colors={foreground:Xe,background:ei,cursor:nn,cursorAccent:on,selectionForeground:void 0,selectionBackgroundTransparent:Qt,selectionBackgroundOpaque:L.blend(ei,Qt),selectionInactiveBackgroundTransparent:Qt,selectionInactiveBackgroundOpaque:L.blend(ei,Qt),scrollbarSliderBackground:L.opacity(Xe,.2),scrollbarSliderHoverBackground:L.opacity(Xe,.4),scrollbarSliderActiveBackground:L.opacity(Xe,.5),overviewRulerBorder:Xe,ansi:V.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let t=this._colors;if(t.foreground=P(e.foreground,Xe),t.background=P(e.background,ei),t.cursor=L.blend(t.background,P(e.cursor,nn)),t.cursorAccent=L.blend(t.background,P(e.cursorAccent,on)),t.selectionBackgroundTransparent=P(e.selectionBackground,Qt),t.selectionBackgroundOpaque=L.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=P(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=L.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?P(e.selectionForeground,ts):void 0,t.selectionForeground===ts&&(t.selectionForeground=void 0),L.isOpaque(t.selectionBackgroundTransparent)&&(t.selectionBackgroundTransparent=L.opacity(t.selectionBackgroundTransparent,.3)),L.isOpaque(t.selectionInactiveBackgroundTransparent)&&(t.selectionInactiveBackgroundTransparent=L.opacity(t.selectionInactiveBackgroundTransparent,.3)),t.scrollbarSliderBackground=P(e.scrollbarSliderBackground,L.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=P(e.scrollbarSliderHoverBackground,L.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=P(e.scrollbarSliderActiveBackground,L.opacity(t.foreground,.5)),t.overviewRulerBorder=P(e.overviewRulerBorder,po),t.ansi=V.slice(),t.ansi[0]=P(e.black,V[0]),t.ansi[1]=P(e.red,V[1]),t.ansi[2]=P(e.green,V[2]),t.ansi[3]=P(e.yellow,V[3]),t.ansi[4]=P(e.blue,V[4]),t.ansi[5]=P(e.magenta,V[5]),t.ansi[6]=P(e.cyan,V[6]),t.ansi[7]=P(e.white,V[7]),t.ansi[8]=P(e.brightBlack,V[8]),t.ansi[9]=P(e.brightRed,V[9]),t.ansi[10]=P(e.brightGreen,V[10]),t.ansi[11]=P(e.brightYellow,V[11]),t.ansi[12]=P(e.brightBlue,V[12]),t.ansi[13]=P(e.brightMagenta,V[13]),t.ansi[14]=P(e.brightCyan,V[14]),t.ansi[15]=P(e.brightWhite,V[15]),e.extendedAnsi){let r=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;s"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};function ln(n,i,e,t){let r={type:0,cancel:!1,key:void 0},s=(n.shiftKey?1:0)|(n.altKey?2:0)|(n.ctrlKey?4:0)|(n.metaKey?8:0);switch(n.keyCode){case 0:n.key==="UIKeyInputUpArrow"?i?r.key="\x1BOA":r.key="\x1B[A":n.key==="UIKeyInputLeftArrow"?i?r.key="\x1BOD":r.key="\x1B[D":n.key==="UIKeyInputRightArrow"?i?r.key="\x1BOC":r.key="\x1B[C":n.key==="UIKeyInputDownArrow"&&(i?r.key="\x1BOB":r.key="\x1B[B");break;case 8:r.key=n.ctrlKey?"\b":"\x7F",n.altKey&&(r.key="\x1B"+r.key);break;case 9:if(n.shiftKey){r.key="\x1B[Z";break}r.key=" ",r.cancel=!0;break;case 13:n.key==="c"&&n.ctrlKey?r.key="":r.key=n.altKey?"\x1B\r":"\r",r.cancel=!0;break;case 27:r.key="\x1B",n.altKey&&(r.key="\x1B\x1B"),r.cancel=!0;break;case 37:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"D":i?r.key="\x1BOD":r.key="\x1B[D";break;case 39:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"C":i?r.key="\x1BOC":r.key="\x1B[C";break;case 38:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"A":i?r.key="\x1BOA":r.key="\x1B[A";break;case 40:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"B":i?r.key="\x1BOB":r.key="\x1B[B";break;case 45:!n.shiftKey&&!n.ctrlKey&&(r.key="\x1B[2~");break;case 46:s?r.key="\x1B[3;"+(s+1)+"~":r.key="\x1B[3~";break;case 36:s?r.key="\x1B[1;"+(s+1)+"H":i?r.key="\x1BOH":r.key="\x1B[H";break;case 35:s?r.key="\x1B[1;"+(s+1)+"F":i?r.key="\x1BOF":r.key="\x1B[F";break;case 33:n.shiftKey?r.type=2:n.ctrlKey?r.key="\x1B[5;"+(s+1)+"~":r.key="\x1B[5~";break;case 34:n.shiftKey?r.type=3:n.ctrlKey?r.key="\x1B[6;"+(s+1)+"~":r.key="\x1B[6~";break;case 112:s?r.key="\x1B[1;"+(s+1)+"P":r.key="\x1BOP";break;case 113:s?r.key="\x1B[1;"+(s+1)+"Q":r.key="\x1BOQ";break;case 114:s?r.key="\x1B[1;"+(s+1)+"R":r.key="\x1BOR";break;case 115:s?r.key="\x1B[1;"+(s+1)+"S":r.key="\x1BOS";break;case 116:s?r.key="\x1B[15;"+(s+1)+"~":r.key="\x1B[15~";break;case 117:s?r.key="\x1B[17;"+(s+1)+"~":r.key="\x1B[17~";break;case 118:s?r.key="\x1B[18;"+(s+1)+"~":r.key="\x1B[18~";break;case 119:s?r.key="\x1B[19;"+(s+1)+"~":r.key="\x1B[19~";break;case 120:s?r.key="\x1B[20;"+(s+1)+"~":r.key="\x1B[20~";break;case 121:s?r.key="\x1B[21;"+(s+1)+"~":r.key="\x1B[21~";break;case 122:s?r.key="\x1B[23;"+(s+1)+"~":r.key="\x1B[23~";break;case 123:s?r.key="\x1B[24;"+(s+1)+"~":r.key="\x1B[24~";break;default:if(n.ctrlKey&&!n.shiftKey&&!n.altKey&&!n.metaKey)n.keyCode>=65&&n.keyCode<=90?r.key=String.fromCharCode(n.keyCode-64):n.keyCode===32?r.key="\0":n.keyCode>=51&&n.keyCode<=55?r.key=String.fromCharCode(n.keyCode-51+27):n.keyCode===56?r.key="\x7F":n.key==="/"?r.key="":n.keyCode===219?r.key="\x1B":n.keyCode===220?r.key="":n.keyCode===221&&(r.key="");else if((!e||t)&&n.altKey&&!n.metaKey){let a=mo[n.keyCode]?.[n.shiftKey?1:0];if(a)r.key="\x1B"+a;else if(n.keyCode>=65&&n.keyCode<=90){let l=n.ctrlKey?n.keyCode-64:n.keyCode+32,h=String.fromCharCode(l);n.shiftKey&&(h=h.toUpperCase()),r.key="\x1B"+h}else if(n.keyCode===32)r.key="\x1B"+(n.ctrlKey?"\0":" ");else if(n.key==="Dead"&&n.code.startsWith("Key")){let l=n.code.slice(3,4);n.shiftKey||(l=l.toLowerCase()),r.key="\x1B"+l,r.cancel=!0}}else if(e&&!n.altKey&&!n.ctrlKey&&!n.shiftKey&&n.metaKey)n.keyCode===65&&(r.type=1);else if(n.key&&!n.ctrlKey&&!n.altKey&&!n.metaKey&&n.keyCode>=48&&n.key.length===1)r.key=n.key;else if(n.key&&n.ctrlKey&&n.shiftKey)switch(n.code){case"Minus":r.key="";break;case"Digit2":r.key="\0";break;case"Digit6":r.key="";break}break}return r}var ti=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440};this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24};this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"};this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(i){if(i.code.startsWith("Numpad")){let e=i.code.slice(6);if(e>="0"&&e<="9")return 57399+parseInt(e,10);switch(e){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(i){switch(i.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(i){let e=0;return i.shiftKey&&(e|=1),i.altKey&&(e|=2),i.ctrlKey&&(e|=4),i.metaKey&&(e|=8),e>0?e+1:0}_getKeyCode(i,e){let t=this._getNumpadKeyCode(i);if(t!==void 0)return t;let r=this._getModifierKeyCode(i);if(r!==void 0)return r;let s=this._functionalKeyCodes[i.key];if(s!==void 0)return s;if((i.shiftKey||e&&i.altKey)&&i.code){if(i.code.startsWith("Digit")&&i.code.length===6){let o=i.code.charAt(5);if(o>="0"&&o<="9")return o.charCodeAt(0)}if(i.code.startsWith("Key")&&i.code.length===4)return i.code.charAt(3).toLowerCase().charCodeAt(0)}if(i.key.length===1){let o=i.key.codePointAt(0);return o>=65&&o<=90?o+32:o}}_isModifierKey(i){return i.key==="Shift"||i.key==="Control"||i.key==="Alt"||i.key==="Meta"}_isLockKey(i){return i.key==="CapsLock"||i.key==="NumLock"||i.key==="ScrollLock"}_buildCsiLetterSequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1B["+i}_buildSs3Sequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1BO"+i}_buildCsiTildeSequence(i,e,t,r){let s=r&&t!==1,o="\x1B["+i;return(e>0||s)&&(o+=";"+(e>0?e:"1"),s&&(o+=":"+t)),o+="~",o}_buildCsiUSequence(i,e,t,r,s,o,a){let l=!!(s&2),h=!!(s&4),d="\x1B["+e,c;h&&i.shiftKey&&i.key.length===1&&!o&&!a&&(c=i.key.codePointAt(0),d+=":"+c);let f=!!(s&16)&&r!==3&&i.key.length===1&&!o&&!a&&!i.ctrlKey?i.key.codePointAt(0):void 0,p=l&&r!==1&&(r===3||f===void 0);return(t>0||p||f!==void 0)&&(d+=";",t>0?d+=t:p&&(d+="1"),p&&(d+=":"+r)),f!==void 0&&(d+=";"+f),d+="u",d}evaluate(i,e,t=1,r=!1){let s={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(i),a=this._isModifierKey(i),l=!!(e&2);if(!l&&t===3||a&&!(e&8)||this._isLockKey(i)&&!(e&8))return s;let h=this._csiLetterKeys[i.key];if(h)return s.key=this._buildCsiLetterSequence(h,o,t,l),s.cancel=!0,s;let d=this._ss3FunctionKeys[i.key];if(d)return s.key=this._buildSs3Sequence(d,o,t,l),s.cancel=!0,s;let c=this._csiTildeKeys[i.key];if(c!==void 0)return s.key=this._buildCsiTildeSequence(c,o,t,l),s.cancel=!0,s;let u=this._getKeyCode(i,r);if(u===void 0)return s;let f=u===13||u===9||u===127;if(f&&t===3&&!(e&8))return s;let p=this._functionalKeyCodes[i.key]!==void 0||this._getNumpadKeyCode(i)!==void 0;if(!!(e&8||l&&t===3||(e&1||l)&&(p&&!f||o>0&&i.key.length!==1||o-1>1)))s.key=this._buildCsiUSequence(i,u,o,t,e,p,a),s.cancel=!0;else{let _=u===13?"\r":u===9?" ":u===127?"\x7F":void 0;_?s.key=_:i.key.length===1&&!i.ctrlKey&&!i.altKey&&!i.metaKey&&(s.key=i.key)}return s}static shouldUseProtocol(i){return i>0}};var Zi=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226};this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40};this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]);this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(i){let e=this._codeToVk[i.code];return e!==void 0?e:i.keyCode||0}_getScanCode(i){return this._codeToScancode[i.code]||0}_getUnicodeChar(i){if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(i.key==="Enter")return 10;if(i.key==="Backspace")return 127}let e=this._keyToControlChar[i.key];if(e!==void 0)return e;if(i.key.length===1){let t=i.key.codePointAt(0)||0;if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(i){let e=0;return i.shiftKey&&(e|=16),i.ctrlKey&&(i.code==="ControlRight"?e|=4:e|=8),i.altKey&&(i.code==="AltRight"?e|=1:e|=2),this._enhancedKeyCodes.has(i.code)&&(e|=256),e}evaluateKeyboardEvent(i,e){let t=this._getVirtualKeyCode(i),r=this._getScanCode(i),s=this._getUnicodeChar(i),o=e?1:0,a=this._getControlKeyState(i);return{type:0,cancel:!0,key:`\x1B[${t};${r};${s};${o};${a};1_`}}};var xt=class{constructor(i,e){this._coreService=i;this._optionsService=e}_getWin32InputMode(){return this._win32InputMode??=new Zi,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new ti,this._kittyKeyboard}evaluateKeyDown(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!0);let e=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(i,e,i.repeat?2:1,te&&this._optionsService.rawOptions.macOptionIsMeta):ln(i,this._coreService.decPrivateModes.applicationCursorKeys,te,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!1);let e=this._coreService.kittyKeyboard.flags;if(this.useKitty&&e&2)return this._getKittyKeyboard().evaluate(i,e,3,te&&this._optionsService.rawOptions.macOptionIsMeta)}get useKitty(){let i=this._coreService.kittyKeyboard.flags;return!!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard&&ti.shouldUseProtocol(i))}get useWin32InputMode(){return!!(this._optionsService.rawOptions.vtExtensions?.win32InputMode&&this._coreService.decPrivateModes.win32InputMode)}};xt=y([m(0,X),m(1,R)],xt);var _s=class{constructor(...i){this._entries=new Map;for(let[e,t]of i)this.set(e,t)}set(i,e){let t=this._entries.get(i);return this._entries.set(i,e),t}forEach(i){for(let[e,t]of this._entries.entries())i(e,t)}has(i){return this._entries.has(i)}get(i){return this._entries.get(i)}},Qi=class{constructor(){this._services=new _s;this._services.set(et,this)}setService(i,e){this._services.set(i,e)}getService(i){return this._services.get(i)}createInstance(i,...e){let t=Ws(i).sort((o,a)=>o.index-a.index),r=[];for(let o of t){let a=this._services.get(o.id);if(!a)throw new Error(`[createInstance] ${i.name} depends on UNKNOWN service ${o.id._id}.`);r.push(a)}let s=t.length>0?t[0].index:e.length;if(e.length!==s)throw new Error(`[createInstance] First service dependency of ${i.name} at position ${s+1} conflicts with ${e.length} static arguments`);return new i(...e,...r)}};var bo={trace:0,debug:1,info:2,warn:3,error:4,off:5},vo="xterm.js: ",wt=class extends g{constructor(e){super();this._optionsService=e;this._logLevel=5;this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=bo[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tthis._length)for(let t=this._length;t=e;s--)this._array[this._getCyclicIndex(s+r.length)]=this._array[this._getCyclicIndex(s)];for(let s=0;sthis._maxLength){let s=this._length+r.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=r.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(let o=t-1;o>=0;o--)this.set(e+o+r,this.get(e+o));let s=e+t+r-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>22,e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):t]}set(i,e){this._cacheValid=!1,this._data[i*3+1]=e[0],e[1].length>1?(this._combined[i]=e[1],this._data[i*3+0]=i|2097152|e[2]<<22):this._data[i*3+0]=e[1].charCodeAt(0)|e[2]<<22}getWidth(i){return this._data[i*3+0]>>22}hasWidth(i){return this._data[i*3+0]&12582912}getFg(i){return this._data[i*3+1]}getBg(i){return this._data[i*3+2]}hasContent(i){return this._data[i*3+0]&4194303}getCodePoint(i){let e=this._data[i*3+0];return e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):e&2097151}isCombined(i){return this._data[i*3+0]&2097152}getString(i){let e=this._data[i*3+0];return e&2097152?this._combined[i]:e&2097151?be(e&2097151):""}isProtected(i){return this._data[i*3+2]&536870912}loadCell(i,e){return er=i*3,e.content=this._data[er+0],e.fg=this._data[er+1],e.bg=this._data[er+2],e.content&2097152?e.combinedData=this._combined[i]:e.combinedData="",e.bg&268435456?e.extended=this._extendedAttrs[i]:(ps._ext=0,ps._urlId=0,e.extended=ps),e}setCell(i,e){this._cacheValid=!1,e.content&2097152&&(this._combined[i]=e.combinedData),e.bg&268435456&&(this._extendedAttrs[i]=e.extended),this._data[i*3+0]=e.content,this._data[i*3+1]=e.fg,this._data[i*3+2]=e.bg}setCellFromCodepoint(i,e,t,r){this._cacheValid=!1,r.bg&268435456&&(this._extendedAttrs[i]=r.extended);let s=i*3;this._data[s+0]=e|t<<22,this._data[s+1]=r.fg,this._data[s+2]=r.bg}addCodepointToCell(i,e,t){this._cacheValid=!1;let r=this._data[i*3+0];r&2097152?this._combined[i]+=be(e):r&2097151?(this._combined[i]=be(r&2097151)+be(e),r&=-2097152,r|=2097152):r=e|1<<22,t&&(r&=-12582913,r|=t<<22),this._data[i*3+0]=r}insertCells(i,e,t){if(this._cacheValid=!1,i%=this.length,i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,t),e=0;--r)this.setCell(i+e+r,this.loadCell(i+r,hn));for(let r=0;rthis.length){if(this._data.buffer.byteLength>=t*4)this._data=new Uint32Array(this._data.buffer,0,t);else{let r=new Uint32Array(t);r.set(this._data),this._data=r}for(let r=this.length;r=i&&delete this._combined[a]}let s=Object.keys(this._extendedAttrs);for(let o=0;o=i&&delete this._extendedAttrs[a]}}return this.length=i,t*4*2=0;--i)if(this._data[i*3+0]&4194303)return i+(this._data[i*3+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(this._data[i*3+0]&4194303||this._data[i*3+2]&50331648)return i+(this._data[i*3+0]>>22);return 0}copyCellsFrom(i,e,t,r,s){this._cacheValid=!1;let o=i._data;if(s)for(let a=r-1;a>=0;a--){for(let l=0;l<3;l++)this._data[(t+a)*3+l]=o[(e+a)*3+l];this._copyCellMapsFrom(i,e+a,t+a)}else for(let a=0;a>22||1}r&&r.push(e);let a=o.join("");return s&&(this._cache=a,this._cacheValid=!0,this._cacheTrimmed=!!i),a}_copyCellMapsFrom(i,e,t){let r=e*3;i._data[r+0]&2097152&&(this._combined[t]=i._combined[e]),i._data[r+2]&268435456&&(this._extendedAttrs[t]=i._extendedAttrs[e])}_copySparseMapsFrom(i){this._combined={},this._extendedAttrs={};for(let e=0;e=a&&t0&&(_>c||d[_].getTrimmedLength()===0);_--)b++;b>0&&(o.push(a+d.length-b),o.push(b)),a+=d.length-1}return o}function un(n,i){let e=[],t=0,r=i[t],s=0;for(let o=0;ol&&(s-=l,o++);let h=n[o].getWidth(s-1)===2;h&&s--;let d=h?e-1:e;t.push(d),a+=d}return t}function Tt(n,i,e){if(i===n.length-1)return n[i].getTrimmedLength();let t=!n[i].hasContent(e-1)&&n[i].getWidth(e-1)===1,r=n[i+1].getWidth(0)===2;return t&&r?e-1:e}var ir=class ir{constructor(i){this.line=i;this.isDisposed=!1;this._disposables=[];this._id=ir._nextId++;this._onDispose=this.register(new v);this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),Ne(this._disposables),this._disposables.length=0)}register(i){return this._disposables.push(i),i}};ir._nextId=1;var tr=ir;var $={},Le=$.B;$[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"};$.A={"#":"\xA3"};$.B=void 0;$[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"};$.C=$[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};$.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"};$.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"};$.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"};$.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"};$.E=$[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"};$.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"};$.H=$[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};$["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"};var pn=4294967295,si=class extends g{constructor(e,t,r,s){super();this._hasScrollback=e;this._optionsService=t;this._bufferService=r;this._logService=s;this.ydisp=0;this.ybase=0;this.y=0;this.x=0;this.tabs={};this.savedY=0;this.savedX=0;this.savedCurAttrData=U.clone();this.savedCharset=Le;this.savedCharsets=[];this.savedGlevel=0;this.savedOriginMode=!1;this.savedWraparoundMode=!0;this.markers=[];this._nullCell=F.fromCharData([0,"",1,0]);this._whitespaceCell=F.fromCharData([0," ",1,32]);this._isClearing=!1;this._memoryCleanupPosition=0;this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new ii(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new Ct(this._logService),this._register(E(()=>this._memoryCleanupQueue.clear())),this._register(E(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new Pe),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new Pe),this._whitespaceCell}getBlankLine(e,t){return new Re(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let t=this.ybase+this.y-this.ydisp;return t>=0&&tpn?pn:t}fillViewportRows(e){if(this.lines.length===0){e??=U;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new ii(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){let r=this.getNullCell(U),s=0,o=this._getCorrectBufferLength(t);if(o>this.lines.maxLength&&(this.lines.maxLength=o),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(new Re(e,r,!1)));else for(let l=this._rows;l>t;l--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(o0&&(this.lines.trimStart(l),this.ybase=Math.max(this.ybase-l,0),this.ydisp=Math.max(this.ydisp-l,0),this.savedY=Math.max(this.savedY-l,0)),this.lines.maxLength=o}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),a&&(this.y+=a),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let a=0;a0){let a=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,a)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){let e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend==="conpty"&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){let r=this._optionsService.rawOptions.reflowCursorLine,s=dn(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(U),r);if(s.length>0){let o=un(this.lines,s);fn(this.lines,o.layout),this._reflowLargerAdjustViewport(e,t,o.countRemoved)}}_reflowLargerAdjustViewport(e,t,r){let s=this.getNullCell(U),o=r;for(;o-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;l--){let h=this.lines.get(l);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;let d=[h];for(;h.isWrapped&&l>0;)h=this.lines.get(--l),d.unshift(h);if(!r){let T=this.ybase+this.y;if(T>=l&&T0&&(o.push({start:l+d.length+a,newLines:b}),a+=b.length),d.push(...b);let _=u.length-1,S=u[_];S===0&&(_--,S=u[_]);let C=d.length-f-1,w=c;for(;C>=0;){let T=Math.min(w,S);if(d[_]===void 0)break;if(d[_].copyCellsFrom(d[C],w-T,S-T,T,!0),S-=T,S===0&&(_--,S=u[_]),w-=T,w===0){C--;let ee=Math.max(C,0);w=Tt(d,ee,this._cols)}}for(let T=0;T0;)this.ybase===0?this.y0){let l=[],h=[];for(let S=0;S=0;S--)if(f&&f.start>c+p){for(let C=f.newLines.length-1;C>=0;C--)this.lines.set(S--,f.newLines[C]);S++,l.push({index:c+1,amount:f.newLines.length}),p+=f.newLines.length,f=o[++u]}else this.lines.set(S,h[c--]);let b=0;for(let S=l.length-1;S>=0;S--)l[S].index+=b,this.lines.onInsertEmitter.fire(l[S]),b+=l[S].amount;let _=Math.max(0,d+a-this.lines.maxLength);_>0&&this.lines.onTrimEmitter.fire(_)}}translateBufferLineToString(e,t,r=0,s){let o=this.lines.get(e);return o?o.translateToString(t,r,s):""}getWrappedRangeForLine(e){let t=e,r=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=r,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(r=>{t.line>=r.index&&(t.line+=r.amount)})),t.register(this.lines.onDelete(r=>{t.line>=r.index&&t.liner.index&&(t.line-=r.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}};var rr=class extends g{constructor(e,t,r){super();this._optionsService=e;this._bufferService=t;this._logService=r;this._normalBuffer=this._register(new B);this._altBuffer=this._register(new B);this._onBufferActivate=this._register(new v);this.onBufferActivate=this._onBufferActivate.event;this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new si(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new si(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}};var Dt=class extends g{constructor(e,t){super();this.isUserScrolling=!1;this._onResize=this._register(new v);this.onResize=this._onResize.event;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new rr(e,this,t)),this._register(this.buffers.onBufferActivate(r=>{this._onScroll.fire(r.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,t){let r=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:r,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){let r=this.buffer,s;s=this._cachedBlankLine,(!s||s.length!==this.cols||s.getFg(0)!==e.fg||s.getBg(0)!==e.bg)&&(s=r.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;let o=r.ybase+r.scrollTop,a=r.ybase+r.scrollBottom;if(r.scrollTop===0){let l=r.lines.isFull;a===r.lines.length-1?l?r.lines.recycle().copyFrom(s,!0):r.lines.push(s.clone(!0)):r.lines.splice(a+1,0,s.clone(!0)),l?this.isUserScrolling&&(r.ydisp=Math.max(r.ydisp-1,0)):(r.ybase++,this.isUserScrolling||r.ydisp++)}else{let l=a-o+1;r.lines.shiftElements(o+1,l-1,-1),r.lines.set(a,s.clone(!0))}this.isUserScrolling||(r.ydisp=r.ybase),this._onScroll.fire(r.ydisp)}scrollLines(e,t){let r=this.buffer;if(e<0){if(r.ydisp===0)return;this.isUserScrolling=!0}else e+r.ydisp>=r.ybase&&(this.isUserScrolling=!1);let s=r.ydisp;r.ydisp=Math.max(Math.min(r.ydisp+e,r.ybase),0),s!==r.ydisp&&(t||this._onScroll.fire(r.ydisp))}};Dt=y([m(0,R),m(1,_e)],Dt);var Rt={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:te,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}},go=["normal","bold","100","200","300","400","500","600","700","800","900"],sr=class extends g{constructor(e){super();this._onOptionChange=this._register(new v);this.onOptionChange=this._onOptionChange.event;let t={...Rt};for(let r in e)if(r in t)try{let s=e[r];t[r]=this._sanitizeAndValidateOption(r,s)}catch(s){console.error(s)}this.rawOptions=t,this.options={...t},this._setupOptions(),this._register(E(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(r=>{r===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(r=>{e.indexOf(r)!==-1&&t()})}_setupOptions(){let e=r=>{if(!(r in Rt))throw new Error(`No option with key "${r}"`);return this.rawOptions[r]},t=(r,s)=>{if(!(r in Rt))throw new Error(`No option with key "${r}"`);s=this._sanitizeAndValidateOption(r,s),this.rawOptions[r]!==s&&(this.rawOptions[r]=s,this._onOptionChange.fire(r))};for(let r in this.rawOptions){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this.options,r,s)}}_sanitizeAndValidateOption(e,t){switch(e){case"cursorStyle":if(t||(t=Rt[e]),!Co(t))throw new Error(`"${t}" is not a valid value for ${e}`);break;case"wordSeparator":t||(t=Rt[e]);break;case"fontWeight":case"fontWeightBold":if(typeof t=="number"&&1<=t&&t<=1e3)break;t=go.includes(t)?t:Rt[e];break;case"blinkIntervalDuration":if(t=Math.floor(t),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"cursorWidth":t=Math.floor(t);case"lineHeight":case"tabStopWidth":if(t<1)throw new Error(`${e} cannot be less than 1, value: ${t}`);break;case"minimumContrastRatio":t=Math.max(1,Math.min(21,Math.round(t*10)/10));break;case"scrollback":if(t=Math.min(t,4294967295),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(t<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${t}`);break;case"rows":case"cols":if(!t&&t!==0)throw new Error(`${e} must be numeric, value: ${t}`);break;case"windowsPty":t=t??{};break}return t}};function Co(n){return n==="block"||n==="underline"||n==="bar"}var mn=Object.freeze({insertMode:!1}),bn=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0}),vn=()=>({flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}),Lt=class extends g{constructor(e,t,r){super();this._bufferService=e;this._logService=t;this._optionsService=r;this.isCursorHidden=!1;this._onData=this._register(new v);this.onData=this._onData.event;this._onUserInput=this._register(new v);this.onUserInput=this._onUserInput.event;this._onBinary=this._register(new v);this.onBinary=this._onBinary.event;this._onRequestScrollToBottom=this._register(new v);this.onRequestScrollToBottom=this._onRequestScrollToBottom.event;this.isCursorInitialized=r.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(mn),this.decPrivateModes=structuredClone(bn),this.kittyKeyboard=vn()}reset(){this.modes=structuredClone(mn),this.decPrivateModes=structuredClone(bn),this.kittyKeyboard=vn()}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;let r=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&r.ybase!==r.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(s=>s.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(t=>t.charCodeAt(0))),this._onBinary.fire(e))}};Lt=y([m(0,D),m(1,_e),m(2,R)],Lt);var Sn={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:n=>n.button===4||n.action!==1?!1:(n.ctrl=!1,n.alt=!1,n.shift=!1,!0)},VT200:{events:19,restrict:n=>n.action!==32},DRAG:{events:23,restrict:n=>!(n.action===32&&n.button===3)},ANY:{events:31,restrict:n=>!0}};function vs(n,i){let e=(n.ctrl?16:0)|(n.shift?4:0)|(n.alt?8:0);return n.button===4?(e|=64,e|=n.action):(e|=n.button&3,n.button&4&&(e|=64),n.button&8&&(e|=128),n.action===32?e|=32:n.action===0&&!i&&(e|=3)),e}var Ss=String.fromCharCode,gn={DEFAULT:n=>{let i=[vs(n,!1)+32,n.col+32,n.row+32];return i[0]>255||i[1]>255||i[2]>255?"":`\x1B[M${Ss(i[0])}${Ss(i[1])}${Ss(i[2])}`},SGR:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${vs(n,!0)};${n.col};${n.row}${i}`},SGR_PIXELS:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${vs(n,!0)};${n.x};${n.y}${i}`}},nr=class extends g{constructor(){super();this._protocols={};this._encodings={};this._activeProtocol="";this._activeEncoding="";this._onProtocolChange=this._register(new v);this.onProtocolChange=this._onProtocolChange.event;for(let e of Object.keys(Sn))this.addProtocol(e,Sn[e]);for(let e of Object.keys(gn))this.addEncoding(e,gn[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return this._customWheelEventHandler?this._customWheelEventHandler(e)!==!1:!0}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return this._activeEncoding==="DEFAULT"}get isPixelEncoding(){return this._activeEncoding==="SGR_PIXELS"}};var me=class n{constructor(){this._providers=Object.create(null);this._active="";this._onChange=new v;this.onChange=this._onChange.event}static extractShouldJoin(i){return(i&1)!==0}static extractWidth(i){return i>>1&3}static extractCharKind(i){return i>>3}static createPropertyValue(i,e,t=!1){return(i&16777215)<<3|(e&3)<<1|(t?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(i){if(!this._providers[i])throw new Error(`unknown Unicode version "${i}"`);this._active=i,this._activeProvider=this._providers[i],this._onChange.fire(i)}register(i){this._providers[i.version]=i,this._active||(this.activeVersion=i.version)}wcwidth(i){return this._activeProvider.wcwidth(i)}getStringCellWidth(i){let e=0,t=0,r=i.length;for(let s=0;s=r)return e+this.wcwidth(o);let h=i.charCodeAt(s);56320<=h&&h<=57343?o=(o-55296)*1024+h-56320+65536:e+=this.wcwidth(h)}let a=this.charProperties(o,t),l=n.extractWidth(a);n.extractShouldJoin(a)&&(l-=n.extractWidth(t)),e+=l,t=a}return e}charProperties(i,e){return this._activeProvider.charProperties(i,e)}};var gs=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],Io=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],q;function Eo(n,i){let e=0,t=i.length-1,r;if(ni[t][1])return!1;for(;t>=e;)if(r=e+t>>1,n>i[r][1])e=r+1;else if(n=131072&&i<=196605||i>=196608&&i<=262141?2:1}charProperties(i,e){let t=this.wcwidth(i),r=t===0&&e!==0;if(r){let s=me.extractWidth(e);s===0?r=!1:s>t&&(t=s)}return me.createPropertyValue(0,t,r)}};var ar=class{constructor(){this.glevel=0;this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(i){this.glevel=i,this.charset=this._charsets[i]}setgCharset(i,e){this._charsets[i]=e,this.glevel===i&&(this.charset=e)}};function Cs(n){let e=n.buffer.lines.get(n.buffer.ybase+n.buffer.y-1)?.get(n.cols-1),t=n.buffer.lines.get(n.buffer.ybase+n.buffer.y);t&&e&&(t.isWrapped=e[3]!==0&&e[3]!==32)}var At=class n{constructor(i=32,e=32){this.maxLength=i;this.maxSubParamsLength=e;if(e>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(i),this.length=0,this._subParams=new Int32Array(e),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(i),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(i){let e=new n;if(!i.length)return e;for(let t=Array.isArray(i[0])?1:0;t>8,r=this._subParamsIdx[e]&255;r-t>0&&i.push(Array.prototype.slice.call(this._subParams,t,r))}return i}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(i){if(this._digitIsSub=!1,this.length>=this.maxLength){this._rejectDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=i>2147483647?2147483647:i}addSubParam(i){if(this._digitIsSub=!0,!!this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=i>2147483647?2147483647:i,this._subParamsIdx[this.length-1]++}}hasSubParams(i){return(this._subParamsIdx[i]&255)-(this._subParamsIdx[i]>>8)>0}getSubParams(i){let e=this._subParamsIdx[i]>>8,t=this._subParamsIdx[i]&255;return t-e>0?this._subParams.subarray(e,t):null}getSubParamsAll(){let i={};for(let e=0;e>8,r=this._subParamsIdx[e]&255;r-t>0&&(i[e]=this._subParams.slice(t,r))}return i}addDigit(i){let e;if(this._rejectDigits||!(e=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let t=this._digitIsSub?this._subParams:this.params,r=t[e-1];t[e-1]=~r?Math.min(r*10+i,2147483647):i}};var Is=class{constructor(){this._chunks=[];this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(i){this._chunks.push(i),this._length+=i.length}toString(){return this._chunks.join("")}},Ue=class{constructor(i){this._limit=i;this._builder=new Is}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(i){return this._builder.append(i),this._builder.length>this._limit?(this._builder.reset(),!0):!1}toString(){return this._builder.toString()}};var ni=[],lr=class{constructor(){this._state=0;this._active=ni;this._id=-1;this._handlers=Object.create(null);this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=ni}reset(){if(this._state===2)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=ni,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||ni,!this._active.length)this._handlerFb(this._id,"START");else for(let i=this._active.length-1;i>=0;i--)this._active[i].start()}_put(i,e,t){if(!this._active.length)this._handlerFb(this._id,"PUT",xe(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}start(){this.reset(),this._state=1}put(i,e,t){if(this._state!==3){if(this._state===1)for(;e0&&this._put(i,e,t)}}end(i,e=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=ni,this._id=-1,this._state=0}}},cr=class cr{constructor(i){this._handler=i;this._data=new Ue(cr._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(xe(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};cr._payloadLimit=1e7;var se=cr;var oi=[],hr=class{constructor(){this._handlers=Object.create(null);this._active=oi;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=oi}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].unhook(!1);this._stack.paused=!1,this._active=oi,this._ident=0}hook(i,e){if(this.reset(),this._ident=i,this._active=this._handlers[i]||oi,!this._active.length)this._handlerFb(this._ident,"HOOK",e);else for(let t=this._active.length-1;t>=0;t--)this._active[t].hook(e)}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",xe(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}unhook(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"UNHOOK",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].unhook(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].unhook(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=oi,this._ident=0}},ai=new At;ai.addParam(0);var dr=class dr{constructor(i){this._handler=i;this._data=new Ue(dr._payloadLimit);this._params=ai;this._hitLimit=!1}hook(i){this._params=i.length>1||i.params[0]?i.clone():ai,this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(xe(i,e,t))&&(this._hitLimit=!0)}unhook(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString(),this._params),e instanceof Promise))return e.then(t=>(this._params=ai,this._data.reset(),this._hitLimit=!1,t));return this._params=ai,this._data.reset(),this._hitLimit=!1,e}};dr._payloadLimit=1e7;var li=dr;var ci=[],ur=class{constructor(){this._handlers=Object.create(null);this._active=ci;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=ci}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=ci,this._ident=0}start(i){if(this.reset(),this._ident=i,this._active=this._handlers[i]||ci,!this._active.length)this._handlerFb(this._ident,"START");else for(let e=this._active.length-1;e>=0;e--)this._active[e].start()}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",xe(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}end(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=ci,this._ident=0}},_r=class _r{constructor(i){this._handler=i;this._data=new Ue(_r._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(xe(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};_r._payloadLimit=1e7;var fr=_r;var Es=class{constructor(i){this.table=new Uint16Array(i)}setDefault(i,e){this.table.fill(i<<8|e)}add(i,e,t,r){this.table[e<<8|i]=t<<8|r}addMany(i,e,t,r){for(let s=0;sl),t=(a,l)=>e.slice(a,l),r=t(32,127),s=t(0,24);s.push(25),s.push.apply(s,t(28,32));let o=t(0,17);n.setDefault(1,0),n.addMany(r,0,2,0);for(let a of o)n.addMany([24,26,153,154],a,3,0),n.addMany(t(128,144),a,3,0),n.addMany(t(144,152),a,3,0),n.add(156,a,0,0),n.add(27,a,11,1),n.add(157,a,4,8),n.addMany([152,158],a,0,7),n.add(159,a,11,14),n.add(155,a,11,3),n.add(144,a,11,9);return n.addMany(s,0,3,0),n.addMany(s,1,3,1),n.add(127,1,0,1),n.addMany(s,8,0,8),n.addMany(s,3,3,3),n.add(127,3,0,3),n.addMany(s,4,3,4),n.add(127,4,0,4),n.addMany(s,6,3,6),n.addMany(s,5,3,5),n.add(127,5,0,5),n.addMany(s,2,3,2),n.add(127,2,0,2),n.add(93,1,4,8),n.addMany(r,8,5,8),n.add(127,8,5,8),n.addMany([156,27,24,26,7],8,6,0),n.addMany(t(28,32),8,0,8),n.addMany([88,94],1,0,7),n.addMany(r,7,0,7),n.addMany(s,7,0,7),n.add(156,7,0,0),n.add(127,7,0,7),n.add(95,1,11,14),n.addMany(s,14,0,14),n.add(127,14,0,14),n.addMany(t(32,48),14,9,15),n.addMany(t(48,127),14,15,16),n.addMany(t(48,127),15,15,16),n.addMany(s,15,0,15),n.addMany(t(32,48),15,9,15),n.add(127,15,0,15),n.addMany(r,16,16,16),n.addMany(s,16,0,16),n.addMany(t(8,14),16,16,16),n.add(127,16,0,16),n.addMany([27,156,24,26],16,17,0),n.add(91,1,11,3),n.addMany(t(64,127),3,7,0),n.addMany(t(48,60),3,8,4),n.addMany([60,61,62,63],3,9,4),n.addMany(t(48,60),4,8,4),n.addMany(t(64,127),4,7,0),n.addMany([60,61,62,63],4,0,6),n.addMany(t(32,64),6,0,6),n.add(127,6,0,6),n.addMany(t(64,127),6,0,0),n.addMany(t(32,48),3,9,5),n.addMany(t(32,48),5,9,5),n.addMany(t(48,64),5,0,6),n.addMany(t(64,127),5,7,0),n.addMany(t(32,48),4,9,5),n.addMany(t(32,48),1,9,2),n.addMany(t(32,48),2,9,2),n.addMany(t(48,127),2,10,0),n.addMany(t(48,80),1,10,0),n.addMany(t(81,88),1,10,0),n.addMany([89,90,92],1,10,0),n.addMany(t(96,127),1,10,0),n.add(80,1,11,9),n.addMany(s,9,0,9),n.add(127,9,0,9),n.addMany(t(32,48),9,9,12),n.addMany(t(48,60),9,8,10),n.addMany([60,61,62,63],9,9,10),n.addMany(s,11,0,11),n.addMany(t(32,128),11,0,11),n.addMany(s,10,0,10),n.add(127,10,0,10),n.addMany(t(48,60),10,8,10),n.addMany([60,61,62,63],10,0,11),n.addMany(t(32,48),10,9,12),n.addMany(s,12,0,12),n.add(127,12,0,12),n.addMany(t(32,48),12,9,12),n.addMany(t(48,64),12,0,11),n.addMany(t(64,127),12,12,13),n.addMany(t(64,127),10,12,13),n.addMany(t(64,127),9,12,13),n.addMany(s,13,13,13),n.addMany(r,13,13,13),n.add(127,13,0,13),n.addMany([27,156,24,26],13,14,0),n.add(ne,0,2,0),n.add(ne,8,5,8),n.add(ne,6,0,6),n.add(ne,11,0,11),n.add(ne,13,13,13),n.add(ne,16,16,16),n})(),pr=class extends g{constructor(e=yo){super();this._transitions=e;this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0};this.initialState=0,this.currentState=this.initialState,this._params=new At,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(t,r,s)=>{},this._executeHandlerFb=t=>{},this._csiHandlerFb=(t,r)=>{},this._escHandlerFb=t=>{},this._errorHandlerFb=t=>t,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(E(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new lr),this._dcsParser=this._register(new hr),this._apcParser=this._register(new ur),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let r=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(r=e.prefix.charCodeAt(0),r<60||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let o=0;oa||a>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=a}}if(e.final.length!==1)throw new Error("final must be a single byte");let s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return r<<=8,r|=s,r}identToString(e){let t=[];for(;e;)t.push(String.fromCharCode(e&255)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){let r=this._identifier(e,[48,126]);this._escHandlers[r]??=[];let s=this._escHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){let r=e.charCodeAt(0);this._executeHandlers[r]=t,r<24&&(this._executeHandlersArr[r]=t)}clearExecuteHandler(e){let t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){let r=this._identifier(e);this._csiHandlers[r]??=[];let s=this._csiHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,r,s,o){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=s,this._parseStack.chunkPos=o}parse(e,t,r){let s,o,a=0,l;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(r===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let h=this._parseStack.handlers,d=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](this._params),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 4:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],l=this._dcsParser.unhook(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],l=this._oscParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],l=this._apcParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&255}for(let h=a;h=60&&c<=63&&(this._collect=c,d++);let u=!1;for(;d=48&&c<=57)this._params.addDigit(c-48);else if(c===59)this._params.addParam(0);else if(c===58)this._params.addSubParam(-1);else if(c>=64&&c<=126){let f=this._csiHandlers[this._collect<<8|c],p=f?f.length-1:-1;for(;p>=0&&(l=f[p](this._params),l!==!0);p--)if(l instanceof Promise)return o=1792,this._preserveStack(3,f,p,o,d),l;p<0&&this._csiHandlerFb(this._collect<<8|c,this._params),this.precedingJoinState=0,h=d,this.currentState=0,u=!0;break}else break;u||(h=d-1,this.currentState=4);continue}switch(o=this._transitions.table[this.currentState<<8|(s>8){case 2:let d=h,c=t-4;for(;d=32&&(e[d]<=126||e[d]>=ne)&&e[++d]>=32&&(e[d]<=126||e[d]>=ne)&&e[++d]>=32&&(e[d]<=126||e[d]>=ne)&&e[++d]>=32&&(e[d]<=126||e[d]>=ne););if(d>=c)for(;d=32&&(e[d]<=126||e[d]>=ne);)d++;this._printHandler(e,h,d),h=d-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:h,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let f=this._csiHandlers[this._collect<<8|s],p=f?f.length-1:-1;for(;p>=0&&(l=f[p](this._params),l!==!0);p--)if(l instanceof Promise)return this._preserveStack(3,f,p,o,h),l;p<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}while(++h47&&s<60);h--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:let b=this._escHandlers[this._collect<<8|s],_=b?b.length-1:-1;for(;_>=0&&(l=b[_](),l!==!0);_--)if(l instanceof Promise)return this._preserveStack(4,b,_,o,h),l;_<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let S=h+1;;++S)if(S>=t||(s=e[S])===24||s===26||s===27||s>127&&s=t||(s=e[S])<32||s>127&&s=32&&e[S]<127||e[S]>=8&&e[S]<14||e[S]>=ne))){this._apcParser.put(e,h,S),h=S-1;break}break;case 17:if(l=this._apcParser.end(s!==24&&s!==26),l)return this._preserveStack(7,[],0,o,h),l;s===27&&(o|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0;break}this.currentState=o&255}}};var xo=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,wo=/^[\da-f]+$/;function xs(n){if(!n)return;let i=n.toLowerCase();if(i.startsWith("rgb:")){i=i.slice(4);let e=xo.exec(i);if(e){let t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(i.startsWith("#")&&(i=i.slice(1),wo.exec(i)&&[3,6,9,12].includes(i.length))){let e=i.length/3,t=[0,0,0];for(let r=0;r<3;++r){let s=parseInt(i.slice(e*r,e*r+e),16);t[r]=e===1?s<<4:e===2?s:e===3?s>>4:s>>8}return t}}function ys(n,i){let e=n.toString(16),t=e.length<2?"0"+e:e;switch(i){case 4:return e[0];case 8:return t;case 12:return(t+t).slice(0,3);default:return t+t}}function En(n,i=16){let[e,t,r]=n;return`rgb:${ys(e,i)}/${ys(t,i)}/${ys(r,i)}`}var yn="6.1.0-beta.303";var Do={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function xn(n,i){if(n>24)return i.setWinLines||!1;switch(n){case 1:return!!i.restoreWin;case 2:return!!i.minimizeWin;case 3:return!!i.setWinPosition;case 4:return!!i.setWinSizePixels;case 5:return!!i.raiseWin;case 6:return!!i.lowerWin;case 7:return!!i.refreshWin;case 8:return!!i.setWinSizeChars;case 9:return!!i.maximizeWin;case 10:return!!i.fullscreenWin;case 11:return!!i.getWinState;case 13:return!!i.getWinPosition;case 14:return!!i.getWinSizePixels;case 15:return!!i.getScreenSizePixels;case 16:return!!i.getCellSizePixels;case 18:return!!i.getWinSizeChars;case 19:return!!i.getScreenSizeChars;case 20:return!!i.getIconTitle;case 21:return!!i.getWinTitle;case 22:return!!i.pushTitle;case 23:return!!i.popTitle;case 24:return!!i.setWinLines}return!1}var wn=0,mr=class extends g{constructor(e,t,r,s,o,a,l,h,d=new pr){super();this._bufferService=e;this._charsetService=t;this._coreService=r;this._logService=s;this._optionsService=o;this._oscLinkService=a;this._mouseStateService=l;this._unicodeService=h;this._parser=d;this._parseBuffer=new Uint32Array(4096);this._stringDecoder=new mi;this._utf8Decoder=new bi;this._windowTitle="";this._iconName="";this._windowTitleStack=[];this._iconNameStack=[];this._curAttrData=U.clone();this._eraseAttrDataInternal=U.clone();this._onRequestBell=this._register(new v);this.onRequestBell=this._onRequestBell.event;this._onRequestRefreshRows=this._register(new v);this.onRequestRefreshRows=this._onRequestRefreshRows.event;this._onRequestReset=this._register(new v);this.onRequestReset=this._onRequestReset.event;this._onRequestSendFocus=this._register(new v);this.onRequestSendFocus=this._onRequestSendFocus.event;this._onRequestSyncScrollBar=this._register(new v);this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event;this._onRequestWindowsOptionsReport=this._register(new v);this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event;this._onA11yChar=this._register(new v);this.onA11yChar=this._onA11yChar.event;this._onA11yTab=this._register(new v);this.onA11yTab=this._onA11yTab.event;this._onCursorMove=this._register(new v);this.onCursorMove=this._onCursorMove.event;this._onLineFeed=this._register(new v);this.onLineFeed=this._onLineFeed.event;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._onTitleChange=this._register(new v);this.onTitleChange=this._onTitleChange.event;this._onColor=this._register(new v);this.onColor=this._onColor.event;this._onRequestColorSchemeQuery=this._register(new v);this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event;this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0};this._specialColors=[256,257,258];this._register(this._parser),this._dirtyRowTracker=new hi(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(c=>this._activeBuffer=c.activeBuffer)),this._parser.setCsiHandlerFallback((c,u)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(c),params:u.toArray()})}),this._parser.setEscHandlerFallback(c=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(c)})}),this._parser.setExecuteHandlerFallback(c=>{this._logService.debug("Unknown EXECUTE code: ",{code:c})}),this._parser.setOscHandlerFallback((c,u,f)=>{this._logService.debug("Unknown OSC code: ",{identifier:c,action:u,data:f})}),this._parser.setDcsHandlerFallback((c,u,f)=>{u==="HOOK"&&(f=f.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(c),action:u,payload:f})}),this._parser.setApcHandlerFallback((c,u,f)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(c),action:u,payload:f})}),this._parser.setPrintHandler((c,u,f)=>this.print(c,u,f)),this._parser.registerCsiHandler({final:"@"},c=>this.insertChars(c)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},c=>this.scrollLeft(c)),this._parser.registerCsiHandler({final:"A"},c=>this.cursorUp(c)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},c=>this.scrollRight(c)),this._parser.registerCsiHandler({final:"B"},c=>this.cursorDown(c)),this._parser.registerCsiHandler({final:"C"},c=>this.cursorForward(c)),this._parser.registerCsiHandler({final:"D"},c=>this.cursorBackward(c)),this._parser.registerCsiHandler({final:"E"},c=>this.cursorNextLine(c)),this._parser.registerCsiHandler({final:"F"},c=>this.cursorPrecedingLine(c)),this._parser.registerCsiHandler({final:"G"},c=>this.cursorCharAbsolute(c)),this._parser.registerCsiHandler({final:"H"},c=>this.cursorPosition(c)),this._parser.registerCsiHandler({final:"I"},c=>this.cursorForwardTab(c)),this._parser.registerCsiHandler({final:"J"},c=>this.eraseInDisplay(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},c=>this.eraseInDisplay(c,!0)),this._parser.registerCsiHandler({final:"K"},c=>this.eraseInLine(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},c=>this.eraseInLine(c,!0)),this._parser.registerCsiHandler({final:"L"},c=>this.insertLines(c)),this._parser.registerCsiHandler({final:"M"},c=>this.deleteLines(c)),this._parser.registerCsiHandler({final:"P"},c=>this.deleteChars(c)),this._parser.registerCsiHandler({final:"S"},c=>this.scrollUp(c)),this._parser.registerCsiHandler({final:"T"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"X"},c=>this.eraseChars(c)),this._parser.registerCsiHandler({final:"Z"},c=>this.cursorBackwardTab(c)),this._parser.registerCsiHandler({final:"^"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"`"},c=>this.charPosAbsolute(c)),this._parser.registerCsiHandler({final:"a"},c=>this.hPositionRelative(c)),this._parser.registerCsiHandler({final:"b"},c=>this.repeatPrecedingCharacter(c)),this._parser.registerCsiHandler({final:"c"},c=>this.sendDeviceAttributesPrimary(c)),this._parser.registerCsiHandler({prefix:">",final:"c"},c=>this.sendDeviceAttributesSecondary(c)),this._parser.registerCsiHandler({final:"d"},c=>this.linePosAbsolute(c)),this._parser.registerCsiHandler({final:"e"},c=>this.vPositionRelative(c)),this._parser.registerCsiHandler({final:"f"},c=>this.hVPosition(c)),this._parser.registerCsiHandler({final:"g"},c=>this.tabClear(c)),this._parser.registerCsiHandler({final:"h"},c=>this.setMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"h"},c=>this.setModePrivate(c)),this._parser.registerCsiHandler({final:"l"},c=>this.resetMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"l"},c=>this.resetModePrivate(c)),this._parser.registerCsiHandler({final:"m"},c=>this.charAttributes(c)),this._parser.registerCsiHandler({final:"n"},c=>this.deviceStatus(c)),this._parser.registerCsiHandler({prefix:"?",final:"n"},c=>this.deviceStatusPrivate(c)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},c=>this.softReset(c)),this._parser.registerCsiHandler({prefix:">",final:"q"},c=>this.sendXtVersion(c)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},c=>this.setCursorStyle(c)),this._parser.registerCsiHandler({final:"r"},c=>this.setScrollRegion(c)),this._parser.registerCsiHandler({final:"s"},c=>this.saveCursor(c)),this._parser.registerCsiHandler({final:"t"},c=>this.windowOptions(c)),this._parser.registerCsiHandler({final:"u"},c=>this.restoreCursor(c)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},c=>this.insertColumns(c)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},c=>this.deleteColumns(c)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},c=>this.selectProtected(c)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},c=>this.requestMode(c,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},c=>this.requestMode(c,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},c=>this.kittyKeyboardSet(c)),this._parser.registerCsiHandler({prefix:"?",final:"u"},c=>this.kittyKeyboardQuery(c)),this._parser.registerCsiHandler({prefix:">",final:"u"},c=>this.kittyKeyboardPush(c)),this._parser.registerCsiHandler({prefix:"<",final:"u"},c=>this.kittyKeyboardPop(c)),this._parser.setExecuteHandler("\x07",()=>this.bell()),this._parser.setExecuteHandler(` -+`,()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler(" ",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("\x84",()=>this.index()),this._parser.setExecuteHandler("\x85",()=>this.nextLine()),this._parser.setExecuteHandler("\x88",()=>this.tabSet()),this._parser.registerOscHandler(0,new se(c=>(this.setTitle(c),this.setIconName(c),!0))),this._parser.registerOscHandler(1,new se(c=>this.setIconName(c))),this._parser.registerOscHandler(2,new se(c=>this.setTitle(c))),this._parser.registerOscHandler(4,new se(c=>this.setOrReportIndexedColor(c))),this._parser.registerOscHandler(8,new se(c=>this.setHyperlink(c))),this._parser.registerOscHandler(10,new se(c=>this.setOrReportFgColor(c))),this._parser.registerOscHandler(11,new se(c=>this.setOrReportBgColor(c))),this._parser.registerOscHandler(12,new se(c=>this.setOrReportCursorColor(c))),this._parser.registerOscHandler(104,new se(c=>this.restoreIndexedColor(c))),this._parser.registerOscHandler(110,new se(c=>this.restoreFgColor(c))),this._parser.registerOscHandler(111,new se(c=>this.restoreBgColor(c))),this._parser.registerOscHandler(112,new se(c=>this.restoreCursorColor(c))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(let c in $)this._parser.registerEscHandler({intermediates:"(",final:c},()=>this.selectCharset("("+c)),this._parser.registerEscHandler({intermediates:")",final:c},()=>this.selectCharset(")"+c)),this._parser.registerEscHandler({intermediates:"*",final:c},()=>this.selectCharset("*"+c)),this._parser.registerEscHandler({intermediates:"+",final:c},()=>this.selectCharset("+"+c)),this._parser.registerEscHandler({intermediates:"-",final:c},()=>this.selectCharset("-"+c)),this._parser.registerEscHandler({intermediates:".",final:c},()=>this.selectCharset("."+c)),this._parser.registerEscHandler({intermediates:"/",final:c},()=>this.selectCharset("/"+c));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(c=>(this._logService.error("Parsing error: ",c),c)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new li((c,u)=>this.requestStatusString(c,u)))}getAttrData(){return this._curAttrData}_preserveStack(e,t,r,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=3){let t,r=new Promise((s,o)=>{t=setTimeout(()=>o("#SLOW_TIMEOUT"),5e3)});Promise.race([e,r]).then(()=>{t!==void 0&&clearTimeout(t)},s=>{if(t!==void 0&&clearTimeout(t),s!=="#SLOW_TIMEOUT")throw s;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let r,s=this._activeBuffer.x,o=this._activeBuffer.y,a=0,l=this._parseStack.paused;if(l){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;s=this._parseStack.cursorStartX,o=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(a=this._parseStack.position+131072)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e=="string"?` "${e}"`:` "${Array.prototype.map.call(e,c=>String.fromCharCode(c)).join("")}"`}`),this._logService.logLevel===0&&this._logService.trace("parsing data (codes)",typeof e=="string"?e.split("").map(c=>c.charCodeAt(0)):e),this._parseBuffer.length131072)for(let c=a;c0&&f.getWidth(this._activeBuffer.x-1)===2&&f.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let p=this._parser.precedingJoinState;for(let b=t;bh){if(d){let A=f,T=this._activeBuffer.x-C;if(this._activeBuffer.x=C,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!f)return;for(C>0&&f instanceof Re&&f.copyCellsFrom(A,T,0,C,!1);T=0;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(c&&(f.insertCells(this._activeBuffer.x,o-C,this._activeBuffer.getNullCell(u)),f.getWidth(h-1)===2&&f.setCellFromCodepoint(h-1,0,1,u)),f.setCellFromCodepoint(this._activeBuffer.x++,s,o,u),o>0)for(;--o;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=p,this._activeBuffer.x0&&f.getWidth(this._activeBuffer.x)===0&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return e.final==="t"&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,r=>xn(r.params[0],this._optionsService.rawOptions.windowOptions)?t(r):!0):this._parser.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new li(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new se(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new fr(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){let t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let t=e.params[0];return t===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:t===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let t=e.params[0];return t===1&&(this._curAttrData.bg|=536870912),(t===2||t===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,r,s=!1,o=!1){let a=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);a&&(a.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),o),s&&(a.isWrapped=!1))}_resetBufferLine(e,t=!1){let r=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);r&&(r.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),r.isWrapped=!1)}eraseInDisplay(e,t=!1){this._restrictCursor(this._bufferService.cols);let r;switch(e.params[0]){case 0:for(r=this._activeBuffer.y,this._dirtyRowTracker.markDirty(r),this._eraseInBufferLine(r++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);r=this._bufferService.cols){let o=this._activeBuffer.lines.get(r+1);o&&(o.isWrapped=!1)}for(;r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(r=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,r-1);r--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+r)?.getTrimmedLength(););for(;r>=0;r--)this._bufferService.scroll(this._eraseAttrData())}else{for(r=this._bufferService.rows,this._dirtyRowTracker.markDirty(r-1);r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0)}break;case 3:let s=this._activeBuffer.lines.length-this._bufferService.rows;s>0&&(this._activeBuffer.lines.trimStart(s),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-s,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-s,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0));break}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t);break}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let c=d;for(let u=1;u0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("\x1B[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("\x1B[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("\x1B[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("\x1B[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("\x1B[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`\x1BP>|xterm.js(${yn})\x1B\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(ee[ee.NOT_RECOGNIZED=0]="NOT_RECOGNIZED",ee[ee.SET=1]="SET",ee[ee.RESET=2]="RESET",ee[ee.PERMANENTLY_SET=3]="PERMANENTLY_SET",ee[ee.PERMANENTLY_RESET=4]="PERMANENTLY_RESET"))(r||={});let s=this._coreService.decPrivateModes,{activeProtocol:o,activeEncoding:a}=this._mouseStateService,l=this._coreService,{buffers:h,cols:d}=this._bufferService,{active:c,alt:u}=h,f=this._optionsService.rawOptions,p=(S,C)=>(l.triggerDataEvent(`\x1B[${t?"":"?"}${S};${C}$y`),!0),b=S=>S?1:2,_=e.params[0];return t?_===2?p(_,4):_===4?p(_,b(l.modes.insertMode)):_===12?p(_,3):_===20?p(_,b(f.convertEol)):p(_,0):_===1?p(_,b(s.applicationCursorKeys)):_===3?p(_,f.windowOptions.setWinLines?d===80?2:d===132?1:0:0):_===6?p(_,b(s.origin)):_===7?p(_,b(s.wraparound)):_===8?p(_,3):_===9?p(_,b(o==="X10")):_===12?p(_,b(f.cursorBlink)):_===25?p(_,b(!l.isCursorHidden)):_===45?p(_,b(s.reverseWraparound)):_===66?p(_,b(s.applicationKeypad)):_===67?p(_,4):_===1e3?p(_,b(o==="VT200")):_===1002?p(_,b(o==="DRAG")):_===1003?p(_,b(o==="ANY")):_===1004?p(_,b(s.sendFocus)):_===1005?p(_,4):_===1006?p(_,b(a==="SGR")):_===1015?p(_,4):_===1016?p(_,b(a==="SGR_PIXELS")):_===1048?p(_,1):_===47||_===1047||_===1049?p(_,b(c===u)):_===2004?p(_,b(s.bracketedPasteMode)):_===2026?p(_,b(s.synchronizedOutput)):_===9001&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?p(_,b(s.win32InputMode)):p(_,0)}_updateAttrColor(e,t,r,s,o){return t===2?(e|=50331648,e&=-16777216,e|=fe.fromColorRGB([r,s,o])):t===5&&(e&=-67108864,e|=33554432|r&255),e}_extractColor(e,t,r){let s=[0,0,-1,0,0,0],o=0,a=0;do{if(s[a+o]=e.params[t+a],e.hasSubParams(t+a)){let l=e.getSubParams(t+a),h=0;do s[1]===5&&(o=1),s[a+h+1+o]=l[h];while(++h=2||s[1]===2&&a+o>=5)break;s[1]&&(o=1)}while(++a+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,e===0&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=U.fg,e.bg=U.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let t=e.length,r,s=this._curAttrData;for(let o=0;o=30&&r<=37?(s.fg&=-67108864,s.fg|=16777216|r-30):r>=40&&r<=47?(s.bg&=-67108864,s.bg|=16777216|r-40):r>=90&&r<=97?(s.fg&=-67108864,s.fg|=16777216|r-90|8):r>=100&&r<=107?(s.bg&=-67108864,s.bg|=16777216|r-100|8):r===0?this._processSGR0(s):r===1?s.fg|=134217728:r===3?s.bg|=67108864:r===4?(s.fg|=268435456,this._processUnderline(e.hasSubParams(o)?e.getSubParams(o)[0]:1,s)):r===5?s.fg|=536870912:r===7?s.fg|=67108864:r===8?s.fg|=1073741824:r===9?s.fg|=2147483648:r===2?s.bg|=134217728:r===21?this._processUnderline(2,s):r===22?(s.fg&=-134217729,s.bg&=-134217729):r===23?s.bg&=-67108865:r===24?(s.fg&=-268435457,this._processUnderline(0,s)):r===25?s.fg&=-536870913:r===27?s.fg&=-67108865:r===28?s.fg&=-1073741825:r===29?s.fg&=2147483647:r===39?(s.fg&=-67108864,s.fg|=U.fg&16777215):r===49?(s.bg&=-67108864,s.bg|=U.bg&16777215):r===38||r===48||r===58?o+=this._extractColor(e,o,s):r===53?s.bg|=1073741824:r===55?s.bg&=-1073741825:r===221&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.fg&=-134217729:r===222&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.bg&=-134217729:r===59?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",r);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("\x1B[0n");break;case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[${t};${r}R`);break}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[?${t};${r}R`);break;case 15:break;case 25:break;case 26:break;case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??!0)&&this._onRequestColorSchemeQuery.fire();break}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=U.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let t=e.length===0?1:e.params[0];if(t===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar";break}let r=t%2===1;this._coreService.decPrivateModes.cursorBlink=r}return!0}setScrollRegion(e){let t=e.params[0]||1,r;return(e.length<2||(r=e.params[1])>this._bufferService.rows||r===0)&&(r=this._bufferService.rows),r>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=r-1,this._setCursor(0,0)),!0}windowOptions(e){if(!xn(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:t!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`\x1B[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(t===0||t===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),(t===0||t===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:(t===0||t===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(t===0||t===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop());break}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let t=0;t1;){let s=r.shift(),o=r.shift();if(/^\d+$/.exec(s)){let a=parseInt(s,10);if(Tn(a))if(o==="?")t.push({type:0,index:a});else{let l=xs(o);l&&t.push({type:1,index:a,color:l})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){let t=e.indexOf(";");if(t===-1)return!0;let r=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(r,s):r.trim()?!1:this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();let r=e.split(":"),s,o=r.findIndex(a=>a.startsWith("id="));return o!==-1&&(s=r[o].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){let r=e.split(";");for(let s=0;s=this._specialColors.length);++s,++t)if(r[s]==="?")this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{let o=xs(r[s]);o&&this._onColor.fire([{type:1,index:this._specialColors[t],color:o}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let t=[],r=e.split(";");for(let s=0;s=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=U.clone(),this._eraseAttrDataInternal=U.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new F;e.content=1<<22|69,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`\x1B${l}\x1B\\`),!0),s=this._bufferService.buffer,o=this._optionsService.rawOptions,a={block:2,underline:4,bar:6};return r(e==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:e==='"p'?'P1$r61;1"p':e==="r"?`P1$r${s.scrollTop+1};${s.scrollBottom+1}r`:e==="m"?"P1$r0m":e===" q"?`P1$r${a[o.cursorStyle]-(o.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(r){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t;break}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`\x1B[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;return o.length>=16&&o.shift(),o.push(r.flags),r.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=Math.max(1,e.params[0]||1),r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;for(let a=0;a0;a++)r.flags=o.pop();return o.length===0&&t>0&&(r.flags=0),!0}},hi=class{constructor(i){this._bufferService=i;this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(i){ithis.end&&(this.end=i)}markRangeDirty(i,e){i>e&&(wn=i,i=e,e=wn),ithis.end&&(this.end=e)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};hi=y([m(0,D)],hi);function Tn(n){return 0<=n&&n<256}var br=class extends g{constructor(e){super();this._action=e;this._writeBuffer=[];this._callbacks=[];this._pendingData=0;this._bufferOffset=0;this._isSyncWriting=!1;this._syncCalls=0;this._didUserInput=!1;this._innerWriteTimer=this._register(new Ce);this._onWriteParsed=this._register(new v);this.onWriteParsed=this._onWriteParsed.event;this._register(E(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed||this._isSyncWriting)return;this._isSyncWriting=!0;let e,t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);let r=this._callbacks.shift();r&&r()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(t!==void 0&&this._syncCalls>t){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let r;for(;r=this._writeBuffer.shift();){this._action(r);let s=this._callbacks.shift();s&&s()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),this._innerWrite();return}this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;let r=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let s=this._writeBuffer[this._bufferOffset],o=this._action(s,t);if(o){let l=h=>{this._store.isDisposed||(performance.now()-r>=12?this._scheduleInnerWrite(0,h):this._innerWrite(r,h))};o.catch(h=>(queueMicrotask(()=>{throw h}),Promise.resolve(!1))).then(l);return}let a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=s.length,performance.now()-r>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}};var kt=class{constructor(i){this._bufferService=i;this._nextId=1;this._entriesWithId=new Map;this._dataByLinkId=new Map}registerLink(i){let e=this._bufferService.buffer;if(i.id===void 0){let l=e.addMarker(e.ybase+e.y),h={data:i,id:this._nextId++,lines:[l]};return l.onDispose(()=>this._removeMarkerFromLink(h,l)),this._dataByLinkId.set(h.id,h),h.id}let t=i,r=this._getEntryIdKey(t),s=this._entriesWithId.get(r);if(s)return this.addLineToLink(s.id,e.ybase+e.y),s.id;let o=e.addMarker(e.ybase+e.y),a={id:this._nextId++,key:this._getEntryIdKey(t),data:t,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(a,o)),this._entriesWithId.set(a.key,a),this._dataByLinkId.set(a.id,a),a.id}addLineToLink(i,e){let t=this._dataByLinkId.get(i);if(t&&t.lines.every(r=>r.line!==e)){let r=this._bufferService.buffer.addMarker(e);t.lines.push(r),r.onDispose(()=>this._removeMarkerFromLink(t,r))}}getLinkData(i){return this._dataByLinkId.get(i)?.data}_getEntryIdKey(i){return`${i.id};;${i.uri}`}_removeMarkerFromLink(i,e){let t=i.lines.indexOf(e);t!==-1&&(i.lines.splice(t,1),i.lines.length===0&&(i.data.id!==void 0&&this._entriesWithId.delete(i.key),this._dataByLinkId.delete(i.id)))}};kt=y([m(0,D)],kt);var Dn=!1,vr=class extends g{constructor(e){super();this._windowsWrappingHeuristics=this._register(new B);this._onBinary=this._register(new v);this.onBinary=this._onBinary.event;this._onData=this._register(new v);this.onData=this._onData.event;this._onLineFeed=this._register(new v);this.onLineFeed=this._onLineFeed.event;this._onRender=this._register(new v);this.onRender=this._onRender.event;this._onResize=this._register(new v);this.onResize=this._onResize.event;this._onWriteParsed=this._register(new v);this.onWriteParsed=this._onWriteParsed.event;this._onScroll=this._register(new v);this._instantiationService=new Qi,this.optionsService=this._register(new sr(e)),this._instantiationService.setService(R,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(wt)),this._instantiationService.setService(_e,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(Dt)),this._instantiationService.setService(D,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(Lt)),this._instantiationService.setService(X,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(nr)),this._instantiationService.setService(Me,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(me)),this.unicodeService.register(new or),this._instantiationService.setService(Si,this.unicodeService),this._charsetService=this._instantiationService.createInstance(ar),this._instantiationService.setService(Us,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(kt),this._instantiationService.setService(vi,this._oscLinkService),this._inputHandler=this._register(new mr(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(Y.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(Y.forward(this._bufferService.onResize,this._onResize)),this._register(Y.forward(this.coreService.onData,this._onData)),this._register(Y.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new br((t,r)=>this._inputHandler.parse(t,r))),this._register(Y.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new v),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let t in e)this.optionsService.options[t]=e[t]}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=3&&!Dn&&(this._logService.warn("writeSync is unreliable and will be removed soon."),Dn=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1,t=this.optionsService.rawOptions.windowsPty;t&&t.backend!==void 0&&t.buildNumber!==void 0&&(e=t.backend==="conpty"&&t.buildNumber<21376),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Cs.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>(Cs(this._bufferService),!1))),this._windowsWrappingHeuristics.value=E(()=>{for(let t of e)t.dispose()})}}};var ce=0,Sr=class{constructor(i,e){this._getKey=i;this._array=[];this._insertedValues=[];this._isFlushingInserted=!1;this._deletedIndices=new Set;this._indicesByValue=new Map;this._isFlushingDeleted=!1;this._flushInsertedTask=new Ct(e),this._flushDeletedTask=new Ct(e)}clear(){this._array.length=0,this._indicesByValue.clear(),this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.clear(),this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(i){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(i)}_flushInserted(){let i=this._insertedValues.sort((s,o)=>this._getKey(s)-this._getKey(o)),e=0,t=0,r=new Array(this._array.length+this._insertedValues.length);for(let s=0;s=this._array.length||this._getKey(i[e])<=this._getKey(this._array[t])?(r[s]=i[e],e++):r[s]=this._array[t++];this._array=r,this._rebuildIdentityIndex(),this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}_rebuildIdentityIndex(){this._indicesByValue.clear();for(let i=this._array.length-1;i>=0;i--){let e=this._array[i],t=this._indicesByValue.get(e);t===void 0?this._indicesByValue.set(e,i):typeof t=="number"?this._indicesByValue.set(e,[t,i]):t.push(i)}}delete(i){this._flushCleanupInserted();let e=this._indicesByValue.get(i);if(e===void 0)return!1;let t=typeof e=="number"?e:e.pop();return t===void 0?!1:((typeof e=="number"||e.length===0)&&this._indicesByValue.delete(i),this._deletedIndices.size===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.add(t),!0)}_flushDeleted(){this._isFlushingDeleted=!0;let i=new Array(this._array.length-this._deletedIndices.size),e=0;for(let t=0;t0&&this._flushDeletedTask.flush()}*getKeyIterator(i){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(ce=this._search(i),!(ce<0||ce>=this._array.length)&&this._getKey(this._array[ce])===i))do yield this._array[ce];while(++ce=this._array.length)&&this._getKey(this._array[ce])===i))do e(this._array[ce]);while(++ce=e;){let r=e+t>>1,s=this._getKey(this._array[r]);if(s>i)t=r-1;else if(s0&&this._getKey(this._array[r-1])===i;)r--;return r}}return e}};var Pt=0,gr=0,Mt=class extends g{constructor(e,t){super();this._logService=e;this._bufferService=t;this._lineCache=this._register(new ws);this._onDecorationRegistered=this._register(new v);this.onDecorationRegistered=this._onDecorationRegistered.event;this._onDecorationRemoved=this._register(new v);this.onDecorationRemoved=this._onDecorationRemoved.event;this._decorations=new Sr(r=>r?.marker.line,this._logService),this._register(E(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let t=new Ts(e);if(t){let r=t.marker.onDispose(()=>t.dispose()),s=t.onDispose(()=>{s.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),r.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,r){let s=this._lineCache.getDecorationsOnLine(t);if(s)for(let o of s)Pt=o.options.x??0,gr=Pt+(o.options.width??1),e>=Pt&&e=Pt&&ethis._handleBufferLinesTrim(r))),t.add(e.onInsert(r=>this._handleBufferLinesInsert(r))),t.add(e.onDelete(r=>this._handleBufferLinesDelete(r)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){let t=e.marker.line;if(t<0)return;e._indexedStartLine=t;let r=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{let t=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(let r of t)r()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;let t=new Map;for(let[r,s]of this._decorationsByLine){let o=r-e;o<0||this._mergeLineBucket(t,o,s)}this._decorationsByLine.clear();for(let[r,s]of t)this._decorationsByLine.set(r,s);for(let r of this._decorations)r.marker.isDisposed||(r._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,r){let s=e.get(t);if(s)for(let o=0,a=r.length;ot&&(s.push(a),this._removeFromLineBuckets(a))}let o=new Map;for(let[a,l]of this._decorationsByLine){let h=a>=t?a+r:a;this._mergeLineBucket(o,h,l)}this._decorationsByLine.clear();for(let[a,l]of o)this._decorationsByLine.set(a,l);for(let a of this._decorations)a.marker.isDisposed||a._indexedStartLine>=t&&(a._indexedStartLine=a.marker.line);for(let a of s)this._addToLineBuckets(a)}_applyBufferLinesDelete(e){let t=e.index+e.amount,r=new Map;for(let[o,a]of this._decorationsByLine){if(o>=e.index&&o=t?o-e.amount:o;this._mergeLineBucket(r,l,a)}this._decorationsByLine.clear();for(let[o,a]of r)this._decorationsByLine.set(o,a);let s=[];for(let o of this._decorations){if(o.marker.isDisposed)continue;let a=o._indexedStartLine,l=this._getDecorationHeight(o);a>=t?o._indexedStartLine=o.marker.line:at&&s.push(o)}for(let o of s)this._reindexDecoration(o)}},Ts=class extends pe{constructor(e){super();this.options=e;this.onRenderEmitter=this.add(new v);this.onRender=this.onRenderEmitter.event;this._onDispose=this.add(new v);this.onDispose=this._onDispose.event;this._cachedBg=null;this._cachedFg=null;this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}get backgroundColorRGB(){return this._cachedBg===null&&(this.options.backgroundColor?this._cachedBg=M.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return this._cachedFg===null&&(this.options.foregroundColor?this._cachedFg=M.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}dispose(){this._onDispose.fire(),super.dispose()}};var Ro=1e3,Cr=class{constructor(i,e=Ro){this._renderCallback=i;this._debounceThresholdMS=e;this._lastRefreshMs=0;this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e;let r=performance.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._refreshTimeoutID!==void 0&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let s=r-this._lastRefreshMs,o=this._debounceThresholdMS-s;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},o)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e)}};var Rn=!1,je=class extends g{constructor(e,t,r,s){super();this._terminal=e;this._coreBrowserService=r;this._renderService=s;this._rowColumns=new WeakMap;this._liveRegionLineCount=0;this._charsToConsume=[];this._charsToAnnounce="";let o=this._coreBrowserService.mainDocument;this._accessibilityContainer=o.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=o.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let a=0;athis._handleBoundaryFocus(a,0),this._bottomBoundaryFocusListener=a=>this._handleBoundaryFocus(a,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=o.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new Cr(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");Rn?(this._accessibilityContainer.classList.add("debug"),this._rowContainer.classList.add("debug"),this._debugRootContainer=o.createElement("div"),this._debugRootContainer.classList.add("xterm"),this._debugRootContainer.appendChild(o.createTextNode("------start a11y------")),this._debugRootContainer.appendChild(this._accessibilityContainer),this._debugRootContainer.appendChild(o.createTextNode("------end a11y------")),this._terminal.element.insertAdjacentElement("afterend",this._debugRootContainer)):this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(a=>this._handleResize(a.rows))),this._register(this._terminal.onRender(a=>this._refreshRows(a.start,a.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(a=>this._handleChar(a))),this._register(this._terminal.onLineFeed(()=>this._handleChar(` +-`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent=Ze.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let r=this._terminal.buffer,s=r.lines.length.toString();for(let o=e;o<=t;o++){let a=r.lines.get(r.ydisp+o),l=[],h=a?.translateToString(!0,void 0,void 0,l)||"",d=(r.ydisp+o+1).toString(),c=this._rowElements[o];c&&(h.length===0?(c.textContent="\xA0",this._rowColumns.set(c,[0,1])):(c.textContent=h,this._rowColumns.set(c,l)),c.setAttribute("aria-posinset",d),c.setAttribute("aria-setsize",s),this._alignRowWidth(c))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent===Ze.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){let r=e.target,s=this._rowElements[t===0?1:this._rowElements.length-2],o=r.getAttribute("aria-posinset"),a=t===0?"1":`${this._terminal.buffer.lines.length}`;if(o===a||e.relatedTarget!==s)return;let l,h;if(t===0?(l=r,h=this._rowElements.pop(),this._rowContainer.removeChild(h)):(l=this._rowElements.shift(),h=r,this._rowContainer.removeChild(l)),l.removeEventListener("focus",this._topBoundaryFocusListener),h.removeEventListener("focus",this._bottomBoundaryFocusListener),t===0){let d=this._createAccessibilityTreeNode();this._rowElements.unshift(d),this._rowContainer.insertAdjacentElement("afterbegin",d)}else{let d=this._createAccessibilityTreeNode();this._rowElements.push(d),this._rowContainer.appendChild(d)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error("anchorNode and/or focusNode are null");return}let t={node:e.anchorNode,offset:e.anchorOffset},r={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(r.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===r.node&&t.offset>r.offset)&&([t,r]=[r,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let s=this._rowElements.slice(-1)[0];if(r.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(r={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(r.node))return;let o=({node:h,offset:d})=>{let c=h instanceof Text?h.parentNode:h,u=parseInt(c?.getAttribute("aria-posinset"),10)-1;if(isNaN(u))return console.warn("row is invalid. Race condition?"),null;let _=this._rowColumns.get(c);if(!_)return console.warn("columns is null. Race condition?"),null;let p=d<_.length?_[d]:_.slice(-1)[0]+1;return p>=this._terminal.cols&&(++u,p=0),{row:u,column:p}},a=o(t),l=o(r);if(!(!a||!l)){if(a.row>l.row||a.row===l.row&&a.column>=l.column)throw new Error("invalid range");this._terminal.select(a.column,a.row,(l.row-a.row)*this._terminal.cols-a.column+l.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let t=this._rowContainer.children.length;te;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{Oe(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(C(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(C(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register(C(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register(C(this._element,"mouseup",this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;let r=e.composedPath();for(let s=0;s{s?.forEach(o=>{o.link.dispose&&o.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let r=!1;for(let[s,o]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(s)&&(r=this._checkLinkProviderResult(s,e,r)):o.provideLinks(e.y,a=>{if(this._isMouseOut)return;let l=a?.map(h=>({link:h}));this._activeProviderReplies?.set(s,l),r=this._checkLinkProviderResult(s,e,r),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let r=new Set;for(let s=0;se?this._bufferService.cols:l.link.range.end.x;for(let c=h;c<=d;c++){if(r.has(c)){o.splice(a--,1);break}r.add(c)}}}}_checkLinkProviderResult(e,t,r){if(!this._activeProviderReplies)return r;let s=this._activeProviderReplies.get(e),o=!1;for(let a=0;athis._linkAtPosition(l.link,t));a&&(r=!0,this._handleNewLink(a))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!r)for(let a=0;athis._linkAtPosition(h.link,t));if(l){r=!0,this._handleNewLink(l);break}}return r}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element);t&&this._mouseDownLink&&Eo(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,Oe(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0?!0:e.link.decorations.underline,pointerCursor:e.link.decorations===void 0?!0:e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:r=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==r&&(this._currentLink.state.decorations.pointerCursor=r,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",r))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:r=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==r&&(this._currentLink.state.decorations.underline=r,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,r))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(r=>{if(!this._currentLink)return;let s=r.start===0?0:r.start+1+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.ydisp+1+r.end;if(this._currentLink.link.range.start.y>=s&&this._currentLink.link.range.end.y<=o&&(this._clearCurrentLink(s,o),this._lastMouseEvent)){let a=this._positionFromMouseEvent(this._lastMouseEvent,this._element);a&&this._askForLink(a,!1)}})))}_linkHover(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)}_fireUnderlineEvent(e,t){let r=e.range,s=this._bufferService.buffer.ydisp,o=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-s-1,r.end.x,r.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(o)}_linkLeave(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)}_linkAtPosition(e,t){let r=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,o=t.y*this._bufferService.cols+t.x;return r<=o&&o<=s}_positionFromMouseEvent(e,t){let r=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,r,s,o){return{x1:e,y1:t,x2:r,y2:s,cols:this._bufferService.cols,fg:o}}};Ot=y([m(1,Be),m(2,V),m(3,D),m(4,Ii)],Ot);function Eo(n,i){return n.text===i.text&&n.range.start.x===i.range.start.x&&n.range.start.y===i.range.start.y&&n.range.end.x===i.range.end.x&&n.range.end.y===i.range.end.y}var Ir=class extends br{constructor(e={}){super(e);this._linkifier=this._register(new B);this.browser=Ke;this._keyDownHandled=!1;this._keyDownSeen=!1;this._keyPressHandled=!1;this._unprocessedDeadKey=!1;this._accessibilityManager=this._register(new B);this._onCursorMove=this._register(new b);this.onCursorMove=this._onCursorMove.event;this._onKey=this._register(new b);this.onKey=this._onKey.event;this._onSelectionChange=this._register(new b);this.onSelectionChange=this._onSelectionChange.event;this._onTitleChange=this._register(new b);this.onTitleChange=this._onTitleChange.event;this._onBell=this._register(new b);this.onBell=this._onBell.event;this._onFocus=this._register(new b);this._onBlur=this._register(new b);this._onA11yCharEmitter=this._register(new b);this._onA11yTabEmitter=this._register(new b);this._onWillOpen=this._register(new b);this._onDimensionsChange=this._register(new b);this.onDimensionsChange=this._onDimensionsChange.event;this._setup(),this._decorationService=this._instantiationService.createInstance(Bt),this._instantiationService.setService(ge,this._decorationService),this._keyboardService=this._instantiationService.createInstance(xt),this._instantiationService.setService(Ks,this._keyboardService),this._linkProviderService=this._instantiationService.createInstance(zi),this._instantiationService.setService(Ii,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(et)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(t=>this.refresh(t?.start??0,t?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(t=>this._reportWindowsOptions(t))),this._register(this._inputHandler.onColor(t=>this._handleColorEvent(t))),this._register(j.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(j.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(j.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(j.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(t=>this._afterResize(t.cols,t.rows))),this._register(E(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}get dimensions(){if(!this._renderService)return;let e=this._renderService.dimensions;return{css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}}_handleColorEvent(e){if(this._themeService)for(let t of e){let r,s;switch(t.index){case 256:r="foreground",s="10";break;case 257:r="background",s="11";break;case 258:r="cursor",s="12";break;default:r="ansi",s="4;"+t.index}switch(t.type){case 0:let o=k.toColorRGB(r==="ansi"?this._themeService.colors.ansi[t.index]:this._themeService.colors[r]);this.coreService.triggerDataEvent(`\x1B]${s};${In(o)}\x1B\\`);break;case 1:if(r==="ansi")this._themeService.modifyColors(a=>a.ansi[t.index]=O.toColor(...t.color));else{let a=r;this._themeService.modifyColors(l=>l[a]=O.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index);break}}}_reportColorScheme(){if(!this._themeService)return;let e=Z.relativeLuminance(this._themeService.colors.background.rgba>>8),t=Z.relativeLuminance(this._themeService.colors.foreground.rgba>>8),r=e{this.hasSelection()&&Bs(t,this._selectionService)}));let e=t=>Os(t,this.textarea,this.coreService,this.optionsService);this._register(C(this.textarea,"paste",e)),this._register(C(this.element,"paste",e)),nt?this._register(C(this.element,"mousedown",t=>{t.button===2&&Nr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(C(this.element,"contextmenu",t=>{Nr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),Gt&&this._register(C(this.element,"auxclick",t=>{t.button===1&&Or(t,this.textarea,this.screenElement)}))}_bindKeys(){this._register(C(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register(C(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register(C(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register(C(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register(C(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register(C(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this._register(C(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",l=>this.element.classList.toggle("allow-transparency",l))),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register(C(this.screenElement,"mousemove",l=>this.updateCursorStyle(l))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let r=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",Kt.get()),qr||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>r.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(Ki,this.textarea,e.ownerDocument.defaultView??window,this._document??(typeof window<"u"?window.document:null))),this._instantiationService.setService(G,this._coreBrowserService),this._register(C(this.textarea,"focus",l=>this._handleTextAreaFocus(l))),this._register(C(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(bt,this._document,this._helperContainer),this._instantiationService.setService(Pe,this._charSizeService),this._themeService=this._instantiationService.createInstance(yt),this._instantiationService.setService(_e,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(He),this._instantiationService.setService(gi,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(Ct,this.rows,this.screenElement)),this._instantiationService.setService(V,this._renderService),this._register(this._renderService.onRenderedViewportChange(l=>this._onRender.fire(l))),this._register(this._renderService.onDimensionsChange(l=>this._onDimensionsChange.fire({css:{canvas:{...l.css.canvas},cell:{...l.css.cell}},device:{canvas:{...l.device.canvas},cell:{...l.device.cell},char:{...l.device.char}}}))),this.onResize(l=>this._renderService.resize(l.cols,l.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(ft,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(vt),this._instantiationService.setService(Be,this._mouseCoordsService);let s=this._linkifier.value=this._register(this._instantiationService.createInstance(Ot,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(l){this._logService.error("onWillOpen handler threw an exception",l)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(dt,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(l=>{super.scrollLines(l,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(Et,this.element,this.screenElement,s)),this._instantiationService.setService(Si,this._selectionService),this._mouseService=this._instantiationService.createInstance(gt),this._instantiationService.setService(Us,this._mouseService),this._register(this._selectionService.onRequestScrollLines(l=>this.scrollLines(l.amount,l.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(l=>this._renderService.handleSelectionChanged(l.start,l.end,l.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(l=>{this.textarea.value=l,this.textarea.focus(),this.textarea.select()})),this._register(j.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(ut,this.screenElement)),this._register(C(this.element,"mousedown",l=>this._selectionService.handleMouseDown(l))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(Ye,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",l=>this._handleScreenReaderModeOptionChange(l)));let o=this.options.scrollbar?.showScrollbar??!0,a=this.options.scrollbar?.width;o&&a&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ze,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",l=>{let h=(l?.showScrollbar??!0)&&!!l?.width;!this._overviewRulerRenderer&&h&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ze,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:l=>this._viewport?.handleTouchScroll(l)},l=>this._register(l),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(mt,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,r=!1){this._renderService?.refreshRows(e,t,r)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){Br(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,r){this._selectionService.setSelection(e,t,r)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(!(!this._selectionService||!this._selectionService.hasSelection))return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;!t&&(e.key==="Dead"||e.key==="AltGraph")&&(this._unprocessedDeadKey=!0);let r=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),r.type===3||r.type===2){let o=this.rows-1;return this.scrollLines(r.type===2?-o:o),e.preventDefault(),e.stopPropagation(),!1}if(r.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(r.cancel&&(e.preventDefault(),e.stopPropagation()),!r.key)||!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;(r.key===""||r.key==="\r")&&(this.textarea.value="");let s=this._keyboardService.useWin32InputMode&&ws(e);if(this._onKey.fire({key:r.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(r.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){let r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return t.type==="keypress"?r:r&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return;ws(e)||this.focus();let t=this._keyboardService.evaluateKeyUp(e);if(t?.key){let r=this._keyboardService.useWin32InputMode&&ws(e);this.coreService.triggerDataEvent(t.key,!r)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType==="insertText"&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){if(e===this.cols&&t===this.rows){this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure();return}super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e=0;i--)this._addons[i].instance.dispose()}loadAddon(i,e){let t={instance:e,dispose:e.dispose,isDisposed:!1};this._addons.push(t),e.dispose=()=>this._wrappedAddonDispose(t),e.activate(i)}_wrappedAddonDispose(i){if(i.isDisposed)return;let e=-1;for(let t=0;t=this._line.length))return e?(this._line.loadCell(i,e),e):this._line.loadCell(i,new F)}translateToString(i,e,t){return this._line.translateToString(i,e,t)}};var di=class{constructor(i,e){this._buffer=i;this.type=e}init(i){return this._buffer=i,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(i){let e=this._buffer.lines.get(i);if(e)return new Er(e)}getNullCell(){return new F}};var yr=class extends g{constructor(e){super();this._core=e;this._onBufferChange=this._register(new b);this.onBufferChange=this._onBufferChange.event;this._normal=new di(this._core.buffers.normal,"normal"),this._alternate=new di(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}};var xr=class{constructor(i){this._core=i}registerCsiHandler(i,e){return this._core.registerCsiHandler(i,t=>e(t.toArray()))}addCsiHandler(i,e){return this.registerCsiHandler(i,e)}registerDcsHandler(i,e){return this._core.registerDcsHandler(i,(t,r)=>e(t,r.toArray()))}addDcsHandler(i,e){return this.registerDcsHandler(i,e)}registerEscHandler(i,e){return this._core.registerEscHandler(i,e)}addEscHandler(i,e){return this.registerEscHandler(i,e)}registerOscHandler(i,e){return this._core.registerOscHandler(i,e)}addOscHandler(i,e){return this.registerOscHandler(i,e)}registerApcHandler(i,e){return this._core.registerApcHandler(i,e)}};var wr=class{constructor(i){this._core=i}register(i){this._core.unicodeService.register(i)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(i){this._core.unicodeService.activeVersion=i}};var yo=["cols","rows"],Ee=0,Dn=class extends g{constructor(i){super(),this._core=this._register(new Ir(i)),this._addonManager=this._register(new Cr),this._publicOptions={...this._core.options};let e=r=>this._core.options[r],t=(r,s)=>{this._checkReadonlyOptions(r),this._core.options[r]=s};for(let r in this._core.options){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this._publicOptions,r,s)}}_checkReadonlyOptions(i){if(yo.includes(i))throw new Error(`Option "${i}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new xr(this._core)}get unicode(){return this._checkProposedApi(),new wr(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new yr(this._core))}get markers(){return this._core.markers}get modes(){let i=this._core.coreService.decPrivateModes,e="none";switch(this._core.mouseStateService.activeProtocol){case"X10":e="x10";break;case"VT200":e="vt200";break;case"DRAG":e="drag";break;case"ANY":e="any";break}return{applicationCursorKeysMode:i.applicationCursorKeys,applicationKeypadMode:i.applicationKeypad,bracketedPasteMode:i.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:e,originMode:i.origin,reverseWraparoundMode:i.reverseWraparound,sendFocusMode:i.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:i.synchronizedOutput,win32InputMode:i.win32InputMode,wraparoundMode:i.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(i){for(let e in i)this._publicOptions[e]=i[e]}blur(){this._core.blur()}focus(){this._core.focus()}input(i,e=!0){this._core.input(i,e)}resize(i,e){this._verifyIntegers(i,e),this._core.resize(i,e)}open(i){this._core.open(i)}attachCustomKeyEventHandler(i){this._core.attachCustomKeyEventHandler(i)}attachCustomWheelEventHandler(i){this._core.attachCustomWheelEventHandler(i)}registerLinkProvider(i){return this._core.registerLinkProvider(i)}registerCharacterJoiner(i){return this._core.registerCharacterJoiner(i)}deregisterCharacterJoiner(i){this._core.deregisterCharacterJoiner(i)}registerMarker(i=0){return this._verifyIntegers(i),this._core.registerMarker(i)}registerDecoration(i){return this._verifyPositiveIntegers(i.x??0,i.width??0,i.height??0),this._core.registerDecoration(i)}hasSelection(){return this._core.hasSelection()}select(i,e,t){this._verifyIntegers(i,e,t),this._core.select(i,e,t)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(i,e){this._verifyIntegers(i,e),this._core.selectLines(i,e)}dispose(){super.dispose()}scrollLines(i){this._verifyIntegers(i),this._core.scrollLines(i)}scrollPages(i){this._verifyIntegers(i),this._core.scrollPages(i)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(i){this._verifyIntegers(i),this._core.scrollToLine(i)}clear(){this._core.clear()}write(i,e){this._core.write(i,e)}writeln(i,e){this._core.write(i),this._core.write(`\r +-`,e)}paste(i){this._core.paste(i)}refresh(i,e){this._verifyIntegers(i,e),this._core.refresh(i,e)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(i){this._addonManager.loadAddon(this,i)}static get strings(){return{get promptLabel(){return Kt.get()},set promptLabel(i){Kt.set(i)},get tooMuchOutput(){return Ze.get()},set tooMuchOutput(i){Ze.set(i)}}}_verifyIntegers(...i){for(Ee of i)if(Ee===1/0||isNaN(Ee)||Ee%1!==0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...i){for(Ee of i)if(Ee&&(Ee===1/0||isNaN(Ee)||Ee%1!==0||Ee<0))throw new Error("This API only accepts positive integers")}};export{Dn as Terminal}; ++`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame(()=>this._refresh())),Gt&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(e){let t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s||!t?!1:this._areCoordsInSelection(t,r,s)}isCellInSelection(e,t){let r=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!r||!s?!1:this._areCoordsInSelection([e,t],r,s)}_areCoordsInSelection(e,t,r){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){let r=this._linkifier.currentLink?.link?.range;if(r)return this._model.selectionStart=[r.start.x-1,r.start.y-1],this._model.selectionStartLength=fs(r,this._bufferService.cols),this._model.selectionEnd=void 0,!0;let s=this._getMouseBufferCoords(e);return s?(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0):!1}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){let t=this._mouseCoordsService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=Yt(this._coreBrowserService.window,e,this._screenElement)[1],r=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(t*14))}shouldForceSelection(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!e.altKey:te?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,!(e.button===2&&this.hasSelection)&&e.button===0&&!(this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive&&e.altKey)){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):e.detail===1?this._handleSingleClick(e):e.detail===2?this._handleDoubleClick(e):e.detail===3&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval(()=>this._dragScroll(),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){let t=this.hasSelection;if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0,t&&this._fireOnSelectionChange(this._model.finalSelectionStart,this._model.finalSelectionEnd,!1);let r=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);r&&r.length!==this._model.selectionStart[0]&&r.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){let t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return this._optionsService.rawOptions.mouseEventsRequireAlt&&this._mouseStateService.areMouseEventsActive?!1:e.altKey&&!(te&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;let t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd){this.refresh(!0);return}this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));let r=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows-1,e.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){let t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){let r=this._mouseCoordsService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&r[0]!==void 0&&r[1]!==void 0){let s=tn(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(s,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){let e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!!e&&!!t&&(e[0]!==t[0]||e[1]!==t[1]);if(!r){this._oldHasSelection&&this._fireOnSelectionChange(e,t,r);return}!e||!t||(!this._oldSelectionStart||!this._oldSelectionEnd||e[0]!==this._oldSelectionStart[0]||e[1]!==this._oldSelectionStart[1]||t[0]!==this._oldSelectionEnd[0]||t[1]!==this._oldSelectionEnd[1])&&this._fireOnSelectionChange(e,t,r)}_fireOnSelectionChange(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.value=e.activeBuffer.lines.onTrim(t=>this._handleTrim(t))}_convertViewportColToCharacterIndex(e,t){let r=t;for(let s=0;t>=s;s++){let o=e.loadCell(s,this._workCell).getChars().length;this._workCell.getWidth()===0?r--:o>1&&t!==s&&(r+=o-1)}return r}setSelection(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,r=!0,s=!0){if(e[0]>=this._bufferService.cols)return;let o=this._bufferService.buffer,a=o.lines.get(e[1]);if(!a)return;let l=o.translateBufferLineToString(e[1],!1),h=this._convertViewportColToCharacterIndex(a,e[0]),d=h,c=e[0]-h,u=0,f=0,p=0,b=0;if(l.charAt(h)===" "){for(;h>0&&l.charAt(h-1)===" ";)h--;for(;d1&&(b+=A-1,d+=A-1);C>0&&h>0&&!this._isCharWordSeparator(a.loadCell(C-1,this._workCell));){a.loadCell(C-1,this._workCell);let T=this._workCell.getChars().length;this._workCell.getWidth()===0?(u++,C--):T>1&&(p+=T-1,h-=T-1),h--,C--}for(;w1&&(b+=T-1,d+=T-1),d++,w++}}d++;let _=h+c-u+p,S=Math.min(this._bufferService.cols,d-h+u+f-p-b);if(!(!t&&l.slice(h,d).trim()==="")){if(r&&_===0&&a.getCodePoint(0)!==32){let C=o.lines.get(e[1]-1);if(C&&a.isWrapped&&C.getCodePoint(this._bufferService.cols-1)!==32){let w=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(w){let A=this._bufferService.cols-w.start;_-=A,S+=A}}}if(s&&_+S===this._bufferService.cols&&a.getCodePoint(this._bufferService.cols-1)!==32){let C=o.lines.get(e[1]+1);if(C?.isWrapped&&C.getCodePoint(0)!==32){let w=this._getWordAt([0,e[1]+1],!1,!1,!0);w&&(S+=w.length)}}return{start:_,length:S}}}_selectWordAt(e,t){let r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}}_selectToWordAt(e){let t=this._getWordAt(e,!0);if(t){let r=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}}_isCharWordSeparator(e){return e.getWidth()===0?!1:this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){let t=this._bufferService.buffer.getWrappedRangeForLine(e),r={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=fs(r,this._bufferService.cols)}};Et=y([m(3,D),m(4,X),m(5,Oe),m(6,R),m(7,Me),m(8,G),m(9,z)],Et);var Zt=class{constructor(){this._data={}}set(i,e,t){this._data[i]||(this._data[i]={}),this._data[i][e]=t}get(i,e){return this._data[i]?this._data[i][e]:void 0}clear(){this._data={}}};var Qt=class{constructor(){this._color=new Zt;this._css=new Zt}setCss(i,e,t){this._css.set(i,e,t)}getCss(i,e){return this._css.get(i,e)}setColor(i,e,t){this._color.set(i,e,t)}getColor(i,e){return this._color.get(i,e)}clear(){this._color.clear(),this._css.clear()}};var V=Object.freeze((()=>{let n=[M.toColor("#2e3436"),M.toColor("#cc0000"),M.toColor("#4e9a06"),M.toColor("#c4a000"),M.toColor("#3465a4"),M.toColor("#75507b"),M.toColor("#06989a"),M.toColor("#d3d7cf"),M.toColor("#555753"),M.toColor("#ef2929"),M.toColor("#8ae234"),M.toColor("#fce94f"),M.toColor("#729fcf"),M.toColor("#ad7fa8"),M.toColor("#34e2e2"),M.toColor("#eeeeec")],i=[0,95,135,175,215,255];for(let e=0;e<216;e++){let t=i[e/36%6|0],r=i[e/6%6|0],s=i[e%6];n.push({css:O.toCss(t,r,s),rgba:O.toRgba(t,r,s)})}for(let e=0;e<24;e++){let t=8+e*10;n.push({css:O.toCss(t,t,t),rgba:O.toRgba(t,t,t)})}return n})());var Xe=M.toColor("#ffffff"),ti=M.toColor("#000000"),nn=M.toColor("#ffffff"),on=ti,ei={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117},po=Xe,yt=class extends g{constructor(e){super();this._optionsService=e;this._contrastCache=new Qt;this._halfContrastCache=new Qt;this._onChangeColors=this._register(new v);this.onChangeColors=this._onChangeColors.event;this._colors={foreground:Xe,background:ti,cursor:nn,cursorAccent:on,selectionForeground:void 0,selectionBackgroundTransparent:ei,selectionBackgroundOpaque:L.blend(ti,ei),selectionInactiveBackgroundTransparent:ei,selectionInactiveBackgroundOpaque:L.blend(ti,ei),scrollbarSliderBackground:L.opacity(Xe,.2),scrollbarSliderHoverBackground:L.opacity(Xe,.4),scrollbarSliderActiveBackground:L.opacity(Xe,.5),overviewRulerBorder:Xe,ansi:V.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this._register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",()=>this._contrastCache.clear())),this._register(this._optionsService.onSpecificOptionChange("theme",()=>this._setTheme(this._optionsService.rawOptions.theme)))}get colors(){return this._colors}_setTheme(e={}){let t=this._colors;if(t.foreground=P(e.foreground,Xe),t.background=P(e.background,ti),t.cursor=L.blend(t.background,P(e.cursor,nn)),t.cursorAccent=L.blend(t.background,P(e.cursorAccent,on)),t.selectionBackgroundTransparent=P(e.selectionBackground,ei),t.selectionBackgroundOpaque=L.blend(t.background,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundTransparent=P(e.selectionInactiveBackground,t.selectionBackgroundTransparent),t.selectionInactiveBackgroundOpaque=L.blend(t.background,t.selectionInactiveBackgroundTransparent),t.selectionForeground=e.selectionForeground?P(e.selectionForeground,is):void 0,t.selectionForeground===is&&(t.selectionForeground=void 0),L.isOpaque(t.selectionBackgroundTransparent)&&(t.selectionBackgroundTransparent=L.opacity(t.selectionBackgroundTransparent,.3)),L.isOpaque(t.selectionInactiveBackgroundTransparent)&&(t.selectionInactiveBackgroundTransparent=L.opacity(t.selectionInactiveBackgroundTransparent,.3)),t.scrollbarSliderBackground=P(e.scrollbarSliderBackground,L.opacity(t.foreground,.2)),t.scrollbarSliderHoverBackground=P(e.scrollbarSliderHoverBackground,L.opacity(t.foreground,.4)),t.scrollbarSliderActiveBackground=P(e.scrollbarSliderActiveBackground,L.opacity(t.foreground,.5)),t.overviewRulerBorder=P(e.overviewRulerBorder,po),t.ansi=V.slice(),t.ansi[0]=P(e.black,V[0]),t.ansi[1]=P(e.red,V[1]),t.ansi[2]=P(e.green,V[2]),t.ansi[3]=P(e.yellow,V[3]),t.ansi[4]=P(e.blue,V[4]),t.ansi[5]=P(e.magenta,V[5]),t.ansi[6]=P(e.cyan,V[6]),t.ansi[7]=P(e.white,V[7]),t.ansi[8]=P(e.brightBlack,V[8]),t.ansi[9]=P(e.brightRed,V[9]),t.ansi[10]=P(e.brightGreen,V[10]),t.ansi[11]=P(e.brightYellow,V[11]),t.ansi[12]=P(e.brightBlue,V[12]),t.ansi[13]=P(e.brightMagenta,V[13]),t.ansi[14]=P(e.brightCyan,V[14]),t.ansi[15]=P(e.brightWhite,V[15]),e.extendedAnsi){let r=Math.min(t.ansi.length-16,e.extendedAnsi.length);for(let s=0;s"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};function ln(n,i,e,t){let r={type:0,cancel:!1,key:void 0},s=(n.shiftKey?1:0)|(n.altKey?2:0)|(n.ctrlKey?4:0)|(n.metaKey?8:0);switch(n.keyCode){case 0:n.key==="UIKeyInputUpArrow"?i?r.key="\x1BOA":r.key="\x1B[A":n.key==="UIKeyInputLeftArrow"?i?r.key="\x1BOD":r.key="\x1B[D":n.key==="UIKeyInputRightArrow"?i?r.key="\x1BOC":r.key="\x1B[C":n.key==="UIKeyInputDownArrow"&&(i?r.key="\x1BOB":r.key="\x1B[B");break;case 8:r.key=n.ctrlKey?"\b":"\x7F",n.altKey&&(r.key="\x1B"+r.key);break;case 9:if(n.shiftKey){r.key="\x1B[Z";break}r.key=" ",r.cancel=!0;break;case 13:n.key==="c"&&n.ctrlKey?r.key="":r.key=n.altKey?"\x1B\r":"\r",r.cancel=!0;break;case 27:r.key="\x1B",n.altKey&&(r.key="\x1B\x1B"),r.cancel=!0;break;case 37:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"D":i?r.key="\x1BOD":r.key="\x1B[D";break;case 39:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"C":i?r.key="\x1BOC":r.key="\x1B[C";break;case 38:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"A":i?r.key="\x1BOA":r.key="\x1B[A";break;case 40:if(n.metaKey)break;s?r.key="\x1B[1;"+(s+1)+"B":i?r.key="\x1BOB":r.key="\x1B[B";break;case 45:!n.shiftKey&&!n.ctrlKey&&(r.key="\x1B[2~");break;case 46:s?r.key="\x1B[3;"+(s+1)+"~":r.key="\x1B[3~";break;case 36:s?r.key="\x1B[1;"+(s+1)+"H":i?r.key="\x1BOH":r.key="\x1B[H";break;case 35:s?r.key="\x1B[1;"+(s+1)+"F":i?r.key="\x1BOF":r.key="\x1B[F";break;case 33:n.shiftKey?r.type=2:n.ctrlKey?r.key="\x1B[5;"+(s+1)+"~":r.key="\x1B[5~";break;case 34:n.shiftKey?r.type=3:n.ctrlKey?r.key="\x1B[6;"+(s+1)+"~":r.key="\x1B[6~";break;case 112:s?r.key="\x1B[1;"+(s+1)+"P":r.key="\x1BOP";break;case 113:s?r.key="\x1B[1;"+(s+1)+"Q":r.key="\x1BOQ";break;case 114:s?r.key="\x1B[1;"+(s+1)+"R":r.key="\x1BOR";break;case 115:s?r.key="\x1B[1;"+(s+1)+"S":r.key="\x1BOS";break;case 116:s?r.key="\x1B[15;"+(s+1)+"~":r.key="\x1B[15~";break;case 117:s?r.key="\x1B[17;"+(s+1)+"~":r.key="\x1B[17~";break;case 118:s?r.key="\x1B[18;"+(s+1)+"~":r.key="\x1B[18~";break;case 119:s?r.key="\x1B[19;"+(s+1)+"~":r.key="\x1B[19~";break;case 120:s?r.key="\x1B[20;"+(s+1)+"~":r.key="\x1B[20~";break;case 121:s?r.key="\x1B[21;"+(s+1)+"~":r.key="\x1B[21~";break;case 122:s?r.key="\x1B[23;"+(s+1)+"~":r.key="\x1B[23~";break;case 123:s?r.key="\x1B[24;"+(s+1)+"~":r.key="\x1B[24~";break;default:if(n.ctrlKey&&!n.shiftKey&&!n.altKey&&!n.metaKey)n.keyCode>=65&&n.keyCode<=90?r.key=String.fromCharCode(n.keyCode-64):n.keyCode===32?r.key="\0":n.keyCode>=51&&n.keyCode<=55?r.key=String.fromCharCode(n.keyCode-51+27):n.keyCode===56?r.key="\x7F":n.key==="/"?r.key="":n.keyCode===219?r.key="\x1B":n.keyCode===220?r.key="":n.keyCode===221&&(r.key="");else if((!e||t)&&n.altKey&&!n.metaKey){let a=mo[n.keyCode]?.[n.shiftKey?1:0];if(a)r.key="\x1B"+a;else if(n.keyCode>=65&&n.keyCode<=90){let l=n.ctrlKey?n.keyCode-64:n.keyCode+32,h=String.fromCharCode(l);n.shiftKey&&(h=h.toUpperCase()),r.key="\x1B"+h}else if(n.keyCode===32)r.key="\x1B"+(n.ctrlKey?"\0":" ");else if(n.key==="Dead"&&n.code.startsWith("Key")){let l=n.code.slice(3,4);n.shiftKey||(l=l.toLowerCase()),r.key="\x1B"+l,r.cancel=!0}}else if(e&&!n.altKey&&!n.ctrlKey&&!n.shiftKey&&n.metaKey)n.keyCode===65&&(r.type=1);else if(n.key&&!n.ctrlKey&&!n.altKey&&!n.metaKey&&n.keyCode>=48&&n.key.length===1)r.key=n.key;else if(n.key&&n.ctrlKey&&n.shiftKey)switch(n.code){case"Minus":r.key="";break;case"Digit2":r.key="\0";break;case"Digit6":r.key="";break}break}return r}var ii=class{constructor(){this._functionalKeyCodes={Escape:27,Enter:13,Tab:9,Backspace:127,CapsLock:57358,ScrollLock:57359,NumLock:57360,PrintScreen:57361,Pause:57362,ContextMenu:57363,F13:57376,F14:57377,F15:57378,F16:57379,F17:57380,F18:57381,F19:57382,F20:57383,F21:57384,F22:57385,F23:57386,F24:57387,F25:57388,KP_0:57399,KP_1:57400,KP_2:57401,KP_3:57402,KP_4:57403,KP_5:57404,KP_6:57405,KP_7:57406,KP_8:57407,KP_9:57408,KP_Decimal:57409,KP_Divide:57410,KP_Multiply:57411,KP_Subtract:57412,KP_Add:57413,KP_Enter:57414,KP_Equal:57415,ShiftLeft:57441,ShiftRight:57447,ControlLeft:57442,ControlRight:57448,AltLeft:57443,AltRight:57449,MetaLeft:57444,MetaRight:57450,MediaPlayPause:57430,MediaStop:57432,MediaTrackNext:57435,MediaTrackPrevious:57436,AudioVolumeDown:57438,AudioVolumeUp:57439,AudioVolumeMute:57440};this._csiTildeKeys={Insert:2,Delete:3,PageUp:5,PageDown:6,F5:15,F6:17,F7:18,F8:19,F9:20,F10:21,F11:23,F12:24};this._csiLetterKeys={ArrowUp:"A",ArrowDown:"B",ArrowRight:"C",ArrowLeft:"D",Home:"H",End:"F"};this._ss3FunctionKeys={F1:"P",F2:"Q",F3:"R",F4:"S"}}_getNumpadKeyCode(i){if(i.code.startsWith("Numpad")){let e=i.code.slice(6);if(e>="0"&&e<="9")return 57399+parseInt(e,10);switch(e){case"Decimal":return 57409;case"Divide":return 57410;case"Multiply":return 57411;case"Subtract":return 57412;case"Add":return 57413;case"Enter":return 57414;case"Equal":return 57415}}}_getModifierKeyCode(i){switch(i.code){case"ShiftLeft":return 57441;case"ShiftRight":return 57447;case"ControlLeft":return 57442;case"ControlRight":return 57448;case"AltLeft":return 57443;case"AltRight":return 57449;case"MetaLeft":return 57444;case"MetaRight":return 57450}}_encodeModifiers(i){let e=0;return i.shiftKey&&(e|=1),i.altKey&&(e|=2),i.ctrlKey&&(e|=4),i.metaKey&&(e|=8),e>0?e+1:0}_getKeyCode(i,e){let t=this._getNumpadKeyCode(i);if(t!==void 0)return t;let r=this._getModifierKeyCode(i);if(r!==void 0)return r;let s=this._functionalKeyCodes[i.key];if(s!==void 0)return s;if((i.shiftKey||e&&i.altKey)&&i.code){if(i.code.startsWith("Digit")&&i.code.length===6){let o=i.code.charAt(5);if(o>="0"&&o<="9")return o.charCodeAt(0)}if(i.code.startsWith("Key")&&i.code.length===4)return i.code.charAt(3).toLowerCase().charCodeAt(0)}if(i.key.length===1){let o=i.key.codePointAt(0);return o>=65&&o<=90?o+32:o}}_isModifierKey(i){return i.key==="Shift"||i.key==="Control"||i.key==="Alt"||i.key==="Meta"}_isLockKey(i){return i.key==="CapsLock"||i.key==="NumLock"||i.key==="ScrollLock"}_buildCsiLetterSequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1B["+i}_buildSs3Sequence(i,e,t,r){let s=r&&t!==1;if(e>0||s){let o="\x1B[1;"+(e>0?e:"1");return s&&(o+=":"+t),o+=i,o}return"\x1BO"+i}_buildCsiTildeSequence(i,e,t,r){let s=r&&t!==1,o="\x1B["+i;return(e>0||s)&&(o+=";"+(e>0?e:"1"),s&&(o+=":"+t)),o+="~",o}_buildCsiUSequence(i,e,t,r,s,o,a){let l=!!(s&2),h=!!(s&4),d="\x1B["+e,c;h&&i.shiftKey&&i.key.length===1&&!o&&!a&&(c=i.key.codePointAt(0),d+=":"+c);let f=!!(s&16)&&r!==3&&i.key.length===1&&!o&&!a&&!i.ctrlKey?i.key.codePointAt(0):void 0,p=l&&r!==1&&(r===3||f===void 0);return(t>0||p||f!==void 0)&&(d+=";",t>0?d+=t:p&&(d+="1"),p&&(d+=":"+r)),f!==void 0&&(d+=";"+f),d+="u",d}evaluate(i,e,t=1,r=!1){let s={type:0,cancel:!1,key:void 0},o=this._encodeModifiers(i),a=this._isModifierKey(i),l=!!(e&2);if(!l&&t===3||a&&!(e&8)||this._isLockKey(i)&&!(e&8))return s;let h=this._csiLetterKeys[i.key];if(h)return s.key=this._buildCsiLetterSequence(h,o,t,l),s.cancel=!0,s;let d=this._ss3FunctionKeys[i.key];if(d)return s.key=this._buildSs3Sequence(d,o,t,l),s.cancel=!0,s;let c=this._csiTildeKeys[i.key];if(c!==void 0)return s.key=this._buildCsiTildeSequence(c,o,t,l),s.cancel=!0,s;let u=this._getKeyCode(i,r);if(u===void 0)return s;let f=u===13||u===9||u===127;if(f&&t===3&&!(e&8))return s;let p=this._functionalKeyCodes[i.key]!==void 0||this._getNumpadKeyCode(i)!==void 0;if(!!(e&8||l&&t===3||(e&1||l)&&(p&&!f||o>0&&i.key.length!==1||o-1>1)))s.key=this._buildCsiUSequence(i,u,o,t,e,p,a),s.cancel=!0;else{let _=u===13?"\r":u===9?" ":u===127?"\x7F":void 0;_?s.key=_:i.key.length===1&&!i.ctrlKey&&!i.altKey&&!i.metaKey&&(s.key=i.key)}return s}static shouldUseProtocol(i){return i>0}};var Qi=class{constructor(){this._codeToVk={KeyA:65,KeyB:66,KeyC:67,KeyD:68,KeyE:69,KeyF:70,KeyG:71,KeyH:72,KeyI:73,KeyJ:74,KeyK:75,KeyL:76,KeyM:77,KeyN:78,KeyO:79,KeyP:80,KeyQ:81,KeyR:82,KeyS:83,KeyT:84,KeyU:85,KeyV:86,KeyW:87,KeyX:88,KeyY:89,KeyZ:90,Digit0:48,Digit1:49,Digit2:50,Digit3:51,Digit4:52,Digit5:53,Digit6:54,Digit7:55,Digit8:56,Digit9:57,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,Numpad0:96,Numpad1:97,Numpad2:98,Numpad3:99,Numpad4:100,Numpad5:101,Numpad6:102,Numpad7:103,Numpad8:104,Numpad9:105,NumpadMultiply:106,NumpadAdd:107,NumpadSeparator:108,NumpadSubtract:109,NumpadDecimal:110,NumpadDivide:111,NumpadEnter:13,NumLock:144,ArrowUp:38,ArrowDown:40,ArrowLeft:37,ArrowRight:39,Home:36,End:35,PageUp:33,PageDown:34,Insert:45,Delete:46,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,CapsLock:20,ScrollLock:145,Escape:27,Enter:13,Tab:9,Space:32,Backspace:8,Pause:19,ContextMenu:93,PrintScreen:44,Semicolon:186,Equal:187,Comma:188,Minus:189,Period:190,Slash:191,Backquote:192,BracketLeft:219,Backslash:220,BracketRight:221,Quote:222,IntlBackslash:226};this._codeToScancode={KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Numpad0:82,Numpad1:79,Numpad2:80,Numpad3:81,Numpad4:75,Numpad5:76,Numpad6:77,Numpad7:71,Numpad8:72,Numpad9:73,NumpadMultiply:55,NumpadAdd:78,NumpadSubtract:74,NumpadDecimal:83,NumpadDivide:53,NumpadEnter:28,NumLock:69,ArrowUp:72,ArrowDown:80,ArrowLeft:75,ArrowRight:77,Home:71,End:79,PageUp:73,PageDown:81,Insert:82,Delete:83,ShiftLeft:42,ShiftRight:54,ControlLeft:29,ControlRight:29,AltLeft:56,AltRight:56,CapsLock:58,ScrollLock:70,Escape:1,Enter:28,Tab:15,Space:57,Backspace:14,Pause:69,Semicolon:39,Equal:13,Comma:51,Minus:12,Period:52,Slash:53,Backquote:41,BracketLeft:26,Backslash:43,BracketRight:27,Quote:40};this._enhancedKeyCodes=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","PageUp","PageDown","Insert","Delete","NumpadEnter","NumpadDivide","ControlRight","AltRight","PrintScreen","Pause","ContextMenu","MetaLeft","MetaRight"]);this._keyToControlChar={Enter:13,Backspace:8,Tab:9,Escape:27}}_getVirtualKeyCode(i){let e=this._codeToVk[i.code];return e!==void 0?e:i.keyCode||0}_getScanCode(i){return this._codeToScancode[i.code]||0}_getUnicodeChar(i){if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(i.key==="Enter")return 10;if(i.key==="Backspace")return 127}let e=this._keyToControlChar[i.key];if(e!==void 0)return e;if(i.key.length===1){let t=i.key.codePointAt(0)||0;if(i.ctrlKey&&!i.altKey&&!i.metaKey){if(t>=65&&t<=90)return t-64;if(t>=97&&t<=122)return t-96}return t}return 0}_getControlKeyState(i){let e=0;return i.shiftKey&&(e|=16),i.ctrlKey&&(i.code==="ControlRight"?e|=4:e|=8),i.altKey&&(i.code==="AltRight"?e|=1:e|=2),this._enhancedKeyCodes.has(i.code)&&(e|=256),e}evaluateKeyboardEvent(i,e){let t=this._getVirtualKeyCode(i),r=this._getScanCode(i),s=this._getUnicodeChar(i),o=e?1:0,a=this._getControlKeyState(i);return{type:0,cancel:!0,key:`\x1B[${t};${r};${s};${o};${a};1_`}}};var xt=class{constructor(i,e){this._coreService=i;this._optionsService=e}_getWin32InputMode(){return this._win32InputMode??=new Qi,this._win32InputMode}_getKittyKeyboard(){return this._kittyKeyboard??=new ii,this._kittyKeyboard}evaluateKeyDown(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!0);let e=this._coreService.kittyKeyboard.flags;return this.useKitty?this._getKittyKeyboard().evaluate(i,e,i.repeat?2:1,te&&this._optionsService.rawOptions.macOptionIsMeta):ln(i,this._coreService.decPrivateModes.applicationCursorKeys,te,this._optionsService.rawOptions.macOptionIsMeta)}evaluateKeyUp(i){if(this.useWin32InputMode)return this._getWin32InputMode().evaluateKeyboardEvent(i,!1);let e=this._coreService.kittyKeyboard.flags;if(this.useKitty&&e&2)return this._getKittyKeyboard().evaluate(i,e,3,te&&this._optionsService.rawOptions.macOptionIsMeta)}get useKitty(){let i=this._coreService.kittyKeyboard.flags;return!!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard&&ii.shouldUseProtocol(i))}get useWin32InputMode(){return!!(this._optionsService.rawOptions.vtExtensions?.win32InputMode&&this._coreService.decPrivateModes.win32InputMode)}};xt=y([m(0,X),m(1,R)],xt);var ps=class{constructor(...i){this._entries=new Map;for(let[e,t]of i)this.set(e,t)}set(i,e){let t=this._entries.get(i);return this._entries.set(i,e),t}forEach(i){for(let[e,t]of this._entries.entries())i(e,t)}has(i){return this._entries.has(i)}get(i){return this._entries.get(i)}},er=class{constructor(){this._services=new ps;this._services.set(et,this)}setService(i,e){this._services.set(i,e)}getService(i){return this._services.get(i)}createInstance(i,...e){let t=Ws(i).sort((o,a)=>o.index-a.index),r=[];for(let o of t){let a=this._services.get(o.id);if(!a)throw new Error(`[createInstance] ${i.name} depends on UNKNOWN service ${o.id._id}.`);r.push(a)}let s=t.length>0?t[0].index:e.length;if(e.length!==s)throw new Error(`[createInstance] First service dependency of ${i.name} at position ${s+1} conflicts with ${e.length} static arguments`);return new i(...e,...r)}};var bo={trace:0,debug:1,info:2,warn:3,error:4,off:5},vo="xterm.js: ",wt=class extends g{constructor(e){super();this._optionsService=e;this._logLevel=5;this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",()=>this._updateLogLevel()))}get logLevel(){return this._logLevel}_updateLogLevel(){this._logLevel=bo[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tthis._length)for(let t=this._length;t=e;s--)this._array[this._getCyclicIndex(s+r.length)]=this._array[this._getCyclicIndex(s)];for(let s=0;sthis._maxLength){let s=this._length+r.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=r.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(let o=t-1;o>=0;o--)this.set(e+o+r,this.get(e+o));let s=e+t+r-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s>22,e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):t]}set(i,e){this._cacheValid=!1,this._data[i*3+1]=e[0],e[1].length>1?(this._combined[i]=e[1],this._data[i*3+0]=i|2097152|e[2]<<22):this._data[i*3+0]=e[1].charCodeAt(0)|e[2]<<22}getWidth(i){return this._data[i*3+0]>>22}hasWidth(i){return this._data[i*3+0]&12582912}getFg(i){return this._data[i*3+1]}getBg(i){return this._data[i*3+2]}hasContent(i){return this._data[i*3+0]&4194303}getCodePoint(i){let e=this._data[i*3+0];return e&2097152?this._combined[i].charCodeAt(this._combined[i].length-1):e&2097151}isCombined(i){return this._data[i*3+0]&2097152}getString(i){let e=this._data[i*3+0];return e&2097152?this._combined[i]:e&2097151?be(e&2097151):""}isProtected(i){return this._data[i*3+2]&536870912}loadCell(i,e){return Tt=i*3,e.content=this._data[Tt+0],e.fg=this._data[Tt+1],e.bg=this._data[Tt+2],e.content&2097152?e.combinedData=this._combined[i]:e.combinedData="",e.extended=this.getExtended(i),e}getExtended(i){return Tt=i*3,this._data[Tt+2]&268435456?this._extendedAttrs[i]:(tr._ext=0,tr._urlId=0,tr.payload=void 0,tr)}setCell(i,e){this._cacheValid=!1,e.content&2097152&&(this._combined[i]=e.combinedData),e.bg&268435456&&(this._extendedAttrs[i]=e.extended),this._data[i*3+0]=e.content,this._data[i*3+1]=e.fg,this._data[i*3+2]=e.bg}setCellFromCodepoint(i,e,t,r){this._cacheValid=!1,r.bg&268435456&&(this._extendedAttrs[i]=r.extended);let s=i*3;this._data[s+0]=e|t<<22,this._data[s+1]=r.fg,this._data[s+2]=r.bg}addCodepointToCell(i,e,t){this._cacheValid=!1;let r=this._data[i*3+0];r&2097152?this._combined[i]+=be(e):r&2097151?(this._combined[i]=be(r&2097151)+be(e),r&=-2097152,r|=2097152):r=e|1<<22,t&&(r&=-12582913,r|=t<<22),this._data[i*3+0]=r}insertCells(i,e,t){if(this._cacheValid=!1,i%=this.length,i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,t),e=0;--r)this.setCell(i+e+r,this.loadCell(i+r,hn));for(let r=0;rthis.length){if(this._data.buffer.byteLength>=t*4)this._data=new Uint32Array(this._data.buffer,0,t);else{let r=new Uint32Array(t);r.set(this._data),this._data=r}for(let r=this.length;r=i&&delete this._combined[a]}let s=Object.keys(this._extendedAttrs);for(let o=0;o=i&&delete this._extendedAttrs[a]}}return this.length=i,t*4*2=0;--i)if(this._data[i*3+0]&4194303)return i+(this._data[i*3+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(this._data[i*3+0]&4194303||this._data[i*3+2]&50331648)return i+(this._data[i*3+0]>>22);return 0}copyCellsFrom(i,e,t,r,s){this._cacheValid=!1;let o=i._data;if(s)for(let a=r-1;a>=0;a--){for(let l=0;l<3;l++)this._data[(t+a)*3+l]=o[(e+a)*3+l];this._copyCellMapsFrom(i,e+a,t+a)}else for(let a=0;a>22||1}r&&r.push(e);let a=o.join("");return s&&(this._cache=a,this._cacheValid=!0,this._cacheTrimmed=!!i),a}_copyCellMapsFrom(i,e,t){let r=e*3;i._data[r+0]&2097152&&(this._combined[t]=i._combined[e]),i._data[r+2]&268435456&&(this._extendedAttrs[t]=i._extendedAttrs[e])}_copySparseMapsFrom(i){this._combined={},this._extendedAttrs={};for(let e=0;e=a&&t0&&(_>c||d[_].getTrimmedLength()===0);_--)b++;b>0&&(o.push(a+d.length-b),o.push(b)),a+=d.length-1}return o}function un(n,i){let e=[],t=0,r=i[t],s=0;for(let o=0;ol&&(s-=l,o++);let h=n[o].getWidth(s-1)===2;h&&s--;let d=h?e-1:e;t.push(d),a+=d}return t}function Dt(n,i,e){if(i===n.length-1)return n[i].getTrimmedLength();let t=!n[i].hasContent(e-1)&&n[i].getWidth(e-1)===1,r=n[i+1].getWidth(0)===2;return t&&r?e-1:e}var rr=class rr{constructor(i){this.line=i;this.isDisposed=!1;this._disposables=[];this._id=rr._nextId++;this._onDispose=this.register(new v);this.onDispose=this._onDispose.event}get id(){return this._id}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),Ne(this._disposables),this._disposables.length=0)}register(i){return this._disposables.push(i),i}};rr._nextId=1;var ir=rr;var $={},Le=$.B;$[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"};$.A={"#":"\xA3"};$.B=void 0;$[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"};$.C=$[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};$.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"};$.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"};$.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"};$.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"};$.E=$[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"};$.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"};$.H=$[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"};$["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"};var pn=4294967295,ni=class extends g{constructor(e,t,r,s){super();this._hasScrollback=e;this._optionsService=t;this._bufferService=r;this._logService=s;this.ydisp=0;this.ybase=0;this.y=0;this.x=0;this.tabs={};this.savedY=0;this.savedX=0;this.savedCurAttrData=U.clone();this.savedCharset=Le;this.savedCharsets=[];this.savedGlevel=0;this.savedOriginMode=!1;this.savedWraparoundMode=!0;this.markers=[];this._nullCell=F.fromCharData([0,"",1,0]);this._whitespaceCell=F.fromCharData([0," ",1,32]);this._isClearing=!1;this._memoryCleanupPosition=0;this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new ri(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops(),this._memoryCleanupQueue=new Ct(this._logService),this._register(E(()=>this._memoryCleanupQueue.clear())),this._register(E(()=>this.clearAllMarkers()))}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new Pe),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new Pe),this._whitespaceCell}getBlankLine(e,t){return new Re(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let t=this.ybase+this.y-this.ydisp;return t>=0&&tpn?pn:t}fillViewportRows(e){if(this.lines.length===0){e??=U;let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new ri(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){let r=this.getNullCell(U),s=0,o=this._getCorrectBufferLength(t);if(o>this.lines.maxLength&&(this.lines.maxLength=o),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(new Re(e,r,!1)));else for(let l=this._rows;l>t;l--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(o0&&(this.lines.trimStart(l),this.ybase=Math.max(this.ybase-l,0),this.ydisp=Math.max(this.ydisp-l,0),this.savedY=Math.max(this.savedY-l,0)),this.lines.maxLength=o}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),a&&(this.y+=a),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let a=0;a0){let a=Math.max(0,this.lines.length-this.ybase-1);this.y=Math.min(this.y,a)}this._memoryCleanupQueue.clear(),s>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue(()=>this._batchedMemoryCleanup()))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){let e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&e.backend==="conpty"&&e.buildNumber>=21376:this._hasScrollback}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){let r=this._optionsService.rawOptions.reflowCursorLine,s=dn(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(U),r);if(s.length>0){let o=un(this.lines,s);fn(this.lines,o.layout),this._reflowLargerAdjustViewport(e,t,o.countRemoved)}}_reflowLargerAdjustViewport(e,t,r){let s=this.getNullCell(U),o=r;for(;o-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;l--){let h=this.lines.get(l);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;let d=[h];for(;h.isWrapped&&l>0;)h=this.lines.get(--l),d.unshift(h);if(!r){let T=this.ybase+this.y;if(T>=l&&T0&&(o.push({start:l+d.length+a,newLines:b}),a+=b.length),d.push(...b);let _=u.length-1,S=u[_];S===0&&(_--,S=u[_]);let C=d.length-f-1,w=c;for(;C>=0;){let T=Math.min(w,S);if(d[_]===void 0)break;if(d[_].copyCellsFrom(d[C],w-T,S-T,T,!0),S-=T,S===0&&(_--,S=u[_]),w-=T,w===0){C--;let ee=Math.max(C,0);w=Dt(d,ee,this._cols)}}for(let T=0;T0;)this.ybase===0?this.y0){let l=[],h=[];for(let S=0;S=0;S--)if(f&&f.start>c+p){for(let C=f.newLines.length-1;C>=0;C--)this.lines.set(S--,f.newLines[C]);S++,l.push({index:c+1,amount:f.newLines.length}),p+=f.newLines.length,f=o[++u]}else this.lines.set(S,h[c--]);let b=0;for(let S=l.length-1;S>=0;S--)l[S].index+=b,this.lines.onInsertEmitter.fire(l[S]),b+=l[S].amount;let _=Math.max(0,d+a-this.lines.maxLength);_>0&&this.lines.onTrimEmitter.fire(_)}}translateBufferLineToString(e,t,r=0,s){let o=this.lines.get(e);return o?o.translateToString(t,r,s):""}getWrappedRangeForLine(e){let t=e,r=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;r+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(e??=this.x;!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=r,t.line<0&&t.dispose()})),t.register(this.lines.onInsert(r=>{t.line>=r.index&&(t.line+=r.amount)})),t.register(this.lines.onDelete(r=>{t.line>=r.index&&t.liner.index&&(t.line-=r.amount)})),t.register(t.onDispose(()=>this._removeMarker(t))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}};var sr=class extends g{constructor(e,t,r){super();this._optionsService=e;this._bufferService=t;this._logService=r;this._normalBuffer=this._register(new B);this._altBuffer=this._register(new B);this._onBufferActivate=this._register(new v);this.onBufferActivate=this._onBufferActivate.event;this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",()=>this.resize(this._bufferService.cols,this._bufferService.rows))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",()=>this.setupTabStops()))}reset(){this._normal=new ni(!0,this._optionsService,this._bufferService,this._logService),this._normalBuffer.value=this._normal,this._normal.fillViewportRows(),this._alt=new ni(!1,this._optionsService,this._bufferService,this._logService),this._altBuffer.value=this._alt,this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}};var Rt=class extends g{constructor(e,t){super();this.isUserScrolling=!1;this._onResize=this._register(new v);this.onResize=this._onResize.event;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this.cols=Math.max(e.rawOptions.cols||0,2),this.rows=Math.max(e.rawOptions.rows||0,1),this.buffers=this._register(new sr(e,this,t)),this._register(this.buffers.onBufferActivate(r=>{this._onScroll.fire(r.activeBuffer.ydisp)}))}get buffer(){return this.buffers.active}resize(e,t){let r=this.cols!==e,s=this.rows!==t;this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t,colsChanged:r,rowsChanged:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){let r=this.buffer,s;s=this._cachedBlankLine,(!s||s.length!==this.cols||s.getFg(0)!==e.fg||s.getBg(0)!==e.bg)&&(s=r.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;let o=r.ybase+r.scrollTop,a=r.ybase+r.scrollBottom;if(r.scrollTop===0){let l=r.lines.isFull;a===r.lines.length-1?l?r.lines.recycle().copyFrom(s,!0):r.lines.push(s.clone(!0)):r.lines.splice(a+1,0,s.clone(!0)),l?this.isUserScrolling&&(r.ydisp=Math.max(r.ydisp-1,0)):(r.ybase++,this.isUserScrolling||r.ydisp++)}else{let l=a-o+1;r.lines.shiftElements(o+1,l-1,-1),r.lines.set(a,s.clone(!0))}this.isUserScrolling||(r.ydisp=r.ybase),this._onScroll.fire(r.ydisp)}scrollLines(e,t){let r=this.buffer;if(e<0){if(r.ydisp===0)return;this.isUserScrolling=!0}else e+r.ydisp>=r.ybase&&(this.isUserScrolling=!1);let s=r.ydisp;r.ydisp=Math.max(Math.min(r.ydisp+e,r.ybase),0),s!==r.ydisp&&(t||this._onScroll.fire(r.ydisp))}};Rt=y([m(0,R),m(1,_e)],Rt);var Lt={cols:80,rows:24,showCursorImmediately:!1,cursorBlink:!1,blinkIntervalDuration:0,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollbar:{showScrollbar:!0},scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,mouseEventsRequireAlt:!1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:te,windowOptions:{},windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",quirks:{},vtExtensions:{}},go=["normal","bold","100","200","300","400","500","600","700","800","900"],nr=class extends g{constructor(e){super();this._onOptionChange=this._register(new v);this.onOptionChange=this._onOptionChange.event;let t={...Lt};for(let r in e)if(r in t)try{let s=e[r];t[r]=this._sanitizeAndValidateOption(r,s)}catch(s){console.error(s)}this.rawOptions=t,this.options={...t},this._setupOptions(),this._register(E(()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null}))}onSpecificOptionChange(e,t){return this.onOptionChange(r=>{r===e&&t(this.rawOptions[e])})}onMultipleOptionChange(e,t){return this.onOptionChange(r=>{e.indexOf(r)!==-1&&t()})}_setupOptions(){let e=r=>{if(!(r in Lt))throw new Error(`No option with key "${r}"`);return this.rawOptions[r]},t=(r,s)=>{if(!(r in Lt))throw new Error(`No option with key "${r}"`);s=this._sanitizeAndValidateOption(r,s),this.rawOptions[r]!==s&&(this.rawOptions[r]=s,this._onOptionChange.fire(r))};for(let r in this.rawOptions){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this.options,r,s)}}_sanitizeAndValidateOption(e,t){switch(e){case"cursorStyle":if(t||(t=Lt[e]),!Co(t))throw new Error(`"${t}" is not a valid value for ${e}`);break;case"wordSeparator":t||(t=Lt[e]);break;case"fontWeight":case"fontWeightBold":if(typeof t=="number"&&1<=t&&t<=1e3)break;t=go.includes(t)?t:Lt[e];break;case"blinkIntervalDuration":if(t=Math.floor(t),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"cursorWidth":t=Math.floor(t);case"lineHeight":case"tabStopWidth":if(t<1)throw new Error(`${e} cannot be less than 1, value: ${t}`);break;case"minimumContrastRatio":t=Math.max(1,Math.min(21,Math.round(t*10)/10));break;case"scrollback":if(t=Math.min(t,4294967295),t<0)throw new Error(`${e} cannot be less than 0, value: ${t}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(t<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${t}`);break;case"rows":case"cols":if(!t&&t!==0)throw new Error(`${e} must be numeric, value: ${t}`);break;case"windowsPty":t=t??{};break}return t}};function Co(n){return n==="block"||n==="underline"||n==="bar"}var mn=Object.freeze({insertMode:!1}),bn=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,colorSchemeUpdates:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,win32InputMode:!1,wraparound:!0}),vn=()=>({flags:0,mainFlags:0,altFlags:0,mainStack:[],altStack:[]}),At=class extends g{constructor(e,t,r){super();this._bufferService=e;this._logService=t;this._optionsService=r;this.isCursorHidden=!1;this._onData=this._register(new v);this.onData=this._onData.event;this._onUserInput=this._register(new v);this.onUserInput=this._onUserInput.event;this._onBinary=this._register(new v);this.onBinary=this._onBinary.event;this._onRequestScrollToBottom=this._register(new v);this.onRequestScrollToBottom=this._onRequestScrollToBottom.event;this.isCursorInitialized=r.rawOptions.showCursorImmediately??!1,this.modes=structuredClone(mn),this.decPrivateModes=structuredClone(bn),this.kittyKeyboard=vn()}reset(){this.modes=structuredClone(mn),this.decPrivateModes=structuredClone(bn),this.kittyKeyboard=vn()}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;let r=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&r.ybase!==r.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data "${e}"`),this._logService.trace("sending data (codes)",()=>e.split("").map(s=>s.charCodeAt(0))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${e}"`),this._logService.trace("sending binary (codes)",()=>e.split("").map(t=>t.charCodeAt(0))),this._onBinary.fire(e))}};At=y([m(0,D),m(1,_e),m(2,R)],At);var Sn={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:n=>n.button===4||n.action!==1?!1:(n.ctrl=!1,n.alt=!1,n.shift=!1,!0)},VT200:{events:19,restrict:n=>n.action!==32},DRAG:{events:23,restrict:n=>!(n.action===32&&n.button===3)},ANY:{events:31,restrict:n=>!0}};function vs(n,i){let e=(n.ctrl?16:0)|(n.shift?4:0)|(n.alt?8:0);return n.button===4?(e|=64,e|=n.action):(e|=n.button&3,n.button&4&&(e|=64),n.button&8&&(e|=128),n.action===32?e|=32:n.action===0&&!i&&(e|=3)),e}var Ss=String.fromCharCode,gn={DEFAULT:n=>{let i=[vs(n,!1)+32,n.col+32,n.row+32];return i[0]>255||i[1]>255||i[2]>255?"":`\x1B[M${Ss(i[0])}${Ss(i[1])}${Ss(i[2])}`},SGR:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${vs(n,!0)};${n.col};${n.row}${i}`},SGR_PIXELS:n=>{let i=n.action===0&&n.button!==4?"m":"M";return`\x1B[<${vs(n,!0)};${n.x};${n.y}${i}`}},or=class extends g{constructor(){super();this._protocols={};this._encodings={};this._activeProtocol="";this._activeEncoding="";this._onProtocolChange=this._register(new v);this.onProtocolChange=this._onProtocolChange.event;for(let e of Object.keys(Sn))this.addProtocol(e,Sn[e]);for(let e of Object.keys(gn))this.addEncoding(e,gn[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol "${e}"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding "${e}"`);this._activeEncoding=e}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT"}setCustomWheelEventHandler(e){this._customWheelEventHandler=e}allowCustomWheelEvent(e){return this._customWheelEventHandler?this._customWheelEventHandler(e)!==!1:!0}restrictMouseEvent(e){return this._protocols[this._activeProtocol].restrict(e)}encodeMouseEvent(e){return this._encodings[this._activeEncoding](e)}get isDefaultEncoding(){return this._activeEncoding==="DEFAULT"}get isPixelEncoding(){return this._activeEncoding==="SGR_PIXELS"}};var me=class n{constructor(){this._providers=Object.create(null);this._active="";this._onChange=new v;this.onChange=this._onChange.event}static extractShouldJoin(i){return(i&1)!==0}static extractWidth(i){return i>>1&3}static extractCharKind(i){return i>>3}static createPropertyValue(i,e,t=!1){return(i&16777215)<<3|(e&3)<<1|(t?1:0)}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(i){if(!this._providers[i])throw new Error(`unknown Unicode version "${i}"`);this._active=i,this._activeProvider=this._providers[i],this._onChange.fire(i)}register(i){this._providers[i.version]=i,this._active||(this.activeVersion=i.version)}wcwidth(i){return this._activeProvider.wcwidth(i)}getStringCellWidth(i){let e=0,t=0,r=i.length;for(let s=0;s=r)return e+this.wcwidth(o);let h=i.charCodeAt(s);56320<=h&&h<=57343?o=(o-55296)*1024+h-56320+65536:e+=this.wcwidth(h)}let a=this.charProperties(o,t),l=n.extractWidth(a);n.extractShouldJoin(a)&&(l-=n.extractWidth(t)),e+=l,t=a}return e}charProperties(i,e){return this._activeProvider.charProperties(i,e)}};var gs=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],Io=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],q;function Eo(n,i){let e=0,t=i.length-1,r;if(ni[t][1])return!1;for(;t>=e;)if(r=e+t>>1,n>i[r][1])e=r+1;else if(n=131072&&i<=196605||i>=196608&&i<=262141?2:1}charProperties(i,e){let t=this.wcwidth(i),r=t===0&&e!==0;if(r){let s=me.extractWidth(e);s===0?r=!1:s>t&&(t=s)}return me.createPropertyValue(0,t,r)}};var lr=class{constructor(){this.glevel=0;this._charsets=[]}get charsets(){return this._charsets}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(i){this.glevel=i,this.charset=this._charsets[i]}setgCharset(i,e){this._charsets[i]=e,this.glevel===i&&(this.charset=e)}};function Cs(n){let e=n.buffer.lines.get(n.buffer.ybase+n.buffer.y-1)?.get(n.cols-1),t=n.buffer.lines.get(n.buffer.ybase+n.buffer.y);t&&e&&(t.isWrapped=e[3]!==0&&e[3]!==32)}var kt=class n{constructor(i=32,e=32){this.maxLength=i;this.maxSubParamsLength=e;if(e>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(i),this.length=0,this._subParams=new Int32Array(e),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(i),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}static fromArray(i){let e=new n;if(!i.length)return e;for(let t=Array.isArray(i[0])?1:0;t>8,r=this._subParamsIdx[e]&255;r-t>0&&i.push(Array.prototype.slice.call(this._subParams,t,r))}return i}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}resetZdm(){this.length=1,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1,this._subParamsIdx[0]=0,this.params[0]=0}addParam(i){if(this._digitIsSub=!1,this.length>=this.maxLength){this._rejectDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=i>2147483647?2147483647:i}addSubParam(i){if(this._digitIsSub=!0,!!this.length){if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength){this._rejectSubDigits=!0;return}if(i<-1)throw new Error("values less than -1 are not allowed");this._subParams[this._subParamsLength++]=i>2147483647?2147483647:i,this._subParamsIdx[this.length-1]++}}hasSubParams(i){return(this._subParamsIdx[i]&255)-(this._subParamsIdx[i]>>8)>0}getSubParams(i){let e=this._subParamsIdx[i]>>8,t=this._subParamsIdx[i]&255;return t-e>0?this._subParams.subarray(e,t):null}getSubParamsAll(){let i={};for(let e=0;e>8,r=this._subParamsIdx[e]&255;r-t>0&&(i[e]=this._subParams.slice(t,r))}return i}addDigit(i){let e;if(this._rejectDigits||!(e=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let t=this._digitIsSub?this._subParams:this.params,r=t[e-1];t[e-1]=~r?Math.min(r*10+i,2147483647):i}};var Is=class{constructor(){this._chunks=[];this._length=0}get length(){return this._length}reset(){this._chunks.length=0,this._length=0}append(i){this._chunks.push(i),this._length+=i.length}toString(){return this._chunks.join("")}},Ue=class{constructor(i){this._limit=i;this._builder=new Is}get length(){return this._builder.length}get limit(){return this._limit}reset(){this._builder.reset()}append(i){return this._builder.append(i),this._builder.length>this._limit?(this._builder.reset(),!0):!1}toString(){return this._builder.toString()}};var oi=[],cr=class{constructor(){this._state=0;this._active=oi;this._id=-1;this._handlers=Object.create(null);this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=oi}reset(){if(this._state===2)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=oi,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||oi,!this._active.length)this._handlerFb(this._id,"START");else for(let i=this._active.length-1;i>=0;i--)this._active[i].start()}_put(i,e,t){if(!this._active.length)this._handlerFb(this._id,"PUT",xe(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}start(){this.reset(),this._state=1}put(i,e,t){if(this._state!==3){if(this._state===1)for(;e0&&this._put(i,e,t)}}end(i,e=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),!this._active.length)this._handlerFb(this._id,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=oi,this._id=-1,this._state=0}}},hr=class hr{constructor(i){this._handler=i;this._data=new Ue(hr._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(xe(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};hr._payloadLimit=1e7;var se=hr;var ai=[],dr=class{constructor(){this._handlers=Object.create(null);this._active=ai;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=ai}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].unhook(!1);this._stack.paused=!1,this._active=ai,this._ident=0}hook(i,e){if(this.reset(),this._ident=i,this._active=this._handlers[i]||ai,!this._active.length)this._handlerFb(this._ident,"HOOK",e);else for(let t=this._active.length-1;t>=0;t--)this._active[t].hook(e)}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",xe(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}unhook(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"UNHOOK",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].unhook(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].unhook(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=ai,this._ident=0}},li=new kt;li.addParam(0);var ur=class ur{constructor(i){this._handler=i;this._data=new Ue(ur._payloadLimit);this._params=li;this._hitLimit=!1}hook(i){this._params=i.length>1||i.params[0]?i.clone():li,this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(xe(i,e,t))&&(this._hitLimit=!0)}unhook(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString(),this._params),e instanceof Promise))return e.then(t=>(this._params=li,this._data.reset(),this._hitLimit=!1,t));return this._params=li,this._data.reset(),this._hitLimit=!1,e}};ur._payloadLimit=1e7;var ci=ur;var hi=[],fr=class{constructor(){this._handlers=Object.create(null);this._active=hi;this._ident=0;this._handlerFb=()=>{};this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(i,e){this._handlers[i]??=[];let t=this._handlers[i];return t.push(e),{dispose:()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}}clearHandler(i){this._handlers[i]&&delete this._handlers[i]}setHandlerFallback(i){this._handlerFb=i}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=hi}reset(){if(this._active.length)for(let i=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;i>=0;--i)this._active[i].end(!1);this._stack.paused=!1,this._active=hi,this._ident=0}start(i){if(this.reset(),this._ident=i,this._active=this._handlers[i]||hi,!this._active.length)this._handlerFb(this._ident,"START");else for(let e=this._active.length-1;e>=0;e--)this._active[e].start()}put(i,e,t){if(!this._active.length)this._handlerFb(this._ident,"PUT",xe(i,e,t));else for(let r=this._active.length-1;r>=0;r--)this._active[r].put(i,e,t)}end(i,e=!0){if(!this._active.length)this._handlerFb(this._ident,"END",i);else{let t=!1,r=this._active.length-1,s=!1;if(this._stack.paused&&(r=this._stack.loopPosition-1,t=e,s=this._stack.fallThrough,this._stack.paused=!1),!s&&t===!1){for(;r>=0&&(t=this._active[r].end(i),t!==!0);r--)if(t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!1,t;r--}for(;r>=0;r--)if(t=this._active[r].end(!1),t instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=r,this._stack.fallThrough=!0,t}this._active=hi,this._ident=0}},pr=class pr{constructor(i){this._handler=i;this._data=new Ue(pr._payloadLimit);this._hitLimit=!1}start(){this._data.reset(),this._hitLimit=!1}put(i,e,t){this._hitLimit||this._data.append(xe(i,e,t))&&(this._hitLimit=!0)}end(i){let e=!1;if(this._hitLimit)e=!1;else if(i&&(e=this._handler(this._data.toString()),e instanceof Promise))return e.then(t=>(this._data.reset(),this._hitLimit=!1,t));return this._data.reset(),this._hitLimit=!1,e}};pr._payloadLimit=1e7;var _r=pr;var Es=class{constructor(i){this.table=new Uint16Array(i)}setDefault(i,e){this.table.fill(i<<8|e)}add(i,e,t,r){this.table[e<<8|i]=t<<8|r}addMany(i,e,t,r){for(let s=0;sl),t=(a,l)=>e.slice(a,l),r=t(32,127),s=t(0,24);s.push(25),s.push.apply(s,t(28,32));let o=t(0,17);n.setDefault(1,0),n.addMany(r,0,2,0);for(let a of o)n.addMany([24,26,153,154],a,3,0),n.addMany(t(128,144),a,3,0),n.addMany(t(144,152),a,3,0),n.add(156,a,0,0),n.add(27,a,11,1),n.add(157,a,4,8),n.addMany([152,158],a,0,7),n.add(159,a,11,14),n.add(155,a,11,3),n.add(144,a,11,9);return n.addMany(s,0,3,0),n.addMany(s,1,3,1),n.add(127,1,0,1),n.addMany(s,8,0,8),n.addMany(s,3,3,3),n.add(127,3,0,3),n.addMany(s,4,3,4),n.add(127,4,0,4),n.addMany(s,6,3,6),n.addMany(s,5,3,5),n.add(127,5,0,5),n.addMany(s,2,3,2),n.add(127,2,0,2),n.add(93,1,4,8),n.addMany(r,8,5,8),n.add(127,8,5,8),n.addMany([156,27,24,26,7],8,6,0),n.addMany(t(28,32),8,0,8),n.addMany([88,94],1,0,7),n.addMany(r,7,0,7),n.addMany(s,7,0,7),n.add(156,7,0,0),n.add(127,7,0,7),n.add(95,1,11,14),n.addMany(s,14,0,14),n.add(127,14,0,14),n.addMany(t(32,48),14,9,15),n.addMany(t(48,127),14,15,16),n.addMany(t(48,127),15,15,16),n.addMany(s,15,0,15),n.addMany(t(32,48),15,9,15),n.add(127,15,0,15),n.addMany(r,16,16,16),n.addMany(s,16,0,16),n.addMany(t(8,14),16,16,16),n.add(127,16,0,16),n.addMany([27,156,24,26],16,17,0),n.add(91,1,11,3),n.addMany(t(64,127),3,7,0),n.addMany(t(48,60),3,8,4),n.addMany([60,61,62,63],3,9,4),n.addMany(t(48,60),4,8,4),n.addMany(t(64,127),4,7,0),n.addMany([60,61,62,63],4,0,6),n.addMany(t(32,64),6,0,6),n.add(127,6,0,6),n.addMany(t(64,127),6,0,0),n.addMany(t(32,48),3,9,5),n.addMany(t(32,48),5,9,5),n.addMany(t(48,64),5,0,6),n.addMany(t(64,127),5,7,0),n.addMany(t(32,48),4,9,5),n.addMany(t(32,48),1,9,2),n.addMany(t(32,48),2,9,2),n.addMany(t(48,127),2,10,0),n.addMany(t(48,80),1,10,0),n.addMany(t(81,88),1,10,0),n.addMany([89,90,92],1,10,0),n.addMany(t(96,127),1,10,0),n.add(80,1,11,9),n.addMany(s,9,0,9),n.add(127,9,0,9),n.addMany(t(32,48),9,9,12),n.addMany(t(48,60),9,8,10),n.addMany([60,61,62,63],9,9,10),n.addMany(s,11,0,11),n.addMany(t(32,128),11,0,11),n.addMany(s,10,0,10),n.add(127,10,0,10),n.addMany(t(48,60),10,8,10),n.addMany([60,61,62,63],10,0,11),n.addMany(t(32,48),10,9,12),n.addMany(s,12,0,12),n.add(127,12,0,12),n.addMany(t(32,48),12,9,12),n.addMany(t(48,64),12,0,11),n.addMany(t(64,127),12,12,13),n.addMany(t(64,127),10,12,13),n.addMany(t(64,127),9,12,13),n.addMany(s,13,13,13),n.addMany(r,13,13,13),n.add(127,13,0,13),n.addMany([27,156,24,26],13,14,0),n.add(ne,0,2,0),n.add(ne,8,5,8),n.add(ne,6,0,6),n.add(ne,11,0,11),n.add(ne,13,13,13),n.add(ne,16,16,16),n})(),mr=class extends g{constructor(e=yo){super();this._transitions=e;this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0};this.initialState=0,this.currentState=this.initialState,this._params=new kt,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(t,r,s)=>{},this._executeHandlerFb=t=>{},this._csiHandlerFb=(t,r)=>{},this._escHandlerFb=t=>{},this._errorHandlerFb=t=>t,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register(E(()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._executeHandlersArr=new Array(24).fill(void 0),this._escHandlers=Object.create(null)})),this._oscParser=this._register(new cr),this._dcsParser=this._register(new dr),this._apcParser=this._register(new fr),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},()=>!0)}_identifier(e,t=[64,126]){let r=0;if(e.prefix){if(e.prefix.length>1)throw new Error("only one byte as prefix supported");if(r=e.prefix.charCodeAt(0),r<60||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let o=0;oa||a>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=a}}if(e.final.length!==1)throw new Error("final must be a single byte");let s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return r<<=8,r|=s,r}identToString(e){let t=[];for(;e;)t.push(String.fromCharCode(e&255)),e>>=8;return t.reverse().join("")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){let r=this._identifier(e,[48,126]);this._escHandlers[r]??=[];let s=this._escHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){let r=e.charCodeAt(0);this._executeHandlers[r]=t,r<24&&(this._executeHandlersArr[r]=t)}clearExecuteHandler(e){let t=e.charCodeAt(0);this._executeHandlers[t]&&delete this._executeHandlers[t],t<24&&(this._executeHandlersArr[t]=void 0)}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){let r=this._identifier(e);this._csiHandlers[r]??=[];let s=this._csiHandlers[r];return s.push(t),{dispose:()=>{let o=s.indexOf(t);o!==-1&&s.splice(o,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}registerApcHandler(e,t){return e.prefix=void 0,this._apcParser.registerHandler(this._identifier(e,[48,126]),t)}clearApcHandler(e){e.prefix=void 0,this._apcParser.clearHandler(this._identifier(e,[48,126]))}setApcHandlerFallback(e){this._apcParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._apcParser.reset(),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,r,s,o){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=s,this._parseStack.chunkPos=o}parse(e,t,r){let s,o,a=0,l;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,a=this._parseStack.chunkPos+1;else{if(r===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let h=this._parseStack.handlers,d=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](this._params),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 4:if(r===!1&&d>-1){for(;d>=0&&(l=h[d](),l!==!0);d--)if(l instanceof Promise)return this._parseStack.handlerPos=d,l}this._parseStack.handlers=[];break;case 6:if(s=e[this._parseStack.chunkPos],l=this._dcsParser.unhook(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 5:if(s=e[this._parseStack.chunkPos],l=this._oscParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break;case 7:if(s=e[this._parseStack.chunkPos],l=this._apcParser.end(s!==24&&s!==26,r),l)return l;s===27&&(this._parseStack.transition|=1),this._params.resetZdm(),this._collect=0;break}this._parseStack.state=0,a=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=this._parseStack.transition&255}for(let h=a;h=60&&c<=63&&(this._collect=c,d++);let u=!1;for(;d=48&&c<=57)this._params.addDigit(c-48);else if(c===59)this._params.addParam(0);else if(c===58)this._params.addSubParam(-1);else if(c>=64&&c<=126){let f=this._csiHandlers[this._collect<<8|c],p=f?f.length-1:-1;for(;p>=0&&(l=f[p](this._params),l!==!0);p--)if(l instanceof Promise)return o=1792,this._preserveStack(3,f,p,o,d),l;p<0&&this._csiHandlerFb(this._collect<<8|c,this._params),this.precedingJoinState=0,h=d,this.currentState=0,u=!0;break}else break;u||(h=d-1,this.currentState=4);continue}switch(o=this._transitions.table[this.currentState<<8|(s>8){case 2:let d=h,c=t-4;for(;d=32&&(e[d]<=126||e[d]>=ne)&&e[++d]>=32&&(e[d]<=126||e[d]>=ne)&&e[++d]>=32&&(e[d]<=126||e[d]>=ne)&&e[++d]>=32&&(e[d]<=126||e[d]>=ne););if(d>=c)for(;d=32&&(e[d]<=126||e[d]>=ne);)d++;this._printHandler(e,h,d),h=d-1;break;case 3:this._executeHandlers[s]?this._executeHandlers[s]():this._executeHandlerFb(s),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:h,code:s,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let f=this._csiHandlers[this._collect<<8|s],p=f?f.length-1:-1;for(;p>=0&&(l=f[p](this._params),l!==!0);p--)if(l instanceof Promise)return this._preserveStack(3,f,p,o,h),l;p<0&&this._csiHandlerFb(this._collect<<8|s,this._params),this.precedingJoinState=0;break;case 8:do switch(s){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(s-48)}while(++h47&&s<60);h--;break;case 9:this._collect<<=8,this._collect|=s;break;case 10:let b=this._escHandlers[this._collect<<8|s],_=b?b.length-1:-1;for(;_>=0&&(l=b[_](),l!==!0);_--)if(l instanceof Promise)return this._preserveStack(4,b,_,o,h),l;_<0&&this._escHandlerFb(this._collect<<8|s),this.precedingJoinState=0;break;case 11:this._params.resetZdm(),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|s,this._params);break;case 13:for(let S=h+1;;++S)if(S>=t||(s=e[S])===24||s===26||s===27||s>127&&s=t||(s=e[S])<32||s>127&&s=32&&e[S]<127||e[S]>=8&&e[S]<14||e[S]>=ne))){this._apcParser.put(e,h,S),h=S-1;break}break;case 17:if(l=this._apcParser.end(s!==24&&s!==26),l)return this._preserveStack(7,[],0,o,h),l;s===27&&(o|=1),this._params.resetZdm(),this._collect=0,this.precedingJoinState=0;break}this.currentState=o&255}}};var xo=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,wo=/^[\da-f]+$/;function xs(n){if(!n)return;let i=n.toLowerCase();if(i.startsWith("rgb:")){i=i.slice(4);let e=xo.exec(i);if(e){let t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(i.startsWith("#")&&(i=i.slice(1),wo.exec(i)&&[3,6,9,12].includes(i.length))){let e=i.length/3,t=[0,0,0];for(let r=0;r<3;++r){let s=parseInt(i.slice(e*r,e*r+e),16);t[r]=e===1?s<<4:e===2?s:e===3?s>>4:s>>8}return t}}function ys(n,i){let e=n.toString(16),t=e.length<2?"0"+e:e;switch(i){case 4:return e[0];case 8:return t;case 12:return(t+t).slice(0,3);default:return t+t}}function En(n,i=16){let[e,t,r]=n;return`rgb:${ys(e,i)}/${ys(t,i)}/${ys(r,i)}`}var yn="6.1.0-beta.304";var Do={"(":0,")":1,"*":2,"+":3,"-":1,".":2};function xn(n,i){if(n>24)return i.setWinLines||!1;switch(n){case 1:return!!i.restoreWin;case 2:return!!i.minimizeWin;case 3:return!!i.setWinPosition;case 4:return!!i.setWinSizePixels;case 5:return!!i.raiseWin;case 6:return!!i.lowerWin;case 7:return!!i.refreshWin;case 8:return!!i.setWinSizeChars;case 9:return!!i.maximizeWin;case 10:return!!i.fullscreenWin;case 11:return!!i.getWinState;case 13:return!!i.getWinPosition;case 14:return!!i.getWinSizePixels;case 15:return!!i.getScreenSizePixels;case 16:return!!i.getCellSizePixels;case 18:return!!i.getWinSizeChars;case 19:return!!i.getScreenSizeChars;case 20:return!!i.getIconTitle;case 21:return!!i.getWinTitle;case 22:return!!i.pushTitle;case 23:return!!i.popTitle;case 24:return!!i.setWinLines}return!1}var wn=0,br=class extends g{constructor(e,t,r,s,o,a,l,h,d=new mr){super();this._bufferService=e;this._charsetService=t;this._coreService=r;this._logService=s;this._optionsService=o;this._oscLinkService=a;this._mouseStateService=l;this._unicodeService=h;this._parser=d;this._parseBuffer=new Uint32Array(4096);this._stringDecoder=new bi;this._utf8Decoder=new vi;this._windowTitle="";this._iconName="";this._windowTitleStack=[];this._iconNameStack=[];this._curAttrData=U.clone();this._eraseAttrDataInternal=U.clone();this._onRequestBell=this._register(new v);this.onRequestBell=this._onRequestBell.event;this._onRequestRefreshRows=this._register(new v);this.onRequestRefreshRows=this._onRequestRefreshRows.event;this._onRequestReset=this._register(new v);this.onRequestReset=this._onRequestReset.event;this._onRequestSendFocus=this._register(new v);this.onRequestSendFocus=this._onRequestSendFocus.event;this._onRequestSyncScrollBar=this._register(new v);this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event;this._onRequestWindowsOptionsReport=this._register(new v);this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event;this._onA11yChar=this._register(new v);this.onA11yChar=this._onA11yChar.event;this._onA11yTab=this._register(new v);this.onA11yTab=this._onA11yTab.event;this._onCursorMove=this._register(new v);this.onCursorMove=this._onCursorMove.event;this._onLineFeed=this._register(new v);this.onLineFeed=this._onLineFeed.event;this._onScroll=this._register(new v);this.onScroll=this._onScroll.event;this._onTitleChange=this._register(new v);this.onTitleChange=this._onTitleChange.event;this._onColor=this._register(new v);this.onColor=this._onColor.event;this._onRequestColorSchemeQuery=this._register(new v);this.onRequestColorSchemeQuery=this._onRequestColorSchemeQuery.event;this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0};this._specialColors=[256,257,258];this._register(this._parser),this._dirtyRowTracker=new di(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate(c=>this._activeBuffer=c.activeBuffer)),this._parser.setCsiHandlerFallback((c,u)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(c),params:u.toArray()})}),this._parser.setEscHandlerFallback(c=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(c)})}),this._parser.setExecuteHandlerFallback(c=>{this._logService.debug("Unknown EXECUTE code: ",{code:c})}),this._parser.setOscHandlerFallback((c,u,f)=>{this._logService.debug("Unknown OSC code: ",{identifier:c,action:u,data:f})}),this._parser.setDcsHandlerFallback((c,u,f)=>{u==="HOOK"&&(f=f.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(c),action:u,payload:f})}),this._parser.setApcHandlerFallback((c,u,f)=>{this._logService.debug("Unknown APC code: ",{identifier:this._parser.identToString(c),action:u,payload:f})}),this._parser.setPrintHandler((c,u,f)=>this.print(c,u,f)),this._parser.registerCsiHandler({final:"@"},c=>this.insertChars(c)),this._parser.registerCsiHandler({intermediates:" ",final:"@"},c=>this.scrollLeft(c)),this._parser.registerCsiHandler({final:"A"},c=>this.cursorUp(c)),this._parser.registerCsiHandler({intermediates:" ",final:"A"},c=>this.scrollRight(c)),this._parser.registerCsiHandler({final:"B"},c=>this.cursorDown(c)),this._parser.registerCsiHandler({final:"C"},c=>this.cursorForward(c)),this._parser.registerCsiHandler({final:"D"},c=>this.cursorBackward(c)),this._parser.registerCsiHandler({final:"E"},c=>this.cursorNextLine(c)),this._parser.registerCsiHandler({final:"F"},c=>this.cursorPrecedingLine(c)),this._parser.registerCsiHandler({final:"G"},c=>this.cursorCharAbsolute(c)),this._parser.registerCsiHandler({final:"H"},c=>this.cursorPosition(c)),this._parser.registerCsiHandler({final:"I"},c=>this.cursorForwardTab(c)),this._parser.registerCsiHandler({final:"J"},c=>this.eraseInDisplay(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"J"},c=>this.eraseInDisplay(c,!0)),this._parser.registerCsiHandler({final:"K"},c=>this.eraseInLine(c,!1)),this._parser.registerCsiHandler({prefix:"?",final:"K"},c=>this.eraseInLine(c,!0)),this._parser.registerCsiHandler({final:"L"},c=>this.insertLines(c)),this._parser.registerCsiHandler({final:"M"},c=>this.deleteLines(c)),this._parser.registerCsiHandler({final:"P"},c=>this.deleteChars(c)),this._parser.registerCsiHandler({final:"S"},c=>this.scrollUp(c)),this._parser.registerCsiHandler({final:"T"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"X"},c=>this.eraseChars(c)),this._parser.registerCsiHandler({final:"Z"},c=>this.cursorBackwardTab(c)),this._parser.registerCsiHandler({final:"^"},c=>this.scrollDown(c)),this._parser.registerCsiHandler({final:"`"},c=>this.charPosAbsolute(c)),this._parser.registerCsiHandler({final:"a"},c=>this.hPositionRelative(c)),this._parser.registerCsiHandler({final:"b"},c=>this.repeatPrecedingCharacter(c)),this._parser.registerCsiHandler({final:"c"},c=>this.sendDeviceAttributesPrimary(c)),this._parser.registerCsiHandler({prefix:">",final:"c"},c=>this.sendDeviceAttributesSecondary(c)),this._parser.registerCsiHandler({final:"d"},c=>this.linePosAbsolute(c)),this._parser.registerCsiHandler({final:"e"},c=>this.vPositionRelative(c)),this._parser.registerCsiHandler({final:"f"},c=>this.hVPosition(c)),this._parser.registerCsiHandler({final:"g"},c=>this.tabClear(c)),this._parser.registerCsiHandler({final:"h"},c=>this.setMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"h"},c=>this.setModePrivate(c)),this._parser.registerCsiHandler({final:"l"},c=>this.resetMode(c)),this._parser.registerCsiHandler({prefix:"?",final:"l"},c=>this.resetModePrivate(c)),this._parser.registerCsiHandler({final:"m"},c=>this.charAttributes(c)),this._parser.registerCsiHandler({final:"n"},c=>this.deviceStatus(c)),this._parser.registerCsiHandler({prefix:"?",final:"n"},c=>this.deviceStatusPrivate(c)),this._parser.registerCsiHandler({intermediates:"!",final:"p"},c=>this.softReset(c)),this._parser.registerCsiHandler({prefix:">",final:"q"},c=>this.sendXtVersion(c)),this._parser.registerCsiHandler({intermediates:" ",final:"q"},c=>this.setCursorStyle(c)),this._parser.registerCsiHandler({final:"r"},c=>this.setScrollRegion(c)),this._parser.registerCsiHandler({final:"s"},c=>this.saveCursor(c)),this._parser.registerCsiHandler({final:"t"},c=>this.windowOptions(c)),this._parser.registerCsiHandler({final:"u"},c=>this.restoreCursor(c)),this._parser.registerCsiHandler({intermediates:"'",final:"}"},c=>this.insertColumns(c)),this._parser.registerCsiHandler({intermediates:"'",final:"~"},c=>this.deleteColumns(c)),this._parser.registerCsiHandler({intermediates:'"',final:"q"},c=>this.selectProtected(c)),this._parser.registerCsiHandler({intermediates:"$",final:"p"},c=>this.requestMode(c,!0)),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},c=>this.requestMode(c,!1)),this._parser.registerCsiHandler({prefix:"=",final:"u"},c=>this.kittyKeyboardSet(c)),this._parser.registerCsiHandler({prefix:"?",final:"u"},c=>this.kittyKeyboardQuery(c)),this._parser.registerCsiHandler({prefix:">",final:"u"},c=>this.kittyKeyboardPush(c)),this._parser.registerCsiHandler({prefix:"<",final:"u"},c=>this.kittyKeyboardPop(c)),this._parser.setExecuteHandler("\x07",()=>this.bell()),this._parser.setExecuteHandler(` ++`,()=>this.lineFeed()),this._parser.setExecuteHandler("\v",()=>this.lineFeed()),this._parser.setExecuteHandler("\f",()=>this.lineFeed()),this._parser.setExecuteHandler("\r",()=>this.carriageReturn()),this._parser.setExecuteHandler("\b",()=>this.backspace()),this._parser.setExecuteHandler(" ",()=>this.tab()),this._parser.setExecuteHandler("",()=>this.shiftOut()),this._parser.setExecuteHandler("",()=>this.shiftIn()),this._parser.setExecuteHandler("\x84",()=>this.index()),this._parser.setExecuteHandler("\x85",()=>this.nextLine()),this._parser.setExecuteHandler("\x88",()=>this.tabSet()),this._parser.registerOscHandler(0,new se(c=>(this.setTitle(c),this.setIconName(c),!0))),this._parser.registerOscHandler(1,new se(c=>this.setIconName(c))),this._parser.registerOscHandler(2,new se(c=>this.setTitle(c))),this._parser.registerOscHandler(4,new se(c=>this.setOrReportIndexedColor(c))),this._parser.registerOscHandler(8,new se(c=>this.setHyperlink(c))),this._parser.registerOscHandler(10,new se(c=>this.setOrReportFgColor(c))),this._parser.registerOscHandler(11,new se(c=>this.setOrReportBgColor(c))),this._parser.registerOscHandler(12,new se(c=>this.setOrReportCursorColor(c))),this._parser.registerOscHandler(104,new se(c=>this.restoreIndexedColor(c))),this._parser.registerOscHandler(110,new se(c=>this.restoreFgColor(c))),this._parser.registerOscHandler(111,new se(c=>this.restoreBgColor(c))),this._parser.registerOscHandler(112,new se(c=>this.restoreCursorColor(c))),this._parser.registerEscHandler({final:"7"},()=>this.saveCursor()),this._parser.registerEscHandler({final:"8"},()=>this.restoreCursor()),this._parser.registerEscHandler({final:"D"},()=>this.index()),this._parser.registerEscHandler({final:"E"},()=>this.nextLine()),this._parser.registerEscHandler({final:"H"},()=>this.tabSet()),this._parser.registerEscHandler({final:"M"},()=>this.reverseIndex()),this._parser.registerEscHandler({final:"="},()=>this.keypadApplicationMode()),this._parser.registerEscHandler({final:">"},()=>this.keypadNumericMode()),this._parser.registerEscHandler({final:"c"},()=>this.fullReset()),this._parser.registerEscHandler({final:"n"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"o"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"|"},()=>this.setgLevel(3)),this._parser.registerEscHandler({final:"}"},()=>this.setgLevel(2)),this._parser.registerEscHandler({final:"~"},()=>this.setgLevel(1)),this._parser.registerEscHandler({intermediates:"%",final:"@"},()=>this.selectDefaultCharset()),this._parser.registerEscHandler({intermediates:"%",final:"G"},()=>this.selectDefaultCharset());for(let c in $)this._parser.registerEscHandler({intermediates:"(",final:c},()=>this.selectCharset("("+c)),this._parser.registerEscHandler({intermediates:")",final:c},()=>this.selectCharset(")"+c)),this._parser.registerEscHandler({intermediates:"*",final:c},()=>this.selectCharset("*"+c)),this._parser.registerEscHandler({intermediates:"+",final:c},()=>this.selectCharset("+"+c)),this._parser.registerEscHandler({intermediates:"-",final:c},()=>this.selectCharset("-"+c)),this._parser.registerEscHandler({intermediates:".",final:c},()=>this.selectCharset("."+c)),this._parser.registerEscHandler({intermediates:"/",final:c},()=>this.selectCharset("/"+c));this._parser.registerEscHandler({intermediates:"#",final:"8"},()=>this.screenAlignmentPattern()),this._parser.setErrorHandler(c=>(this._logService.error("Parsing error: ",c),c)),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new ci((c,u)=>this.requestStatusString(c,u)))}getAttrData(){return this._curAttrData}_preserveStack(e,t,r,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=s}_logSlowResolvingAsync(e){if(this._logService.logLevel<=3){let t,r=new Promise((s,o)=>{t=setTimeout(()=>o("#SLOW_TIMEOUT"),5e3)});Promise.race([e,r]).then(()=>{t!==void 0&&clearTimeout(t)},s=>{if(t!==void 0&&clearTimeout(t),s!=="#SLOW_TIMEOUT")throw s;console.warn("async parser handler taking longer than 5000 ms")})}}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let r,s=this._activeBuffer.x,o=this._activeBuffer.y,a=0,l=this._parseStack.paused;if(l){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;s=this._parseStack.cursorStartX,o=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>131072&&(a=this._parseStack.position+131072)}if(this._logService.logLevel<=1&&this._logService.debug(`parsing data ${typeof e=="string"?` "${e}"`:` "${Array.prototype.map.call(e,c=>String.fromCharCode(c)).join("")}"`}`),this._logService.logLevel===0&&this._logService.trace("parsing data (codes)",typeof e=="string"?e.split("").map(c=>c.charCodeAt(0)):e),this._parseBuffer.length131072)for(let c=a;c0&&f.getWidth(this._activeBuffer.x-1)===2&&f.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let p=this._parser.precedingJoinState;for(let b=t;bh){if(d){let A=f,T=this._activeBuffer.x-C;if(this._activeBuffer.x=C,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),!f)return;for(C>0&&f instanceof Re&&f.copyCellsFrom(A,T,0,C,!1);T=0;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u);continue}if(c&&(f.insertCells(this._activeBuffer.x,o-C,this._activeBuffer.getNullCell(u)),f.getWidth(h-1)===2&&f.setCellFromCodepoint(h-1,0,1,u)),f.setCellFromCodepoint(this._activeBuffer.x++,s,o,u),o>0)for(;--o;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=p,this._activeBuffer.x0&&f.getWidth(this._activeBuffer.x)===0&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return e.final==="t"&&!e.prefix&&!e.intermediates?this._parser.registerCsiHandler(e,r=>xn(r.params[0],this._optionsService.rawOptions.windowOptions)?t(r):!0):this._parser.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new ci(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new se(t))}registerApcHandler(e,t){return this._parser.registerApcHandler(e,new _r(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){let t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){let t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){let t=e.params[0];return t===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:t===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){let t=e.params[0];return t===1&&(this._curAttrData.bg|=536870912),(t===2||t===0)&&(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,r,s=!1,o=!1){let a=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);a&&(a.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),o),s&&(a.isWrapped=!1))}_resetBufferLine(e,t=!1){let r=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);r&&(r.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),r.isWrapped=!1)}eraseInDisplay(e,t=!1){this._restrictCursor(this._bufferService.cols);let r;switch(e.params[0]){case 0:for(r=this._activeBuffer.y,this._dirtyRowTracker.markDirty(r),this._eraseInBufferLine(r++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);r=this._bufferService.cols){let o=this._activeBuffer.lines.get(r+1);o&&(o.isWrapped=!1)}for(;r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(r=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,r-1);r--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+r)?.getTrimmedLength(););for(;r>=0;r--)this._bufferService.scroll(this._eraseAttrData())}else{for(r=this._bufferService.rows,this._dirtyRowTracker.markDirty(r-1);r--;)this._resetBufferLine(r,t);this._dirtyRowTracker.markDirty(0)}break;case 3:let s=this._activeBuffer.lines.length-this._bufferService.rows;s>0&&(this._activeBuffer.lines.trimStart(s),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-s,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-s,0),this._activeBuffer===this._bufferService.buffers.normal&&(this._bufferService.isUserScrolling=!1),this._onScroll.fire(0));break}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t);break}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let c=d;for(let u=1;u0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent("\x1B[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent("\x1B[?6c")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent("\x1B[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent("\x1B[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent("\x1B[>83;40003;0c")),!0}sendXtVersion(e){return e.params[0]>0||this._coreService.triggerDataEvent(`\x1BP>|xterm.js(${yn})\x1B\\`),!0}_is(e){return(this._optionsService.rawOptions.termName+"").startsWith(e)}setMode(e){for(let t=0;t(ee[ee.NOT_RECOGNIZED=0]="NOT_RECOGNIZED",ee[ee.SET=1]="SET",ee[ee.RESET=2]="RESET",ee[ee.PERMANENTLY_SET=3]="PERMANENTLY_SET",ee[ee.PERMANENTLY_RESET=4]="PERMANENTLY_RESET"))(r||={});let s=this._coreService.decPrivateModes,{activeProtocol:o,activeEncoding:a}=this._mouseStateService,l=this._coreService,{buffers:h,cols:d}=this._bufferService,{active:c,alt:u}=h,f=this._optionsService.rawOptions,p=(S,C)=>(l.triggerDataEvent(`\x1B[${t?"":"?"}${S};${C}$y`),!0),b=S=>S?1:2,_=e.params[0];return t?_===2?p(_,4):_===4?p(_,b(l.modes.insertMode)):_===12?p(_,3):_===20?p(_,b(f.convertEol)):p(_,0):_===1?p(_,b(s.applicationCursorKeys)):_===3?p(_,f.windowOptions.setWinLines?d===80?2:d===132?1:0:0):_===6?p(_,b(s.origin)):_===7?p(_,b(s.wraparound)):_===8?p(_,3):_===9?p(_,b(o==="X10")):_===12?p(_,b(f.cursorBlink)):_===25?p(_,b(!l.isCursorHidden)):_===45?p(_,b(s.reverseWraparound)):_===66?p(_,b(s.applicationKeypad)):_===67?p(_,4):_===1e3?p(_,b(o==="VT200")):_===1002?p(_,b(o==="DRAG")):_===1003?p(_,b(o==="ANY")):_===1004?p(_,b(s.sendFocus)):_===1005?p(_,4):_===1006?p(_,b(a==="SGR")):_===1015?p(_,4):_===1016?p(_,b(a==="SGR_PIXELS")):_===1048?p(_,1):_===47||_===1047||_===1049?p(_,b(c===u)):_===2004?p(_,b(s.bracketedPasteMode)):_===2026?p(_,b(s.synchronizedOutput)):_===9001&&this._optionsService.rawOptions.vtExtensions?.win32InputMode?p(_,b(s.win32InputMode)):p(_,0)}_updateAttrColor(e,t,r,s,o){return t===2?(e|=50331648,e&=-16777216,e|=fe.fromColorRGB([r,s,o])):t===5&&(e&=-67108864,e|=33554432|r&255),e}_extractColor(e,t,r){let s=[0,0,-1,0,0,0],o=0,a=0;do{if(s[a+o]=e.params[t+a],e.hasSubParams(t+a)){let l=e.getSubParams(t+a),h=0;do s[1]===5&&(o=1),s[a+h+1+o]=l[h];while(++h=2||s[1]===2&&a+o>=5)break;s[1]&&(o=1)}while(++a+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,e===0&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=U.fg,e.bg=U.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(e.length===1&&e.params[0]===0)return this._processSGR0(this._curAttrData),!0;let t=e.length,r,s=this._curAttrData;for(let o=0;o=30&&r<=37?(s.fg&=-67108864,s.fg|=16777216|r-30):r>=40&&r<=47?(s.bg&=-67108864,s.bg|=16777216|r-40):r>=90&&r<=97?(s.fg&=-67108864,s.fg|=16777216|r-90|8):r>=100&&r<=107?(s.bg&=-67108864,s.bg|=16777216|r-100|8):r===0?this._processSGR0(s):r===1?s.fg|=134217728:r===3?s.bg|=67108864:r===4?(s.fg|=268435456,this._processUnderline(e.hasSubParams(o)?e.getSubParams(o)[0]:1,s)):r===5?s.fg|=536870912:r===7?s.fg|=67108864:r===8?s.fg|=1073741824:r===9?s.fg|=2147483648:r===2?s.bg|=134217728:r===21?this._processUnderline(2,s):r===22?(s.fg&=-134217729,s.bg&=-134217729):r===23?s.bg&=-67108865:r===24?(s.fg&=-268435457,this._processUnderline(0,s)):r===25?s.fg&=-536870913:r===27?s.fg&=-67108865:r===28?s.fg&=-1073741825:r===29?s.fg&=2147483647:r===39?(s.fg&=-67108864,s.fg|=U.fg&16777215):r===49?(s.bg&=-67108864,s.bg|=U.bg&16777215):r===38||r===48||r===58?o+=this._extractColor(e,o,s):r===53?s.bg|=1073741824:r===55?s.bg&=-1073741825:r===221&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.fg&=-134217729:r===222&&(this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl??!0)?s.bg&=-134217729:r===59?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):this._logService.debug("Unknown SGR attribute: %d.",r);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent("\x1B[0n");break;case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[${t};${r}R`);break}return!0}deviceStatusPrivate(e){switch(e.params[0]){case 6:let t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`\x1B[?${t};${r}R`);break;case 15:break;case 25:break;case 26:break;case 53:break;case 996:(this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery??!0)&&this._onRequestColorSchemeQuery.fire();break}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=U.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){let t=e.length===0?1:e.params[0];if(t===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(t){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar";break}let r=t%2===1;this._coreService.decPrivateModes.cursorBlink=r}return!0}setScrollRegion(e){let t=e.params[0]||1,r;return(e.length<2||(r=e.params[1])>this._bufferService.rows||r===0)&&(r=this._bufferService.rows),r>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=r-1,this._setCursor(0,0)),!0}windowOptions(e){if(!xn(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;let t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:t!==2&&this._onRequestWindowsOptionsReport.fire(0);break;case 16:this._onRequestWindowsOptionsReport.fire(1);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`\x1B[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:(t===0||t===2)&&(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),(t===0||t===1)&&(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:(t===0||t===2)&&this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),(t===0||t===1)&&this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop());break}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._activeBuffer.savedCharsets=this._charsetService.charsets.slice(),this._activeBuffer.savedGlevel=this._charsetService.glevel,this._activeBuffer.savedOriginMode=this._coreService.decPrivateModes.origin,this._activeBuffer.savedWraparoundMode=this._coreService.decPrivateModes.wraparound,!0}restoreCursor(e){this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg;for(let t=0;t1;){let s=r.shift(),o=r.shift();if(/^\d+$/.exec(s)){let a=parseInt(s,10);if(Tn(a))if(o==="?")t.push({type:0,index:a});else{let l=xs(o);l&&t.push({type:1,index:a,color:l})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){let t=e.indexOf(";");if(t===-1)return!0;let r=e.slice(0,t).trim(),s=e.slice(t+1);return s?this._createHyperlink(r,s):r.trim()?!1:this._finishHyperlink()}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();let r=e.split(":"),s,o=r.findIndex(a=>a.startsWith("id="));return o!==-1&&(s=r[o].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){let r=e.split(";");for(let s=0;s=this._specialColors.length);++s,++t)if(r[s]==="?")this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{let o=xs(r[s]);o&&this._onColor.fire([{type:1,index:this._specialColors[t],color:o}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;let t=[],r=e.split(";");for(let s=0;s=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=U.clone(),this._eraseAttrDataInternal=U.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=this._curAttrData.bg&67108863,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){let e=new F;e.content=1<<22|69,e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`\x1B${l}\x1B\\`),!0),s=this._bufferService.buffer,o=this._optionsService.rawOptions,a={block:2,underline:4,bar:6};return r(e==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:e==='"p'?'P1$r61;1"p':e==="r"?`P1$r${s.scrollTop+1};${s.scrollBottom+1}r`:e==="m"?"P1$r0m":e===" q"?`P1$r${a[o.cursorStyle]-(o.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}kittyKeyboardSet(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=e.length>1&&e.params[1]||1,s=this._coreService.kittyKeyboard;switch(r){case 1:s.flags=t;break;case 2:s.flags|=t;break;case 3:s.flags&=~t;break}return!0}kittyKeyboardQuery(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=this._coreService.kittyKeyboard.flags;return this._coreService.triggerDataEvent(`\x1B[?${t}u`),!0}kittyKeyboardPush(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=e.params[0]||0,r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;return o.length>=16&&o.shift(),o.push(r.flags),r.flags=t,!0}kittyKeyboardPop(e){if(!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard)return!0;let t=Math.max(1,e.params[0]||1),r=this._coreService.kittyKeyboard,o=this._bufferService.buffer===this._bufferService.buffers.alt?r.altStack:r.mainStack;for(let a=0;a0;a++)r.flags=o.pop();return o.length===0&&t>0&&(r.flags=0),!0}},di=class{constructor(i){this._bufferService=i;this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(i){ithis.end&&(this.end=i)}markRangeDirty(i,e){i>e&&(wn=i,i=e,e=wn),ithis.end&&(this.end=e)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};di=y([m(0,D)],di);function Tn(n){return 0<=n&&n<256}var vr=class extends g{constructor(e){super();this._action=e;this._writeBuffer=[];this._callbacks=[];this._pendingData=0;this._bufferOffset=0;this._isSyncWriting=!1;this._syncCalls=0;this._didUserInput=!1;this._innerWriteTimer=this._register(new Ce);this._onWriteParsed=this._register(new v);this.onWriteParsed=this._onWriteParsed.event;this._register(E(()=>{this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0}))}handleUserInput(){this._didUserInput=!0}flushSync(){if(this._store.isDisposed||this._isSyncWriting)return;this._isSyncWriting=!0;let e,t=!1;for(;e=this._writeBuffer.shift();){t=!0,this._action(e);let r=this._callbacks.shift();r&&r()}this._pendingData=0,this._bufferOffset=2147483647,this._writeBuffer.length=0,this._callbacks.length=0,this._isSyncWriting=!1,t&&this._onWriteParsed.fire()}writeSync(e,t){if(this._store.isDisposed)return;if(t!==void 0&&this._syncCalls>t){this._syncCalls=0;return}if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;this._isSyncWriting=!0;let r;for(;r=this._writeBuffer.shift();){this._action(r);let s=this._callbacks.shift();s&&s()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(!this._store.isDisposed){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput){this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),this._innerWrite();return}this._scheduleInnerWrite()}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}}_scheduleInnerWrite(e=0,t=!0){this._store.isDisposed||this._innerWriteTimer.cancelAndSet(()=>this._innerWrite(e,t),0)}_innerWrite(e=0,t=!0){if(this._store.isDisposed)return;let r=e||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let s=this._writeBuffer[this._bufferOffset],o=this._action(s,t);if(o){let l=h=>{this._store.isDisposed||(performance.now()-r>=12?this._scheduleInnerWrite(0,h):this._innerWrite(r,h))};o.catch(h=>(queueMicrotask(()=>{throw h}),Promise.resolve(!1))).then(l);return}let a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=s.length,performance.now()-r>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),this._scheduleInnerWrite()):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}};var Pt=class{constructor(i){this._bufferService=i;this._nextId=1;this._entriesWithId=new Map;this._dataByLinkId=new Map}registerLink(i){let e=this._bufferService.buffer;if(i.id===void 0){let l=e.addMarker(e.ybase+e.y),h={data:i,id:this._nextId++,lines:[l]};return l.onDispose(()=>this._removeMarkerFromLink(h,l)),this._dataByLinkId.set(h.id,h),h.id}let t=i,r=this._getEntryIdKey(t),s=this._entriesWithId.get(r);if(s)return this.addLineToLink(s.id,e.ybase+e.y),s.id;let o=e.addMarker(e.ybase+e.y),a={id:this._nextId++,key:this._getEntryIdKey(t),data:t,lines:[o]};return o.onDispose(()=>this._removeMarkerFromLink(a,o)),this._entriesWithId.set(a.key,a),this._dataByLinkId.set(a.id,a),a.id}addLineToLink(i,e){let t=this._dataByLinkId.get(i);if(t&&t.lines.every(r=>r.line!==e)){let r=this._bufferService.buffer.addMarker(e);t.lines.push(r),r.onDispose(()=>this._removeMarkerFromLink(t,r))}}getLinkData(i){return this._dataByLinkId.get(i)?.data}_getEntryIdKey(i){return`${i.id};;${i.uri}`}_removeMarkerFromLink(i,e){let t=i.lines.indexOf(e);t!==-1&&(i.lines.splice(t,1),i.lines.length===0&&(i.data.id!==void 0&&this._entriesWithId.delete(i.key),this._dataByLinkId.delete(i.id)))}};Pt=y([m(0,D)],Pt);var Dn=!1,Sr=class extends g{constructor(e){super();this._windowsWrappingHeuristics=this._register(new B);this._onBinary=this._register(new v);this.onBinary=this._onBinary.event;this._onData=this._register(new v);this.onData=this._onData.event;this._onLineFeed=this._register(new v);this.onLineFeed=this._onLineFeed.event;this._onRender=this._register(new v);this.onRender=this._onRender.event;this._onResize=this._register(new v);this.onResize=this._onResize.event;this._onWriteParsed=this._register(new v);this.onWriteParsed=this._onWriteParsed.event;this._onScroll=this._register(new v);this._instantiationService=new er,this.optionsService=this._register(new nr(e)),this._instantiationService.setService(R,this.optionsService),this._logService=this._register(this._instantiationService.createInstance(wt)),this._instantiationService.setService(_e,this._logService),this._bufferService=this._register(this._instantiationService.createInstance(Rt)),this._instantiationService.setService(D,this._bufferService),this.coreService=this._register(this._instantiationService.createInstance(At)),this._instantiationService.setService(X,this.coreService),this.mouseStateService=this._register(this._instantiationService.createInstance(or)),this._instantiationService.setService(Me,this.mouseStateService),this.unicodeService=this._register(this._instantiationService.createInstance(me)),this.unicodeService.register(new ar),this._instantiationService.setService(gi,this.unicodeService),this._charsetService=this._instantiationService.createInstance(lr),this._instantiationService.setService(Us,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(Pt),this._instantiationService.setService(Si,this._oscLinkService),this._inputHandler=this._register(new br(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.mouseStateService,this.unicodeService)),this._register(Y.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(Y.forward(this._bufferService.onResize,this._onResize)),this._register(Y.forward(this.coreService.onData,this._onData)),this._register(Y.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom(()=>this.scrollToBottom(!0))),this._register(this.coreService.onUserInput(()=>this._writeBuffer.handleUserInput())),this._register(this.optionsService.onMultipleOptionChange(["windowsPty"],()=>this._handleWindowsPtyOptionChange())),this._register(this._bufferService.onScroll(()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)})),this._writeBuffer=this._register(new vr((t,r)=>this._inputHandler.parse(t,r))),this._register(Y.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new v),this._onScroll.event(e=>{this._onScrollApi?.fire(e.position)})),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(let t in e)this.optionsService.options[t]=e[t]}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=3&&!Dn&&(this._logService.warn("writeSync is unreliable and will be removed soon."),Dn=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,2),t=Math.max(t,1),this._writeBuffer.flushSync(),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t){this._bufferService.scrollLines(e,t)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}registerApcHandler(e,t){return this._inputHandler.registerApcHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.mouseStateService.reset()}_handleWindowsPtyOptionChange(){let e=!1,t=this.optionsService.rawOptions.windowsPty;t&&t.backend!==void 0&&t.buildNumber!==void 0&&(e=t.backend==="conpty"&&t.buildNumber<21376),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let e=[];e.push(this.onLineFeed(Cs.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:"H"},()=>(Cs(this._bufferService),!1))),this._windowsWrappingHeuristics.value=E(()=>{for(let t of e)t.dispose()})}}};var ce=0,gr=class{constructor(i,e){this._getKey=i;this._array=[];this._insertedValues=[];this._isFlushingInserted=!1;this._deletedIndices=new Set;this._indicesByValue=new Map;this._isFlushingDeleted=!1;this._flushInsertedTask=new Ct(e),this._flushDeletedTask=new Ct(e)}clear(){this._array.length=0,this._indicesByValue.clear(),this._insertedValues.length=0,this._flushInsertedTask.clear(),this._isFlushingInserted=!1,this._deletedIndices.clear(),this._flushDeletedTask.clear(),this._isFlushingDeleted=!1}insert(i){this._flushCleanupDeleted(),this._insertedValues.length===0&&this._flushInsertedTask.enqueue(()=>this._flushInserted()),this._insertedValues.push(i)}_flushInserted(){let i=this._insertedValues.sort((s,o)=>this._getKey(s)-this._getKey(o)),e=0,t=0,r=new Array(this._array.length+this._insertedValues.length);for(let s=0;s=this._array.length||this._getKey(i[e])<=this._getKey(this._array[t])?(r[s]=i[e],e++):r[s]=this._array[t++];this._array=r,this._rebuildIdentityIndex(),this._insertedValues.length=0}_flushCleanupInserted(){!this._isFlushingInserted&&this._insertedValues.length>0&&this._flushInsertedTask.flush()}_rebuildIdentityIndex(){this._indicesByValue.clear();for(let i=this._array.length-1;i>=0;i--){let e=this._array[i],t=this._indicesByValue.get(e);t===void 0?this._indicesByValue.set(e,i):typeof t=="number"?this._indicesByValue.set(e,[t,i]):t.push(i)}}delete(i){this._flushCleanupInserted();let e=this._indicesByValue.get(i);if(e===void 0)return!1;let t=typeof e=="number"?e:e.pop();return t===void 0?!1:((typeof e=="number"||e.length===0)&&this._indicesByValue.delete(i),this._deletedIndices.size===0&&this._flushDeletedTask.enqueue(()=>this._flushDeleted()),this._deletedIndices.add(t),!0)}_flushDeleted(){this._isFlushingDeleted=!0;let i=new Array(this._array.length-this._deletedIndices.size),e=0;for(let t=0;t0&&this._flushDeletedTask.flush()}*getKeyIterator(i){if(this._flushCleanupInserted(),this._flushCleanupDeleted(),this._array.length!==0&&(ce=this._search(i),!(ce<0||ce>=this._array.length)&&this._getKey(this._array[ce])===i))do yield this._array[ce];while(++ce=this._array.length)&&this._getKey(this._array[ce])===i))do e(this._array[ce]);while(++ce=e;){let r=e+t>>1,s=this._getKey(this._array[r]);if(s>i)t=r-1;else if(s0&&this._getKey(this._array[r-1])===i;)r--;return r}}return e}};var Mt=0,Cr=0,Bt=class extends g{constructor(e,t){super();this._logService=e;this._bufferService=t;this._lineCache=this._register(new ws);this._onDecorationRegistered=this._register(new v);this.onDecorationRegistered=this._onDecorationRegistered.event;this._onDecorationRemoved=this._register(new v);this.onDecorationRemoved=this._onDecorationRemoved.event;this._decorations=new gr(r=>r?.marker.line,this._logService),this._register(E(()=>this.reset())),this._register(this._bufferService.buffers.onBufferActivate(()=>{this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)})),this._lineCache.attachToBufferLines(this._bufferService.buffer.lines)}get decorations(){return this._decorations.values()}registerDecoration(e){if(e.marker.isDisposed)return;let t=new Ts(e);if(t){let r=t.marker.onDispose(()=>t.dispose()),s=t.onDispose(()=>{s.dispose(),t&&(this._decorations.delete(t)&&(this._lineCache.remove(t),this._onDecorationRemoved.fire(t)),r.dispose())});this._decorations.insert(t),this._lineCache.add(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(let e of this._decorations.values())e.dispose();this._decorations.clear(),this._lineCache.clear()}*getDecorationsAtCell(e,t,r){let s=this._lineCache.getDecorationsOnLine(t);if(s)for(let o of s)Mt=o.options.x??0,Cr=Mt+(o.options.width??1),e>=Mt&&e=Mt&&ethis._handleBufferLinesTrim(r))),t.add(e.onInsert(r=>this._handleBufferLinesInsert(r))),t.add(e.onDelete(r=>this._handleBufferLinesDelete(r)))}_getDecorationHeight(e){return e.options.height??1}_addToLineBuckets(e){let t=e.marker.line;if(t<0)return;e._indexedStartLine=t;let r=this._getDecorationHeight(e);for(let s=t;s=0&&this._addToLineBuckets(e)}_scheduleLineIndexSync(e){this._lineIndexSyncCallbacks.push(e),this._lineIndexSyncTimer.set(()=>{let t=this._lineIndexSyncCallbacks;this._lineIndexSyncCallbacks=[];for(let r of t)r()})}_handleBufferLinesTrim(e){if(e<=0||!this._decorationsByLine.size)return;let t=new Map;for(let[r,s]of this._decorationsByLine){let o=r-e;o<0||this._mergeLineBucket(t,o,s)}this._decorationsByLine.clear();for(let[r,s]of t)this._decorationsByLine.set(r,s);for(let r of this._decorations)r.marker.isDisposed||(r._indexedStartLine-=e)}_handleBufferLinesInsert(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesInsert(e))}_handleBufferLinesDelete(e){this._scheduleLineIndexSync(()=>this._applyBufferLinesDelete(e))}_mergeLineBucket(e,t,r){let s=e.get(t);if(s)for(let o=0,a=r.length;ot&&(s.push(a),this._removeFromLineBuckets(a))}let o=new Map;for(let[a,l]of this._decorationsByLine){let h=a>=t?a+r:a;this._mergeLineBucket(o,h,l)}this._decorationsByLine.clear();for(let[a,l]of o)this._decorationsByLine.set(a,l);for(let a of this._decorations)a.marker.isDisposed||a._indexedStartLine>=t&&(a._indexedStartLine=a.marker.line);for(let a of s)this._addToLineBuckets(a)}_applyBufferLinesDelete(e){let t=e.index+e.amount,r=new Map;for(let[o,a]of this._decorationsByLine){if(o>=e.index&&o=t?o-e.amount:o;this._mergeLineBucket(r,l,a)}this._decorationsByLine.clear();for(let[o,a]of r)this._decorationsByLine.set(o,a);let s=[];for(let o of this._decorations){if(o.marker.isDisposed)continue;let a=o._indexedStartLine,l=this._getDecorationHeight(o);a>=t?o._indexedStartLine=o.marker.line:at&&s.push(o)}for(let o of s)this._reindexDecoration(o)}},Ts=class extends pe{constructor(e){super();this.options=e;this.onRenderEmitter=this.add(new v);this.onRender=this.onRenderEmitter.event;this._onDispose=this.add(new v);this.onDispose=this._onDispose.event;this._cachedBg=null;this._cachedFg=null;this.marker=e.marker,this._indexedStartLine=e.marker.line,this.options.overviewRulerOptions&&!this.options.overviewRulerOptions.position&&(this.options.overviewRulerOptions.position="full")}get backgroundColorRGB(){return this._cachedBg===null&&(this.options.backgroundColor?this._cachedBg=M.toColor(this.options.backgroundColor):this._cachedBg=void 0),this._cachedBg}get foregroundColorRGB(){return this._cachedFg===null&&(this.options.foregroundColor?this._cachedFg=M.toColor(this.options.foregroundColor):this._cachedFg=void 0),this._cachedFg}dispose(){this._onDispose.fire(),super.dispose()}};var Ro=1e3,Ir=class{constructor(i,e=Ro){this._renderCallback=i;this._debounceThresholdMS=e;this._lastRefreshMs=0;this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0),this._additionalRefreshRequested=!1}refresh(i,e,t){this._rowCount=t,i=i??0,e=e??this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,i):i,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,e):e;let r=performance.now();if(r-this._lastRefreshMs>=this._debounceThresholdMS)this._refreshTimeoutID!==void 0&&(clearTimeout(this._refreshTimeoutID),this._refreshTimeoutID=void 0,this._additionalRefreshRequested=!1),this._lastRefreshMs=r,this._innerRefresh();else if(!this._additionalRefreshRequested){let s=r-this._lastRefreshMs,o=this._debounceThresholdMS-s;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout(()=>{this._lastRefreshMs=performance.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0},o)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;let i=Math.max(this._rowStart,0),e=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(i,e)}};var Rn=!1,je=class extends g{constructor(e,t,r,s){super();this._terminal=e;this._coreBrowserService=r;this._renderService=s;this._rowColumns=new WeakMap;this._liveRegionLineCount=0;this._charsToConsume=[];this._charsToAnnounce="";let o=this._coreBrowserService.mainDocument;this._accessibilityContainer=o.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=o.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let a=0;athis._handleBoundaryFocus(a,0),this._bottomBoundaryFocusListener=a=>this._handleBoundaryFocus(a,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=o.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this._register(new Ir(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");Rn?(this._accessibilityContainer.classList.add("debug"),this._rowContainer.classList.add("debug"),this._debugRootContainer=o.createElement("div"),this._debugRootContainer.classList.add("xterm"),this._debugRootContainer.appendChild(o.createTextNode("------start a11y------")),this._debugRootContainer.appendChild(this._accessibilityContainer),this._debugRootContainer.appendChild(o.createTextNode("------end a11y------")),this._terminal.element.insertAdjacentElement("afterend",this._debugRootContainer)):this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this._register(this._terminal.onResize(a=>this._handleResize(a.rows))),this._register(this._terminal.onRender(a=>this._refreshRows(a.start,a.end))),this._register(this._terminal.onScroll(()=>this._refreshRows())),this._register(this._terminal.onA11yChar(a=>this._handleChar(a))),this._register(this._terminal.onLineFeed(()=>this._handleChar(` +`))),this._register(this._terminal.onA11yTab(a=>this._handleTab(a))),this._register(this._terminal.onKey(a=>this._handleKey(a.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(I(o,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(E(()=>{Rn?this._debugRootContainer.remove():this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===` -+`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent=Ze.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let r=this._terminal.buffer,s=r.lines.length.toString();for(let o=e;o<=t;o++){let a=r.lines.get(r.ydisp+o),l=[],h=a?.translateToString(!0,void 0,void 0,l)||"",d=(r.ydisp+o+1).toString(),c=this._rowElements[o];c&&(h.length===0?(c.textContent="\xA0",this._rowColumns.set(c,[0,1])):(c.textContent=h,this._rowColumns.set(c,l)),c.setAttribute("aria-posinset",d),c.setAttribute("aria-setsize",s),this._alignRowWidth(c))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent===Ze.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){let r=e.target,s=this._rowElements[t===0?1:this._rowElements.length-2],o=r.getAttribute("aria-posinset"),a=t===0?"1":`${this._terminal.buffer.lines.length}`;if(o===a||e.relatedTarget!==s)return;let l,h;if(t===0?(l=r,h=this._rowElements.pop(),this._rowContainer.removeChild(h)):(l=this._rowElements.shift(),h=r,this._rowContainer.removeChild(l)),l.removeEventListener("focus",this._topBoundaryFocusListener),h.removeEventListener("focus",this._bottomBoundaryFocusListener),t===0){let d=this._createAccessibilityTreeNode();this._rowElements.unshift(d),this._rowContainer.insertAdjacentElement("afterbegin",d)}else{let d=this._createAccessibilityTreeNode();this._rowElements.push(d),this._rowContainer.appendChild(d)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error("anchorNode and/or focusNode are null");return}let t={node:e.anchorNode,offset:e.anchorOffset},r={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(r.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===r.node&&t.offset>r.offset)&&([t,r]=[r,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let s=this._rowElements.slice(-1)[0];if(r.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(r={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(r.node))return;let o=({node:h,offset:d})=>{let c=h instanceof Text?h.parentNode:h,u=parseInt(c?.getAttribute("aria-posinset"),10)-1;if(isNaN(u))return console.warn("row is invalid. Race condition?"),null;let f=this._rowColumns.get(c);if(!f)return console.warn("columns is null. Race condition?"),null;let p=d=this._terminal.cols&&(++u,p=0),{row:u,column:p}},a=o(t),l=o(r);if(!(!a||!l)){if(a.row>l.row||a.row===l.row&&a.column>=l.column)throw new Error("invalid range");this._terminal.select(a.column,a.row,(l.row-a.row)*this._terminal.cols-a.column+l.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let t=this._rowContainer.children.length;te;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{Ne(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(I(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(I(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register(I(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register(I(this._element,"mouseup",this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;let r=e.composedPath();for(let s=0;s{s?.forEach(o=>{o.link.dispose&&o.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let r=!1;for(let[s,o]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(s)&&(r=this._checkLinkProviderResult(s,e,r)):o.provideLinks(e.y,a=>{if(this._isMouseOut)return;let l=a?.map(h=>({link:h}));this._activeProviderReplies?.set(s,l),r=this._checkLinkProviderResult(s,e,r),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let r=new Set;for(let s=0;se?this._bufferService.cols:l.link.range.end.x;for(let c=h;c<=d;c++){if(r.has(c)){o.splice(a--,1);break}r.add(c)}}}}_checkLinkProviderResult(e,t,r){if(!this._activeProviderReplies)return r;let s=this._activeProviderReplies.get(e),o=!1;for(let a=0;athis._linkAtPosition(l.link,t));a&&(r=!0,this._handleNewLink(a))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!r)for(let a=0;athis._linkAtPosition(h.link,t));if(l){r=!0,this._handleNewLink(l);break}}return r}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element);t&&this._mouseDownLink&&Lo(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,Ne(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0?!0:e.link.decorations.underline,pointerCursor:e.link.decorations===void 0?!0:e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:r=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==r&&(this._currentLink.state.decorations.pointerCursor=r,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",r))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:r=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==r&&(this._currentLink.state.decorations.underline=r,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,r))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(r=>{if(!this._currentLink)return;let s=r.start===0?0:r.start+1+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.ydisp+1+r.end;if(this._currentLink.link.range.start.y>=s&&this._currentLink.link.range.end.y<=o&&(this._clearCurrentLink(s,o),this._lastMouseEvent)){let a=this._positionFromMouseEvent(this._lastMouseEvent,this._element);a&&this._askForLink(a,!1)}})))}_linkHover(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)}_fireUnderlineEvent(e,t){let r=e.range,s=this._bufferService.buffer.ydisp,o=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-s-1,r.end.x,r.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(o)}_linkLeave(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)}_linkAtPosition(e,t){let r=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,o=t.y*this._bufferService.cols+t.x;return r<=o&&o<=s}_positionFromMouseEvent(e,t){let r=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,r,s,o){return{x1:e,y1:t,x2:r,y2:s,cols:this._bufferService.cols,fg:o}}};Bt=y([m(1,Oe),m(2,G),m(3,D),m(4,Ii)],Bt);function Lo(n,i){return n.text===i.text&&n.range.start.x===i.range.start.x&&n.range.start.y===i.range.start.y&&n.range.end.x===i.range.end.x&&n.range.end.y===i.range.end.y}var Ir=class extends vr{constructor(e={}){super(e);this._linkifier=this._register(new B);this.browser=ze;this._keyDownHandled=!1;this._keyDownSeen=!1;this._keyPressHandled=!1;this._unprocessedDeadKey=!1;this._accessibilityManager=this._register(new B);this._onCursorMove=this._register(new v);this.onCursorMove=this._onCursorMove.event;this._onKey=this._register(new v);this.onKey=this._onKey.event;this._onSelectionChange=this._register(new v);this.onSelectionChange=this._onSelectionChange.event;this._onTitleChange=this._register(new v);this.onTitleChange=this._onTitleChange.event;this._onBell=this._register(new v);this.onBell=this._onBell.event;this._onFocus=this._register(new v);this._onBlur=this._register(new v);this._onA11yCharEmitter=this._register(new v);this._onA11yTabEmitter=this._register(new v);this._onWillOpen=this._register(new v);this._onDimensionsChange=this._register(new v);this.onDimensionsChange=this._onDimensionsChange.event;this._setup(),this._decorationService=this._instantiationService.createInstance(Mt),this._instantiationService.setService(ge,this._decorationService),this._keyboardService=this._instantiationService.createInstance(xt),this._instantiationService.setService(zs,this._keyboardService),this._linkProviderService=this._instantiationService.createInstance(Gi),this._instantiationService.setService(Ii,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(tt)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(t=>this.refresh(t?.start??0,t?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(t=>this._reportWindowsOptions(t))),this._register(this._inputHandler.onColor(t=>this._handleColorEvent(t))),this._register(Y.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(Y.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(Y.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(Y.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(t=>this._afterResize(t.cols,t.rows))),this._register(E(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}get dimensions(){if(!this._renderService)return;let e=this._renderService.dimensions;return{css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}}_handleColorEvent(e){if(this._themeService)for(let t of e){let r,s;switch(t.index){case 256:r="foreground",s="10";break;case 257:r="background",s="11";break;case 258:r="cursor",s="12";break;default:r="ansi",s="4;"+t.index}switch(t.type){case 0:let o=L.toColorRGB(r==="ansi"?this._themeService.colors.ansi[t.index]:this._themeService.colors[r]);this.coreService.triggerDataEvent(`\x1B]${s};${En(o)}\x1B\\`);break;case 1:if(r==="ansi")this._themeService.modifyColors(a=>a.ansi[t.index]=O.toColor(...t.color));else{let a=r;this._themeService.modifyColors(l=>l[a]=O.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index);break}}}_reportColorScheme(){if(!this._themeService)return;let e=j.relativeLuminance(this._themeService.colors.background.rgba>>8),t=j.relativeLuminance(this._themeService.colors.foreground.rgba>>8),r=e{this.hasSelection()&&Ns(t,this._selectionService)}));let e=t=>Fs(t,this.textarea,this.coreService,this.optionsService);this._register(I(this.textarea,"paste",e)),this._register(I(this.element,"paste",e)),ot?this._register(I(this.element,"mousedown",t=>{t.button===2&&Fr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(I(this.element,"contextmenu",t=>{Fr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),zt&&this._register(I(this.element,"auxclick",t=>{t.button===1&&Nr(t,this.textarea,this.screenElement)}))}_bindKeys(){this._register(I(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register(I(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register(I(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register(I(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register(I(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register(I(this.textarea,"compositionend",e=>{this._compositionHelper instanceof Ee?this._compositionHelper.compositionend(e)&&this.textarea.dispatchEvent(new CustomEvent("xterm-composition-transaction-accepted",{bubbles:!0})):this._compositionHelper.compositionend()})),this._register(I(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",l=>this.element.classList.toggle("allow-transparency",l))),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register(I(this.screenElement,"mousemove",l=>this.updateCursorStyle(l))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let r=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",Ut.get()),Xr||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>r.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(zi,this.textarea,e.ownerDocument.defaultView??window,this._document??(typeof window<"u"?window.document:null))),this._instantiationService.setService(z,this._coreBrowserService),this._register(I(this.textarea,"focus",l=>this._handleTextAreaFocus(l))),this._register(I(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(bt,this._document,this._helperContainer),this._instantiationService.setService(Be,this._charSizeService),this._themeService=this._instantiationService.createInstance(yt),this._instantiationService.setService(le,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(We),this._instantiationService.setService(Ci,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(It,this.rows,this.screenElement)),this._instantiationService.setService(G,this._renderService),this._register(this._renderService.onRenderedViewportChange(l=>this._onRender.fire(l))),this._register(this._renderService.onDimensionsChange(l=>this._onDimensionsChange.fire({css:{canvas:{...l.css.canvas},cell:{...l.css.cell}},device:{canvas:{...l.device.canvas},cell:{...l.device.cell},char:{...l.device.char}}}))),this.onResize(l=>this._renderService.resize(l.cols,l.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(Ee,this.textarea,this._compositionView),this._register(E(()=>{this._compositionHelper instanceof Ee&&this._compositionHelper.dispose()})),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(vt),this._instantiationService.setService(Oe,this._mouseCoordsService);let s=this._linkifier.value=this._register(this._instantiationService.createInstance(Bt,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(l){this._logService.error("onWillOpen handler threw an exception",l)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(ut,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(l=>{super.scrollLines(l,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(Et,this.element,this.screenElement,s)),this._instantiationService.setService(gi,this._selectionService),this._mouseService=this._instantiationService.createInstance(gt),this._instantiationService.setService(Ks,this._mouseService),this._register(this._selectionService.onRequestScrollLines(l=>this.scrollLines(l.amount,l.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(l=>this._renderService.handleSelectionChanged(l.start,l.end,l.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(l=>{this.textarea.value=l,this.textarea.focus(),this.textarea.select()})),this._register(Y.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(ft,this.screenElement)),this._register(I(this.element,"mousedown",l=>this._selectionService.handleMouseDown(l))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(je,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",l=>this._handleScreenReaderModeOptionChange(l)));let o=this.options.scrollbar?.showScrollbar??!0,a=this.options.scrollbar?.width;o&&a&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(Ge,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",l=>{let h=(l?.showScrollbar??!0)&&!!l?.width;!this._overviewRulerRenderer&&h&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(Ge,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:l=>this._viewport?.handleTouchScroll(l)},l=>this._register(l),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(mt,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,r=!1){this._renderService?.refreshRows(e,t,r)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){Or(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,r){this._selectionService.setSelection(e,t,r)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(!(!this._selectionService||!this._selectionService.hasSelection))return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;!t&&(e.key==="Dead"||e.key==="AltGraph")&&(this._unprocessedDeadKey=!0);let r=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),r.type===3||r.type===2){let o=this.rows-1;return this.scrollLines(r.type===2?-o:o),e.preventDefault(),e.stopPropagation(),!1}if(r.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(r.cancel&&(e.preventDefault(),e.stopPropagation()),!r.key)||!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;(r.key===""||r.key==="\r")&&(this.textarea.value="");let s=this._keyboardService.useWin32InputMode&&Ds(e);if(this._onKey.fire({key:r.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(r.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){let r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return t.type==="keypress"?r:r&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return;Ds(e)||this.focus();let t=this._keyboardService.evaluateKeyUp(e);if(t?.key){let r=this._keyboardService.useWin32InputMode&&Ds(e);this.coreService.triggerDataEvent(t.key,!r)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this._compositionHelper.keypress?.(t)||this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType==="insertText"&&!this.optionsService.rawOptions.screenReaderMode&&this._compositionHelper instanceof Ee&&this._compositionHelper.input(e.data))return!0;if(e.data&&e.inputType==="insertText"&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){if(e===this.cols&&t===this.rows){this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure();return}super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e=0;i--)this._addons[i].instance.dispose()}loadAddon(i,e){let t={instance:e,dispose:e.dispose,isDisposed:!1};this._addons.push(t),e.dispose=()=>this._wrappedAddonDispose(t),e.activate(i)}_wrappedAddonDispose(i){if(i.isDisposed)return;let e=-1;for(let t=0;t=this._line.length))return e?(this._line.loadCell(i,e),e):this._line.loadCell(i,new F)}translateToString(i,e,t){return this._line.translateToString(i,e,t)}};var di=class{constructor(i,e){this._buffer=i;this.type=e}init(i){return this._buffer=i,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(i){let e=this._buffer.lines.get(i);if(e)return new yr(e)}getNullCell(){return new F}};var xr=class extends g{constructor(e){super();this._core=e;this._onBufferChange=this._register(new v);this.onBufferChange=this._onBufferChange.event;this._normal=new di(this._core.buffers.normal,"normal"),this._alternate=new di(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}};var wr=class{constructor(i){this._core=i}registerCsiHandler(i,e){return this._core.registerCsiHandler(i,t=>e(t.toArray()))}addCsiHandler(i,e){return this.registerCsiHandler(i,e)}registerDcsHandler(i,e){return this._core.registerDcsHandler(i,(t,r)=>e(t,r.toArray()))}addDcsHandler(i,e){return this.registerDcsHandler(i,e)}registerEscHandler(i,e){return this._core.registerEscHandler(i,e)}addEscHandler(i,e){return this.registerEscHandler(i,e)}registerOscHandler(i,e){return this._core.registerOscHandler(i,e)}addOscHandler(i,e){return this.registerOscHandler(i,e)}registerApcHandler(i,e){return this._core.registerApcHandler(i,e)}};var Tr=class{constructor(i){this._core=i}register(i){this._core.unicodeService.register(i)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(i){this._core.unicodeService.activeVersion=i}};var Ao=["cols","rows"],ye=0,Ln=class extends g{constructor(i){super(),this._core=this._register(new Ir(i)),this._addonManager=this._register(new Er),this._publicOptions={...this._core.options};let e=r=>this._core.options[r],t=(r,s)=>{this._checkReadonlyOptions(r),this._core.options[r]=s};for(let r in this._core.options){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this._publicOptions,r,s)}}_checkReadonlyOptions(i){if(Ao.includes(i))throw new Error(`Option "${i}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new wr(this._core)}get unicode(){return this._checkProposedApi(),new Tr(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new xr(this._core))}get markers(){return this._core.markers}get modes(){let i=this._core.coreService.decPrivateModes,e="none";switch(this._core.mouseStateService.activeProtocol){case"X10":e="x10";break;case"VT200":e="vt200";break;case"DRAG":e="drag";break;case"ANY":e="any";break}return{applicationCursorKeysMode:i.applicationCursorKeys,applicationKeypadMode:i.applicationKeypad,bracketedPasteMode:i.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:e,originMode:i.origin,reverseWraparoundMode:i.reverseWraparound,sendFocusMode:i.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:i.synchronizedOutput,win32InputMode:i.win32InputMode,wraparoundMode:i.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(i){for(let e in i)this._publicOptions[e]=i[e]}blur(){this._core.blur()}focus(){this._core.focus()}input(i,e=!0){this._core.input(i,e)}resize(i,e){this._verifyIntegers(i,e),this._core.resize(i,e)}open(i){this._core.open(i)}attachCustomKeyEventHandler(i){this._core.attachCustomKeyEventHandler(i)}attachCustomWheelEventHandler(i){this._core.attachCustomWheelEventHandler(i)}registerLinkProvider(i){return this._core.registerLinkProvider(i)}registerCharacterJoiner(i){return this._core.registerCharacterJoiner(i)}deregisterCharacterJoiner(i){this._core.deregisterCharacterJoiner(i)}registerMarker(i=0){return this._verifyIntegers(i),this._core.registerMarker(i)}registerDecoration(i){return this._verifyPositiveIntegers(i.x??0,i.width??0,i.height??0),this._core.registerDecoration(i)}hasSelection(){return this._core.hasSelection()}select(i,e,t){this._verifyIntegers(i,e,t),this._core.select(i,e,t)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(i,e){this._verifyIntegers(i,e),this._core.selectLines(i,e)}dispose(){super.dispose()}scrollLines(i){this._verifyIntegers(i),this._core.scrollLines(i)}scrollPages(i){this._verifyIntegers(i),this._core.scrollPages(i)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(i){this._verifyIntegers(i),this._core.scrollToLine(i)}clear(){this._core.clear()}write(i,e){this._core.write(i,e)}writeln(i,e){this._core.write(i),this._core.write(`\r -+`,e)}paste(i){this._core.paste(i)}refresh(i,e){this._verifyIntegers(i,e),this._core.refresh(i,e)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(i){this._addonManager.loadAddon(this,i)}static get strings(){return{get promptLabel(){return Ut.get()},set promptLabel(i){Ut.set(i)},get tooMuchOutput(){return Ze.get()},set tooMuchOutput(i){Ze.set(i)}}}_verifyIntegers(...i){for(ye of i)if(ye===1/0||isNaN(ye)||ye%1!==0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...i){for(ye of i)if(ye&&(ye===1/0||isNaN(ye)||ye%1!==0||ye<0))throw new Error("This API only accepts positive integers")}};export{Ln as Terminal}; ++`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent=Ze.get())))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let r=this._terminal.buffer,s=r.lines.length.toString();for(let o=e;o<=t;o++){let a=r.lines.get(r.ydisp+o),l=[],h=a?.translateToString(!0,void 0,void 0,l)||"",d=(r.ydisp+o+1).toString(),c=this._rowElements[o];c&&(h.length===0?(c.textContent="\xA0",this._rowColumns.set(c,[0,1])):(c.textContent=h,this._rowColumns.set(c,l)),c.setAttribute("aria-posinset",d),c.setAttribute("aria-setsize",s),this._alignRowWidth(c))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent===Ze.get()&&this._clearLiveRegion(),this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){let r=e.target,s=this._rowElements[t===0?1:this._rowElements.length-2],o=r.getAttribute("aria-posinset"),a=t===0?"1":`${this._terminal.buffer.lines.length}`;if(o===a||e.relatedTarget!==s)return;let l,h;if(t===0?(l=r,h=this._rowElements.pop(),this._rowContainer.removeChild(h)):(l=this._rowElements.shift(),h=r,this._rowContainer.removeChild(l)),l.removeEventListener("focus",this._topBoundaryFocusListener),h.removeEventListener("focus",this._bottomBoundaryFocusListener),t===0){let d=this._createAccessibilityTreeNode();this._rowElements.unshift(d),this._rowContainer.insertAdjacentElement("afterbegin",d)}else{let d=this._createAccessibilityTreeNode();this._rowElements.push(d),this._rowContainer.appendChild(d)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error("anchorNode and/or focusNode are null");return}let t={node:e.anchorNode,offset:e.anchorOffset},r={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(r.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===r.node&&t.offset>r.offset)&&([t,r]=[r,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let s=this._rowElements.slice(-1)[0];if(r.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(r={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(r.node))return;let o=({node:h,offset:d})=>{let c=h instanceof Text?h.parentNode:h,u=parseInt(c?.getAttribute("aria-posinset"),10)-1;if(isNaN(u))return console.warn("row is invalid. Race condition?"),null;let f=this._rowColumns.get(c);if(!f)return console.warn("columns is null. Race condition?"),null;let p=d=this._terminal.cols&&(++u,p=0),{row:u,column:p}},a=o(t),l=o(r);if(!(!a||!l)){if(a.row>l.row||a.row===l.row&&a.column>=l.column)throw new Error("invalid range");this._terminal.select(a.column,a.row,(l.row-a.row)*this._terminal.cols-a.column+l.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let t=this._rowContainer.children.length;te;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{Ne(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(I(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(I(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register(I(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register(I(this._element,"mouseup",this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element);if(!t)return;this._isMouseOut=!1;let r=e.composedPath();for(let s=0;s{s?.forEach(o=>{o.link.dispose&&o.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let r=!1;for(let[s,o]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(s)&&(r=this._checkLinkProviderResult(s,e,r)):o.provideLinks(e.y,a=>{if(this._isMouseOut)return;let l=a?.map(h=>({link:h}));this._activeProviderReplies?.set(s,l),r=this._checkLinkProviderResult(s,e,r),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let r=new Set;for(let s=0;se?this._bufferService.cols:l.link.range.end.x;for(let c=h;c<=d;c++){if(r.has(c)){o.splice(a--,1);break}r.add(c)}}}}_checkLinkProviderResult(e,t,r){if(!this._activeProviderReplies)return r;let s=this._activeProviderReplies.get(e),o=!1;for(let a=0;athis._linkAtPosition(l.link,t));a&&(r=!0,this._handleNewLink(a))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!r)for(let a=0;athis._linkAtPosition(h.link,t));if(l){r=!0,this._handleNewLink(l);break}}return r}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element);t&&this._mouseDownLink&&Lo(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,Ne(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0?!0:e.link.decorations.underline,pointerCursor:e.link.decorations===void 0?!0:e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:r=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==r&&(this._currentLink.state.decorations.pointerCursor=r,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",r))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:r=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==r&&(this._currentLink.state.decorations.underline=r,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,r))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(r=>{if(!this._currentLink)return;let s=r.start===0?0:r.start+1+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.ydisp+1+r.end;if(this._currentLink.link.range.start.y>=s&&this._currentLink.link.range.end.y<=o&&(this._clearCurrentLink(s,o),this._lastMouseEvent)){let a=this._positionFromMouseEvent(this._lastMouseEvent,this._element);a&&this._askForLink(a,!1)}})))}_linkHover(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)}_fireUnderlineEvent(e,t){let r=e.range,s=this._bufferService.buffer.ydisp,o=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-s-1,r.end.x,r.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(o)}_linkLeave(e,t,r){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)}_linkAtPosition(e,t){let r=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,o=t.y*this._bufferService.cols+t.x;return r<=o&&o<=s}_positionFromMouseEvent(e,t){let r=this._mouseCoordsService.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,r,s,o){return{x1:e,y1:t,x2:r,y2:s,cols:this._bufferService.cols,fg:o}}};Ot=y([m(1,Oe),m(2,G),m(3,D),m(4,Ei)],Ot);function Lo(n,i){return n.text===i.text&&n.range.start.x===i.range.start.x&&n.range.start.y===i.range.start.y&&n.range.end.x===i.range.end.x&&n.range.end.y===i.range.end.y}var Er=class extends Sr{constructor(e={}){super(e);this._linkifier=this._register(new B);this.browser=ze;this._keyDownHandled=!1;this._keyDownSeen=!1;this._keyPressHandled=!1;this._unprocessedDeadKey=!1;this._accessibilityManager=this._register(new B);this._onCursorMove=this._register(new v);this.onCursorMove=this._onCursorMove.event;this._onKey=this._register(new v);this.onKey=this._onKey.event;this._onSelectionChange=this._register(new v);this.onSelectionChange=this._onSelectionChange.event;this._onTitleChange=this._register(new v);this.onTitleChange=this._onTitleChange.event;this._onBell=this._register(new v);this.onBell=this._onBell.event;this._onFocus=this._register(new v);this._onBlur=this._register(new v);this._onA11yCharEmitter=this._register(new v);this._onA11yTabEmitter=this._register(new v);this._onWillOpen=this._register(new v);this._onDimensionsChange=this._register(new v);this.onDimensionsChange=this._onDimensionsChange.event;this._setup(),this._decorationService=this._instantiationService.createInstance(Bt),this._instantiationService.setService(ge,this._decorationService),this._keyboardService=this._instantiationService.createInstance(xt),this._instantiationService.setService(zs,this._keyboardService),this._linkProviderService=this._instantiationService.createInstance(Vi),this._instantiationService.setService(Ei,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(tt)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(t=>this.refresh(t?.start??0,t?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(t=>this._reportWindowsOptions(t))),this._register(this._inputHandler.onColor(t=>this._handleColorEvent(t))),this._register(Y.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(Y.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(Y.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(Y.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(t=>this._afterResize(t.cols,t.rows))),this._register(E(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}get dimensions(){if(!this._renderService)return;let e=this._renderService.dimensions;return{css:{canvas:{...e.css.canvas},cell:{...e.css.cell}},device:{canvas:{...e.device.canvas},cell:{...e.device.cell},char:{...e.device.char}}}}_handleColorEvent(e){if(this._themeService)for(let t of e){let r,s;switch(t.index){case 256:r="foreground",s="10";break;case 257:r="background",s="11";break;case 258:r="cursor",s="12";break;default:r="ansi",s="4;"+t.index}switch(t.type){case 0:let o=L.toColorRGB(r==="ansi"?this._themeService.colors.ansi[t.index]:this._themeService.colors[r]);this.coreService.triggerDataEvent(`\x1B]${s};${En(o)}\x1B\\`);break;case 1:if(r==="ansi")this._themeService.modifyColors(a=>a.ansi[t.index]=O.toColor(...t.color));else{let a=r;this._themeService.modifyColors(l=>l[a]=O.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index);break}}}_reportColorScheme(){if(!this._themeService)return;let e=j.relativeLuminance(this._themeService.colors.background.rgba>>8),t=j.relativeLuminance(this._themeService.colors.foreground.rgba>>8),r=e{this.hasSelection()&&Ns(t,this._selectionService)}));let e=t=>Fs(t,this.textarea,this.coreService,this.optionsService);this._register(I(this.textarea,"paste",e)),this._register(I(this.element,"paste",e)),ot?this._register(I(this.element,"mousedown",t=>{t.button===2&&Hr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(I(this.element,"contextmenu",t=>{Hr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),Gt&&this._register(I(this.element,"auxclick",t=>{t.button===1&&Fr(t,this.textarea,this.screenElement)}))}_bindKeys(){this._register(I(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register(I(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register(I(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register(I(this.textarea,"compositionstart",()=>{this._syncTextArea(),this._compositionHelper.compositionstart(),this._compositionHelper.updateCompositionElements()})),this._register(I(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register(I(this.textarea,"compositionend",e=>{this._compositionHelper instanceof Ee?this._compositionHelper.compositionend(e)&&this.textarea.dispatchEvent(new CustomEvent("xterm-composition-transaction-accepted",{bubbles:!0})):this._compositionHelper.compositionend()})),this._register(I(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new Error("Terminal requires a parent element.");if(e.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.toggle("allow-transparency",this.options.allowTransparency),this._register(this.optionsService.onSpecificOptionChange("allowTransparency",l=>this.element.classList.toggle("allow-transparency",l))),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._register(I(this.screenElement,"mousemove",l=>this.updateCursorStyle(l))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let r=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",Kt.get()),Yr||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocomplete","off"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange("disableStdin",()=>r.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(Gi,this.textarea,e.ownerDocument.defaultView??window,this._document??(typeof window<"u"?window.document:null))),this._instantiationService.setService(z,this._coreBrowserService),this._register(I(this.textarea,"focus",l=>this._handleTextAreaFocus(l))),this._register(I(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(bt,this._document,this._helperContainer),this._instantiationService.setService(Be,this._charSizeService),this._themeService=this._instantiationService.createInstance(yt),this._instantiationService.setService(le,this._themeService),this._register(this._inputHandler.onRequestColorSchemeQuery(()=>this._reportColorScheme())),this._register(this._themeService.onChangeColors(()=>{this.coreService.decPrivateModes.colorSchemeUpdates&&this._reportColorScheme()})),this._characterJoinerService=this._instantiationService.createInstance(We),this._instantiationService.setService(Ii,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(It,this.rows,this.screenElement)),this._instantiationService.setService(G,this._renderService),this._register(this._renderService.onRenderedViewportChange(l=>this._onRender.fire(l))),this._register(this._renderService.onDimensionsChange(l=>this._onDimensionsChange.fire({css:{canvas:{...l.css.canvas},cell:{...l.css.cell}},device:{canvas:{...l.device.canvas},cell:{...l.device.cell},char:{...l.device.char}}}))),this.onResize(l=>this._renderService.resize(l.cols,l.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(Ee,this.textarea,this._compositionView),this._register(E(()=>{this._compositionHelper instanceof Ee&&this._compositionHelper.dispose()})),this._helperContainer.appendChild(this._compositionView),this._mouseCoordsService=this._instantiationService.createInstance(vt),this._instantiationService.setService(Oe,this._mouseCoordsService);let s=this._linkifier.value=this._register(this._instantiationService.createInstance(Ot,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch(l){this._logService.error("onWillOpen handler threw an exception",l)}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>{this._renderService.handleResize(this.cols,this.rows),this._syncTextArea()})),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(ut,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(l=>{super.scrollLines(l,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(Et,this.element,this.screenElement,s)),this._instantiationService.setService(Ci,this._selectionService),this._mouseService=this._instantiationService.createInstance(gt),this._instantiationService.setService(Ks,this._mouseService),this._register(this._selectionService.onRequestScrollLines(l=>this.scrollLines(l.amount,l.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(l=>this._renderService.handleSelectionChanged(l.start,l.end,l.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(l=>{this.textarea.value=l,this.textarea.focus(),this.textarea.select()})),this._register(Y.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(ft,this.screenElement)),this._register(I(this.element,"mousedown",l=>this._selectionService.handleMouseDown(l))),this.mouseStateService.areMouseEventsActive&&!this.options.mouseEventsRequireAlt?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):(this._selectionService.enable(),this.element.classList.remove("enable-mouse-events")),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(je,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",l=>this._handleScreenReaderModeOptionChange(l)));let o=this.options.scrollbar?.showScrollbar??!0,a=this.options.scrollbar?.width;o&&a&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(Ge,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("scrollbar",l=>{let h=(l?.showScrollbar??!0)&&!!l?.width;!this._overviewRulerRenderer&&h&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(Ge,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this._mouseService.bindMouse({element:this.element,screenElement:this.screenElement,document:this._document,handleTouchScroll:l=>this._viewport?.handleTouchScroll(l)},l=>this._register(l),()=>this.focus())}_createRenderer(){return this._instantiationService.createInstance(mt,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}refresh(e,t,r=!1){this._renderService?.refreshRows(e,t,r)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){Nr(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this.mouseStateService.setCustomWheelEventHandler(e)}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,r){this._selectionService.setSelection(e,t,r)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(!(!this._selectionService||!this._selectionService.hasSelection))return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;!t&&(e.key==="Dead"||e.key==="AltGraph")&&(this._unprocessedDeadKey=!0);let r=this._keyboardService.evaluateKeyDown(e);if(this.updateCursorStyle(e),r.type===3||r.type===2){let o=this.rows-1;return this.scrollLines(r.type===2?-o:o),e.preventDefault(),e.stopPropagation(),!1}if(r.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(r.cancel&&(e.preventDefault(),e.stopPropagation()),!r.key)||!this._keyboardService.useKitty&&!this._keyboardService.useWin32InputMode&&e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;(r.key===""||r.key==="\r")&&(this.textarea.value="");let s=this._keyboardService.useWin32InputMode&&Ds(e);if(this._onKey.fire({key:r.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(r.key,!s),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return e.preventDefault(),e.stopPropagation(),!1;this._keyDownHandled=!0}_isThirdLevelShift(e,t){let r=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState("AltGraph");return t.type==="keypress"?r:r&&(!t.keyCode||t.keyCode>47)}_keyUp(e){if(this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return;Ds(e)||this.focus();let t=this._keyboardService.evaluateKeyUp(e);if(t?.key){let r=this._keyboardService.useWin32InputMode&&Ds(e);this.coreService.triggerDataEvent(t.key,!r)}this.updateCursorStyle(e),this._keyPressHandled=!1}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this._compositionHelper.keypress?.(t)||this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType==="insertText"&&!this.optionsService.rawOptions.screenReaderMode&&this._compositionHelper instanceof Ee&&this._compositionHelper.input(e.data))return!0;if(e.data&&e.inputType==="insertText"&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),!0}return!1}resize(e,t){if(e===this.cols&&t===this.rows){this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure();return}super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e=0;i--)this._addons[i].instance.dispose()}loadAddon(i,e){let t={instance:e,dispose:e.dispose,isDisposed:!1};this._addons.push(t),e.dispose=()=>this._wrappedAddonDispose(t),e.activate(i)}_wrappedAddonDispose(i){if(i.isDisposed)return;let e=-1;for(let t=0;t=this._line.length))return e?(this._line.loadCell(i,e),e):this._line.loadCell(i,new F)}translateToString(i,e,t){return this._line.translateToString(i,e,t)}};var ui=class{constructor(i,e){this._buffer=i;this.type=e}init(i){return this._buffer=i,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(i){let e=this._buffer.lines.get(i);if(e)return new xr(e)}getNullCell(){return new F}};var wr=class extends g{constructor(e){super();this._core=e;this._onBufferChange=this._register(new v);this.onBufferChange=this._onBufferChange.event;this._normal=new ui(this._core.buffers.normal,"normal"),this._alternate=new ui(this._core.buffers.alt,"alternate"),this._register(this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}};var Tr=class{constructor(i){this._core=i}registerCsiHandler(i,e){return this._core.registerCsiHandler(i,t=>e(t.toArray()))}addCsiHandler(i,e){return this.registerCsiHandler(i,e)}registerDcsHandler(i,e){return this._core.registerDcsHandler(i,(t,r)=>e(t,r.toArray()))}addDcsHandler(i,e){return this.registerDcsHandler(i,e)}registerEscHandler(i,e){return this._core.registerEscHandler(i,e)}addEscHandler(i,e){return this.registerEscHandler(i,e)}registerOscHandler(i,e){return this._core.registerOscHandler(i,e)}addOscHandler(i,e){return this.registerOscHandler(i,e)}registerApcHandler(i,e){return this._core.registerApcHandler(i,e)}};var Dr=class{constructor(i){this._core=i}register(i){this._core.unicodeService.register(i)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(i){this._core.unicodeService.activeVersion=i}};var Ao=["cols","rows"],ye=0,Ln=class extends g{constructor(i){super(),this._core=this._register(new Er(i)),this._addonManager=this._register(new yr),this._publicOptions={...this._core.options};let e=r=>this._core.options[r],t=(r,s)=>{this._checkReadonlyOptions(r),this._core.options[r]=s};for(let r in this._core.options){let s={get:e.bind(this,r),set:t.bind(this,r)};Object.defineProperty(this._publicOptions,r,s)}}_checkReadonlyOptions(i){if(Ao.includes(i))throw new Error(`Option "${i}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get onDimensionsChange(){return this._core.onDimensionsChange}get element(){return this._core.element}get screenElement(){return this._core.screenElement}get parser(){return this._parser??=new Tr(this._core)}get unicode(){return this._checkProposedApi(),new Dr(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer??=this._register(new wr(this._core))}get markers(){return this._core.markers}get modes(){let i=this._core.coreService.decPrivateModes,e="none";switch(this._core.mouseStateService.activeProtocol){case"X10":e="x10";break;case"VT200":e="vt200";break;case"DRAG":e="drag";break;case"ANY":e="any";break}return{applicationCursorKeysMode:i.applicationCursorKeys,applicationKeypadMode:i.applicationKeypad,bracketedPasteMode:i.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:e,originMode:i.origin,reverseWraparoundMode:i.reverseWraparound,sendFocusMode:i.sendFocus,showCursor:!this._core.coreService.isCursorHidden,synchronizedOutputMode:i.synchronizedOutput,win32InputMode:i.win32InputMode,wraparoundMode:i.wraparound}}get dimensions(){return this._core.dimensions}get options(){return this._publicOptions}set options(i){for(let e in i)this._publicOptions[e]=i[e]}blur(){this._core.blur()}focus(){this._core.focus()}input(i,e=!0){this._core.input(i,e)}resize(i,e){this._verifyIntegers(i,e),this._core.resize(i,e)}open(i){this._core.open(i)}attachCustomKeyEventHandler(i){this._core.attachCustomKeyEventHandler(i)}attachCustomWheelEventHandler(i){this._core.attachCustomWheelEventHandler(i)}registerLinkProvider(i){return this._core.registerLinkProvider(i)}registerCharacterJoiner(i){return this._core.registerCharacterJoiner(i)}deregisterCharacterJoiner(i){this._core.deregisterCharacterJoiner(i)}registerMarker(i=0){return this._verifyIntegers(i),this._core.registerMarker(i)}registerDecoration(i){return this._verifyPositiveIntegers(i.x??0,i.width??0,i.height??0),this._core.registerDecoration(i)}hasSelection(){return this._core.hasSelection()}select(i,e,t){this._verifyIntegers(i,e,t),this._core.select(i,e,t)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(i,e){this._verifyIntegers(i,e),this._core.selectLines(i,e)}dispose(){super.dispose()}scrollLines(i){this._verifyIntegers(i),this._core.scrollLines(i)}scrollPages(i){this._verifyIntegers(i),this._core.scrollPages(i)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(i){this._verifyIntegers(i),this._core.scrollToLine(i)}clear(){this._core.clear()}write(i,e){this._core.write(i,e)}writeln(i,e){this._core.write(i),this._core.write(`\r ++`,e)}paste(i){this._core.paste(i)}refresh(i,e){this._verifyIntegers(i,e),this._core.refresh(i,e)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(i){this._addonManager.loadAddon(this,i)}static get strings(){return{get promptLabel(){return Kt.get()},set promptLabel(i){Kt.set(i)},get tooMuchOutput(){return Ze.get()},set tooMuchOutput(i){Ze.set(i)}}}_verifyIntegers(...i){for(ye of i)if(ye===1/0||isNaN(ye)||ye%1!==0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...i){for(ye of i)if(ye&&(ye===1/0||isNaN(ye)||ye%1!==0||ye<0))throw new Error("This API only accepts positive integers")}};export{Ln as Terminal}; //# sourceMappingURL=xterm.mjs.map diff --git a/lib/xterm.mjs.map b/lib/xterm.mjs.map -index 38c209dfa7c55a2dc4d6e3afd7c04397ca8fdaca..373a85a4422037dd0c758ce8f28ae3adc521c724 100644 +index 42aa6aff97e90412a736ae4dde3ef884e0fedf1a..89304f270a828f392bb2be69a1c9a1478f7dff15 100644 --- a/lib/xterm.mjs.map +++ b/lib/xterm.mjs.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/browser/LocalizableStrings.ts", "../src/browser/Clipboard.ts", "../src/common/input/TextDecoder.ts", "../src/common/buffer/AttributeData.ts", "../src/common/buffer/CellData.ts", "../src/common/services/ServiceRegistry.ts", "../src/common/services/Services.ts", "../src/browser/OscLinkProvider.ts", "../src/browser/services/Services.ts", "../src/common/Lifecycle.ts", "../src/common/Async.ts", "../src/browser/Dom.ts", "../src/browser/scrollable/fastDomNode.ts", "../src/common/Platform.ts", "../src/browser/scrollable/mouseEvent.ts", "../src/browser/scrollable/globalPointerMoveMonitor.ts", "../src/browser/scrollable/widget.ts", "../src/browser/scrollable/scrollbarArrow.ts", "../src/common/Event.ts", "../src/browser/scrollable/scrollable.ts", "../src/browser/scrollable/scrollbarVisibilityController.ts", "../src/browser/scrollable/abstractScrollbar.ts", "../src/browser/scrollable/scrollbarState.ts", "../src/browser/scrollable/horizontalScrollbar.ts", "../src/browser/scrollable/verticalScrollbar.ts", "../src/browser/scrollable/scrollableElement.ts", "../src/browser/Viewport.ts", "../src/browser/decorations/BufferDecorationRenderer.ts", "../src/browser/decorations/ColorZoneStore.ts", "../src/browser/decorations/OverviewRulerRenderer.ts", "../src/browser/input/CompositionHelper.ts", "../src/common/Color.ts", "../src/browser/services/CharacterJoinerService.ts", "../src/browser/renderer/shared/RendererUtils.ts", "../src/browser/renderer/dom/DomRendererRowFactory.ts", "../src/browser/renderer/dom/WidthCache.ts", "../src/browser/renderer/shared/SelectionRenderModel.ts", "../src/browser/renderer/shared/TextBlinkStateManager.ts", "../src/browser/renderer/dom/DomRenderer.ts", "../src/browser/services/CharSizeService.ts", "../src/browser/services/CoreBrowserService.ts", "../src/browser/services/LinkProviderService.ts", "../src/browser/input/Mouse.ts", "../src/browser/services/MouseCoordsService.ts", "../src/browser/scrollable/touch.ts", "../src/browser/services/MouseService.ts", "../src/browser/RenderDebouncer.ts", "../src/common/TaskQueue.ts", "../src/browser/services/RenderService.ts", "../src/browser/input/MoveToCell.ts", "../src/browser/selection/SelectionModel.ts", "../src/common/buffer/BufferRange.ts", "../src/browser/services/SelectionService.ts", "../src/common/MultiKeyMap.ts", "../src/browser/ColorContrastCache.ts", "../src/browser/Types.ts", "../src/browser/services/ThemeService.ts", "../src/common/input/Keyboard.ts", "../src/common/input/KittyKeyboard.ts", "../src/common/input/Win32InputMode.ts", "../src/browser/services/KeyboardService.ts", "../src/common/services/InstantiationService.ts", "../src/common/services/LogService.ts", "../src/common/CircularList.ts", "../src/common/buffer/BufferLine.ts", "../src/common/buffer/BufferReflow.ts", "../src/common/buffer/Marker.ts", "../src/common/data/Charsets.ts", "../src/common/buffer/Buffer.ts", "../src/common/buffer/BufferSet.ts", "../src/common/services/BufferService.ts", "../src/common/services/OptionsService.ts", "../src/common/services/CoreService.ts", "../src/common/services/MouseStateService.ts", "../src/common/services/UnicodeService.ts", "../src/common/input/UnicodeV6.ts", "../src/common/services/CharsetService.ts", "../src/common/WindowsMode.ts", "../src/common/parser/Params.ts", "../src/common/StringBuilder.ts", "../src/common/parser/OscParser.ts", "../src/common/parser/DcsParser.ts", "../src/common/parser/ApcParser.ts", "../src/common/parser/EscapeSequenceParser.ts", "../src/common/input/XParseColor.ts", "../src/common/Version.ts", "../src/common/InputHandler.ts", "../src/common/input/WriteBuffer.ts", "../src/common/services/OscLinkService.ts", "../src/common/CoreTerminal.ts", "../src/common/SortedList.ts", "../src/common/services/DecorationService.ts", "../src/browser/TimeBasedDebouncer.ts", "../src/browser/AccessibilityManager.ts", "../src/browser/Linkifier.ts", "../src/browser/CoreBrowserTerminal.ts", "../src/common/public/AddonManager.ts", "../src/common/public/BufferLineApiView.ts", "../src/common/public/BufferApiView.ts", "../src/common/public/BufferNamespaceApi.ts", "../src/common/public/ParserApi.ts", "../src/common/public/UnicodeApi.ts", "../src/browser/public/Terminal.ts"], -- "sourcesContent": ["/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (\u241B).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService } from '../../common/services/Services';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private _isSendingComposition: boolean;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n this._isComposing = false;\n this._isSendingComposition = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._isComposing = true;\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._compositionView.textContent = '';\n this._dataAlreadySent = '';\n this._compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n // Mark text as LTR, direction=rtl is used in CSS so the end of the text is followed for long\n // compositions\n this._compositionView.textContent = `\\u200E${ev.data}\\u200E`;\n this.updateCompositionElements();\n setTimeout(() => {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max( this._compositionPosition.start, end);\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(): void {\n this._finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._isComposing || this._isSendingComposition) {\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean): void {\n this._compositionView.classList.remove('active');\n this._isComposing = false;\n\n if (!waitForPropagation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this._isSendingComposition = false;\n const input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);\n this._coreService.triggerDataEvent(input, true);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n };\n const currentCompositionSuffix = this._compositionSuffix;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this._isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this._isSendingComposition) {\n this._isSendingComposition = false;\n let input;\n // Add length of data already sent due to keydown event,\n // otherwise input characters can be duplicated. (Issue #3191)\n currentCompositionPosition.start += this._dataAlreadySent.length;\n if (this._isComposing) {\n // Use the start position of the new composition to get the string\n // if a new composition has started.\n input = this._textarea.value.substring(currentCompositionPosition.start, this._compositionPosition.start);\n } else {\n // Keep support for non-composition characters typed immediately after composition end\n // while avoiding re-sending the trailing text that was already present\n // before composition started.\n const value = this._textarea.value;\n const valueEnd = currentCompositionSuffix.length > 0 && value.endsWith(currentCompositionSuffix)\n ? value.length - currentCompositionSuffix.length\n : value.length;\n input = value.substring(currentCompositionPosition.start, Math.max(currentCompositionPosition.start, valueEnd));\n }\n if (input.length > 0) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n if (!this._isComposing) {\n return;\n }\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n this._compositionView.style.direction = 'rtl';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this._compositionView.getBoundingClientRect();\n this._textarea.style.left = cursorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(compositionViewBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(compositionViewBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nclass WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n", "import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec \u00A7 \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" \u2014 i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n cell.extended = this._extendedAttrs[index]!;\n } else {\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n cell.extended = $extended;\n }\n return cell;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '\u25C6'\n 'a': '\\u2592', // '\u2592'\n 'b': '\\u2409', // '\u2409' (HT)\n 'c': '\\u240c', // '\u240C' (FF)\n 'd': '\\u240d', // '\u240D' (CR)\n 'e': '\\u240a', // '\u240A' (LF)\n 'f': '\\u00b0', // '\u00B0'\n 'g': '\\u00b1', // '\u00B1'\n 'h': '\\u2424', // '\u2424' (NL)\n 'i': '\\u240b', // '\u240B' (VT)\n 'j': '\\u2518', // '\u2518'\n 'k': '\\u2510', // '\u2510'\n 'l': '\\u250c', // '\u250C'\n 'm': '\\u2514', // '\u2514'\n 'n': '\\u253c', // '\u253C'\n 'o': '\\u23ba', // '\u23BA'\n 'p': '\\u23bb', // '\u23BB'\n 'q': '\\u2500', // '\u2500'\n 'r': '\\u23bc', // '\u23BC'\n 's': '\\u23bd', // '\u23BD'\n 't': '\\u251c', // '\u251C'\n 'u': '\\u2524', // '\u2524'\n 'v': '\\u2534', // '\u2534'\n 'w': '\\u252c', // '\u252C'\n 'x': '\\u2502', // '\u2502'\n 'y': '\\u2264', // '\u2264'\n 'z': '\\u2265', // '\u2265'\n '{': '\\u03c0', // '\u03C0'\n '|': '\\u2260', // '\u2260'\n '}': '\\u00a3', // '\u00A3'\n '~': '\\u00b7' // '\u00B7'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '\u00A3'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '\u00A3',\n '@': '\u00BE',\n '[': 'ij',\n '\\\\': '\u00BD',\n ']': '|',\n '{': '\u00A8',\n '|': 'f',\n '}': '\u00BC',\n '~': '\u00B4'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '\u00A3',\n '@': '\u00E0',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00A7',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00A8'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': '\u00E0',\n '[': '\u00E2',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n '`': '\u00F4',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00FB'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '\u00A7',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00DC',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00DF'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00E9',\n '`': '\u00F9',\n '{': '\u00E0',\n '|': '\u00F2',\n '}': '\u00E8',\n '~': '\u00EC'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': '\u00C4',\n '[': '\u00C6',\n '\\\\': '\u00D8',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E4',\n '{': '\u00E6',\n '|': '\u00F8',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00A1',\n '\\\\': '\u00D1',\n ']': '\u00BF',\n '{': '\u00B0',\n '|': '\u00F1',\n '}': '\u00E7'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': '\u00C9',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': '\u00F9',\n '@': '\u00E0',\n '[': '\u00E9',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n\n '_': '\u00E8',\n '`': '\u00F4',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00FB'\n};\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n\u00B2) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.303';\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n", "\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n", "/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices: number[] = [];\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.length = 0;\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n if (this._array.length === 0) {\n return false;\n }\n const key = this._getKey(value);\n if (key === undefined) {\n return false;\n }\n i = this._search(key);\n if (i === -1) {\n return false;\n }\n if (this._getKey(this._array[i]) !== key) {\n return false;\n }\n do {\n if (this._array[i] === value) {\n if (this._deletedIndices.length === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.push(i);\n return true;\n }\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n return false;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const sortedDeletedIndices = this._deletedIndices.sort((a, b) => a - b);\n let sortedDeletedIndicesIndex = 0;\n const newArray = new Array(this._array.length - sortedDeletedIndices.length);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (sortedDeletedIndices[sortedDeletedIndicesIndex] === i) {\n sortedDeletedIndicesIndex++;\n } else {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._deletedIndices.length = 0;\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.length > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', () => this._compositionHelper!.compositionend()));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n this.coreService.triggerDataEvent(key, true);\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n"], -- "mappings": "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AAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,I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", +- "sourcesContent": ["/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (\u241B).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService } from '../../common/services/Services';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Whether a composition is in the process of being sent, setting this to false will cancel any\n * in-progress composition.\n */\n private _isSendingComposition: boolean;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n this._isComposing = false;\n this._isSendingComposition = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._isComposing = true;\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._compositionView.textContent = '';\n this._dataAlreadySent = '';\n this._compositionView.classList.add('active');\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n // Mark text as LTR, direction=rtl is used in CSS so the end of the text is followed for long\n // compositions\n this._compositionView.textContent = `\\u200E${ev.data}\\u200E`;\n this.updateCompositionElements();\n setTimeout(() => {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max( this._compositionPosition.start, end);\n }, 0);\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(): void {\n this._finalizeComposition(true);\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._isComposing || this._isSendingComposition) {\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean): void {\n this._compositionView.classList.remove('active');\n this._isComposing = false;\n\n if (!waitForPropagation) {\n // Cancel any delayed composition send requests and send the input immediately.\n this._isSendingComposition = false;\n const input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);\n this._coreService.triggerDataEvent(input, true);\n } else {\n // Make a deep copy of the composition position here as a new compositionstart event may\n // fire before the setTimeout executes.\n const currentCompositionPosition = {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n };\n const currentCompositionSuffix = this._compositionSuffix;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n this._isSendingComposition = true;\n setTimeout(() => {\n // Ensure that the input has not already been sent\n if (this._isSendingComposition) {\n this._isSendingComposition = false;\n let input;\n // Add length of data already sent due to keydown event,\n // otherwise input characters can be duplicated. (Issue #3191)\n currentCompositionPosition.start += this._dataAlreadySent.length;\n if (this._isComposing) {\n // Use the start position of the new composition to get the string\n // if a new composition has started.\n input = this._textarea.value.substring(currentCompositionPosition.start, this._compositionPosition.start);\n } else {\n // Keep support for non-composition characters typed immediately after composition end\n // while avoiding re-sending the trailing text that was already present\n // before composition started.\n const value = this._textarea.value;\n const valueEnd = currentCompositionSuffix.length > 0 && value.endsWith(currentCompositionSuffix)\n ? value.length - currentCompositionSuffix.length\n : value.length;\n input = value.substring(currentCompositionPosition.start, Math.max(currentCompositionPosition.start, valueEnd));\n }\n if (input.length > 0) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n }, 0);\n }\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n if (!this._isComposing) {\n return;\n }\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n this._compositionView.style.direction = 'rtl';\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n const compositionViewBounds = this._compositionView.getBoundingClientRect();\n this._textarea.style.left = cursorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(compositionViewBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(compositionViewBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = compositionViewBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n setTimeout(() => this.updateCompositionElements(true), 0);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nclass WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n", "import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec \u00A7 \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" \u2014 i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n cell.extended = this.getExtended(index);\n return cell;\n }\n\n public getExtended(index: number): IExtendedAttrs {\n $startIndex = index * Constants.CELL_INDICIES;\n if (this._data[$startIndex + Cell.BG] & BgFlags.HAS_EXTENDED) {\n return this._extendedAttrs[index]!;\n }\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n $extended.payload = undefined;\n return $extended;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '\u25C6'\n 'a': '\\u2592', // '\u2592'\n 'b': '\\u2409', // '\u2409' (HT)\n 'c': '\\u240c', // '\u240C' (FF)\n 'd': '\\u240d', // '\u240D' (CR)\n 'e': '\\u240a', // '\u240A' (LF)\n 'f': '\\u00b0', // '\u00B0'\n 'g': '\\u00b1', // '\u00B1'\n 'h': '\\u2424', // '\u2424' (NL)\n 'i': '\\u240b', // '\u240B' (VT)\n 'j': '\\u2518', // '\u2518'\n 'k': '\\u2510', // '\u2510'\n 'l': '\\u250c', // '\u250C'\n 'm': '\\u2514', // '\u2514'\n 'n': '\\u253c', // '\u253C'\n 'o': '\\u23ba', // '\u23BA'\n 'p': '\\u23bb', // '\u23BB'\n 'q': '\\u2500', // '\u2500'\n 'r': '\\u23bc', // '\u23BC'\n 's': '\\u23bd', // '\u23BD'\n 't': '\\u251c', // '\u251C'\n 'u': '\\u2524', // '\u2524'\n 'v': '\\u2534', // '\u2534'\n 'w': '\\u252c', // '\u252C'\n 'x': '\\u2502', // '\u2502'\n 'y': '\\u2264', // '\u2264'\n 'z': '\\u2265', // '\u2265'\n '{': '\\u03c0', // '\u03C0'\n '|': '\\u2260', // '\u2260'\n '}': '\\u00a3', // '\u00A3'\n '~': '\\u00b7' // '\u00B7'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '\u00A3'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '\u00A3',\n '@': '\u00BE',\n '[': 'ij',\n '\\\\': '\u00BD',\n ']': '|',\n '{': '\u00A8',\n '|': 'f',\n '}': '\u00BC',\n '~': '\u00B4'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '\u00A3',\n '@': '\u00E0',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00A7',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00A8'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': '\u00E0',\n '[': '\u00E2',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n '`': '\u00F4',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00FB'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '\u00A7',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00DC',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00DF'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00E9',\n '`': '\u00F9',\n '{': '\u00E0',\n '|': '\u00F2',\n '}': '\u00E8',\n '~': '\u00EC'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': '\u00C4',\n '[': '\u00C6',\n '\\\\': '\u00D8',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E4',\n '{': '\u00E6',\n '|': '\u00F8',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00A1',\n '\\\\': '\u00D1',\n ']': '\u00BF',\n '{': '\u00B0',\n '|': '\u00F1',\n '}': '\u00E7'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': '\u00C9',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': '\u00F9',\n '@': '\u00E0',\n '[': '\u00E9',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n\n '_': '\u00E8',\n '`': '\u00F4',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00FB'\n};\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n\u00B2) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.304';\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n", "\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n", "/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices: number[] = [];\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.length = 0;\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n if (this._array.length === 0) {\n return false;\n }\n const key = this._getKey(value);\n if (key === undefined) {\n return false;\n }\n i = this._search(key);\n if (i === -1) {\n return false;\n }\n if (this._getKey(this._array[i]) !== key) {\n return false;\n }\n do {\n if (this._array[i] === value) {\n if (this._deletedIndices.length === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.push(i);\n return true;\n }\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n return false;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const sortedDeletedIndices = this._deletedIndices.sort((a, b) => a - b);\n let sortedDeletedIndicesIndex = 0;\n const newArray = new Array(this._array.length - sortedDeletedIndices.length);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (sortedDeletedIndices[sortedDeletedIndicesIndex] === i) {\n sortedDeletedIndicesIndex++;\n } else {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._deletedIndices.length = 0;\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.length > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', () => this._compositionHelper!.compositionend()));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n this.coreService.triggerDataEvent(key, true);\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n"], +- "mappings": "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Q,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ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", - "names": ["promptLabelInternal", "promptLabel", "value", "tooMuchOutputInternal", "tooMuchOutput", "prepareTextForTerminal", "text", "bracketTextForPaste", "bracketedPasteMode", "copyHandler", "ev", "selectionService", "handlePasteEvent", "textarea", "coreService", "optionsService", "paste", "moveTextAreaUnderMouseCursor", "screenElement", "pos", "left", "top", "rightClickHandler", "shouldSelectWord", "stringFromCodePoint", "codePoint", "utf32ToString", "data", "start", "end", "result", "i", "codepoint", "StringToUtf32", "input", "target", "length", "size", "startPos", "second", "code", "Utf8ToUtf32", "byte1", "byte2", "byte3", "byte4", "discardInterim", "cp", "pos", "tmp", "type", "missing", "fourStop", "AttributeData", "_AttributeData", "ExtendedAttrs", "value", "newObj", "_ExtendedAttrs", "ext", "urlId", "val", "CellData", "_CellData", "AttributeData", "ExtendedAttrs", "value", "obj", "stringFromCodePoint", "combined", "code", "second", "other", "thisDefault", "otherDefault", "serviceRegistry", "getServiceDependencies", "ctor", "createDecorator", "id", "decorator", "target", "key", "index", "storeServiceDependency", "IBufferService", "createDecorator", "IMouseStateService", "ICoreService", "ICharsetService", "IInstantiationService", "ILogService", "createDecorator", "IOptionsService", "IOscLinkService", "IUnicodeService", "IDecorationService", "OscLinkProvider", "_bufferService", "_optionsService", "_oscLinkService", "CellData", "y", "callback", "line", "result", "linkHandler", "cell", "lineLength", "currentLinkId", "currentStart", "finishLink", "x", "text", "endX", "range", "ignoreLink", "parsed", "e", "defaultActivate", "startX", "linkId", "startY", "finalStartX", "endY", "finalEndX", "previousLine", "previousLineLength", "previousStartX", "currentLine", "currentLineLength", "nextLine", "nextLineLength", "nextEndX", "__decorateClass", "__decorateParam", "IBufferService", "IOptionsService", "IOscLinkService", "uri", "newWindow", "ICharSizeService", "createDecorator", "ICoreBrowserService", "IMouseCoordsService", "IMouseService", "IRenderService", "ISelectionService", "ICharacterJoinerService", "IThemeService", "ILinkProviderService", "IKeyboardService", "toDisposable", "fn", "dispose", "arg", "d", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "TimeoutTimer", "runner", "timeout", "MicrotaskTimer", "IntervalTimer", "interval", "context", "handle", "getWindow", "e", "candidateNode", "candidateEvent", "DomListener", "node", "type", "handler", "options", "addDisposableListener", "useCaptureOrOptions", "addStandardDisposableListener", "useCapture", "eventType", "getDomNodePagePosition", "domNode", "bb", "win", "AnimationFrameQueueItem", "_runner", "priority", "a", "b", "animationFrameState", "getAnimationFrameState", "targetWindow", "state", "animationFrameRunner", "scheduleAtNextAnimationFrame", "runner", "item", "WindowIntervalTimer", "IntervalTimer", "interval", "FastDomNode", "domNode", "_width", "width", "numberAsPixels", "_height", "height", "_top", "top", "_left", "left", "_bottom", "bottom", "_right", "right", "className", "shouldHaveIt", "position", "layerHint", "contain", "name", "value", "Platform_exports", "__export", "getSafariVersion", "getZoomFactor", "isChrome", "isChromeOS", "isFirefox", "isLegacyEdge", "isLinux", "isMac", "isNode", "isSafari", "isWindows", "userAgent", "platform", "_targetWindow", "majorVersion", "sameOriginWindowChainCache", "getParentWindowIfSameOrigin", "w", "location", "parentLocation", "IframeUtils", "targetWindow", "windowChainCache", "parent", "childWindow", "ancestorWindow", "top", "left", "windowChain", "windowChainEl", "windowInChain", "boundingRect", "StandardMouseEvent", "iframeOffsets", "StandardWheelEvent", "e", "deltaX", "deltaY", "shouldFactorDPR", "isChrome", "chromeVersionMatch", "e1", "e2", "devicePixelRatio", "ev", "isFirefox", "isMac", "isSafari", "isWindows", "GlobalPointerMoveMonitor", "DisposableStore", "invokeStopCallback", "onStopCallback", "initialElement", "pointerId", "initialButtons", "pointerMoveCallback", "eventSource", "toDisposable", "getWindow", "addDisposableListener", "eventType", "e", "Widget", "Disposable", "domNode", "listener", "addDisposableListener", "eventType", "e", "StandardMouseEvent", "getWindow", "ScrollbarArrow", "Widget", "opts", "arrowSize", "GlobalPointerMoveMonitor", "addStandardDisposableListener", "eventType", "e", "WindowIntervalTimer", "TimeoutTimer", "scheduleRepeater", "getWindow", "pointerMoveData", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "i", "len", "EventUtils", "forward", "from", "to", "e", "map", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "ScrollState", "_ScrollState", "_forceIntegerValues", "width", "scrollWidth", "scrollLeft", "height", "scrollHeight", "scrollTop", "other", "update", "useRawScrollPositions", "previous", "inSmoothScrolling", "widthChanged", "scrollWidthChanged", "scrollLeftChanged", "heightChanged", "scrollHeightChanged", "scrollTopChanged", "Scrollable", "Disposable", "options", "Emitter", "smoothScrollDuration", "scrollPosition", "dimensions", "newState", "reuseAnimation", "validTarget", "newSmoothScrolling", "SmoothScrollingOperation", "oldState", "SmoothScrollingUpdate", "isDone", "createEaseOutCubic", "from", "to", "delta", "completion", "easeOutCubic", "createComposed", "a", "b", "cut", "_SmoothScrollingOperation", "startTime", "duration", "viewportSize", "stop1", "stop2", "state", "now", "newScrollLeft", "newScrollTop", "easeInCubic", "t", "ScrollbarVisibilityController", "Disposable", "visibility", "visibleClassName", "invisibleClassName", "TimeoutTimer", "rawShouldBeVisible", "shouldBeVisible", "isNeeded", "domNode", "withFadeAway", "POINTER_DRAG_RESET_DISTANCE", "AbstractScrollbar", "Widget", "opts", "ScrollbarVisibilityController", "GlobalPointerMoveMonitor", "FastDomNode", "addDisposableListener", "eventType", "arrow", "ScrollbarArrow", "top", "left", "width", "height", "e", "visibleSize", "elementScrollSize", "elementScrollPosition", "domTop", "sliderStart", "sliderStop", "pointerPos", "offsetX", "offsetY", "domNodePosition", "getDomNodePagePosition", "offset", "initialPointerPosition", "initialPointerOrthogonalPosition", "initialScrollbarState", "pointerMoveData", "pointerOrthogonalPosition", "pointerOrthogonalDelta", "isWindows", "pointerDelta", "_desiredScrollPosition", "desiredScrollPosition", "scrollbarSize", "ScrollbarState", "_ScrollbarState", "arrowSize", "scrollbarSize", "oppositeScrollbarSize", "visibleSize", "scrollSize", "scrollPosition", "iVisibleSize", "iScrollSize", "iScrollPosition", "iArrowSize", "computedAvailableSize", "computedRepresentableSize", "computedIsNeeded", "computedSliderSize", "computedSliderRatio", "computedSliderPosition", "r", "offset", "desiredSliderPosition", "correctedOffset", "desiredScrollPosition", "delta", "HorizontalScrollbar", "AbstractScrollbar", "scrollable", "options", "host", "scrollDimensions", "scrollPosition", "ScrollbarState", "sliderSize", "sliderPosition", "largeSize", "smallSize", "e", "offsetX", "offsetY", "size", "target", "VerticalScrollbar", "AbstractScrollbar", "scrollable", "options", "host", "scrollDimensions", "scrollPosition", "hasArrows", "ScrollbarState", "sliderSize", "sliderPosition", "largeSize", "smallSize", "offsetX", "offsetY", "size", "target", "delta", "currentPosition", "showArrows", "display", "arrow", "arrowSize", "MouseWheelClassifierItem", "timestamp", "deltaX", "deltaY", "_MouseWheelClassifier", "remainingInfluence", "score", "iteration", "index", "influence", "e", "isChrome", "targetWindow", "getWindow", "pageZoomFactor", "getZoomFactor", "previousItem", "item", "absDeltaX", "absDeltaY", "absPreviousDeltaX", "absPreviousDeltaY", "minDeltaX", "minDeltaY", "maxDeltaX", "maxDeltaY", "value", "MouseWheelClassifier", "SmoothScrollableElement", "Widget", "element", "options", "scrollable", "Emitter", "resolvedScrollable", "ownsScrollable", "Scrollable", "callback", "scheduleAtNextAnimationFrame", "resolveOptions", "scrollbarHost", "mouseWheelEvent", "VerticalScrollbar", "HorizontalScrollbar", "FastDomNode", "TimeoutTimer", "dispose", "dimensions", "update", "newClassName", "isMac", "newOptions", "browserEvent", "StandardWheelEvent", "shouldListen", "onMouseWheel", "addDisposableListener", "eventType", "classifier", "didScroll", "shiftConvert", "futureScrollPosition", "desiredScrollPosition", "deltaScrollTop", "desiredScrollTop", "deltaScrollLeft", "desiredScrollLeft", "consumeMouseWheel", "scrollState", "enableTop", "enableLeft", "leftClassName", "topClassName", "topLeftClassName", "opts", "result", "Viewport", "Disposable", "element", "screenElement", "_bufferService", "coreBrowserService", "_coreService", "mouseStateService", "themeService", "_optionsService", "_renderService", "Emitter", "scrollable", "Scrollable", "cb", "scheduleAtNextAnimationFrame", "SmoothScrollableElement", "type", "EventUtils", "toDisposable", "e", "disp", "pos", "line", "disableSmoothScroll", "showScrollbar", "showArrows", "verticalScrollbarSize", "ydisp", "newRow", "diff", "translationY", "__decorateClass", "__decorateParam", "IBufferService", "ICoreBrowserService", "ICoreService", "IMouseStateService", "IThemeService", "IOptionsService", "IRenderService", "BufferDecorationRenderer", "Disposable", "_screenElement", "_bufferService", "_coreBrowserService", "_decorationService", "_renderService", "decoration", "toDisposable", "element", "x", "line", "__decorateClass", "__decorateParam", "IBufferService", "ICoreBrowserService", "IDecorationService", "IRenderService", "ColorZoneStore", "decoration", "z", "padding", "zone", "line", "position", "drawHeight", "drawWidth", "drawX", "OverviewRulerRenderer", "Disposable", "_viewportElement", "_screenElement", "_bufferService", "_decorationService", "_renderService", "_optionsService", "_themeService", "_coreBrowserService", "ColorZoneStore", "toDisposable", "ctx", "scrollbar", "outerWidth", "innerWidth", "pixelsPerLine", "nonFullHeight", "cssCanvasHeight", "deviceCanvasHeight", "decoration", "zones", "zone", "updateCanvasDimensions", "updateAnchor", "__decorateClass", "__decorateParam", "IBufferService", "IDecorationService", "IRenderService", "IOptionsService", "IThemeService", "ICoreBrowserService", "CompositionHelper", "_textarea", "_compositionView", "_bufferService", "_optionsService", "_coreService", "_renderService", "start", "end", "ev", "waitForPropagation", "currentCompositionPosition", "currentCompositionSuffix", "input", "value", "valueEnd", "oldValue", "newValue", "diff", "dontRecurse", "cursorX", "cellHeight", "cursorTop", "cursorLeft", "maxWidth", "compositionViewBounds", "__decorateClass", "__decorateParam", "IBufferService", "IOptionsService", "ICoreService", "IRenderService", "$r", "$g", "$b", "$a", "NULL_COLOR", "channels", "toCss", "g", "b", "toPaddedHex", "toRgba", "toColor", "color", "blend", "bg", "fg", "fgR", "fgG", "fgB", "bgR", "bgG", "bgB", "css", "rgba", "isOpaque", "ensureContrastRatio", "ratio", "result", "opaque", "rgbaColor", "opacity", "multiplyOpacity", "factor", "toColorRGB", "$ctx", "$litmusColor", "canvas", "ctx", "rgbaMatch", "rgb", "relativeLuminance", "relativeLuminance2", "r", "rs", "gs", "bs", "rr", "rg", "rb", "bgRgba", "fgRgba", "bgL", "fgL", "contrastRatio", "resultA", "reduceLuminance", "resultARatio", "resultB", "increaseLuminance", "resultBRatio", "cr", "toChannels", "value", "c", "s", "l1", "l2", "JoinedCellData", "AttributeData", "firstCell", "chars", "width", "value", "CharacterJoinerService", "_bufferService", "CellData", "handler", "joiner", "joinerId", "i", "row", "line", "ranges", "lineStr", "trimmedLength", "rangeStartColumn", "currentStringIndex", "rangeStartStringIndex", "rangeAttrFG", "rangeAttrBG", "x", "joinedRanges", "startIndex", "endIndex", "lineData", "startCol", "text", "allJoinedRanges", "error", "joinerRanges", "j", "currentRangeIndex", "currentRangeStarted", "currentRange", "length", "newRange", "inRange", "range", "__decorateClass", "__decorateParam", "IBufferService", "throwIfFalsy", "value", "isPowerlineGlyph", "codepoint", "isBoxOrBlockGlyph", "codepoint", "treatGlyphAsBackgroundColor", "codepoint", "isPowerlineGlyph", "isBoxOrBlockGlyph", "createRenderDimensions", "createDimension", "DomRendererRowFactory", "_document", "_characterJoinerService", "_optionsService", "_coreBrowserService", "_coreService", "_decorationService", "_themeService", "CellData", "start", "end", "columnSelectMode", "lineData", "row", "isCursorRow", "cursorStyle", "cursorInactiveStyle", "cursorX", "cursorBlink", "blinkOn", "cellWidth", "widthCache", "linkStart", "linkEnd", "rowInfo", "elements", "joinedRanges", "colors", "lineLength", "charElement", "cellAmount", "text", "i", "oldBg", "oldFg", "oldExt", "oldLinkHover", "oldSpacing", "oldIsInSelection", "spacing", "skipJoinedCheckUntilX", "classes", "hasHover", "x", "width", "isJoined", "isValidJoinRange", "lastCharX", "cell", "range", "firstSelectionState", "JoinedCellData", "isInSelection", "isCursorCell", "isLinkHover", "isDecorated", "d", "chars", "AttributeData", "fg", "fgColorMode", "bg", "bgColorMode", "isInverse", "temp", "temp2", "bgOverride", "fgOverride", "isTop", "resolvedBg", "channels", "color", "element", "treatGlyphAsBackgroundColor", "cache", "adjustedColor", "ratio", "style", "y", "__decorateClass", "__decorateParam", "ICharacterJoinerService", "IOptionsService", "ICoreBrowserService", "ICoreService", "IDecorationService", "IThemeService", "WidthCache", "canvasFactory", "WidthCacheFontVariantCanvas", "font", "fontSize", "weight", "weightBold", "c", "bold", "italic", "cp", "width", "key", "variant", "throwIfFalsy", "fontFamily", "fontWeight", "fontStyle", "SelectionRenderModel", "terminal", "start", "end", "columnSelectMode", "viewportY", "viewportStartRow", "viewportEndRow", "viewportCappedStartRow", "viewportCappedEndRow", "x", "y", "createSelectionRenderModel", "TextBlinkStateManager", "Disposable", "_renderCallback", "_coreBrowserService", "_optionsService", "duration", "toDisposable", "needsBlinkInViewport", "isVisible", "wasBlinkOn", "nextTerminalId", "DomRenderer", "Disposable", "_terminal", "_document", "_element", "_screenElement", "_viewportElement", "_helperContainer", "_linkifier2", "instantiationService", "_charSizeService", "_optionsService", "_bufferService", "_coreService", "_coreBrowserService", "_themeService", "createSelectionRenderModel", "Emitter", "createRenderDimensions", "e", "DomRendererRowFactory", "CursorBlinkStateManager", "addDisposableListener", "toDisposable", "TextBlinkStateManager", "WidthCache", "dpr", "element", "styles", "colors", "color", "blinkAnimationUnderlineId", "blinkAnimationBarId", "blinkAnimationBlockId", "i", "c", "spacing", "cols", "rows", "row", "isVisible", "start", "end", "columnSelectMode", "oldViewportStart", "oldViewportEnd", "newViewportStart", "newViewportEnd", "viewportStartRow", "viewportEndRow", "viewportCappedStartRow", "viewportCappedEndRow", "documentFragment", "isXFlipped", "startCol", "endCol", "middleRowsCount", "finalEndCol", "renderStartRow", "renderEndRow", "cursorViewportRow", "colStart", "colEnd", "rowCount", "left", "width", "buffer", "cursorAbsoluteY", "cursorX", "cursorBlink", "cursorStyle", "cursorInactiveStyle", "rowInfo", "y", "rowElement", "lineData", "x", "x2", "y2", "enabled", "maxY", "bufferline", "hasBlinkingCells", "__decorateClass", "__decorateParam", "IInstantiationService", "ICharSizeService", "IOptionsService", "IBufferService", "ICoreService", "ICoreBrowserService", "IThemeService", "_rowContainer", "CharSizeService", "Disposable", "document", "parentElement", "_optionsService", "Emitter", "TextMetricsMeasureStrategy", "DomMeasureStrategy", "result", "__decorateClass", "__decorateParam", "IOptionsService", "BaseMeasureStategy", "Disposable", "width", "height", "DomMeasureStrategy", "_document", "_parentElement", "_optionsService", "TextMetricsMeasureStrategy", "a", "metrics", "CoreBrowserService", "Disposable", "_textarea", "_window", "mainDocument", "Emitter", "ScreenDprMonitor", "w", "EventUtils", "addDisposableListener", "value", "_parentWindow", "MutableDisposable", "toDisposable", "parentWindow", "LinkProviderService", "Disposable", "toDisposable", "linkProvider", "providerIndex", "getCoordsRelativeToElement", "window", "event", "element", "rect", "elementStyle", "leftPadding", "topPadding", "getCoords", "colCount", "rowCount", "hasValidCharSize", "cssCellWidth", "cssCellHeight", "isSelection", "coords", "MouseCoordsService", "_charSizeService", "_renderService", "event", "element", "colCount", "rowCount", "isSelection", "getCoords", "getWindow", "coords", "getCoordsRelativeToElement", "__decorateClass", "__decorateParam", "ICharSizeService", "IRenderService", "mainWindow", "tail", "array", "n", "memoize", "_target", "key", "descriptor", "fnKey", "fn", "memoizeKey", "descriptorAny", "args", "_LinkedListNode", "element", "LinkedListNode", "LinkedList", "atTheEnd", "newNode", "oldLast", "oldFirst", "didRemove", "node", "anchor", "EventType", "_Gesture", "Disposable", "targetWindow", "addDisposableListener", "e", "remove", "toDisposable", "timestamp", "i", "len", "touch", "evt", "activeTouchCount", "data", "holdTime", "finalX", "finalY", "deltaT", "deltaX", "deltaY", "dispatchTo", "t", "type", "initialTarget", "event", "currentTime", "setTapCount", "ignoreTarget", "targets", "target", "depth", "now", "a", "b", "t1", "vX", "dirX", "x", "vY", "dirY", "y", "scheduleAtNextAnimationFrame", "deltaPosX", "deltaPosY", "stopped", "d", "__decorateClass", "Gesture", "MouseService", "_renderService", "_mouseCoordsService", "_mouseStateService", "_coreService", "_bufferService", "_optionsService", "_selectionService", "_logService", "_coreBrowserService", "target", "register", "focus", "element", "document", "requestedEvents", "mouseupListener", "MutableDisposable", "mousedragListener", "ctx", "eventListeners", "ev", "AltMouseCursorController", "events", "addDisposableListener", "Gesture", "EventType", "e", "pos", "but", "action", "deltaY", "stripAltFromReport", "targetDocument", "listenerDocument", "sequence", "cellHeight", "lines", "i", "amount", "dpr", "targetWheelEventPixels", "report", "e1", "e2", "pixels", "__decorateClass", "__decorateParam", "IRenderService", "IMouseCoordsService", "IMouseStateService", "ICoreService", "IBufferService", "IOptionsService", "ISelectionService", "ILogService", "ICoreBrowserService", "_element", "_document", "_isActive", "store", "DisposableStore", "syncFromModifier", "targetWindow", "altHeld", "RenderDebouncer", "_renderCallback", "_coreBrowserService", "callback", "rowStart", "rowEnd", "rowCount", "start", "end", "TaskQueue", "logService", "task", "deadline", "taskDuration", "longestTask", "lastDeadlineRemaining", "deadlineRemaining", "PriorityTaskQueue", "callback", "identifier", "duration", "end", "IdleTaskQueueInternal", "IdleTaskQueue", "DebouncedIdleTask", "RenderService", "Disposable", "_rowCount", "screenElement", "_optionsService", "_logService", "_charSizeService", "_coreService", "decorationService", "bufferService", "_coreBrowserService", "themeService", "MutableDisposable", "Emitter", "DebouncedIdleTask", "RenderDebouncer", "start", "end", "SynchronizedOutputHandler", "toDisposable", "w", "observer", "e", "entry", "sync", "isRedrawOnly", "buffered", "cols", "rows", "renderer", "callback", "columnSelectMode", "__decorateClass", "__decorateParam", "IOptionsService", "ILogService", "ICharSizeService", "ICoreService", "IDecorationService", "IBufferService", "ICoreBrowserService", "IThemeService", "_onTimeout", "result", "moveToCellSequence", "targetX", "targetY", "bufferService", "applicationCursor", "startX", "startY", "resetStartingRow", "moveToRequestedRow", "moveToRequestedCol", "direction", "repeat", "sequence", "rowDifference", "cellsToMove", "colsFromRowEnd", "colsFromRowBeginning", "currX", "bufferLine", "wrappedRowsForRow", "startRow", "endRow", "rowsToMove", "wrappedRowsCount", "verticalDirection", "horizontalDirection", "wrappedRows", "i", "currentRow", "rowCount", "line", "lineWraps", "startCol", "endCol", "forward", "currentCol", "bufferStr", "mod", "count", "str", "rpt", "SelectionModel", "_bufferService", "startPlusLength", "start", "end", "amount", "getRangeLength", "range", "bufferCols", "NON_BREAKING_SPACE_CHAR", "ALL_NON_BREAKING_SPACE_REGEX", "SelectionService", "Disposable", "_element", "_screenElement", "_linkifier", "_bufferService", "_coreService", "_mouseCoordsService", "_optionsService", "_mouseStateService", "_renderService", "_coreBrowserService", "MutableDisposable", "CellData", "Emitter", "event", "amount", "e", "SelectionModel", "toDisposable", "start", "end", "buffer", "result", "startCol", "endCol", "i", "lineText", "startRowEndCol", "bufferLine", "line", "ALL_NON_BREAKING_SPACE_REGEX", "isWindows", "isLinuxMouseSelection", "isLinux", "coords", "x", "y", "allowWhitespaceOnlySelection", "range", "getRangeLength", "offset", "getCoordsRelativeToElement", "terminalHeight", "isMac", "hadSelection", "previousSelectionEnd", "timeElapsed", "coordinates", "sequence", "moveToCellSequence", "hasSelection", "charIndex", "length", "col", "row", "ev", "followWrappedLinesAbove", "followWrappedLinesBelow", "startIndex", "endIndex", "charOffset", "leftWideCharCount", "rightWideCharCount", "leftLongCharOffset", "rightLongCharOffset", "previousBufferLine", "previousLineWordPosition", "nextBufferLine", "nextLineWordPosition", "wordPosition", "endRow", "cell", "wrappedRange", "__decorateClass", "__decorateParam", "IBufferService", "ICoreService", "IMouseCoordsService", "IOptionsService", "IMouseStateService", "IRenderService", "ICoreBrowserService", "TwoKeyMap", "first", "second", "value", "ColorContrastCache", "TwoKeyMap", "bg", "fg", "value", "DEFAULT_ANSI_COLORS", "colors", "css", "v", "i", "r", "g", "b", "channels", "c", "DEFAULT_FOREGROUND", "css", "DEFAULT_BACKGROUND", "DEFAULT_CURSOR", "DEFAULT_CURSOR_ACCENT", "DEFAULT_SELECTION", "DEFAULT_OVERVIEW_RULER_BORDER", "ThemeService", "Disposable", "_optionsService", "ColorContrastCache", "Emitter", "color", "DEFAULT_ANSI_COLORS", "theme", "colors", "parseColor", "NULL_COLOR", "colorCount", "i", "slot", "callback", "__decorateClass", "__decorateParam", "IOptionsService", "cssString", "fallback", "KEYCODE_KEY_MAPPINGS", "evaluateKeyboardEvent", "ev", "applicationCursorMode", "isMac", "macOptionIsMeta", "result", "modifiers", "key", "keyCode", "keyString", "KittyKeyboard", "ev", "suffix", "mods", "macOptionAsAlt", "numpadCode", "modifierCode", "funcCode", "digit", "code", "letter", "modifiers", "eventType", "reportEventTypes", "needsEventType", "seq", "number", "keyCode", "flags", "isFunc", "isMod", "reportAlternateKeys", "shiftedKey", "textCode", "result", "csiLetter", "ss3Letter", "tildeCode", "specialKey", "legacyByte", "Win32InputMode", "ev", "vk", "controlChar", "codePoint", "state", "isKeyDown", "sc", "uc", "kd", "cs", "KeyboardService", "_coreService", "_optionsService", "Win32InputMode", "KittyKeyboard", "event", "kittyFlags", "isMac", "evaluateKeyboardEvent", "__decorateClass", "__decorateParam", "ICoreService", "IOptionsService", "ServiceCollection", "entries", "id", "service", "instance", "result", "callback", "key", "value", "InstantiationService", "IInstantiationService", "ctor", "args", "serviceDependencies", "getServiceDependencies", "a", "b", "serviceArgs", "dependency", "firstServiceArgPos", "optionsKeyToLogLevel", "LOG_PREFIX", "LogService", "Disposable", "_optionsService", "optionalParams", "i", "type", "message", "__decorateClass", "__decorateParam", "IOptionsService", "CircularList", "Disposable", "_maxLength", "Emitter", "newMaxLength", "newArray", "i", "newLength", "index", "value", "start", "deleteCount", "items", "countToTrim", "count", "offset", "expandListBy", "DEFAULT_ATTR_DATA", "AttributeData", "$startIndex", "$workCell", "CellData", "$extended", "BufferLine", "_BufferLine", "cols", "fillCellData", "isWrapped", "cell", "i", "index", "content", "cp", "stringFromCodePoint", "value", "codePoint", "width", "attrs", "$idx", "pos", "n", "start", "end", "respectProtect", "uint32Cells", "data", "keys", "key", "extKeys", "line", "blank", "newLine", "src", "srcCol", "destCol", "length", "applyInReverse", "srcData", "trimRight", "startCol", "endCol", "outColumns", "isCanonical", "cellContents", "chars", "result", "srcStart", "reflowLargerGetLinesToRemove", "lines", "oldCols", "newCols", "bufferAbsoluteY", "nullCell", "reflowCursorLine", "toRemove", "y", "i", "nextLine", "wrappedLines", "destLineIndex", "destCol", "getWrappedLineTrimmedLength", "srcLineIndex", "srcCol", "srcTrimmedTineLength", "srcRemainingCells", "destRemainingCells", "cellsToCopy", "countToRemove", "reflowLargerCreateNewLayout", "layout", "nextToRemoveIndex", "nextToRemoveStart", "countRemovedSoFar", "reflowLargerApplyNewLayout", "newLayout", "newLayoutLines", "reflowSmallerGetNewLineLengths", "newLineLengths", "cellsNeeded", "srcLine", "cellsAvailable", "oldTrimmedLength", "endsWithWide", "lineLength", "cols", "endsInNull", "followingLineStartsWithWide", "_Marker", "line", "Emitter", "dispose", "disposable", "Marker", "CHARSETS", "DEFAULT_CHARSET", "MAX_BUFFER_SIZE", "Buffer", "Disposable", "_hasScrollback", "_optionsService", "_bufferService", "_logService", "DEFAULT_ATTR_DATA", "DEFAULT_CHARSET", "CellData", "CircularList", "IdleTaskQueue", "toDisposable", "attr", "ExtendedAttrs", "isWrapped", "BufferLine", "relativeY", "rows", "correctBufferLength", "fillAttr", "i", "newCols", "newRows", "nullCell", "dirtyMemoryLines", "newMaxLength", "addToY", "y", "amountToTrim", "maxY", "normalRun", "counted", "windowsPty", "reflowCursorLine", "toRemove", "reflowLargerGetLinesToRemove", "newLayoutResult", "reflowLargerCreateNewLayout", "reflowLargerApplyNewLayout", "countRemoved", "viewportAdjustments", "toInsert", "countToInsert", "nextLine", "wrappedLines", "absoluteY", "lastLineLength", "destLineLengths", "reflowSmallerGetNewLineLengths", "linesToAdd", "trimmedLines", "newLines", "newLine", "destLineIndex", "destCol", "srcLineIndex", "srcCol", "cellsToCopy", "wrappedLinesIndex", "getWrappedLineTrimmedLength", "insertEvents", "originalLines", "originalLinesLength", "originalLineIndex", "nextToInsertIndex", "nextToInsert", "countInsertedSoFar", "nextI", "insertCountEmitted", "lineIndex", "trimRight", "startCol", "endCol", "line", "first", "last", "x", "marker", "Marker", "amount", "event", "BufferSet", "Disposable", "_optionsService", "_bufferService", "_logService", "MutableDisposable", "Emitter", "Buffer", "fillAttr", "newCols", "newRows", "i", "BufferService", "Disposable", "optionsService", "logService", "Emitter", "BufferSet", "e", "cols", "rows", "colsChanged", "rowsChanged", "eraseAttr", "isWrapped", "buffer", "newLine", "topRow", "bottomRow", "willBufferBeTrimmed", "scrollRegionHeight", "disp", "suppressScrollEvent", "oldYdisp", "__decorateClass", "__decorateParam", "IOptionsService", "ILogService", "DEFAULT_OPTIONS", "isMac", "FONT_WEIGHT_OPTIONS", "OptionsService", "Disposable", "options", "Emitter", "defaultOptions", "key", "newValue", "e", "toDisposable", "listener", "eventKey", "keys", "getter", "propName", "setter", "value", "desc", "isCursorStyle", "DEFAULT_MODES", "DEFAULT_DEC_PRIVATE_MODES", "DEFAULT_KITTY_KEYBOARD_STATE", "CoreService", "Disposable", "_bufferService", "_logService", "_optionsService", "Emitter", "data", "wasUserInput", "buffer", "e", "__decorateClass", "__decorateParam", "IBufferService", "ILogService", "IOptionsService", "DEFAULT_PROTOCOLS", "e", "eventCode", "e", "isSGR", "code", "S", "DEFAULT_ENCODINGS", "params", "final", "MouseStateService", "Disposable", "Emitter", "name", "DEFAULT_PROTOCOLS", "protocol", "encoding", "customWheelEventHandler", "ev", "UnicodeService", "_UnicodeService", "Emitter", "value", "state", "width", "shouldJoin", "version", "provider", "num", "s", "result", "precedingInfo", "length", "i", "code", "second", "currentInfo", "chWidth", "codepoint", "preceding", "BMP_COMBINING", "HIGH_COMBINING", "table", "bisearch", "ucs", "data", "min", "max", "mid", "UnicodeV6", "r", "num", "codepoint", "preceding", "width", "shouldJoin", "oldWidth", "UnicodeService", "CharsetService", "g", "charset", "updateWindowsModeWrappedState", "bufferService", "lastChar", "nextLine", "Params", "_Params", "maxLength", "maxSubParamsLength", "values", "params", "i", "value", "k", "newParams", "res", "start", "end", "idx", "result", "length", "store", "cur", "StringBuilder", "chunk", "LimitedStringBuilder", "_limit", "EMPTY_HANDLERS", "OscParser", "ident", "handler", "handlerList", "handlerIndex", "j", "data", "start", "end", "utf32ToString", "code", "success", "promiseResult", "handlerResult", "fallThrough", "_OscHandler", "_handler", "LimitedStringBuilder", "ret", "res", "OscHandler", "EMPTY_HANDLERS", "DcsParser", "ident", "handler", "handlerList", "handlerIndex", "j", "params", "data", "start", "end", "utf32ToString", "success", "promiseResult", "handlerResult", "fallThrough", "EMPTY_PARAMS", "Params", "_DcsHandler", "_handler", "LimitedStringBuilder", "ret", "res", "DcsHandler", "EMPTY_HANDLERS", "ApcParser", "ident", "handler", "handlerList", "handlerIndex", "j", "data", "start", "end", "utf32ToString", "success", "promiseResult", "handlerResult", "fallThrough", "_ApcHandler", "_handler", "LimitedStringBuilder", "ret", "res", "ApcHandler", "TransitionTable", "length", "action", "next", "code", "state", "codes", "i", "NON_ASCII_PRINTABLE", "VT500_TRANSITION_TABLE", "table", "blueprint", "unused", "r", "start", "end", "PRINTABLES", "EXECUTABLES", "states", "EscapeSequenceParser", "Disposable", "_transitions", "Params", "data", "ident", "params", "toDisposable", "OscParser", "DcsParser", "ApcParser", "id", "finalRange", "res", "intermediate", "finalCode", "handler", "handlerList", "handlerIndex", "flag", "callback", "handlers", "handlerPos", "transition", "chunkPos", "promiseResult", "handlerResult", "k", "ch", "csiDone", "j", "c", "l4", "handlersEsc", "jj", "RGB_REX", "HASH_REX", "parseColor", "data", "low", "m", "base", "adv", "result", "i", "c", "pad", "bits", "s", "s2", "toRgbString", "color", "r", "g", "b", "XTERM_VERSION", "GLEVEL", "paramToWindowOption", "opts", "$temp", "InputHandler", "Disposable", "_bufferService", "_charsetService", "_coreService", "_logService", "_optionsService", "_oscLinkService", "_mouseStateService", "_unicodeService", "_parser", "EscapeSequenceParser", "StringToUtf32", "Utf8ToUtf32", "DEFAULT_ATTR_DATA", "Emitter", "DirtyRowTracker", "e", "ident", "params", "code", "identifier", "action", "data", "payload", "start", "end", "OscHandler", "flag", "CHARSETS", "state", "DcsHandler", "cursorStartX", "cursorStartY", "decodedLength", "position", "p", "slowTimeout", "slowPromise", "_res", "rej", "err", "promiseResult", "result", "wasPaused", "i", "len", "viewportEnd", "viewportStart", "chWidth", "charset", "screenReaderMode", "cols", "wraparoundMode", "insertMode", "curAttr", "bufferRow", "precedingJoinState", "pos", "ch", "currentInfo", "UnicodeService", "shouldJoin", "oldWidth", "stringFromCodePoint", "linkId", "oldRow", "oldCol", "BufferLine", "offset", "delta", "id", "callback", "paramToWindowOption", "ApcHandler", "line", "originalX", "maxCol", "x", "y", "diffToTop", "diffToBottom", "param", "clearWrap", "respectProtect", "j", "nextLine", "scrollBackSize", "row", "scrollBottomRowsOffset", "scrollBottomAbsolute", "joinState", "length", "text", "idata", "itext", "tlength", "XTERM_VERSION", "term", "DEFAULT_CHARSET", "ansi", "V", "dm", "mouseProtocol", "mouseEncoding", "cs", "buffers", "active", "alt", "opts", "f", "m", "v", "b2v", "value", "color", "mode", "c1", "c2", "c3", "AttributeData", "attr", "accu", "cSpace", "advance", "subparams", "style", "l", "isBlinking", "top", "bottom", "second", "event", "slots", "idx", "spec", "index", "isValidColorIndex", "parseColor", "uri", "parsedParams", "idParamIndex", "collectAndFlag", "GLEVEL", "scrollRegionHeight", "level", "cell", "CellData", "yOffset", "s", "b", "STYLES", "y1", "y2", "flags", "stack", "count", "__decorateClass", "__decorateParam", "IBufferService", "WriteBuffer", "Disposable", "_action", "TimeoutTimer", "Emitter", "toDisposable", "chunk", "didProcess", "cb", "data", "maxSubsequentCalls", "callback", "lastTime", "promiseResult", "startTime", "result", "continuation", "r", "err", "OscLinkService", "_bufferService", "data", "buffer", "marker", "entry", "castData", "key", "match", "linkId", "y", "e", "linkData", "index", "__decorateClass", "__decorateParam", "IBufferService", "hasWriteSyncWarnHappened", "CoreTerminal", "Disposable", "options", "MutableDisposable", "Emitter", "InstantiationService", "OptionsService", "IOptionsService", "LogService", "ILogService", "BufferService", "IBufferService", "CoreService", "ICoreService", "MouseStateService", "IMouseStateService", "UnicodeService", "UnicodeV6", "IUnicodeService", "CharsetService", "ICharsetService", "OscLinkService", "IOscLinkService", "InputHandler", "EventUtils", "WriteBuffer", "data", "promiseResult", "ev", "key", "callback", "maxSubsequentCalls", "wasUserInput", "x", "y", "eraseAttr", "isWrapped", "disp", "suppressScrollEvent", "pageCount", "disableSmoothScroll", "line", "scrollAmount", "id", "ident", "value", "windowsPty", "disposables", "updateWindowsModeWrappedState", "toDisposable", "d", "i", "SortedList", "_getKey", "logService", "IdleTaskQueue", "value", "sortedAddedValues", "a", "b", "sortedAddedValuesIndex", "arrayIndex", "newArray", "newArrayIndex", "key", "sortedDeletedIndices", "sortedDeletedIndicesIndex", "callback", "min", "max", "mid", "midKey", "$xmin", "$xmax", "DecorationService", "Disposable", "_logService", "_bufferService", "DecorationLineCache", "Emitter", "SortedList", "e", "toDisposable", "options", "decoration", "Decoration", "markerDispose", "listener", "d", "x", "line", "layer", "bucket", "callback", "__decorateClass", "__decorateParam", "ILogService", "IBufferService", "MutableDisposable", "MicrotaskTimer", "lines", "store", "DisposableStore", "amount", "event", "start", "height", "index", "callbacks", "cb", "newMap", "newLine", "existing", "i", "len", "spanCrossers", "deleteEnd", "toReindex", "css", "RENDER_DEBOUNCE_THRESHOLD_MS", "TimeBasedDebouncer", "_renderCallback", "_debounceThresholdMS", "rowStart", "rowEnd", "rowCount", "refreshRequestTime", "elapsed", "waitPeriodBeforeTrailingRefresh", "start", "end", "DEBUG", "AccessibilityManager", "Disposable", "_terminal", "instantiationService", "_coreBrowserService", "_renderService", "doc", "i", "e", "TimeBasedDebouncer", "char", "spaceCount", "addDisposableListener", "toDisposable", "tooMuchOutput", "keyChar", "start", "end", "buffer", "setSize", "line", "columns", "lineData", "posInSet", "element", "position", "boundaryElement", "beforeBoundaryElement", "lastRowPos", "topBoundaryElement", "bottomBoundaryElement", "newElement", "selection", "begin", "lastRowElement", "toRowColumn", "node", "offset", "rowElement", "row", "column", "beginRowColumn", "endRowColumn", "rows", "width", "lastColumn", "targetWidth", "__decorateClass", "__decorateParam", "IInstantiationService", "ICoreBrowserService", "IRenderService", "Linkifier", "Disposable", "_element", "_mouseCoordsService", "_renderService", "_bufferService", "_linkProviderService", "Emitter", "toDisposable", "dispose", "addDisposableListener", "event", "position", "composedPath", "i", "target", "useLineCache", "reply", "linkWithState", "linkProvided", "linkProvider", "links", "linksWithState", "link", "y", "replies", "occupiedCells", "providerReply", "startX", "endX", "x", "index", "hasLinkBefore", "j", "linkAtPosition", "currentLink", "linkEquals", "startRow", "endRow", "v", "e", "start", "end", "element", "showEvent", "range", "scrollOffset", "lower", "upper", "current", "coords", "x1", "y1", "x2", "y2", "fg", "__decorateClass", "__decorateParam", "IMouseCoordsService", "IRenderService", "IBufferService", "ILinkProviderService", "a", "b", "CoreBrowserTerminal", "CoreTerminal", "options", "MutableDisposable", "Platform_exports", "Emitter", "DecorationService", "IDecorationService", "KeyboardService", "IKeyboardService", "LinkProviderService", "ILinkProviderService", "OscLinkProvider", "e", "type", "event", "EventUtils", "toDisposable", "dimensions", "req", "acc", "ident", "colorRgb", "color", "toRgbString", "colors", "channels", "narrowedAcc", "bgLuminance", "rgb", "fgLuminance", "colorSchemeMode", "value", "AccessibilityManager", "ev", "cursorY", "bufferLine", "cursorX", "cellHeight", "width", "cellWidth", "cursorTop", "cursorLeft", "addDisposableListener", "copyHandler", "pasteHandlerWrapper", "handlePasteEvent", "isFirefox", "rightClickHandler", "isLinux", "moveTextAreaUnderMouseCursor", "parent", "fragment", "textarea", "promptLabel", "isChromeOS", "CoreBrowserService", "ICoreBrowserService", "CharSizeService", "ICharSizeService", "ThemeService", "IThemeService", "CharacterJoinerService", "ICharacterJoinerService", "RenderService", "IRenderService", "CompositionHelper", "MouseCoordsService", "IMouseCoordsService", "linkifier", "Linkifier", "Viewport", "SelectionService", "ISelectionService", "MouseService", "IMouseService", "text", "BufferDecorationRenderer", "showScrollbar", "overviewRulerWidth", "OverviewRulerRenderer", "shouldShow", "amount", "disposable", "DomRenderer", "start", "end", "sync", "disp", "suppressScrollEvent", "pageCount", "disableSmoothScroll", "line", "scrollAmount", "data", "paste", "customKeyEventHandler", "customWheelEventHandler", "linkProvider", "handler", "joinerId", "cursorYOffset", "decorationOptions", "column", "row", "length", "shouldIgnoreComposition", "result", "scrollCount", "wasModifierOnly", "wasModifierKeyOnlyEvent", "browser", "thirdLevelKey", "key", "x", "y", "i", "DEFAULT_ATTR_DATA", "canvasWidth", "canvasHeight", "AddonManager", "terminal", "instance", "loadedAddon", "index", "i", "BufferLineApiView", "_line", "x", "cell", "CellData", "trimRight", "startColumn", "endColumn", "BufferApiView", "_buffer", "type", "buffer", "y", "line", "BufferLineApiView", "CellData", "BufferNamespaceApi", "Disposable", "_core", "Emitter", "BufferApiView", "ParserApi", "_core", "id", "callback", "params", "data", "handler", "ident", "UnicodeApi", "_core", "provider", "version", "CONSTRUCTOR_ONLY_OPTIONS", "$value", "Terminal", "Disposable", "options", "CoreBrowserTerminal", "AddonManager", "getter", "propName", "setter", "value", "desc", "ParserApi", "UnicodeApi", "BufferNamespaceApi", "m", "mouseTrackingMode", "data", "wasUserInput", "columns", "rows", "parent", "customKeyEventHandler", "customWheelEventHandler", "linkProvider", "handler", "joinerId", "cursorYOffset", "decorationOptions", "column", "row", "length", "start", "end", "amount", "pageCount", "line", "callback", "addon", "promptLabel", "tooMuchOutput", "values"] + "sources": ["../src/browser/LocalizableStrings.ts", "../src/browser/Clipboard.ts", "../src/common/input/TextDecoder.ts", "../src/common/buffer/AttributeData.ts", "../src/common/buffer/CellData.ts", "../src/common/services/ServiceRegistry.ts", "../src/common/services/Services.ts", "../src/browser/OscLinkProvider.ts", "../src/browser/services/Services.ts", "../src/common/Lifecycle.ts", "../src/common/Async.ts", "../src/browser/Dom.ts", "../src/browser/scrollable/fastDomNode.ts", "../src/common/Platform.ts", "../src/browser/scrollable/mouseEvent.ts", "../src/browser/scrollable/globalPointerMoveMonitor.ts", "../src/browser/scrollable/widget.ts", "../src/browser/scrollable/scrollbarArrow.ts", "../src/common/Event.ts", "../src/browser/scrollable/scrollable.ts", "../src/browser/scrollable/scrollbarVisibilityController.ts", "../src/browser/scrollable/abstractScrollbar.ts", "../src/browser/scrollable/scrollbarState.ts", "../src/browser/scrollable/horizontalScrollbar.ts", "../src/browser/scrollable/verticalScrollbar.ts", "../src/browser/scrollable/scrollableElement.ts", "../src/browser/Viewport.ts", "../src/browser/decorations/BufferDecorationRenderer.ts", "../src/browser/decorations/ColorZoneStore.ts", "../src/browser/decorations/OverviewRulerRenderer.ts", "../src/browser/renderer/shared/RendererUtils.ts", "../src/browser/renderer/dom/WidthCache.ts", "../src/common/Color.ts", "../src/browser/input/CompositionHelper.ts", "../src/browser/services/CharacterJoinerService.ts", "../src/browser/renderer/dom/DomRendererRowFactory.ts", "../src/browser/renderer/shared/SelectionRenderModel.ts", "../src/browser/renderer/shared/TextBlinkStateManager.ts", "../src/browser/renderer/dom/DomRenderer.ts", "../src/browser/services/CharSizeService.ts", "../src/browser/services/CoreBrowserService.ts", "../src/browser/services/LinkProviderService.ts", "../src/browser/input/Mouse.ts", "../src/browser/services/MouseCoordsService.ts", "../src/browser/scrollable/touch.ts", "../src/browser/services/MouseService.ts", "../src/browser/RenderDebouncer.ts", "../src/common/TaskQueue.ts", "../src/browser/services/RenderService.ts", "../src/browser/input/MoveToCell.ts", "../src/browser/selection/SelectionModel.ts", "../src/common/buffer/BufferRange.ts", "../src/browser/services/SelectionService.ts", "../src/common/MultiKeyMap.ts", "../src/browser/ColorContrastCache.ts", "../src/browser/Types.ts", "../src/browser/services/ThemeService.ts", "../src/common/input/Keyboard.ts", "../src/common/input/KittyKeyboard.ts", "../src/common/input/Win32InputMode.ts", "../src/browser/services/KeyboardService.ts", "../src/common/services/InstantiationService.ts", "../src/common/services/LogService.ts", "../src/common/CircularList.ts", "../src/common/buffer/BufferLine.ts", "../src/common/buffer/BufferReflow.ts", "../src/common/buffer/Marker.ts", "../src/common/data/Charsets.ts", "../src/common/buffer/Buffer.ts", "../src/common/buffer/BufferSet.ts", "../src/common/services/BufferService.ts", "../src/common/services/OptionsService.ts", "../src/common/services/CoreService.ts", "../src/common/services/MouseStateService.ts", "../src/common/services/UnicodeService.ts", "../src/common/input/UnicodeV6.ts", "../src/common/services/CharsetService.ts", "../src/common/WindowsMode.ts", "../src/common/parser/Params.ts", "../src/common/StringBuilder.ts", "../src/common/parser/OscParser.ts", "../src/common/parser/DcsParser.ts", "../src/common/parser/ApcParser.ts", "../src/common/parser/EscapeSequenceParser.ts", "../src/common/input/XParseColor.ts", "../src/common/Version.ts", "../src/common/InputHandler.ts", "../src/common/input/WriteBuffer.ts", "../src/common/services/OscLinkService.ts", "../src/common/CoreTerminal.ts", "../src/common/SortedList.ts", "../src/common/services/DecorationService.ts", "../src/browser/TimeBasedDebouncer.ts", "../src/browser/AccessibilityManager.ts", "../src/browser/Linkifier.ts", "../src/browser/CoreBrowserTerminal.ts", "../src/common/public/AddonManager.ts", "../src/common/public/BufferLineApiView.ts", "../src/common/public/BufferApiView.ts", "../src/common/public/BufferNamespaceApi.ts", "../src/common/public/ParserApi.ts", "../src/common/public/UnicodeApi.ts", "../src/browser/public/Terminal.ts"], -+ "sourcesContent": ["/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (\u241B).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nexport class WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/// \n/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService, IThemeService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService, IUnicodeService } from '../../common/services/Services';\nimport { WidthCacheFontVariantCanvas } from '../renderer/dom/WidthCache';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable } from '../../common/Lifecycle';\nimport { color } from '../../common/Color';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\ninterface IPendingComposition {\n transactionId: number;\n finalizerTimer?: ReturnType;\n lifecycleSettled: boolean;\n sessionEnded: boolean;\n position: IPosition;\n suffix: string;\n dataAlreadySent: string;\n compositionData: string;\n endData: string;\n inputData: string;\n keypressData: string;\n keypressMayOverlapComposition: boolean;\n expectsPostCompositionInput: boolean;\n nextCompositionStart?: number;\n}\n\nconst XTERM_COMPOSITION_SESSION_START_EVENT = 'xterm-composition-session-start';\nconst XTERM_COMPOSITION_SESSION_END_EVENT = 'xterm-composition-session-end';\nconst XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT =\n 'xterm-composition-transaction-accepted';\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n public get hasPendingCompositionFinalization(): boolean {\n return this._pendingComposition !== undefined;\n }\n public get _isSendingComposition(): boolean {\n return this.hasPendingCompositionFinalization;\n }\n public get _pendingKeypressData(): string {\n return this._pendingComposition?.keypressData ?? '';\n }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n private _pendingComposition?: IPendingComposition;\n\n private _isAwaitingCompositionEnd: boolean;\n\n private _compositionInputData: string;\n\n private _lastCompositionData: string;\n\n private _compositionStartValue: string;\n\n private _compositionStartSelection: IPosition;\n\n private _compositionHasObservedProgress: boolean;\n\n private _canceledKey?: Pick;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n /**\n * Whether the IME consumed the last keydown and still owes the commit it produced. Nothing is\n * forwarded for such a keydown, so the commit is claimed by whichever observes it first.\n */\n private _imeKeydownAwaitingCommit: boolean;\n\n /**\n * Identifies the composition transaction that owns deferred work.\n */\n private _compositionTransactionId: number;\n\n /**\n * Timers that still own deferred composition state.\n */\n private _compositionTimers: Set>;\n\n private _compositionPositionTimer?: ReturnType;\n\n private _compositionViewTimer?: ReturnType;\n\n private _compositionEndTimer?: ReturnType;\n\n private _preeditRenderer?: CompositionPreeditRenderer;\n\n /** The preedit's own span, used to anchor the native candidate window. */\n private _compositionPreedit?: HTMLElement;\n\n /** The rendered row tail, set only while the cursor sits mid-line. */\n private _compositionRemainder?: HTMLElement;\n\n /** The insertion caret painted above the renderer cursor the composition view covers. */\n private _compositionCaret?: HTMLElement;\n\n // Keep the six-argument form callable: upstream's own CompositionHelper.test.ts constructs\n // this class directly, and `.npmignore` strips src/**/*.test.ts from the published tarball, so\n // the shipped patch has no hunk that could update that call. Dropping this overload fails the\n // upstream build with TS2554. The theme service is therefore optional, and every color read\n // below keeps the stock fallback that path needs.\n constructor(\n textarea: HTMLTextAreaElement,\n compositionView: HTMLElement,\n bufferService: IBufferService,\n optionsService: IOptionsService,\n coreService: ICoreService,\n renderService: IRenderService\n );\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService,\n @IThemeService private readonly _themeService?: IThemeService,\n @IUnicodeService private readonly _unicodeService?: IUnicodeService\n ) {\n this._isComposing = false;\n this._isAwaitingCompositionEnd = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionStartValue = '';\n this._compositionStartSelection = { start: 0, end: 0 };\n this._compositionHasObservedProgress = false;\n this._compositionTransactionId = 0;\n this._compositionTimers = new Set();\n this._imeKeydownAwaitingCommit = false;\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = undefined;\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = undefined;\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionStartValue = this._textarea.value;\n this._compositionStartSelection = { start, end };\n this._compositionHasObservedProgress = false;\n // A real session owns everything it commits, so no keydown is left owing one.\n this._imeKeydownAwaitingCommit = false;\n if (this._pendingComposition) {\n this._pendingComposition.nextCompositionStart = this._compositionPosition.start;\n }\n this._compositionTransactionId++;\n this._isComposing = true;\n this._isAwaitingCompositionEnd = true;\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._resetCompositionView();\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionView.classList.add('active');\n this._dispatchCompositionSessionEvent(new CustomEvent(XTERM_COMPOSITION_SESSION_START_EVENT, {\n bubbles: true,\n detail: { id: this._compositionTransactionId }\n }));\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n if (ev.data && !this._isComposing) {\n this.compositionstart();\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (ev.data?.length > 0) {\n this._lastCompositionData = ev.data;\n }\n this._renderCompositionView(ev.data ?? '');\n // Some IMEs resume without compositionstart; keep that inferred transaction visible until\n // compositionend settles it. An empty update hides the overlay without ending the transaction.\n this._compositionView.classList.toggle('active', Boolean(ev.data));\n this.updateCompositionElements();\n const transactionId = this._compositionTransactionId;\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = this._defer(() => {\n if (this._isComposing && this._compositionTransactionId === transactionId) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n });\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(ev?: Pick): boolean {\n if (!this._isAwaitingCompositionEnd) {\n return false;\n }\n if (!this._isComposing) {\n const pending = this._pendingComposition;\n if (pending?.transactionId === this._compositionTransactionId) {\n pending.endData = ev?.data ?? '';\n this._updatePostCompositionInputExpectation(pending);\n }\n return false;\n }\n const endData = ev?.data ?? '';\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n const pending = this._pendingComposition;\n if (pending && pending.transactionId !== this._compositionTransactionId) {\n this._sendPendingComposition(pending);\n }\n this._deferCompositionEnd(endData);\n return false;\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._finalizeComposition(true, endData);\n return true;\n }\n\n public blur(): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._isComposing) {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n this._finalizeComposition(false);\n }\n }\n\n public dispose(): void {\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n for (const timer of this._compositionTimers) {\n clearTimeout(timer);\n }\n this._compositionTimers.clear();\n this._compositionPositionTimer = undefined;\n this._compositionViewTimer = undefined;\n this._compositionEndTimer = undefined;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionTransactionId++;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._preeditRenderer?.dispose();\n this._preeditRenderer = undefined;\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._canceledKey?.code === ev.code && this._canceledKey.timeStamp === ev.timeStamp) {\n this._canceledKey = undefined;\n return false;\n }\n if (ev.key === 'Escape' && (this._isComposing || this.hasPendingCompositionFinalization)) {\n this._canceledKey = { code: ev.code, timeStamp: ev.timeStamp };\n this._cancelComposition();\n return false;\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n // A key the IME swallows can also empty the preedit \u2014 backspacing over the last radical of a\n // Cangjie composition \u2014 and some IMEs report that with no composition event at all.\n this._deferPreeditResync(this._composedRegionLength() > 0);\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n // Nothing is forwarded for a keydown the IME consumed, so it is left owing its commit; any\n // other keydown either forwards its own text or produces none, and clears the debt.\n this._imeKeydownAwaitingCommit = ev.keyCode === 229;\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Defers keypress text while a composition finalizer is pending so all input is emitted once\n * after reconciliation with the final textarea candidate.\n */\n public keypress(text: string): boolean {\n const pending = this._pendingComposition;\n if (!pending) {\n return false;\n }\n if (pending.keypressMayOverlapComposition) {\n pending.keypressData += text;\n return true;\n }\n if (pending.expectsPostCompositionInput && pending.keypressData.length === 0) {\n pending.keypressData = text;\n return true;\n }\n this._sendPendingComposition(pending);\n return false;\n }\n\n public input(text: string): boolean {\n if (this._isComposing) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n this._compositionInputData += text;\n return true;\n }\n const pending = this._pendingComposition;\n if (!pending) {\n return this._claimImeKeydownCommit(text);\n }\n if (pending.expectsPostCompositionInput) {\n pending.inputData += text;\n pending.expectsPostCompositionInput = false;\n this._sendPendingComposition(pending);\n return true;\n }\n const repeatsPendingTextareaInput =\n text.length > 0 &&\n this._getPendingTextareaInput(pending) === text &&\n this._getPendingTextareaInput(pending, true) === text;\n this._sendPendingComposition(pending);\n if (!repeatsPendingTextareaInput) {\n this._coreService.triggerDataEvent(text, true);\n }\n return true;\n }\n\n /**\n * Settles the commit a keydown the IME consumed still owes. That commit normally arrives as the\n * deferred textarea diff, but an asynchronous IME can deliver it after the diff has already run\n * and found the textarea unchanged, and with the key still down the terminal drops the input\n * event instead (#12099). Whichever path sees the commit first sends it and cancels the other, so\n * an IME that commits before the diff runs still sends once.\n */\n private _claimImeKeydownCommit(text: string): boolean {\n if (!this._imeKeydownAwaitingCommit) {\n return false;\n }\n this._imeKeydownAwaitingCommit = false;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n this._coreService.triggerDataEvent(text, true);\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean, endData: string = ''): void {\n const wasComposing = this._isComposing;\n this._compositionView.classList.remove('active');\n // Cleared, not just hidden: a rendered tail left in the view is stale DOM the next composition\n // would have to correct before its own first update lands.\n this._resetCompositionView();\n this._isComposing = false;\n if (waitForPropagation && !wasComposing) {\n return;\n }\n\n if (!waitForPropagation) {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition, true);\n }\n if (wasComposing) {\n const input = this._getCompositionInput(\n this._compositionPosition.start + this._dataAlreadySent.length,\n this._compositionSuffix\n );\n this._sendCompositionInput(this._compositionTransactionId, input);\n }\n } else {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition);\n }\n const pending: IPendingComposition = {\n transactionId: this._compositionTransactionId,\n lifecycleSettled: false,\n sessionEnded: false,\n position: {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n },\n suffix: this._compositionSuffix,\n dataAlreadySent: this._dataAlreadySent,\n compositionData: this._lastCompositionData,\n endData,\n inputData: this._compositionInputData,\n keypressData: '',\n keypressMayOverlapComposition:\n this._lastCompositionData.length === 0 && endData.length === 0,\n expectsPostCompositionInput: false\n };\n this._updatePostCompositionInputExpectation(pending);\n this._pendingComposition = pending;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n pending.finalizerTimer = this._defer(() => {\n pending.finalizerTimer = undefined;\n if (this._compositionTransactionId === pending.transactionId) {\n this._isAwaitingCompositionEnd = false;\n }\n if (this._pendingComposition === pending) {\n this._sendPendingComposition(pending, true);\n }\n });\n }\n }\n\n private _sendPendingComposition(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): void {\n this._cancelPendingFinalizer(pending);\n if (this._pendingComposition === pending) {\n this._pendingComposition = undefined;\n }\n const textareaInput = this._getPendingTextareaInput(pending, includeFollowingInput);\n const observedInput = this._removeAlreadySentData(\n pending.inputData || pending.keypressData,\n pending.dataAlreadySent\n );\n // Why: with no textarea, end, input, or keypress evidence the composition\n // was cancelled (e.g. Backspace over the whole preedit); stale\n // compositionupdate data must not be replayed as committed text.\n const input = this._mergeTextObservations(\n textareaInput || pending.endData || (observedInput ? pending.compositionData : ''),\n observedInput,\n pending.keypressMayOverlapComposition\n );\n this._sendCompositionInput(pending.transactionId, input, !pending.sessionEnded);\n this._settlePendingComposition(pending);\n }\n\n private _cancelPendingFinalizer(pending: IPendingComposition): void {\n if (pending.finalizerTimer === undefined) {\n return;\n }\n clearTimeout(pending.finalizerTimer);\n this._compositionTimers.delete(pending.finalizerTimer);\n pending.finalizerTimer = undefined;\n }\n\n private _settlePendingComposition(pending: IPendingComposition): void {\n if (pending.lifecycleSettled) {\n return;\n }\n pending.lifecycleSettled = true;\n this._dispatchCompositionTransactionSettled();\n }\n\n private _mergeTextObservations(\n candidate: string,\n observed: string,\n findShortestOrder: boolean\n ): string {\n if (!observed || candidate.includes(observed)) {\n return candidate;\n }\n if (!candidate || observed.includes(candidate)) {\n return observed;\n }\n if (findShortestOrder) {\n let candidateFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n candidateFirstOverlap > 0 &&\n !candidate.endsWith(observed.substring(0, candidateFirstOverlap))\n ) {\n candidateFirstOverlap--;\n }\n let observedFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n observedFirstOverlap > 0 &&\n !observed.endsWith(candidate.substring(0, observedFirstOverlap))\n ) {\n observedFirstOverlap--;\n }\n return candidateFirstOverlap > observedFirstOverlap\n ? candidate + observed.substring(candidateFirstOverlap)\n : observed + candidate.substring(observedFirstOverlap);\n }\n let overlap = Math.min(candidate.length, observed.length);\n while (overlap > 0 && !candidate.endsWith(observed.substring(0, overlap))) {\n overlap--;\n }\n return candidate + observed.substring(overlap);\n }\n\n private _updatePostCompositionInputExpectation(pending: IPendingComposition): void {\n pending.expectsPostCompositionInput =\n (pending.endData.length > 0 || pending.compositionData.length > 0) &&\n pending.inputData.length === 0 &&\n this._getPendingTextareaInput(pending).length === 0;\n }\n\n private _getPendingTextareaInput(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): string {\n const value = this._textarea.value;\n const start = pending.position.start + pending.dataAlreadySent.length;\n if (pending.nextCompositionStart !== undefined) {\n return value.substring(start, Math.max(start, pending.nextCompositionStart));\n }\n const suffixEnd =\n pending.suffix.length > 0 && value.endsWith(pending.suffix)\n ? value.length - pending.suffix.length\n : value.length;\n const compositionLength = (pending.endData || pending.compositionData).length;\n const observedEnd = includeFollowingInput\n ? suffixEnd\n : Math.max(pending.position.end, start + compositionLength);\n return value.substring(start, Math.max(start, Math.min(suffixEnd, observedEnd)));\n }\n\n private _getCompositionInput(start: number, suffix: string): string {\n const value = this._textarea.value;\n const valueEnd =\n suffix.length > 0 && value.endsWith(suffix) ? value.length - suffix.length : value.length;\n return value.substring(start, Math.max(start, valueEnd));\n }\n\n private _removeAlreadySentData(input: string, dataAlreadySent: string): string {\n if (dataAlreadySent.length === 0) {\n return input;\n }\n if (input.startsWith(dataAlreadySent)) {\n return input.substring(dataAlreadySent.length);\n }\n return dataAlreadySent.includes(input) ? '' : input;\n }\n\n private _cancelComposition(): void {\n const pending = this._pendingComposition;\n if (\n pending &&\n this._isComposing &&\n pending.transactionId !== this._compositionTransactionId\n ) {\n this._sendPendingComposition(pending);\n }\n const transactionId = this._isComposing\n ? this._compositionTransactionId\n : this._pendingComposition?.transactionId ?? 0;\n const settlesPending = pending !== undefined && this._pendingComposition === pending;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._textarea.value =\n this._textarea.value.substring(0, this._compositionPosition.start) + this._compositionSuffix;\n this._sendCompositionInput(transactionId, '');\n if (settlesPending && pending) {\n this._settlePendingComposition(pending);\n }\n }\n\n private _sendCompositionInput(\n transactionId: number,\n input: string,\n dispatchSessionEnd: boolean = true\n ): void {\n let prevented = false;\n if (dispatchSessionEnd) {\n const event = new CustomEvent(XTERM_COMPOSITION_SESSION_END_EVENT, {\n bubbles: true,\n cancelable: true,\n detail: { id: transactionId, data: input }\n });\n this._dispatchCompositionSessionEvent(event);\n prevented = event.defaultPrevented;\n }\n if (input.length > 0 && !prevented) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n\n private _endPendingCompositionSession(pending: IPendingComposition): void {\n if (pending.sessionEnded) {\n return;\n }\n pending.sessionEnded = true;\n const input =\n this._getPendingTextareaInput(pending) ||\n pending.endData ||\n pending.compositionData;\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_SESSION_END_EVENT,\n {\n bubbles: true,\n cancelable: true,\n detail: {\n id: pending.transactionId,\n data: input,\n dataPendingReconciliation: true\n }\n }\n ));\n }\n\n private _dispatchCompositionSessionEvent(event: CustomEvent): void {\n if (typeof this._textarea.dispatchEvent === 'function') {\n this._textarea.dispatchEvent(event);\n }\n }\n\n private _dispatchCompositionTransactionSettled(): void {\n this._dispatchCompositionSessionEvent(new CustomEvent(\n 'xterm-composition-transaction-settled',\n { bubbles: true }\n ));\n }\n\n private _deferCompositionEnd(endData: string): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n const transactionId = this._compositionTransactionId;\n const timer = this._defer(() => {\n if (\n this._compositionEndTimer !== timer ||\n !this._isComposing ||\n this._compositionTransactionId !== transactionId\n ) {\n return;\n }\n this._compositionEndTimer = undefined;\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n if (endData.length === 0 && !this._hasCompositionProgress()) {\n this._cancelComposition();\n }\n return;\n }\n this._finalizeComposition(true, endData);\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT,\n { bubbles: true }\n ));\n const pending = this._pendingComposition;\n if (pending?.transactionId === transactionId) {\n this._sendPendingComposition(pending, true);\n }\n });\n this._compositionEndTimer = timer;\n }\n\n /** How much of the textarea the IME currently owns; 0 means there is no preedit left. */\n private _composedRegionLength(): number {\n const end = this._textarea.value.length - this._compositionSuffix.length;\n return Math.max(0, end - this._compositionPosition.start);\n }\n\n /**\n * Re-derives the preedit from the textarea once the key that changed it has settled, and treats\n * a composition emptied that way as cancelled. Mirrors how native terminals clear a preedit on\n * the empty-marked-text state instead of on a specific key.\n */\n private _deferPreeditResync(hadPreedit: boolean): void {\n if (!hadPreedit || !this._isComposing) {\n return;\n }\n const transactionId = this._compositionTransactionId;\n this._defer(() => {\n if (\n this._isComposing &&\n this._compositionTransactionId === transactionId &&\n this._composedRegionLength() === 0\n ) {\n this._cancelComposition();\n }\n });\n }\n\n private _hasCompositionProgress(): boolean {\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n return this._compositionHasObservedProgress || (\n this._textarea.value !== this._compositionStartValue ||\n start !== this._compositionStartSelection.start ||\n end !== this._compositionStartSelection.end\n );\n }\n\n private _compositionEndBelongsToCurrentTransaction(endData: string): boolean {\n return (\n this._hasCompositionProgress() ||\n (endData.length > 0 && endData === this._lastCompositionData)\n );\n }\n\n private _defer(callback: () => void): ReturnType {\n const timer = setTimeout(() => {\n this._compositionTimers.delete(timer);\n callback();\n }, 0);\n this._compositionTimers.add(timer);\n return timer;\n }\n\n private _cancelDeferredTimer(timer?: ReturnType): void {\n if (timer === undefined) {\n return;\n }\n clearTimeout(timer);\n this._compositionTimers.delete(timer);\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n if (newValue !== oldValue) {\n this._imeKeydownAwaitingCommit = false;\n }\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Renders the preedit into the view and, when the cursor sits mid-line, the rest of the row\n * after it, so a composition reads as inserted text pushing the tail right rather than an opaque\n * box hiding the character under the cursor. Nothing reaches the pty while composing, so those\n * cells still hold their characters; only what the overlay shows changes.\n */\n private _renderCompositionView(data: string): void {\n if (!data) {\n this._resetCompositionView();\n return;\n }\n const doc = this._compositionView.ownerDocument;\n const preedit = doc.createElement('span');\n preedit.className = 'xterm-composition-preedit';\n // Underlined so the composing text stays distinguishable from the tail it pushed right.\n preedit.style.flexShrink = '0';\n preedit.style.textDecoration = 'underline';\n preedit.textContent = `\u200E${data}\u200E`;\n const caret = doc.createElement('span');\n caret.className = 'xterm-composition-caret';\n caret.setAttribute('aria-hidden', 'true');\n this._compositionView.replaceChildren(preedit, caret);\n this._compositionPreedit = preedit;\n this._compositionCaret = caret;\n this._compositionRemainder = undefined;\n this._renderCompositionRemainder(this._getRowRemainderText());\n this._styleCompositionCaret();\n }\n\n private _renderCompositionRemainder(data: string): void {\n if (!data) {\n this._compositionRemainder?.remove();\n this._compositionRemainder = undefined;\n return;\n }\n if (!this._compositionRemainder) {\n const remainder = this._compositionView.ownerDocument.createElement('span');\n remainder.className = 'xterm-composition-remainder';\n // Preserve padding cells before the trailing glyphs.\n remainder.style.whiteSpace = 'pre';\n this._compositionView.appendChild(remainder);\n this._compositionRemainder = remainder;\n }\n this._compositionRemainder.textContent = data;\n }\n\n /** The committed row text from the cursor rightwards \u2014 what a mid-line preedit would cover. */\n private _getRowRemainderText(): string {\n const buffer = this._bufferService.buffer;\n if (!buffer.isCursorInViewport) {\n return '';\n }\n const line = buffer.lines.get(buffer.ybase + buffer.y);\n // The explicit end column keeps this off the line string cache, whose self-renewing\n // idle-clear timer the composition path must not arm.\n return line\n ? line.translateToString(true, Math.min(buffer.x, this._bufferService.cols - 1), line.length)\n : '';\n }\n\n private _styleCompositionCaret(): void {\n const caret = this._compositionCaret;\n if (!caret) {\n return;\n }\n const width = Math.max(1, this._optionsService.rawOptions.cursorWidth);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const colors = this._themeService?.colors;\n const cursor = colors && (\n color.ensureContrastRatio(colors.background, colors.cursor, 3) ?? colors.cursor\n );\n caret.style.backgroundColor = cursor?.css ?? '#FFF';\n caret.style.display = 'inline-block';\n caret.style.flexShrink = '0';\n caret.style.height = cellHeight + 'px';\n caret.style.marginLeft = -width + 'px';\n caret.style.verticalAlign = 'top';\n caret.style.width = width + 'px';\n }\n\n private _resetCompositionView(): void {\n this._preeditRenderer?.clear();\n this._compositionView.textContent = '';\n this._compositionPreedit = undefined;\n this._compositionRemainder = undefined;\n this._compositionCaret = undefined;\n this._compositionView.style.display = '';\n this._compositionView.style.justifyContent = '';\n }\n\n /**\n * The theme background with any alpha dropped. The view masks the cells it draws over, so a\n * see-through background would re-expose the very characters the rendered tail stands in for.\n */\n private _opaqueViewBackground(): string {\n const background = this._themeService?.colors.background;\n return background ? color.opaque(background).css : '#000';\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n // Empty updates hide the overlay without ending the inferred transaction.\n if (!this._compositionView.classList.contains('active')) {\n return;\n }\n\n // A TUI can repaint the row under an open composition (spinners, streamed output), and this\n // already runs on every render \u2014 so keep the rendered tail current with the buffer. A string\n // compare adds no layout read.\n const rowRemainder = this._getRowRemainderText();\n if (\n this._compositionPreedit &&\n rowRemainder !== (this._compositionRemainder?.textContent ?? '')\n ) {\n this._renderCompositionRemainder(rowRemainder);\n }\n this._styleCompositionCaret();\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.setProperty('--xterm-composition-cell-width', this._renderService.dimensions.css.cell.width + 'px');\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n if (this._compositionPreedit && this._unicodeService && typeof Intl.Segmenter !== 'undefined') {\n this._preeditRenderer ??= new CompositionPreeditRenderer(\n this._unicodeService, this._compositionView.ownerDocument, () => this.updateCompositionElements(true)\n );\n this._preeditRenderer.render(this._compositionPreedit);\n }\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n const anchorBounds =\n (this._compositionPreedit ?? this._compositionView).getBoundingClientRect();\n const anchorLeft = cursorLeft + Math.min(0, maxWidth - anchorBounds.width);\n const showsRemainder =\n Boolean(this._compositionRemainder) && anchorBounds.width < maxWidth;\n if (this._compositionRemainder) {\n this._compositionRemainder.style.display = showsRemainder ? '' : 'none';\n }\n // End alignment keeps the caret visible when the preedit consumes the remaining width.\n this._compositionView.style.direction = 'ltr';\n this._compositionView.style.display = showsRemainder ? '' : 'flex';\n this._compositionView.style.justifyContent = showsRemainder ? '' : 'flex-end';\n // Themed rather than the stock #000/#FFF, so the pushed tail reads as ordinary terminal text\n // and light themes keep contrast.\n this._compositionView.style.background = this._opaqueViewBackground();\n this._compositionView.style.color = this._themeService?.colors.foreground.css ?? '#FFF';\n // Sized and placed to match the preedit, not the whole view, so the candidate window\n // anchors to the composing text rather than the end of the rendered tail. The clamp has to\n // be applied here and not only in Orca's terminal-ime-candidate-anchor.ts, because\n // CoreBrowserTerminal calls this from onRender as well as from composition events, and a\n // render can land after the last composition event that module can hear.\n this._textarea.style.left = anchorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(anchorBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(anchorBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = anchorBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = this._defer(() => this.updateCompositionElements(true));\n }\n }\n}\n\nconst CJK = /^[\\p{Script_Extensions=Han}\\p{Script_Extensions=Hiragana}\\p{Script_Extensions=Katakana}\\uac00-\\ud7a3\\u3131-\\u318e\\uff01-\\uff60]$/u;\nconst NATIVE = /[\\p{Mark}\\p{Extended_Pictographic}]/u;\nconst MAX_PREEDIT_LAYOUT_WORK = 128;\n\nclass CompositionPreeditRenderer extends Disposable {\n private readonly _segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n private _measure?: WidthCacheFontVariantCanvas;\n private _preedit?: HTMLElement;\n private _font = '';\n\n constructor(private readonly _unicodeService: IUnicodeService, doc: Document, refresh: () => void) {\n super();\n if (doc.fonts) {\n this._register(addDisposableListener(doc.fonts, 'loadingdone', () => {\n this._font = '';\n if (this._preedit) {\n refresh();\n }\n }));\n }\n }\n\n public clear(): void {\n this._preedit = undefined;\n this._font = '';\n }\n\n public override dispose(): void {\n this.clear();\n this._measure = undefined;\n super.dispose();\n }\n\n public render(preedit: HTMLElement): void {\n const doc = preedit.ownerDocument;\n const style = doc.defaultView?.getComputedStyle(preedit);\n if (!style) {\n return;\n }\n const font = [style.fontFamily, style.fontSize, style.fontWeight, style.fontStyle, doc.defaultView?.devicePixelRatio].join('|');\n if (this._preedit === preedit && this._font === font) {\n return;\n }\n this._preedit = preedit;\n this._font = font;\n const data = (preedit.textContent ?? '').slice(1, -1);\n const widths = new Map();\n const nodes: Node[] = [doc.createTextNode('\u200E')];\n let start = 0;\n let spacing: string | undefined;\n let work = 0;\n const emit = (end: number): void => {\n if (end === start) {\n return;\n }\n const text = data.slice(start, end);\n if (spacing === undefined) {\n nodes.push(doc.createTextNode(text));\n } else {\n const span = doc.createElement('span');\n span.style.letterSpacing = spacing;\n span.style.fontKerning = 'none';\n span.style.textDecoration = 'inherit';\n span.textContent = text;\n nodes.push(span);\n work++;\n }\n start = end;\n };\n for (const { segment, index } of this._segmenter.segment(data)) {\n // Bound cold measurements and styled runs without changing an already-corrected prefix.\n if (work >= MAX_PREEDIT_LAYOUT_WORK) {\n emit(index);\n spacing = undefined;\n break;\n }\n let nextSpacing: string | undefined;\n const columns = this._unicodeService.wcwidth(segment.codePointAt(0)!);\n if (CJK.test(segment) && !NATIVE.test(segment) && (columns === 2 || /^[\\uff61-\\uff9f]$/u.test(segment))) {\n let width = widths.get(segment);\n if (width === undefined) {\n this._measure ??= new WidthCacheFontVariantCanvas();\n this._measure.setFont(style.fontFamily, parseFloat(style.fontSize), parseFloat(style.fontWeight) || 400, style.fontStyle === 'italic');\n width = this._measure.measure(segment);\n widths.set(segment, width);\n work++;\n }\n nextSpacing = `calc(var(--xterm-composition-cell-width) * ${columns} - ${width}px)`;\n }\n if (nextSpacing !== spacing) {\n emit(index);\n spacing = nextSpacing;\n }\n }\n emit(data.length);\n nodes.push(doc.createTextNode('\u200E'));\n preedit.replaceChildren(...nodes);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n", "/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n", "import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): boolean | void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n keypress?(text: string): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec \u00A7 \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" \u2014 i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n cell.extended = this._extendedAttrs[index]!;\n } else {\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n cell.extended = $extended;\n }\n return cell;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '\u25C6'\n 'a': '\\u2592', // '\u2592'\n 'b': '\\u2409', // '\u2409' (HT)\n 'c': '\\u240c', // '\u240C' (FF)\n 'd': '\\u240d', // '\u240D' (CR)\n 'e': '\\u240a', // '\u240A' (LF)\n 'f': '\\u00b0', // '\u00B0'\n 'g': '\\u00b1', // '\u00B1'\n 'h': '\\u2424', // '\u2424' (NL)\n 'i': '\\u240b', // '\u240B' (VT)\n 'j': '\\u2518', // '\u2518'\n 'k': '\\u2510', // '\u2510'\n 'l': '\\u250c', // '\u250C'\n 'm': '\\u2514', // '\u2514'\n 'n': '\\u253c', // '\u253C'\n 'o': '\\u23ba', // '\u23BA'\n 'p': '\\u23bb', // '\u23BB'\n 'q': '\\u2500', // '\u2500'\n 'r': '\\u23bc', // '\u23BC'\n 's': '\\u23bd', // '\u23BD'\n 't': '\\u251c', // '\u251C'\n 'u': '\\u2524', // '\u2524'\n 'v': '\\u2534', // '\u2534'\n 'w': '\\u252c', // '\u252C'\n 'x': '\\u2502', // '\u2502'\n 'y': '\\u2264', // '\u2264'\n 'z': '\\u2265', // '\u2265'\n '{': '\\u03c0', // '\u03C0'\n '|': '\\u2260', // '\u2260'\n '}': '\\u00a3', // '\u00A3'\n '~': '\\u00b7' // '\u00B7'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '\u00A3'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '\u00A3',\n '@': '\u00BE',\n '[': 'ij',\n '\\\\': '\u00BD',\n ']': '|',\n '{': '\u00A8',\n '|': 'f',\n '}': '\u00BC',\n '~': '\u00B4'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '\u00A3',\n '@': '\u00E0',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00A7',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00A8'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': '\u00E0',\n '[': '\u00E2',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n '`': '\u00F4',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00FB'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '\u00A7',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00DC',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00DF'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00E9',\n '`': '\u00F9',\n '{': '\u00E0',\n '|': '\u00F2',\n '}': '\u00E8',\n '~': '\u00EC'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': '\u00C4',\n '[': '\u00C6',\n '\\\\': '\u00D8',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E4',\n '{': '\u00E6',\n '|': '\u00F8',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00A1',\n '\\\\': '\u00D1',\n ']': '\u00BF',\n '{': '\u00B0',\n '|': '\u00F1',\n '}': '\u00E7'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': '\u00C9',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': '\u00F9',\n '@': '\u00E0',\n '[': '\u00E9',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n\n '_': '\u00E8',\n '`': '\u00F4',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00FB'\n};\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n\u00B2) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.303';\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n", "\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n", "/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices = new Set();\n private readonly _indicesByValue = new Map();\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._indicesByValue.clear();\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.clear();\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n private _rebuildIdentityIndex(): void {\n this._indicesByValue.clear();\n // Reverse indices let duplicate identities remove their first occurrence in O(1).\n for (let index = this._array.length - 1; index >= 0; index--) {\n const value = this._array[index];\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n this._indicesByValue.set(value, index);\n } else if (typeof indices === 'number') {\n this._indicesByValue.set(value, [indices, index]);\n } else {\n indices.push(index);\n }\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n // Marker disposal mutates the sort key before removal; identity stays stable.\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n return false;\n }\n const index = typeof indices === 'number' ? indices : indices.pop();\n if (index === undefined) {\n return false;\n }\n if (typeof indices === 'number' || indices.length === 0) {\n this._indicesByValue.delete(value);\n }\n if (this._deletedIndices.size === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.add(index);\n return true;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const newArray = new Array(this._array.length - this._deletedIndices.size);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (!this._deletedIndices.has(i)) {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._deletedIndices.clear();\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.size > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.blur();\n }\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', (e: CompositionEvent) => {\n if (this._compositionHelper instanceof CompositionHelper) {\n if (this._compositionHelper.compositionend(e)) {\n this.textarea!.dispatchEvent(new CustomEvent(\n 'xterm-composition-transaction-accepted',\n { bubbles: true }\n ));\n }\n } else {\n this._compositionHelper!.compositionend();\n }\n }));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._register(toDisposable(() => {\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.dispose();\n }\n }));\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n if (!this._compositionHelper!.keypress?.(key)) {\n this.coreService.triggerDataEvent(key, true);\n }\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n if (\n ev.data &&\n ev.inputType === 'insertText' &&\n !this.optionsService.rawOptions.screenReaderMode &&\n this._compositionHelper instanceof CompositionHelper &&\n this._compositionHelper.input(ev.data)\n ) {\n return true;\n }\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n"], -+ "mappings": "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M,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAA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", ++ "sourcesContent": ["/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// This file contains strings that get exported in the API so they can be localized\n\nlet promptLabelInternal = 'Terminal input';\nconst promptLabel = {\n get: () => promptLabelInternal,\n set: (value: string) => promptLabelInternal = value\n};\n\nlet tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';\nconst tooMuchOutput = {\n get: () => tooMuchOutputInternal,\n set: (value: string) => tooMuchOutputInternal = value\n};\n\nexport {\n promptLabel,\n tooMuchOutput\n};\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ISelectionService } from './services/Services';\nimport { ICoreService, IOptionsService } from '../common/services/Services';\n\n/**\n * Prepares text to be pasted into the terminal by normalizing the line endings\n * @param text The pasted text that needs processing before inserting into the terminal\n */\nexport function prepareTextForTerminal(text: string): string {\n return text.replace(/\\r?\\n/g, '\\r');\n}\n\n/**\n * Bracket text for paste, if necessary, as per https://cirw.in/blog/bracketed-paste\n * @param text The pasted text to bracket\n */\nexport function bracketTextForPaste(text: string, bracketedPasteMode: boolean): string {\n if (!bracketedPasteMode) {\n return text;\n }\n // Sanitize pasted text to prevent injected escape sequences (e.g. exiting bracketed paste)\n // by replacing ESC (\\x1b) with its visible representation U+241B (\u241B).\n const sanitizedText = text.replace(/\\x1b/g, '\\u241b');\n return `\\x1b[200~${sanitizedText}\\x1b[201~`;\n}\n\n/**\n * Binds copy functionality to the given terminal.\n * @param ev The original copy event to be handled\n */\nexport function copyHandler(ev: ClipboardEvent, selectionService: ISelectionService): void {\n if (ev.clipboardData) {\n ev.clipboardData.setData('text/plain', selectionService.selectionText);\n }\n // Prevent or the original text will be copied.\n ev.preventDefault();\n}\n\n/**\n * Redirect the clipboard's data to the terminal's input handler.\n */\nexport function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n ev.stopPropagation();\n if (ev.clipboardData) {\n const text = ev.clipboardData.getData('text/plain');\n paste(text, textarea, coreService, optionsService);\n }\n}\n\nexport function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService, optionsService: IOptionsService): void {\n text = prepareTextForTerminal(text);\n text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode && optionsService.rawOptions.ignoreBracketedPasteMode !== true);\n coreService.triggerDataEvent(text, true);\n textarea.value = '';\n}\n\n/**\n * Moves the textarea under the mouse cursor and focuses it.\n * @param ev The original right click event to be handled.\n * @param textarea The terminal's textarea.\n */\nexport function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement): void {\n\n // Calculate textarea position relative to the screen element\n const pos = screenElement.getBoundingClientRect();\n const left = ev.clientX - pos.left - 10;\n const top = ev.clientY - pos.top - 10;\n\n // Bring textarea at the cursor position\n textarea.style.width = '20px';\n textarea.style.height = '20px';\n textarea.style.left = `${left}px`;\n textarea.style.top = `${top}px`;\n textarea.style.zIndex = '1000';\n\n textarea.focus();\n}\n\n/**\n * Bind to right-click event and allow right-click copy and paste.\n */\nexport function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {\n moveTextAreaUnderMouseCursor(ev, textarea, screenElement);\n\n if (shouldSelectWord) {\n selectionService.rightClickSelect(ev);\n }\n\n // Get textarea ready to copy from the context menu\n textarea.value = selectionService.selectionText;\n textarea.select();\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Polyfill - Convert UTF32 codepoint into JS string.\n * Note: The built-in String.fromCodePoint happens to be much slower\n * due to additional sanity checks. We can avoid them since\n * we always operate on legal UTF32 (granted by the input decoders)\n * and use this faster version instead.\n */\nexport function stringFromCodePoint(codePoint: number): string {\n if (codePoint > 0xFFFF) {\n codePoint -= 0x10000;\n return String.fromCharCode((codePoint >> 10) + 0xD800) + String.fromCharCode((codePoint % 0x400) + 0xDC00);\n }\n return String.fromCharCode(codePoint);\n}\n\n/**\n * Convert UTF32 char codes into JS string.\n * Basically the same as `stringFromCodePoint` but for multiple codepoints\n * in a loop (which is a lot faster).\n */\nexport function utf32ToString(data: Uint32Array, start: number = 0, end: number = data.length): string {\n let result = '';\n for (let i = start; i < end; ++i) {\n let codepoint = data[i];\n if (codepoint > 0xFFFF) {\n // JS strings are encoded as UTF16, thus a non BMP codepoint gets converted into a surrogate\n // pair conversion rules:\n // - subtract 0x10000 from code point, leaving a 20 bit number\n // - add high 10 bits to 0xD800 --> first surrogate\n // - add low 10 bits to 0xDC00 --> second surrogate\n codepoint -= 0x10000;\n result += String.fromCharCode((codepoint >> 10) + 0xD800) + String.fromCharCode((codepoint % 0x400) + 0xDC00);\n } else {\n result += String.fromCharCode(codepoint);\n }\n }\n return result;\n}\n\n/**\n * StringToUtf32 - decodes UTF16 sequences into UTF32 codepoints.\n * To keep the decoder in line with JS strings it handles single surrogates as UCS2.\n */\nexport class StringToUtf32 {\n private _interim: number = 0;\n\n /**\n * Clears interim and resets decoder to clean state.\n */\n public clear(): void {\n this._interim = 0;\n }\n\n /**\n * Decode JS string to UTF32 codepoints.\n * The methods assumes stream input and will store partly transmitted\n * surrogate pairs and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided input data does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: string, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let startPos = 0;\n\n // handle leftover surrogate high\n if (this._interim) {\n const second = input.charCodeAt(startPos++);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (this._interim - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = this._interim;\n target[size++] = second;\n }\n this._interim = 0;\n }\n\n for (let i = startPos; i < length; ++i) {\n const code = input.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n this._interim = code;\n return size;\n }\n const second = input.charCodeAt(i);\n if (0xDC00 <= second && second <= 0xDFFF) {\n target[size++] = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n // illegal codepoint (USC2 handling)\n target[size++] = code;\n target[size++] = second;\n }\n continue;\n }\n if (code === 0xFEFF) {\n // BOM\n continue;\n }\n target[size++] = code;\n }\n return size;\n }\n}\n\n/**\n * Utf8Decoder - decodes UTF8 byte sequences into UTF32 codepoints.\n */\nexport class Utf8ToUtf32 {\n public interim: Uint8Array = new Uint8Array(3);\n\n /**\n * Clears interim bytes and resets decoder to clean state.\n */\n public clear(): void {\n this.interim.fill(0);\n }\n\n /**\n * Decodes UTF8 byte sequences in `input` to UTF32 codepoints in `target`.\n * The methods assumes stream input and will store partly transmitted bytes\n * and decode them with the next data chunk.\n * Note: The method does no bound checks for target, therefore make sure\n * the provided data chunk does not exceed the size of `target`.\n * Returns the number of written codepoints in `target`.\n */\n public decode(input: Uint8Array, target: Uint32Array): number {\n const length = input.length;\n\n if (!length) {\n return 0;\n }\n\n let size = 0;\n let byte1: number;\n let byte2: number;\n let byte3: number;\n let byte4: number;\n let codepoint;\n let startPos = 0;\n\n // handle leftover bytes\n if (this.interim[0]) {\n let discardInterim = false;\n let cp = this.interim[0];\n cp &= ((((cp & 0xE0) === 0xC0)) ? 0x1F : (((cp & 0xF0) === 0xE0)) ? 0x0F : 0x07);\n let pos = 0;\n let tmp: number;\n while ((tmp = this.interim[++pos]) && pos < 4) {\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n // missing bytes - read ahead from input\n const type = (((this.interim[0] & 0xE0) === 0xC0)) ? 2 : (((this.interim[0] & 0xF0) === 0xE0)) ? 3 : 4;\n const missing = type - pos;\n while (startPos < missing) {\n if (startPos >= length) {\n return 0;\n }\n tmp = input[startPos++];\n if ((tmp & 0xC0) !== 0x80) {\n // wrong continuation, discard interim bytes completely\n startPos--;\n discardInterim = true;\n break;\n } else {\n // need to save so we can continue short inputs in next call\n this.interim[pos++] = tmp;\n cp <<= 6;\n cp |= tmp & 0x3F;\n }\n }\n if (!discardInterim) {\n // final test is type dependent\n if (type === 2) {\n if (cp < 0x80) {\n // wrong starter byte\n startPos--;\n } else {\n target[size++] = cp;\n }\n } else if (type === 3) {\n if (cp < 0x0800 || (cp >= 0xD800 && cp <= 0xDFFF) || cp === 0xFEFF) {\n // illegal codepoint or BOM\n } else {\n target[size++] = cp;\n }\n } else {\n if (cp < 0x010000 || cp > 0x10FFFF) {\n // illegal codepoint\n } else {\n target[size++] = cp;\n }\n }\n }\n this.interim.fill(0);\n }\n\n // loop through input\n const fourStop = length - 4;\n let i = startPos;\n while (i < length) {\n /**\n * ASCII shortcut with loop unrolled to 4 consecutive ASCII chars.\n * This is a compromise between speed gain for ASCII\n * and penalty for non ASCII:\n * For best ASCII performance the char should be stored directly into target,\n * but even a single attempt to write to target and compare afterwards\n * penalizes non ASCII really bad (-50%), thus we load the char into byteX first,\n * which reduces ASCII performance by ~15%.\n * This trial for ASCII reduces non ASCII performance by ~10% which seems acceptible\n * compared to the gains.\n * Note that this optimization only takes place for 4 consecutive ASCII chars,\n * for any shorter it bails out. Worst case - all 4 bytes being read but\n * thrown away due to the last being a non ASCII char (-10% performance).\n */\n while (i < fourStop\n && !((byte1 = input[i]) & 0x80)\n && !((byte2 = input[i + 1]) & 0x80)\n && !((byte3 = input[i + 2]) & 0x80)\n && !((byte4 = input[i + 3]) & 0x80))\n {\n target[size++] = byte1;\n target[size++] = byte2;\n target[size++] = byte3;\n target[size++] = byte4;\n i += 4;\n }\n\n // reread byte1\n byte1 = input[i++];\n\n // 1 byte\n if (byte1 < 0x80) {\n target[size++] = byte1;\n\n // 2 bytes\n } else if ((byte1 & 0xE0) === 0xC0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x1F) << 6 | (byte2 & 0x3F);\n if (codepoint < 0x80) {\n // wrong starter byte\n i--;\n continue;\n }\n target[size++] = codepoint;\n\n // 3 bytes\n } else if ((byte1 & 0xF0) === 0xE0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x0F) << 12 | (byte2 & 0x3F) << 6 | (byte3 & 0x3F);\n if (codepoint < 0x0800 || (codepoint >= 0xD800 && codepoint <= 0xDFFF) || codepoint === 0xFEFF) {\n // illegal codepoint or BOM, no i-- here\n continue;\n }\n target[size++] = codepoint;\n\n // 4 bytes\n } else if ((byte1 & 0xF8) === 0xF0) {\n if (i >= length) {\n this.interim[0] = byte1;\n return size;\n }\n byte2 = input[i++];\n if ((byte2 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n return size;\n }\n byte3 = input[i++];\n if ((byte3 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n if (i >= length) {\n this.interim[0] = byte1;\n this.interim[1] = byte2;\n this.interim[2] = byte3;\n return size;\n }\n byte4 = input[i++];\n if ((byte4 & 0xC0) !== 0x80) {\n // wrong continuation\n i--;\n continue;\n }\n codepoint = (byte1 & 0x07) << 18 | (byte2 & 0x3F) << 12 | (byte3 & 0x3F) << 6 | (byte4 & 0x3F);\n if (codepoint < 0x010000 || codepoint > 0x10FFFF) {\n // illegal codepoint, no i-- here\n continue;\n }\n target[size++] = codepoint;\n } else {\n // illegal byte, just skip\n }\n }\n return size;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorRGB } from '../Types';\nimport { IAttributeData, IExtendedAttrs } from './Types';\nimport { Attributes, FgFlags, BgFlags, UnderlineStyle, ExtFlags } from './Constants';\n\nexport class AttributeData implements IAttributeData {\n public static toColorRGB(value: number): IColorRGB {\n return [\n value >>> Attributes.RED_SHIFT & 255,\n value >>> Attributes.GREEN_SHIFT & 255,\n value & 255\n ];\n }\n\n public static fromColorRGB(value: IColorRGB): number {\n return (value[0] & 255) << Attributes.RED_SHIFT | (value[1] & 255) << Attributes.GREEN_SHIFT | value[2] & 255;\n }\n\n public clone(): IAttributeData {\n const newObj = new AttributeData();\n newObj.fg = this.fg;\n newObj.bg = this.bg;\n newObj.extended = this.extended.clone();\n return newObj;\n }\n\n // data\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n\n // flags\n public isInverse(): number { return this.fg & FgFlags.INVERSE; }\n public isBold(): number { return this.fg & FgFlags.BOLD; }\n public isUnderline(): number {\n if (this.hasExtendedAttrs() && this.extended.underlineStyle !== UnderlineStyle.NONE) {\n return 1;\n }\n return this.fg & FgFlags.UNDERLINE;\n }\n public isBlink(): number { return this.fg & FgFlags.BLINK; }\n public isInvisible(): number { return this.fg & FgFlags.INVISIBLE; }\n public isItalic(): number { return this.bg & BgFlags.ITALIC; }\n public isDim(): number { return this.bg & BgFlags.DIM; }\n public isStrikethrough(): number { return this.fg & FgFlags.STRIKETHROUGH; }\n public isProtected(): number { return this.bg & BgFlags.PROTECTED; }\n public isOverline(): number { return this.bg & BgFlags.OVERLINE; }\n\n // color modes\n public getFgColorMode(): number { return this.fg & Attributes.CM_MASK; }\n public getBgColorMode(): number { return this.bg & Attributes.CM_MASK; }\n public isFgRGB(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isBgRGB(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_RGB; }\n public isFgPalette(): boolean { return (this.fg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.fg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isBgPalette(): boolean { return (this.bg & Attributes.CM_MASK) === Attributes.CM_P16 || (this.bg & Attributes.CM_MASK) === Attributes.CM_P256; }\n public isFgDefault(): boolean { return (this.fg & Attributes.CM_MASK) === 0; }\n public isBgDefault(): boolean { return (this.bg & Attributes.CM_MASK) === 0; }\n public isAttributeDefault(): boolean { return this.fg === 0 && this.bg === 0; }\n\n // colors\n public getFgColor(): number {\n switch (this.fg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.fg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.fg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n public getBgColor(): number {\n switch (this.bg & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.bg & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.bg & Attributes.RGB_MASK;\n default: return -1; // CM_DEFAULT defaults to -1\n }\n }\n\n // extended attrs\n public hasExtendedAttrs(): number {\n return this.bg & BgFlags.HAS_EXTENDED;\n }\n public updateExtended(): void {\n if (this.extended.isEmpty()) {\n this.bg &= ~BgFlags.HAS_EXTENDED;\n } else {\n this.bg |= BgFlags.HAS_EXTENDED;\n }\n }\n public getUnderlineColor(): number {\n if ((this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor) {\n switch (this.extended.underlineColor & Attributes.CM_MASK) {\n case Attributes.CM_P16:\n case Attributes.CM_P256: return this.extended.underlineColor & Attributes.PCOLOR_MASK;\n case Attributes.CM_RGB: return this.extended.underlineColor & Attributes.RGB_MASK;\n default: return this.getFgColor();\n }\n }\n return this.getFgColor();\n }\n public getUnderlineColorMode(): number {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? this.extended.underlineColor & Attributes.CM_MASK\n : this.getFgColorMode();\n }\n public isUnderlineColorRGB(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_RGB\n : this.isFgRGB();\n }\n public isUnderlineColorPalette(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P16\n || (this.extended.underlineColor & Attributes.CM_MASK) === Attributes.CM_P256\n : this.isFgPalette();\n }\n public isUnderlineColorDefault(): boolean {\n return (this.bg & BgFlags.HAS_EXTENDED) && ~this.extended.underlineColor\n ? (this.extended.underlineColor & Attributes.CM_MASK) === 0\n : this.isFgDefault();\n }\n public getUnderlineStyle(): UnderlineStyle {\n return this.fg & FgFlags.UNDERLINE\n ? (this.bg & BgFlags.HAS_EXTENDED ? this.extended.underlineStyle : UnderlineStyle.SINGLE)\n : UnderlineStyle.NONE;\n }\n public getUnderlineVariantOffset(): number {\n return this.extended.underlineVariantOffset;\n }\n}\n\n\n/**\n * Extended attributes for a cell.\n * Holds information about different underline styles and color.\n */\nexport class ExtendedAttrs implements IExtendedAttrs {\n private _ext: number = 0;\n public payload: Object | undefined;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrs {\n return new ExtendedAttrs(this._ext, this._urlId);\n }\n\n /**\n * Convenient method to indicate whether the object holds no additional information,\n * that needs to be persistant in the buffer.\n */\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.payload === undefined;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, ICellData, IExtendedAttrs } from './Types';\nimport { stringFromCodePoint } from '../input/TextDecoder';\nimport { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, Content } from './Constants';\nimport { AttributeData, ExtendedAttrs } from './AttributeData';\nimport type { IBufferCell as IBufferCellApi } from '@xterm/xterm';\n\n/**\n * CellData - represents a single Cell in the terminal buffer.\n */\nexport class CellData extends AttributeData implements ICellData {\n /** Helper to create CellData from CharData. */\n public static fromCharData(value: CharData): CellData {\n const obj = new CellData();\n obj.setFromCharData(value);\n return obj;\n }\n /** Primitives from terminal buffer. */\n public content = 0;\n public fg = 0;\n public bg = 0;\n public extended: IExtendedAttrs = new ExtendedAttrs();\n public combinedData = '';\n /** Whether cell contains a combined string. */\n public isCombined(): number {\n return this.content & Content.IS_COMBINED_MASK;\n }\n /** Width of the cell. */\n public getWidth(): number {\n return this.content >> Content.WIDTH_SHIFT;\n }\n /** JS string of the content. */\n public getChars(): string {\n if (this.content & Content.IS_COMBINED_MASK) {\n return this.combinedData;\n }\n if (this.content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(this.content & Content.CODEPOINT_MASK);\n }\n return '';\n }\n /**\n * Codepoint of cell\n * Note this returns the UTF32 codepoint of single chars,\n * if content is a combined string it returns the codepoint\n * of the last char in string to be in line with code in CharData.\n */\n public getCode(): number {\n return (this.isCombined())\n ? this.combinedData.charCodeAt(this.combinedData.length - 1)\n : this.content & Content.CODEPOINT_MASK;\n }\n /** Set data from CharData */\n public setFromCharData(value: CharData): void {\n this.fg = value[CHAR_DATA_ATTR_INDEX];\n this.bg = 0;\n let combined = false;\n // surrogates and combined strings need special treatment\n if (value[CHAR_DATA_CHAR_INDEX].length > 2) {\n combined = true;\n }\n else if (value[CHAR_DATA_CHAR_INDEX].length === 2) {\n const code = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0);\n // if the 2-char string is a surrogate create single codepoint\n // everything else is combined\n if (0xD800 <= code && code <= 0xDBFF) {\n const second = value[CHAR_DATA_CHAR_INDEX].charCodeAt(1);\n if (0xDC00 <= second && second <= 0xDFFF) {\n this.content = ((code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n else {\n combined = true;\n }\n }\n else {\n combined = true;\n }\n }\n else {\n this.content = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n if (combined) {\n this.combinedData = value[CHAR_DATA_CHAR_INDEX];\n this.content = Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n /** Get data as CharData. */\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n\n public attributesEquals(other: IBufferCellApi): boolean {\n if (this.getFgColorMode() !== other.getFgColorMode() || this.getFgColor() !== other.getFgColor()) {\n return false;\n }\n if (this.getBgColorMode() !== other.getBgColorMode() || this.getBgColor() !== other.getBgColor()) {\n return false;\n }\n if (this.isInverse() !== other.isInverse()) {\n return false;\n }\n if (this.isBold() !== other.isBold()) {\n return false;\n }\n if (this.isUnderline() !== other.isUnderline()) {\n return false;\n }\n if (this.isUnderline()) {\n if (this.getUnderlineStyle() !== other.getUnderlineStyle()) {\n return false;\n }\n const thisDefault = this.isUnderlineColorDefault();\n const otherDefault = other.isUnderlineColorDefault();\n if (!(thisDefault && otherDefault)) {\n if (thisDefault !== otherDefault) {\n return false;\n }\n if (this.getUnderlineColor() !== other.getUnderlineColor()) {\n return false;\n }\n if (this.getUnderlineColorMode() !== other.getUnderlineColorMode()) {\n return false;\n }\n }\n }\n if (this.isOverline() !== other.isOverline()) {\n return false;\n }\n if (this.isBlink() !== other.isBlink()) {\n return false;\n }\n if (this.isInvisible() !== other.isInvisible()) {\n return false;\n }\n if (this.isItalic() !== other.isItalic()) {\n return false;\n }\n if (this.isDim() !== other.isDim()) {\n return false;\n }\n if (this.isStrikethrough() !== other.isStrikethrough()) {\n return false;\n }\n return true;\n }\n\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport interface IServiceIdentifier {\n (...args: any[]): void;\n type: T;\n _id: string;\n}\n\nconst enum Constants {\n DI_TARGET = 'di$target',\n DI_DEPENDENCIES = 'di$dependencies'\n}\n\nexport const serviceRegistry: Map> = new Map();\n\nexport function getServiceDependencies(ctor: any): { id: IServiceIdentifier, index: number, optional: boolean }[] {\n return ctor[Constants.DI_DEPENDENCIES] || [];\n}\n\nexport function createDecorator(id: string): IServiceIdentifier {\n if (serviceRegistry.has(id)) {\n return serviceRegistry.get(id)!;\n }\n\n const decorator: any = function (target: Function, key: string, index: number): any {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n\n storeServiceDependency(decorator, target, index);\n };\n\n decorator._id = id;\n\n serviceRegistry.set(id, decorator);\n return decorator;\n}\n\nfunction storeServiceDependency(id: Function, target: Function, index: number): void {\n if ((target as any)[Constants.DI_TARGET] === target) {\n (target as any)[Constants.DI_DEPENDENCIES].push({ id, index });\n } else {\n (target as any)[Constants.DI_DEPENDENCIES] = [{ id, index }];\n (target as any)[Constants.DI_TARGET] = target;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, IOverviewRulerOptions } from '@xterm/xterm';\nimport { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IKittyKeyboardState, IModes, IOscLinkData, IWindowOptions } from '../Types';\nimport { IAttributeData, IBuffer, IBufferSet } from '../buffer/Types';\nimport { createDecorator, IServiceIdentifier } from './ServiceRegistry';\nimport type { Emitter, IEvent } from '../Event';\n\nexport const IBufferService = createDecorator('BufferService');\nexport interface IBufferService {\n serviceBrand: undefined;\n\n readonly cols: number;\n readonly rows: number;\n readonly buffer: IBuffer;\n readonly buffers: IBufferSet;\n isUserScrolling: boolean;\n onResize: IEvent;\n onScroll: IEvent;\n scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;\n scrollLines(disp: number, suppressScrollEvent?: boolean): void;\n resize(cols: number, rows: number): void;\n reset(): void;\n}\n\nexport interface IBufferResizeEvent {\n cols: number;\n rows: number;\n colsChanged: boolean;\n rowsChanged: boolean;\n}\n\nexport const IMouseStateService = createDecorator('MouseStateService');\nexport interface IMouseStateService {\n serviceBrand: undefined;\n\n activeProtocol: string;\n activeEncoding: string;\n areMouseEventsActive: boolean;\n addProtocol(name: string, protocol: ICoreMouseProtocol): void;\n addEncoding(name: string, encoding: CoreMouseEncoding): void;\n reset(): void;\n setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void;\n allowCustomWheelEvent(ev: WheelEvent): boolean;\n\n /**\n * Event to announce changes in mouse tracking.\n */\n onProtocolChange: IEvent;\n restrictMouseEvent(event: ICoreMouseEvent): boolean;\n encodeMouseEvent(event: ICoreMouseEvent): string;\n readonly isDefaultEncoding: boolean;\n readonly isPixelEncoding: boolean;\n}\n\nexport const ICoreService = createDecorator('CoreService');\nexport interface ICoreService {\n serviceBrand: undefined;\n\n /**\n * Initially the cursor will not be visible until the first time the terminal\n * is focused.\n */\n isCursorInitialized: boolean;\n isCursorHidden: boolean;\n\n readonly modes: IModes;\n readonly decPrivateModes: IDecPrivateModes;\n readonly kittyKeyboard: IKittyKeyboardState;\n\n readonly onData: IEvent;\n readonly onUserInput: IEvent;\n readonly onBinary: IEvent;\n readonly onRequestScrollToBottom: IEvent;\n\n reset(): void;\n\n /**\n * Triggers the onData event in the public API.\n * @param data The data that is being emitted.\n * @param wasUserInput Whether the data originated from the user (as opposed to\n * resulting from parsing incoming data). When true this will also:\n * - Scroll to the bottom of the buffer if option scrollOnUserInput is true.\n * - Fire the `onUserInput` event (so selection can be cleared).\n */\n triggerDataEvent(data: string, wasUserInput?: boolean): void;\n\n /**\n * Triggers the onBinary event in the public API.\n * @param data The data that is being emitted.\n */\n triggerBinaryEvent(data: string): void;\n}\n\nexport const ICharsetService = createDecorator('CharsetService');\nexport interface ICharsetService {\n serviceBrand: undefined;\n\n charset: ICharset | undefined;\n readonly glevel: number;\n readonly charsets: (ICharset | undefined)[];\n\n reset(): void;\n\n /**\n * Set the G level of the terminal.\n * @param g\n */\n setgLevel(g: number): void;\n\n /**\n * Set the charset for the given G level of the terminal.\n * @param g\n * @param charset\n */\n setgCharset(g: number, charset: ICharset | undefined): void;\n}\n\nexport interface IBrandedService {\n serviceBrand: undefined;\n}\n\ntype GetLeadingNonServiceArgs = TArgs extends [] ? []\n : TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs : TArgs\n : never;\n\nexport const IInstantiationService = createDecorator('InstantiationService');\nexport interface IInstantiationService {\n serviceBrand: undefined;\n\n setService(id: IServiceIdentifier, instance: T): void;\n getService(id: IServiceIdentifier): T | undefined;\n createInstance any, R extends InstanceType>(t: Ctor, ...args: GetLeadingNonServiceArgs>): R;\n}\n\nexport enum LogLevelEnum {\n TRACE = 0,\n DEBUG = 1,\n INFO = 2,\n WARN = 3,\n ERROR = 4,\n OFF = 5\n}\n\nexport const ILogService = createDecorator('LogService');\nexport interface ILogService {\n serviceBrand: undefined;\n\n readonly logLevel: LogLevelEnum;\n\n trace(message: any, ...optionalParams: any[]): void;\n debug(message: any, ...optionalParams: any[]): void;\n info(message: any, ...optionalParams: any[]): void;\n warn(message: any, ...optionalParams: any[]): void;\n error(message: any, ...optionalParams: any[]): void;\n}\n\nexport const IOptionsService = createDecorator('OptionsService');\nexport interface IOptionsService {\n serviceBrand: undefined;\n\n /**\n * Read only access to the raw options object, this is an internal-only fast path for accessing\n * single options without any validation as we trust TypeScript to enforce correct usage\n * internally.\n */\n readonly rawOptions: Required;\n\n /**\n * Options as exposed through the public API, this property uses getters and setters with\n * validation which makes it safer but slower. {@link rawOptions} should be used for pretty much\n * all internal usage for performance reasons.\n */\n readonly options: Required;\n\n /**\n * Adds an event listener for when any option changes.\n */\n readonly onOptionChange: IEvent;\n\n /**\n * Adds an event listener for when a specific option changes, this is a convenience method that is\n * preferred over {@link onOptionChange} when only a single option is being listened to.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable;\n\n /**\n * Adds an event listener for when a set of specific options change, this is a convenience method\n * that is preferred over {@link onOptionChange} when multiple options are being listened to and\n * handled the same way.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;\n}\n\nexport type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;\nexport type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\n\nexport interface ITerminalOptions {\n allowProposedApi?: boolean;\n allowTransparency?: boolean;\n altClickMovesCursor?: boolean;\n cols?: number;\n convertEol?: boolean;\n cursorBlink?: boolean;\n blinkIntervalDuration?: number;\n cursorStyle?: CursorStyle;\n cursorWidth?: number;\n cursorInactiveStyle?: CursorInactiveStyle;\n disableStdin?: boolean;\n documentOverride?: any | null;\n drawBoldTextInBrightColors?: boolean;\n fastScrollSensitivity?: number;\n fontSize?: number;\n fontFamily?: string;\n fontWeight?: FontWeight;\n fontWeightBold?: FontWeight;\n ignoreBracketedPasteMode?: boolean;\n letterSpacing?: number;\n lineHeight?: number;\n linkHandler?: ILinkHandler | null;\n logLevel?: LogLevel;\n logger?: ILogger | null;\n macOptionIsMeta?: boolean;\n macOptionClickForcesSelection?: boolean;\n minimumContrastRatio?: number;\n mouseEventsRequireAlt?: boolean;\n reflowCursorLine?: boolean;\n rescaleOverlappingGlyphs?: boolean;\n rightClickSelectsWord?: boolean;\n rows?: number;\n showCursorImmediately?: boolean;\n screenReaderMode?: boolean;\n scrollback?: number;\n scrollOnUserInput?: boolean;\n scrollSensitivity?: number;\n smoothScrollDuration?: number;\n tabStopWidth?: number;\n theme?: ITheme;\n windowsPty?: IWindowsPty;\n windowOptions?: IWindowOptions;\n wordSeparator?: string;\n quirks?: ITerminalQuirks;\n scrollbar?: IScrollbarOptions;\n scrollOnEraseInDisplay?: boolean;\n vtExtensions?: IVtExtensions;\n\n [key: string]: any;\n termName: string;\n}\n\nexport interface ITheme {\n foreground?: string;\n background?: string;\n cursor?: string;\n cursorAccent?: string;\n selectionForeground?: string;\n selectionBackground?: string;\n selectionInactiveBackground?: string;\n scrollbarSliderBackground?: string;\n scrollbarSliderHoverBackground?: string;\n scrollbarSliderActiveBackground?: string;\n overviewRulerBorder?: string;\n black?: string;\n red?: string;\n green?: string;\n yellow?: string;\n blue?: string;\n magenta?: string;\n cyan?: string;\n white?: string;\n brightBlack?: string;\n brightRed?: string;\n brightGreen?: string;\n brightYellow?: string;\n brightBlue?: string;\n brightMagenta?: string;\n brightCyan?: string;\n brightWhite?: string;\n extendedAnsi?: string[];\n}\n\nexport interface ITerminalQuirks {\n allowSetCursorBlink?: boolean;\n}\n\nexport interface IScrollbarOptions {\n showScrollbar?: boolean;\n showArrows?: boolean;\n width?: number;\n overviewRuler?: IOverviewRulerOptions;\n}\n\nexport interface IVtExtensions {\n kittyKeyboard?: boolean;\n kittySgrBoldFaintControl?: boolean;\n win32InputMode?: boolean;\n colorSchemeQuery?: boolean;\n}\n\nexport const IOscLinkService = createDecorator('OscLinkService');\nexport interface IOscLinkService {\n serviceBrand: undefined;\n /**\n * Registers a link to the service, returning the link ID. The link data is managed by this\n * service and will be freed when this current cursor position is trimmed off the buffer.\n */\n registerLink(linkData: IOscLinkData): number;\n /**\n * Adds a line to a link if needed.\n */\n addLineToLink(linkId: number, y: number): void;\n /** Get the link data associated with a link ID. */\n getLinkData(linkId: number): IOscLinkData | undefined;\n}\n\n/*\n * Width and Grapheme_Cluster_Break properties of a character as a bit mask.\n *\n * bit 0: shouldJoin - should combine with preceding character.\n * bit 1..2: wcwidth - see UnicodeCharWidth.\n * bit 3..31: class of character (currently only 4 bits are used).\n * This is used to determined grapheme clustering - i.e. which codepoints\n * are to be combined into a single compound character.\n *\n * Use the UnicodeService static function createPropertyValue to create a\n * UnicodeCharProperties; use extractShouldJoin, extractWidth, and\n * extractCharKind to extract the components.\n */\nexport type UnicodeCharProperties = number;\n\n/**\n * Width in columns of a character.\n * In a CJK context, \"half-width\" characters (such as Latin) are width 1,\n * while \"full-width\" characters (such as Kanji) are 2 columns wide.\n * Combining characters (such as accents) are width 0.\n */\nexport type UnicodeCharWidth = 0 | 1 | 2;\n\nexport const IUnicodeService = createDecorator('UnicodeService');\nexport interface IUnicodeService {\n serviceBrand: undefined;\n /** Register a Unicode version provider. */\n register(provider: IUnicodeVersionProvider): void;\n /** Registered Unicode versions. */\n readonly versions: string[];\n /** Currently active version. */\n activeVersion: string;\n /** Event triggered when the active version changes. */\n readonly onChange: IEvent;\n\n /**\n * Unicode version dependent\n */\n wcwidth(codepoint: number): UnicodeCharWidth;\n getStringCellWidth(s: string): number;\n /**\n * Return character width and type for grapheme clustering.\n * If preceding != 0, it is the return code from the previous character;\n * in that case the result specifies if the characters should be joined.\n */\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport interface IUnicodeVersionProvider {\n readonly version: string;\n wcwidth(ucs: number): UnicodeCharWidth;\n charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;\n}\n\nexport const IDecorationService = createDecorator('DecorationService');\nexport interface IDecorationService extends IDisposable {\n serviceBrand: undefined;\n readonly decorations: IterableIterator;\n readonly onDecorationRegistered: IEvent;\n readonly onDecorationRemoved: IEvent;\n registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;\n reset(): void;\n /**\n * Trigger a callback over the decoration at a cell (in no particular order). This uses a callback\n * instead of an iterator as it's typically used in hot code paths.\n */\n forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;\n}\nexport interface IInternalDecoration extends IDecoration {\n readonly options: IDecorationOptions;\n readonly backgroundColorRGB: IColor | undefined;\n readonly foregroundColorRGB: IColor | undefined;\n readonly onRenderEmitter: Emitter;\n /** @internal Start line for line-index removal; kept in sync on buffer line shifts. */\n _indexedStartLine: number;\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILink } from './Types';\nimport { ILinkProvider } from './services/Services';\nimport { CellData } from '../common/buffer/CellData';\nimport { IBufferLine } from '../common/buffer/Types';\nimport { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';\n\nexport class OscLinkProvider implements ILinkProvider {\n private readonly _workCell = new CellData();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IOscLinkService private readonly _oscLinkService: IOscLinkService\n ) {\n }\n\n public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {\n const line = this._bufferService.buffer.lines.get(y - 1);\n if (!line) {\n callback(undefined);\n return;\n }\n\n const result: ILink[] = [];\n const linkHandler = this._optionsService.rawOptions.linkHandler;\n const cell = this._workCell;\n const lineLength = line.getTrimmedLength();\n let currentLinkId = -1;\n let currentStart = -1;\n let finishLink = false;\n for (let x = 0; x < lineLength; x++) {\n // Minor optimization, only check for content if there isn't a link in case the link ends with\n // a null cell\n if (currentStart === -1 && !line.hasContent(x)) {\n continue;\n }\n\n line.loadCell(x, cell);\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n if (currentStart === -1) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n continue;\n } else {\n finishLink = cell.extended.urlId !== currentLinkId;\n }\n } else {\n if (currentStart !== -1) {\n finishLink = true;\n }\n }\n\n if (finishLink || (currentStart !== -1 && x === lineLength - 1)) {\n const text = this._oscLinkService.getLinkData(currentLinkId)?.uri;\n if (text) {\n const endX = x + (!finishLink && x === lineLength - 1 ? 1 : 0);\n const range = this._getRangeWithLineWrap(y, currentStart, endX, currentLinkId);\n let ignoreLink = false;\n if (!linkHandler?.allowNonHttpProtocols) {\n try {\n const parsed = new URL(text);\n if (!['http:', 'https:'].includes(parsed.protocol)) {\n ignoreLink = true;\n }\n } catch {\n // Ignore invalid URLs to prevent unexpected behaviors\n ignoreLink = true;\n }\n }\n\n if (!ignoreLink) {\n // OSC links always use underline and pointer decorations\n result.push({\n text,\n range,\n activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)),\n hover: (e, text) => linkHandler?.hover?.(e, text, range),\n leave: (e, text) => linkHandler?.leave?.(e, text, range)\n });\n }\n }\n finishLink = false;\n\n // Clear link or start a new link if one starts immediately\n if (cell.hasExtendedAttrs() && cell.extended.urlId) {\n currentStart = x;\n currentLinkId = cell.extended.urlId;\n } else {\n currentStart = -1;\n currentLinkId = -1;\n }\n }\n }\n\n // TODO: Handle fetching and returning other link ranges to underline other links with the same\n // id\n callback(result);\n }\n\n /**\n * Expand a single-line OSC 8 range to a contiguous wrapped range for the same link id.\n */\n private _getRangeWithLineWrap(y: number, startX: number, endX: number, linkId: number): IBufferRange {\n let startY = y;\n let finalStartX = startX;\n let endY = y;\n let finalEndX = endX;\n\n // Expand upward only when this segment starts at column 0 and the current line is wrapped.\n while (finalStartX === 0) {\n const currentLine = this._bufferService.buffer.lines.get(startY - 1);\n if (!currentLine?.isWrapped) {\n break;\n }\n const previousLine = this._bufferService.buffer.lines.get(startY - 2);\n if (!previousLine) {\n break;\n }\n const previousLineLength = previousLine.getTrimmedLength();\n if (previousLineLength === 0 || !this._hasUrlId(previousLine, previousLineLength - 1, linkId)) {\n break;\n }\n let previousStartX = previousLineLength - 1;\n while (previousStartX > 0 && this._hasUrlId(previousLine, previousStartX - 1, linkId)) {\n previousStartX--;\n }\n startY--;\n finalStartX = previousStartX;\n }\n\n // Expand downward only when this segment reaches trimmed EOL and the next line is wrapped.\n while (true) {\n const currentLine = this._bufferService.buffer.lines.get(endY - 1);\n if (!currentLine) {\n break;\n }\n const currentLineLength = currentLine.getTrimmedLength();\n if (finalEndX !== currentLineLength) {\n break;\n }\n const nextLine = this._bufferService.buffer.lines.get(endY);\n if (!nextLine?.isWrapped) {\n break;\n }\n const nextLineLength = nextLine.getTrimmedLength();\n if (nextLineLength === 0 || !this._hasUrlId(nextLine, 0, linkId)) {\n break;\n }\n let nextEndX = 1;\n while (nextEndX < nextLineLength && this._hasUrlId(nextLine, nextEndX, linkId)) {\n nextEndX++;\n }\n endY++;\n finalEndX = nextEndX;\n }\n\n // IBufferRange uses 1-based coordinates.\n return {\n start: {\n x: finalStartX + 1,\n y: startY\n },\n end: {\n x: finalEndX,\n y: endY\n }\n };\n }\n\n private _hasUrlId(line: IBufferLine, x: number, linkId: number): boolean {\n const cell = this._workCell;\n line.loadCell(x, cell);\n return !!cell.hasExtendedAttrs() && cell.extended.urlId === linkId;\n }\n}\n\nfunction defaultActivate(e: MouseEvent, uri: string): void {\n const answer = confirm(`Do you want to navigate to ${uri}?\\n\\nWARNING: This link could potentially be dangerous`);\n if (answer) {\n const newWindow = window.open();\n if (newWindow) {\n try {\n newWindow.opener = null;\n } catch {\n // no-op, Electron can throw\n }\n newWindow.location.href = uri;\n } else {\n console.warn('Opening link blocked as opener could not be cleared');\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { IColorSet, ILink, ReadonlyColorSet } from '../Types';\nimport { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { createDecorator } from '../../common/services/ServiceRegistry';\nimport { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';\nimport type { IEvent } from '../../common/Event';\n\nexport const ICharSizeService = createDecorator('CharSizeService');\nexport interface ICharSizeService {\n serviceBrand: undefined;\n\n readonly width: number;\n readonly height: number;\n readonly hasValidSize: boolean;\n\n readonly onCharSizeChange: IEvent;\n\n measure(): void;\n}\n\nexport const ICoreBrowserService = createDecorator('CoreBrowserService');\nexport interface ICoreBrowserService {\n serviceBrand: undefined;\n\n readonly isFocused: boolean;\n\n readonly onDprChange: IEvent;\n readonly onWindowChange: IEvent;\n\n /**\n * Gets or sets the parent window that the terminal is rendered into. DOM and rendering APIs (e.g.\n * requestAnimationFrame) should be invoked in the context of this window. This should be set when\n * the window hosting the xterm.js instance changes.\n */\n window: Window & typeof globalThis;\n /**\n * The document of the primary window to be used to create elements when working with multiple\n * windows. This is defined by the documentOverride setting.\n */\n readonly mainDocument: Document;\n /**\n * Helper for getting the devicePixelRatio of the parent window.\n */\n readonly dpr: number;\n}\n\nexport const IMouseCoordsService = createDecorator('MouseCoordsService');\nexport interface IMouseCoordsService {\n serviceBrand: undefined;\n\n getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;\n getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined;\n}\n\nexport const IMouseService = createDecorator('MouseService');\nexport interface IMouseService {\n serviceBrand: undefined;\n\n bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void;\n reset(): void;\n}\nexport interface IMouseServiceTarget {\n element: HTMLElement;\n screenElement: HTMLElement;\n document: Document;\n handleTouchScroll?(amount: number): void;\n}\n\nexport const IRenderService = createDecorator('RenderService');\nexport interface IRenderService extends IDisposable {\n serviceBrand: undefined;\n\n onDimensionsChange: IEvent;\n /**\n * Fires when buffer changes are rendered. This does not fire when only cursor\n * or selections are rendered.\n */\n onRenderedViewportChange: IEvent<{ start: number, end: number }>;\n /**\n * Fires on render\n */\n onRender: IEvent<{ start: number, end: number }>;\n onRefreshRequest: IEvent<{ start: number, end: number }>;\n\n dimensions: IRenderDimensions;\n\n addRefreshCallback(callback: FrameRequestCallback): number;\n\n refreshRows(start: number, end: number, sync?: boolean): void;\n clearTextureAtlas(): void;\n resize(cols: number, rows: number): void;\n hasRenderer(): boolean;\n setRenderer(renderer: IRenderer): void;\n handleDevicePixelRatioChange(): void;\n handleResize(cols: number, rows: number): void;\n handleCharSizeChanged(): void;\n handleBlur(): void;\n handleFocus(): void;\n handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;\n handleCursorMove(): void;\n clear(): void;\n}\n\nexport const ISelectionService = createDecorator('SelectionService');\nexport interface ISelectionService {\n serviceBrand: undefined;\n\n readonly selectionText: string;\n readonly hasSelection: boolean;\n readonly selectionStart: [number, number] | undefined;\n readonly selectionEnd: [number, number] | undefined;\n\n readonly onLinuxMouseSelection: IEvent;\n readonly onRequestRedraw: IEvent;\n readonly onRequestScrollLines: IEvent;\n readonly onSelectionChange: IEvent;\n\n disable(): void;\n enable(): void;\n reset(): void;\n setSelection(row: number, col: number, length: number): void;\n selectAll(): void;\n selectLines(start: number, end: number): void;\n clearSelection(): void;\n rightClickSelect(event: MouseEvent): void;\n shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;\n shouldForceSelection(event: MouseEvent): boolean;\n refresh(isLinuxMouseSelection?: boolean): void;\n handleMouseDown(event: MouseEvent): void;\n isCellInSelection(x: number, y: number): boolean;\n}\n\nexport const ICharacterJoinerService = createDecorator('CharacterJoinerService');\nexport interface ICharacterJoinerService {\n serviceBrand: undefined;\n\n register(handler: (text: string) => [number, number][]): number;\n deregister(joinerId: number): boolean;\n getJoinedCharacters(row: number): [number, number][];\n}\n\nexport const IThemeService = createDecorator('ThemeService');\nexport interface IThemeService {\n serviceBrand: undefined;\n\n readonly colors: ReadonlyColorSet;\n\n readonly onChangeColors: IEvent;\n\n restoreColor(slot?: AllColorIndex): void;\n /**\n * Allows external modifying of colors in the theme, this is used instead of {@link colors} to\n * prevent accidental writes.\n */\n modifyColors(callback: (colors: IColorSet) => void): void;\n}\n\n\nexport const ILinkProviderService = createDecorator('LinkProviderService');\nexport interface ILinkProviderService extends IDisposable {\n serviceBrand: undefined;\n readonly linkProviders: ReadonlyArray;\n registerLinkProvider(linkProvider: ILinkProvider): IDisposable;\n}\nexport interface ILinkProvider {\n provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void;\n}\n\nexport const IKeyboardService = createDecorator('KeyboardService');\nexport interface IKeyboardService {\n serviceBrand: undefined;\n evaluateKeyDown(event: KeyboardEvent): IKeyboardResult;\n evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined;\n readonly useKitty: boolean;\n readonly useWin32InputMode: boolean;\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal lifecycle utilities for xterm.js core.\n * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.\n */\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport function toDisposable(fn: () => void): IDisposable {\n return { dispose: fn };\n}\n\nexport function dispose(disposable: T): T;\nexport function dispose(disposable: T | undefined): T | undefined;\nexport function dispose(disposables: T[]): T[];\nexport function dispose(arg: T | T[] | undefined): T | T[] | undefined {\n if (!arg) {\n return arg;\n }\n if (Array.isArray(arg)) {\n for (const d of arg) {\n d.dispose();\n }\n return [];\n }\n arg.dispose();\n return arg;\n}\n\nexport function combinedDisposable(...disposables: IDisposable[]): IDisposable {\n return toDisposable(() => dispose(disposables));\n}\n\nexport class DisposableStore implements IDisposable {\n private readonly _disposables = new Set();\n private _isDisposed = false;\n\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n public add(o: T): T {\n if (this._isDisposed) {\n o.dispose();\n } else {\n this._disposables.add(o);\n }\n return o;\n }\n\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n\n public clear(): void {\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.clear();\n }\n}\n\nexport abstract class Disposable implements IDisposable {\n public static readonly None: IDisposable = Object.freeze({ dispose() { } });\n\n protected readonly _store = new DisposableStore();\n\n public dispose(): void {\n this._store.dispose();\n }\n\n protected _register(o: T): T {\n return this._store.add(o);\n }\n}\n\nexport class MutableDisposable implements IDisposable {\n private _value: T | undefined;\n private _isDisposed = false;\n\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal async helpers for xterm.js core.\n */\n\nimport { DisposableStore, IDisposable, toDisposable } from './Lifecycle';\n\nexport function timeout(millis: number): Promise {\n return new Promise(resolve => setTimeout(resolve, millis));\n}\n\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed\n * automatically.\n */\nexport function disposableTimeout(handler: () => void, timeout = 0, store?: DisposableStore): IDisposable {\n const timer = setTimeout(() => {\n handler();\n if (store) {\n disposable.dispose();\n }\n }, timeout);\n const disposable = toDisposable(() => {\n clearTimeout(timer);\n });\n store?.add(disposable);\n return disposable;\n}\n\nexport class TimeoutTimer implements IDisposable {\n private _token: any = -1;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n\n public cancelAndSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed TimeoutTimer');\n }\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n\n public setIfNotSet(runner: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Calling setIfNotSet on a disposed TimeoutTimer');\n }\n if (this._token !== -1) {\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\n\n/**\n * Schedules a single runner on the microtask queue. Unlike {@link TimeoutTimer}, a scheduled\n * microtask cannot be unqueued; {@link cancel} prevents the runner from executing if it has not\n * run yet.\n */\nexport class MicrotaskTimer implements IDisposable {\n private _isScheduled = false;\n private _isDisposed = false;\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n\n public cancel(): void {\n this._isScheduled = false;\n }\n\n public set(runner: () => void): void {\n if (this._isDisposed) {\n throw new Error('Calling set on a disposed MicrotaskTimer');\n }\n if (this._isScheduled) {\n return;\n }\n this._isScheduled = true;\n queueMicrotask(() => {\n if (!this._isScheduled) {\n return;\n }\n this._isScheduled = false;\n runner();\n });\n }\n}\n\nexport class IntervalTimer implements IDisposable {\n private _disposable: IDisposable | undefined;\n private _isDisposed = false;\n\n public cancel(): void {\n this._disposable?.dispose();\n this._disposable = undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, context: Window | typeof globalThis = globalThis): void {\n if (this._isDisposed) {\n throw new Error('Calling cancelAndSet on a disposed IntervalTimer');\n }\n this.cancel();\n const handle = context.setInterval(() => {\n runner();\n }, interval);\n this._disposable = {\n dispose: () => {\n context.clearInterval(handle as any);\n this._disposable = undefined;\n }\n };\n }\n\n public dispose(): void {\n this.cancel();\n this._isDisposed = true;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal DOM helpers for xterm.js browser code.\n */\n\nimport { IntervalTimer } from '../common/Async';\nimport { IDisposable } from '../common/Lifecycle';\n\nexport function getWindow(e: Node | UIEvent | undefined | null): Window {\n const candidateNode = e as Node | undefined | null;\n if (candidateNode?.ownerDocument?.defaultView) {\n return candidateNode.ownerDocument.defaultView;\n }\n\n const candidateEvent = e as UIEvent | undefined | null;\n if (candidateEvent?.view) {\n return candidateEvent.view;\n }\n\n return window;\n}\n\nclass DomListener implements IDisposable {\n private _handler: ((e: any) => void) | null;\n private _node: EventTarget | null;\n private readonly _type: string;\n private readonly _options: boolean | AddEventListenerOptions | undefined;\n\n constructor(node: EventTarget, type: string, handler: (e: any) => void, options?: boolean | AddEventListenerOptions) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = options;\n node.addEventListener(type, handler, options);\n }\n\n public dispose(): void {\n if (!this._node || !this._handler) {\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n this._node = null;\n this._handler = null;\n }\n}\n\nexport function addDisposableListener(node: EventTarget, type: K, handler: (event: GlobalEventHandlersEventMap[K]) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, options: AddEventListenerOptions): IDisposable;\nexport function addDisposableListener(node: EventTarget, type: string, handler: (event: any) => void, useCaptureOrOptions?: boolean | AddEventListenerOptions): IDisposable {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\n\nexport function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable {\n return addDisposableListener(node, type, handler, useCapture);\n}\n\nexport const eventType = {\n CLICK: 'click',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_LEAVE: 'mouseleave',\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n INPUT: 'input',\n BLUR: 'blur',\n FOCUS: 'focus',\n CHANGE: 'change',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n MOUSE_WHEEL: 'wheel',\n WHEEL: 'wheel'\n} as const;\n\nexport function getDomNodePagePosition(domNode: HTMLElement): { left: number, top: number, width: number, height: number } {\n const bb = domNode.getBoundingClientRect();\n const win = getWindow(domNode);\n return {\n left: bb.left + win.scrollX,\n top: bb.top + win.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n\nclass AnimationFrameQueueItem implements IDisposable {\n private _canceled = false;\n\n constructor(private readonly _runner: () => void, public priority: number) {\n }\n\n public dispose(): void {\n this._canceled = true;\n }\n\n public execute(): void {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n } catch (e) {\n console.error(e);\n }\n }\n\n public static sort(a: AnimationFrameQueueItem, b: AnimationFrameQueueItem): number {\n return b.priority - a.priority;\n }\n}\n\ninterface IWindowAnimationFrameState {\n next: AnimationFrameQueueItem[];\n current: AnimationFrameQueueItem[];\n animFrameRequested: boolean;\n inAnimationFrameRunner: boolean;\n}\n\nconst animationFrameState = new Map();\n\nfunction getAnimationFrameState(targetWindow: Window): IWindowAnimationFrameState {\n let state = animationFrameState.get(targetWindow);\n if (!state) {\n state = {\n next: [],\n current: [],\n animFrameRequested: false,\n inAnimationFrameRunner: false\n };\n animationFrameState.set(targetWindow, state);\n }\n return state;\n}\n\nfunction animationFrameRunner(targetWindow: Window): void {\n const state = getAnimationFrameState(targetWindow);\n state.animFrameRequested = false;\n\n state.current = state.next;\n state.next = [];\n\n state.inAnimationFrameRunner = true;\n while (state.current.length > 0) {\n state.current.sort(AnimationFrameQueueItem.sort);\n const top = state.current.shift()!;\n top.execute();\n }\n state.inAnimationFrameRunner = false;\n}\n\nexport function scheduleAtNextAnimationFrame(targetWindow: Window, runner: () => void, priority: number = 0): IDisposable {\n const state = getAnimationFrameState(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n state.next.push(item);\n\n if (!state.animFrameRequested) {\n state.animFrameRequested = true;\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindow));\n }\n\n return item;\n}\n\nexport class WindowIntervalTimer extends IntervalTimer {\n private readonly _defaultTarget?: Window;\n\n constructor(node?: Node) {\n super();\n this._defaultTarget = node ? getWindow(node) : undefined;\n }\n\n public cancelAndSet(runner: () => void, interval: number, targetWindow?: Window): void {\n super.cancelAndSet(runner, interval, targetWindow ?? this._defaultTarget ?? window);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport class FastDomNode {\n\n private _width: string = '';\n private _height: string = '';\n private _top: string = '';\n private _left: string = '';\n private _bottom: string = '';\n private _right: string = '';\n private _className: string = '';\n private _position: string = '';\n private _layerHint: boolean = false;\n private _contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint' = 'none';\n\n constructor(\n public readonly domNode: T\n ) { }\n\n public setWidth(_width: number | string): void {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n\n public setHeight(_height: number | string): void {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n\n public setTop(_top: number | string): void {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n\n public setLeft(_left: number | string): void {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n\n public setBottom(_bottom: number | string): void {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n\n public setRight(_right: number | string): void {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n\n public setClassName(className: string): void {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n\n public toggleClassName(className: string, shouldHaveIt?: boolean): void {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n\n public setPosition(position: string): void {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n\n public setLayerHinting(layerHint: boolean): void {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n if (layerHint) {\n this.domNode.style.transform = 'translate3d(0px, 0px, 0px)';\n } else {\n this.domNode.style.transform = '';\n }\n }\n\n public setContain(contain: 'none' | 'strict' | 'content' | 'size' | 'layout' | 'style' | 'paint'): void {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n\n public setAttribute(name: string, value: string): void {\n this.domNode.setAttribute(name, value);\n }\n\n}\n\nfunction numberAsPixels(value: number | string): string {\n return (typeof value === 'number' ? `${value}px` : value);\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\ndeclare const process: unknown;\n\n// navigator.userAgent is also checked here because bundling with the process module can cause\n// issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is\n// \"Node.js/\".\nexport const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;\nconst userAgent = (isNode) ? 'node' : navigator.userAgent;\nconst platform = (isNode) ? 'node' : navigator.platform;\n\nexport const isFirefox = userAgent.includes('Firefox');\nexport const isChrome = userAgent.includes('Chrome');\nexport const isLegacyEdge = userAgent.includes('Edge');\nexport const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);\n\ninterface IZoomWindow {\n devicePixelRatio?: number;\n}\n\nexport function getZoomFactor(_targetWindow: IZoomWindow): number {\n return 1;\n}\nexport function getSafariVersion(): number {\n if (!isSafari) {\n return 0;\n }\n const majorVersion = userAgent.match(/Version\\/(\\d+)/);\n if (majorVersion === null || majorVersion.length < 2) {\n return 0;\n }\n return parseInt(majorVersion[1], 10);\n}\n\n// Find the user's platform. We use this to interpret the meta key\n// and ISO third level shifts.\n// http://stackoverflow.com/q/19877924/577598\nexport const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);\nexport const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);\nexport const isLinux = platform.indexOf('Linux') >= 0;\n// Note that when this is true, isLinux will also be true.\nexport const isChromeOS = /\\bCrOS\\b/.test(userAgent);\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as platform from '../../common/Platform';\n\ninterface IWindowChainElement {\n readonly window: WeakRef;\n readonly iframeElement: Element | null;\n}\n\nconst sameOriginWindowChainCache = new WeakMap();\n\nfunction getParentWindowIfSameOrigin(w: Window): Window | null {\n if (!w.parent || w.parent === w) {\n return null;\n }\n\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n } catch {\n return null;\n }\n\n return w.parent;\n}\n\nclass IframeUtils {\n\n private static _getSameOriginWindowChain(targetWindow: Window): IWindowChainElement[] {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w: Window | null = targetWindow;\n let parent: Window | null;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement ?? null\n });\n } else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n\n public static getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: Window | null): { top: number, left: number } {\n\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n\n let top = 0;\n let left = 0;\n\n const windowChain = this._getSameOriginWindowChain(childWindow);\n\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += windowInChain?.scrollY ?? 0;\n left += windowInChain?.scrollX ?? 0;\n\n if (windowInChain === ancestorWindow) {\n break;\n }\n\n if (!windowChainEl.iframeElement) {\n break;\n }\n\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n\n return {\n top: top,\n left: left\n };\n }\n}\n\nexport interface IMouseEvent {\n readonly browserEvent: MouseEvent;\n readonly leftButton: boolean;\n readonly middleButton: boolean;\n readonly rightButton: boolean;\n readonly buttons: number;\n readonly target: HTMLElement;\n readonly detail: number;\n readonly posx: number;\n readonly posy: number;\n readonly ctrlKey: boolean;\n readonly shiftKey: boolean;\n readonly altKey: boolean;\n readonly metaKey: boolean;\n readonly timestamp: number;\n\n preventDefault(): void;\n stopPropagation(): void;\n}\n\nexport class StandardMouseEvent implements IMouseEvent {\n\n public readonly browserEvent: MouseEvent;\n\n public readonly leftButton: boolean;\n public readonly middleButton: boolean;\n public readonly rightButton: boolean;\n public readonly buttons: number;\n public readonly target: HTMLElement;\n public detail: number;\n public readonly posx: number;\n public readonly posy: number;\n public readonly ctrlKey: boolean;\n public readonly shiftKey: boolean;\n public readonly altKey: boolean;\n public readonly metaKey: boolean;\n public readonly timestamp: number;\n\n constructor(targetWindow: Window, e: MouseEvent) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n\n this.target = e.target as HTMLElement;\n\n this.detail = e.detail ?? 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n } else {\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n\n public preventDefault(): void {\n this.browserEvent.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent.stopPropagation();\n }\n}\n\nexport interface IMouseWheelEvent extends MouseEvent {\n readonly wheelDelta: number;\n readonly wheelDeltaX: number;\n readonly wheelDeltaY: number;\n\n readonly deltaX: number;\n readonly deltaY: number;\n readonly deltaZ: number;\n readonly deltaMode: number;\n}\n\ninterface IWebKitMouseWheelEvent {\n wheelDeltaY: number;\n wheelDeltaX: number;\n}\n\ninterface IGeckoMouseWheelEvent {\n HORIZONTAL_AXIS: number;\n VERTICAL_AXIS: number;\n axis: number;\n detail: number;\n}\n\nexport class StandardWheelEvent {\n\n public readonly browserEvent: IMouseWheelEvent | null;\n public readonly deltaY: number;\n public readonly deltaX: number;\n public readonly target: Node | null;\n\n constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {\n\n this.browserEvent = e ?? null;\n this.target = e ? (e.target ?? (e as any).targetNode ?? e.srcElement ?? null) : null;\n\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n\n let shouldFactorDPR: boolean = false;\n if (platform.isChrome) {\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1], 10) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n\n if (e) {\n const e1 = e as IWebKitMouseWheelEvent as any;\n const e2 = e as unknown as IGeckoMouseWheelEvent;\n const devicePixelRatio = e.view?.devicePixelRatio ?? 1;\n\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n } else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n } else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaY = -e.deltaY / 3;\n } else {\n this.deltaY = -e.deltaY;\n }\n } else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (platform.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n } else if (shouldFactorDPR) {\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n } else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n } else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n } else if (e.type === 'wheel') {\n const ev = e as unknown as WheelEvent;\n\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n if (platform.isFirefox && !platform.isMac) {\n this.deltaX = -e.deltaX / 3;\n } else {\n this.deltaX = -e.deltaX;\n }\n } else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n } else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n\n public preventDefault(): void {\n this.browserEvent?.preventDefault();\n }\n\n public stopPropagation(): void {\n this.browserEvent?.stopPropagation();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';\n\ntype PointerMoveCallback = (event: PointerEvent) => void;\ntype OnStopCallback = () => void;\n\nexport class GlobalPointerMoveMonitor implements IDisposable {\n\n private readonly _hooks = new DisposableStore();\n private _pointerMoveCallback: PointerMoveCallback | null = null;\n private _onStopCallback: OnStopCallback | null = null;\n\n public dispose(): void {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n\n public stopMonitoring(invokeStopCallback: boolean): void {\n if (!this.isMonitoring()) {\n return;\n }\n\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n\n if (invokeStopCallback && onStopCallback) {\n onStopCallback();\n }\n }\n\n public isMonitoring(): boolean {\n return !!this._pointerMoveCallback;\n }\n\n public startMonitoring(\n initialElement: Element,\n pointerId: number,\n initialButtons: number,\n pointerMoveCallback: PointerMoveCallback,\n onStopCallback: OnStopCallback\n ): void {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n\n let eventSource: Element | Window = initialElement;\n\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n } catch {\n // ignore\n }\n }));\n } catch {\n eventSource = dom.getWindow(initialElement);\n }\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_MOVE,\n (e) => {\n if (e.buttons !== initialButtons) {\n this.stopMonitoring(true);\n return;\n }\n\n e.preventDefault();\n this._pointerMoveCallback!(e);\n }\n ));\n\n this._hooks.add(dom.addDisposableListener(\n eventSource,\n dom.eventType.POINTER_UP,\n (e: PointerEvent) => this.stopMonitoring(true)\n ));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { IMouseEvent, StandardMouseEvent } from './mouseEvent';\nimport { Disposable } from '../../common/Lifecycle';\n\nexport abstract class Widget extends Disposable {\n\n protected _onclick(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.CLICK, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseover(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n\n protected _onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {\n this._register(dom.addDisposableListener(domNode, dom.eventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport * as dom from '../Dom';\n\nexport interface IScrollbarArrowOptions {\n handleActivate: () => void;\n className: string;\n // icon: ThemeIcon;\n\n bgWidth: number;\n bgHeight: number;\n\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport class ScrollbarArrow extends Widget {\n\n private _handleActivate: () => void;\n public bgDomNode: HTMLElement;\n public domNode: HTMLElement;\n private _pointerdownRepeatTimer: dom.WindowIntervalTimer;\n private _pointerdownScheduleRepeatTimer: TimeoutTimer;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n constructor(opts: IScrollbarArrowOptions) {\n super();\n this._handleActivate = opts.handleActivate;\n\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'xterm-arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n // this.domNode.classList.add(...ThemeIcon.asClassNameArray(opts.icon));\n\n this.domNode.style.position = 'absolute';\n const arrowSize = Math.min(opts.bgWidth, opts.bgHeight);\n this.domNode.style.width = arrowSize + 'px';\n this.domNode.style.height = arrowSize + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n this._register(dom.addStandardDisposableListener(this.domNode, dom.eventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n\n this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n\n private _arrowPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const scheduleRepeater = (): void => {\n this._pointerdownRepeatTimer.cancelAndSet(() => this._handleActivate(), 1000 / 24, dom.getWindow(e));\n };\n\n this._handleActivate();\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData) => { /* Intentional empty */ },\n () => {\n this._pointerdownRepeatTimer.cancel();\n this._pointerdownScheduleRepeatTimer.cancel();\n }\n );\n\n e.preventDefault();\n }\n}\n", "/**\n * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Minimal event utilities for xterm.js core.\n * Simplified from VS Code's event.ts - no leak detection/profiling.\n */\n\nimport { IDisposable, DisposableStore, toDisposable } from './Lifecycle';\n\nexport interface IEvent {\n (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;\n}\n\nexport class Emitter {\n private _listeners: { fn: (e: T) => any, thisArgs: any }[] = [];\n private _disposed = false;\n private _event: IEvent | undefined;\n\n public get event(): IEvent {\n if (this._event) {\n return this._event;\n }\n this._event = (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n if (this._disposed) {\n return toDisposable(() => {});\n }\n\n const entry = { fn: listener, thisArgs };\n this._listeners = this._listeners.slice();\n this._listeners.push(entry);\n\n const result = toDisposable(() => {\n const idx = this._listeners.indexOf(entry);\n if (idx !== -1) {\n this._listeners = this._listeners.slice();\n this._listeners.splice(idx, 1);\n }\n });\n\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(result);\n } else {\n disposables.add(result);\n }\n }\n\n return result;\n };\n return this._event;\n }\n\n public fire(event: T): void {\n if (this._disposed || !this._listeners.length) {\n return;\n }\n if (this._listeners.length === 1) {\n this._listeners[0].fn.call(this._listeners[0].thisArgs, event);\n return;\n }\n const listeners = this._listeners;\n for (let i = 0, len = listeners.length; i < len; ++i) {\n listeners[i].fn.call(listeners[i].thisArgs, event);\n }\n }\n\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners.length = 0;\n }\n}\n\nexport namespace EventUtils {\n export function forward(from: IEvent, to: Emitter): IDisposable {\n return from(e => to.fire(e));\n }\n\n export function map(event: IEvent, map: (i: I) => O): IEvent {\n return (listener: (e: O) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n return event(i => listener.call(thisArgs, map(i)), undefined, disposables);\n };\n }\n\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent;\n export function any(...events: IEvent[]): IEvent {\n return (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore) => {\n const store = new DisposableStore();\n for (const event of events) {\n store.add(event(e => listener.call(thisArgs, e)));\n }\n if (disposables) {\n if (Array.isArray(disposables)) {\n disposables.push(store);\n } else {\n disposables.add(store);\n }\n }\n return store;\n };\n }\n\n export function runAndSubscribe(event: IEvent, handler: (e: T) => void, initial: T): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void): IDisposable;\n export function runAndSubscribe(event: IEvent, handler: (e: T | undefined) => void, initial?: T): IDisposable {\n handler(initial);\n return event(e => handler(e));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Emitter, IEvent } from '../../common/Event';\nimport { Disposable, IDisposable } from '../../common/Lifecycle';\n\nexport const enum ScrollbarVisibility {\n AUTO = 1,\n HIDDEN = 2,\n VISIBLE = 3\n}\n\nexport interface IScrollEvent {\n inSmoothScrolling: boolean;\n\n oldWidth: number;\n oldScrollWidth: number;\n oldScrollLeft: number;\n\n width: number;\n scrollWidth: number;\n scrollLeft: number;\n\n oldHeight: number;\n oldScrollHeight: number;\n oldScrollTop: number;\n\n height: number;\n scrollHeight: number;\n scrollTop: number;\n\n widthChanged: boolean;\n scrollWidthChanged: boolean;\n scrollLeftChanged: boolean;\n\n heightChanged: boolean;\n scrollHeightChanged: boolean;\n scrollTopChanged: boolean;\n}\n\nexport class ScrollState implements IScrollDimensions, IScrollPosition {\n private _scrollStateBrand: void = undefined;\n\n public readonly rawScrollLeft: number;\n public readonly rawScrollTop: number;\n\n public readonly width: number;\n public readonly scrollWidth: number;\n public readonly scrollLeft: number;\n public readonly height: number;\n public readonly scrollHeight: number;\n public readonly scrollTop: number;\n\n constructor(\n private readonly _forceIntegerValues: boolean,\n width: number,\n scrollWidth: number,\n scrollLeft: number,\n height: number,\n scrollHeight: number,\n scrollTop: number\n ) {\n if (this._forceIntegerValues) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n }\n\n this.rawScrollLeft = scrollLeft;\n this.rawScrollTop = scrollTop;\n\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n\n public equals(other: ScrollState): boolean {\n return (\n this.rawScrollLeft === other.rawScrollLeft\n\t\t\t&& this.rawScrollTop === other.rawScrollTop\n\t\t\t&& this.width === other.width\n\t\t\t&& this.scrollWidth === other.scrollWidth\n\t\t\t&& this.scrollLeft === other.scrollLeft\n\t\t\t&& this.height === other.height\n\t\t\t&& this.scrollHeight === other.scrollHeight\n\t\t\t&& this.scrollTop === other.scrollTop\n );\n }\n\n public withScrollDimensions(update: INewScrollDimensions, useRawScrollPositions: boolean): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n (typeof update.width !== 'undefined' ? update.width : this.width),\n (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth),\n useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft,\n (typeof update.height !== 'undefined' ? update.height : this.height),\n (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight),\n useRawScrollPositions ? this.rawScrollTop : this.scrollTop\n );\n }\n\n public withScrollPosition(update: INewScrollPosition): ScrollState {\n return new ScrollState(\n this._forceIntegerValues,\n this.width,\n this.scrollWidth,\n (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft),\n this.height,\n this.scrollHeight,\n (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop)\n );\n }\n\n public createScrollEvent(previous: ScrollState, inSmoothScrolling: boolean): IScrollEvent {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n\n}\n\nexport interface IScrollDimensions {\n readonly width: number;\n readonly scrollWidth: number;\n readonly height: number;\n readonly scrollHeight: number;\n}\nexport interface INewScrollDimensions {\n width?: number;\n scrollWidth?: number;\n height?: number;\n scrollHeight?: number;\n}\n\nexport interface IScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n}\nexport interface ISmoothScrollPosition {\n readonly scrollLeft: number;\n readonly scrollTop: number;\n\n readonly width: number;\n readonly height: number;\n}\nexport interface INewScrollPosition {\n scrollLeft?: number;\n scrollTop?: number;\n}\n\nexport interface IScrollableOptions {\n forceIntegerValues: boolean;\n smoothScrollDuration: number;\n scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n}\n\nexport class Scrollable extends Disposable {\n\n private _scrollableBrand: void = undefined;\n\n private _smoothScrollDuration: number;\n private readonly _scheduleAtNextAnimationFrame: (callback: () => void) => IDisposable;\n private _state: ScrollState;\n private _smoothScrolling: SmoothScrollingOperation | null;\n\n private _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n constructor(options: IScrollableOptions) {\n super();\n\n this._smoothScrollDuration = options.smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n this._state = new ScrollState(options.forceIntegerValues, 0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n\n public override dispose(): void {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n\n public setSmoothScrollDuration(smoothScrollDuration: number): void {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n\n public validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition {\n return this._state.withScrollPosition(scrollPosition);\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._state;\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions, useRawScrollPositions: boolean): void {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n\n this._smoothScrolling?.acceptScrollDimensions(this._state);\n }\n\n public getFutureScrollPosition(): IScrollPosition {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n\n public getCurrentScrollPosition(): IScrollPosition {\n return this._state;\n }\n\n public setScrollPositionNow(update: INewScrollPosition): void {\n const newState = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n\n this._setState(newState, false);\n }\n\n public setScrollPositionSmooth(update: INewScrollPosition, reuseAnimation?: boolean): void {\n if (this._smoothScrollDuration === 0) {\n this.setScrollPositionNow(update); return;\n }\n\n if (this._smoothScrolling) {\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n\n const validTarget = this._state.withScrollPosition(update);\n\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n return;\n }\n let newSmoothScrolling: SmoothScrollingOperation;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n } else {\n newSmoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n } else {\n const validTarget = this._state.withScrollPosition(update);\n\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n public hasPendingScrollAnimation(): boolean {\n return Boolean(this._smoothScrolling);\n }\n\n private _performSmoothScrolling(): void {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n\n this._setState(newState, true);\n\n if (!this._smoothScrolling) {\n return;\n }\n\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n\n private _setState(newState: ScrollState, inSmoothScrolling: boolean): void {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\n\nclass SmoothScrollingUpdate {\n\n public readonly scrollLeft: number;\n public readonly scrollTop: number;\n public readonly isDone: boolean;\n\n constructor(scrollLeft: number, scrollTop: number, isDone: boolean) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n\n}\n\ninterface IAnimation {\n (completion: number): number;\n}\n\nfunction createEaseOutCubic(from: number, to: number): IAnimation {\n const delta = to - from;\n return function (completion: number): number {\n return from + delta * easeOutCubic(completion);\n };\n}\n\nfunction createComposed(a: IAnimation, b: IAnimation, cut: number): IAnimation {\n return function (completion: number): number {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\n\nclass SmoothScrollingOperation {\n\n public readonly from: ISmoothScrollPosition;\n public to: ISmoothScrollPosition;\n public readonly duration: number;\n public readonly startTime: number;\n public animationFrameDisposable: IDisposable | null;\n\n private _scrollLeft!: IAnimation;\n private _scrollTop!: IAnimation;\n\n constructor(from: ISmoothScrollPosition, to: ISmoothScrollPosition, startTime: number, duration: number) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n\n this.animationFrameDisposable = null;\n\n this._initAnimations();\n }\n\n private _initAnimations(): void {\n this._scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this._scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n\n private _initAnimation(from: number, to: number, viewportSize: number): IAnimation {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1: number; let stop2: number;\n if (from < to) {\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n } else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n\n public dispose(): void {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n\n public acceptScrollDimensions(state: ScrollState): void {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n\n public tick(): SmoothScrollingUpdate {\n return this._tick(Date.now());\n }\n\n protected _tick(now: number): SmoothScrollingUpdate {\n const completion = (now - this.startTime) / this.duration;\n\n if (completion < 1) {\n const newScrollLeft = this._scrollLeft(completion);\n const newScrollTop = this._scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n\n public static start(from: ISmoothScrollPosition, to: ISmoothScrollPosition, duration: number): SmoothScrollingOperation {\n duration = duration + 10;\n const startTime = Date.now() - 10;\n\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\n\nfunction easeInCubic(t: number): number {\n return Math.pow(t, 3);\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - easeInCubic(1 - t);\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FastDomNode } from './fastDomNode';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ScrollbarVisibility } from './scrollable';\n\nexport class ScrollbarVisibilityController extends Disposable {\n private _visibility: ScrollbarVisibility;\n private _visibleClassName: string;\n private _invisibleClassName: string;\n private _domNode: FastDomNode | null;\n private _rawShouldBeVisible: boolean;\n private _shouldBeVisible: boolean;\n private _isNeeded: boolean;\n private _isVisible: boolean;\n private _revealTimer: TimeoutTimer;\n\n constructor(visibility: ScrollbarVisibility, visibleClassName: string, invisibleClassName: string) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._rawShouldBeVisible = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n\n public setVisibility(visibility: ScrollbarVisibility): void {\n if (this._visibility !== visibility) {\n this._visibility = visibility;\n this._updateShouldBeVisible();\n }\n }\n\n public setShouldBeVisible(rawShouldBeVisible: boolean): void {\n this._rawShouldBeVisible = rawShouldBeVisible;\n this._updateShouldBeVisible();\n }\n\n private _applyVisibilitySetting(): boolean {\n if (this._visibility === ScrollbarVisibility.HIDDEN) {\n return false;\n }\n if (this._visibility === ScrollbarVisibility.VISIBLE) {\n return true;\n }\n return this._rawShouldBeVisible;\n }\n\n private _updateShouldBeVisible(): void {\n const shouldBeVisible = this._applyVisibilitySetting();\n\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n\n public setIsNeeded(isNeeded: boolean): void {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n\n public setDomNode(domNode: FastDomNode): void {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n\n this.setShouldBeVisible(false);\n }\n\n public ensureVisibility(): void {\n\n if (!this._isNeeded) {\n this._hide(false);\n return;\n }\n\n if (this._shouldBeVisible) {\n this._reveal();\n } else {\n this._hide(true);\n }\n }\n\n private _reveal(): void {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n\n this._revealTimer.setIfNotSet(() => {\n this._domNode?.setClassName(this._visibleClassName);\n }, 0);\n }\n\n private _hide(withFadeAway: boolean): void {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' xterm-fade' : ''));\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';\nimport { StandardWheelEvent } from './mouseEvent';\nimport { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';\nimport { ScrollbarState } from './scrollbarState';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController';\nimport { Widget } from './widget';\nimport * as platform from '../../common/Platform';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';\n\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_DRAG_RESET_DISTANCE = 140;\n\nexport interface ISimplifiedPointerEvent {\n buttons: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface IScrollbarHost {\n handleMouseWheel(mouseWheelEvent: StandardWheelEvent): void;\n handleDragStart(): void;\n handleDragEnd(): void;\n}\n\ninterface IAbstractScrollbarOptions {\n lazyRender: boolean;\n host: IScrollbarHost;\n scrollbarState: ScrollbarState;\n visibility: ScrollbarVisibility;\n extraScrollbarClassName: string;\n scrollable: Scrollable;\n scrollByPage: boolean;\n}\n\nexport abstract class AbstractScrollbar extends Widget {\n\n protected _host: IScrollbarHost;\n protected _scrollable: Scrollable;\n protected _scrollByPage: boolean;\n private _lazyRender: boolean;\n protected _scrollbarState: ScrollbarState;\n protected _visibilityController: ScrollbarVisibilityController;\n private _pointerMoveMonitor: GlobalPointerMoveMonitor;\n\n public domNode: FastDomNode;\n public slider!: FastDomNode;\n\n protected _shouldRender: boolean;\n\n constructor(opts: IAbstractScrollbarOptions) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'xterm-visible xterm-scrollbar ' + opts.extraScrollbarClassName, 'xterm-invisible xterm-scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n this._shouldRender = true;\n this.domNode = new FastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n\n this._register(dom.addDisposableListener(this.domNode.domNode, dom.eventType.POINTER_DOWN, (e: PointerEvent) => this._domNodePointerDown(e)));\n }\n\n // ----------------- creation\n\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n protected _createArrow(opts: IScrollbarArrowOptions): ScrollbarArrow {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n return arrow;\n }\n\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n protected _createSlider(top: number, left: number, width: number | undefined, height: number | undefined): void {\n this.slider = new FastDomNode(document.createElement('div'));\n this.slider.setClassName('xterm-slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n\n this.domNode.domNode.appendChild(this.slider.domNode);\n\n this._register(dom.addDisposableListener(\n this.slider.domNode,\n dom.eventType.POINTER_DOWN,\n (e: PointerEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n ));\n\n this._onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n\n // ----------------- Update state\n\n protected _handleElementSize(visibleSize: number): boolean {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollSize(elementScrollSize: number): boolean {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n protected _handleElementScrollPosition(elementScrollPosition: number): boolean {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n\n // ----------------- rendering\n\n public beginReveal(): void {\n this._visibilityController.setShouldBeVisible(true);\n }\n\n public beginHide(): void {\n this._visibilityController.setShouldBeVisible(false);\n }\n\n public render(): void {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n\n private _domNodePointerDown(e: PointerEvent): void {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._handlePointerDown(e);\n }\n\n public delegatePointerDown(e: PointerEvent): void {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const pointerPos = this._sliderPointerPosition(e);\n if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n } else {\n this._handlePointerDown(e);\n }\n }\n\n private _handlePointerDown(e: PointerEvent): void {\n let offsetX: number;\n let offsetY: number;\n if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n offsetX = e.offsetX;\n offsetY = e.offsetY;\n } else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.pageX - domNodePosition.left;\n offsetY = e.pageY - domNodePosition.top;\n }\n\n const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(\n this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset)\n );\n\n if (e.button === 0) {\n e.preventDefault();\n this._sliderPointerDown(e);\n }\n }\n\n private _sliderPointerDown(e: PointerEvent): void {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const initialPointerPosition = this._sliderPointerPosition(e);\n const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('xterm-active', true);\n\n this._pointerMoveMonitor.startMonitoring(\n e.target,\n e.pointerId,\n e.buttons,\n (pointerMoveData: PointerEvent) => {\n const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n\n if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n\n const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n const pointerDelta = pointerPosition - initialPointerPosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n },\n () => {\n this.slider.toggleClassName('xterm-active', false);\n this._host.handleDragEnd();\n }\n );\n\n this._host.handleDragStart();\n }\n\n private _setDesiredScrollPositionNow(_desiredScrollPosition: number): void {\n\n const desiredScrollPosition: INewScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n public updateScrollbarSize(scrollbarSize: number): void {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n\n public isNeeded(): boolean {\n return this._scrollbarState.isNeeded();\n }\n\n // ----------------- Overwrite these\n\n protected abstract _renderDomNode(largeSize: number, smallSize: number): void;\n protected abstract _updateSlider(sliderSize: number, sliderPosition: number): void;\n\n protected abstract _pointerDownRelativePosition(offsetX: number, offsetY: number): number;\n protected abstract _sliderPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number;\n protected abstract _updateScrollbarSize(size: number): void;\n\n public abstract writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * The minimal size of the slider (such that it can still be clickable).\n * The slider is artificially enlarged to keep it usable.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\n\ninterface IScrollbarStateComputedValues {\n computedAvailableSize: number;\n computedIsNeeded: boolean;\n computedSliderSize: number;\n computedSliderRatio: number;\n computedSliderPosition: number;\n}\n\nexport class ScrollbarState {\n\n /**\n * For the vertical scrollbar: the width.\n * For the horizontal scrollbar: the height.\n */\n private _scrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the pair horizontal scrollbar.\n * For the horizontal scrollbar: the width of the pair vertical scrollbar.\n */\n private _oppositeScrollbarSize: number;\n\n /**\n * For the vertical scrollbar: the height of the scrollbar's arrows.\n * For the horizontal scrollbar: the width of the scrollbar's arrows.\n */\n private _arrowSize: number;\n\n // --- variables\n /**\n * For the vertical scrollbar: the viewport height.\n * For the horizontal scrollbar: the viewport width.\n */\n private _visibleSize: number;\n\n /**\n * For the vertical scrollbar: the scroll height.\n * For the horizontal scrollbar: the scroll width.\n */\n private _scrollSize: number;\n\n /**\n * For the vertical scrollbar: the scroll top.\n * For the horizontal scrollbar: the scroll left.\n */\n private _scrollPosition: number;\n\n // --- computed variables\n\n /**\n * `visibleSize` - `oppositeScrollbarSize`\n */\n private _computedAvailableSize: number;\n /**\n * (`scrollSize` > 0 && `scrollSize` > `visibleSize`)\n */\n private _computedIsNeeded: boolean;\n\n private _computedSliderSize: number;\n private _computedSliderRatio: number;\n private _computedSliderPosition: number;\n\n constructor(arrowSize: number, scrollbarSize: number, oppositeScrollbarSize: number, visibleSize: number, scrollSize: number, scrollPosition: number) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n\n this._refreshComputedValues();\n }\n\n public clone(): ScrollbarState {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n\n public setVisibleSize(visibleSize: number): boolean {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollSize(scrollSize: number): boolean {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollPosition(scrollPosition: number): boolean {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n\n public setScrollbarSize(scrollbarSize: number): void {\n this._scrollbarSize = Math.round(scrollbarSize);\n }\n\n public setArrowSize(arrowSize: number): void {\n const iArrowSize = Math.round(arrowSize);\n if (this._arrowSize !== iArrowSize) {\n this._arrowSize = iArrowSize;\n this._refreshComputedValues();\n }\n }\n\n public setOppositeScrollbarSize(oppositeScrollbarSize: number): void {\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n }\n\n private static _computeValues(\n oppositeScrollbarSize: number,\n arrowSize: number,\n visibleSize: number,\n scrollSize: number,\n scrollPosition: number\n ): IScrollbarStateComputedValues {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n\n if (!computedIsNeeded) {\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n\n private _refreshComputedValues(): void {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n\n public getArrowSize(): number {\n return this._arrowSize;\n }\n\n public getScrollPosition(): number {\n return this._scrollPosition;\n }\n\n public getRectangleLargeSize(): number {\n return this._computedAvailableSize;\n }\n\n public getRectangleSmallSize(): number {\n return this._scrollbarSize;\n }\n\n public isNeeded(): boolean {\n return this._computedIsNeeded;\n }\n\n public getSliderSize(): number {\n return this._computedSliderSize;\n }\n\n public getSliderPosition(): number {\n return this._computedSliderPosition;\n }\n\n public getDesiredScrollPositionFromOffset(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n\n public getDesiredScrollPositionFromOffsetPaged(offset: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const correctedOffset = offset - this._arrowSize;\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize;\n } else {\n desiredScrollPosition += this._visibleSize;\n }\n return desiredScrollPosition;\n }\n\n public getDesiredScrollPositionFromDelta(delta: number): number {\n if (!this._computedIsNeeded) {\n return 0;\n }\n\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\n\nexport class HorizontalScrollbar extends AbstractScrollbar {\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (options.horizontalHasArrows ? options.horizontalScrollbarSize : 0),\n (options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n scrollDimensions.width,\n scrollDimensions.scrollWidth,\n scrollPosition.scrollLeft\n ),\n visibility: options.horizontal,\n extraScrollbarClassName: 'xterm-horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n if (options.horizontalHasArrows) {\n throw new Error('horizontalHasArrows is not supported in xterm.js');\n }\n\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetX;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setHeight(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollLeft = scrollPosition;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n this.updateScrollbarSize(options.horizontal === ScrollbarVisibility.HIDDEN ? 0 : options.horizontalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._visibilityController.setVisibility(options.horizontal);\n this._scrollByPage = options.scrollByPage;\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AbstractScrollbar, ISimplifiedPointerEvent, IScrollbarHost } from './abstractScrollbar';\nimport { IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { ScrollbarState } from './scrollbarState';\nimport { INewScrollPosition, Scrollable, ScrollbarVisibility, IScrollEvent } from './scrollable';\nimport type { ScrollbarArrow } from './scrollbarArrow';\n\nexport class VerticalScrollbar extends AbstractScrollbar {\n private _arrowUp: ScrollbarArrow | undefined;\n private _arrowDown: ScrollbarArrow | undefined;\n private _arrowScrollDelta: number = 0;\n\n constructor(scrollable: Scrollable, options: IScrollableElementResolvedOptions, host: IScrollbarHost) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n const hasArrows = options.verticalHasArrows;\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState(\n (hasArrows ? options.verticalScrollbarSize : 0),\n (options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize),\n 0,\n scrollDimensions.height,\n scrollDimensions.scrollHeight,\n scrollPosition.scrollTop\n ),\n visibility: options.vertical,\n extraScrollbarClassName: 'xterm-vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n\n this._setArrows(hasArrows, options.verticalScrollbarSize);\n\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n\n protected _updateSlider(sliderSize: number, sliderPosition: number): void {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n\n protected _renderDomNode(largeSize: number, smallSize: number): void {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n\n public handleScroll(e: IScrollEvent): boolean {\n this._shouldRender = this._handleElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._handleElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._handleElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n\n protected _pointerDownRelativePosition(offsetX: number, offsetY: number): number {\n return offsetY;\n }\n\n protected _sliderPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageY;\n }\n\n protected _sliderOrthogonalPointerPosition(e: ISimplifiedPointerEvent): number {\n return e.pageX;\n }\n\n protected _updateScrollbarSize(size: number): void {\n this.slider.setWidth(size);\n }\n\n public writeScrollPosition(target: INewScrollPosition, scrollPosition: number): void {\n target.scrollTop = scrollPosition;\n }\n\n private _arrowScroll(delta: number): void {\n const currentPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({ scrollTop: currentPosition.scrollTop + delta });\n }\n\n private _setArrows(showArrows: boolean, size: number): void {\n this._arrowScrollDelta = size;\n if (!this._arrowUp || !this._arrowDown) {\n const arrowDelta = 0;\n this._arrowUp = this._createArrow({\n className: 'xterm-scra xterm-arrow-up',\n top: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(-this._arrowScrollDelta)\n });\n this._arrowDown = this._createArrow({\n className: 'xterm-scra xterm-arrow-down',\n bottom: arrowDelta,\n left: arrowDelta,\n bgWidth: size,\n bgHeight: size,\n handleActivate: () => this._arrowScroll(this._arrowScrollDelta)\n });\n }\n\n this._updateArrowSize(this._arrowUp, size);\n this._updateArrowSize(this._arrowDown, size);\n\n if (!this._arrowUp || !this._arrowDown) {\n return;\n }\n\n const display = showArrows ? '' : 'none';\n this._arrowUp.bgDomNode.style.display = display;\n this._arrowUp.domNode.style.display = display;\n this._arrowDown.bgDomNode.style.display = display;\n this._arrowDown.domNode.style.display = display;\n }\n\n private _updateArrowSize(arrow: ScrollbarArrow | undefined, size: number): void {\n if (!arrow) {\n return;\n }\n arrow.bgDomNode.style.width = `${size}px`;\n arrow.bgDomNode.style.height = `${size}px`;\n arrow.domNode.style.width = `${size}px`;\n arrow.domNode.style.height = `${size}px`;\n }\n\n public updateOptions(options: IScrollableElementResolvedOptions): void {\n const arrowSize = options.verticalHasArrows ? options.verticalScrollbarSize : 0;\n this._scrollbarState.setArrowSize(arrowSize);\n this._setArrows(options.verticalHasArrows, options.verticalScrollbarSize);\n this.updateScrollbarSize(options.vertical === ScrollbarVisibility.HIDDEN ? 0 : options.verticalScrollbarSize);\n this._scrollbarState.setOppositeScrollbarSize(0);\n this._visibilityController.setVisibility(options.vertical);\n this._scrollByPage = options.scrollByPage;\n }\n\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../Dom';\nimport { FastDomNode } from './fastDomNode';\nimport { IMouseEvent, IMouseWheelEvent, StandardWheelEvent } from './mouseEvent';\nimport { IScrollbarHost } from './abstractScrollbar';\nimport { HorizontalScrollbar } from './horizontalScrollbar';\nimport { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';\nimport { VerticalScrollbar } from './verticalScrollbar';\nimport { Widget } from './widget';\nimport { TimeoutTimer } from '../../common/Async';\nimport { Emitter, IEvent } from '../../common/Event';\nimport { IDisposable, dispose } from '../../common/Lifecycle';\nimport * as platform from '../../common/Platform';\nimport { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';\n// import 'vs/css!./media/scrollbars';\n\nconst enum Constants {\n HIDE_TIMEOUT = 500,\n SCROLL_WHEEL_SENSITIVITY = 50\n}\n\nclass MouseWheelClassifierItem {\n public timestamp: number;\n public deltaX: number;\n public deltaY: number;\n public score: number;\n\n constructor(timestamp: number, deltaX: number, deltaY: number) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\n\nclass MouseWheelClassifier {\n\n public static readonly INSTANCE = new MouseWheelClassifier();\n\n private readonly _capacity: number;\n private _memory: MouseWheelClassifierItem[];\n private _front: number;\n private _rear: number;\n\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n\n public isPhysicalMouseWheel(): boolean {\n if (this._front === -1 && this._rear === -1) {\n return false;\n }\n\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n\n let index = this._rear;\n while (index !== -1) {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n\n if (index === this._front) {\n break;\n }\n\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n }\n\n return (score <= 0.5);\n }\n\n public acceptStandardWheelEvent(e: StandardWheelEvent): void {\n if (platform.isChrome) {\n const targetWindow = dom.getWindow(e.browserEvent);\n const pageZoomFactor = platform.getZoomFactor(targetWindow);\n this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n } else {\n this.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n\n public accept(timestamp: number, deltaX: number, deltaY: number): void {\n let previousItem = null;\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n } else {\n previousItem = this._memory[this._rear];\n\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n\n item.score = this._computeScore(item, previousItem);\n }\n\n private _computeScore(item: MouseWheelClassifierItem, previousItem: MouseWheelClassifierItem | null): number {\n\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n return 1;\n }\n\n let score: number = 0.5;\n\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n score += 0.25;\n }\n\n if (previousItem) {\n const absDeltaX = Math.abs(item.deltaX);\n const absDeltaY = Math.abs(item.deltaY);\n\n const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n\n const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n\n const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n\n const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n if (isSameModulo) {\n score -= 0.5;\n }\n }\n\n return Math.min(Math.max(score, 0), 1);\n }\n\n private _isAlmostInt(value: number): boolean {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\n\nexport class SmoothScrollableElement extends Widget {\n\n private readonly _options: IScrollableElementResolvedOptions;\n protected readonly _scrollable: Scrollable;\n private readonly _verticalScrollbar: VerticalScrollbar;\n private readonly _horizontalScrollbar: HorizontalScrollbar;\n private readonly _domNode: HTMLElement;\n\n private readonly _leftShadowDomNode: FastDomNode | null;\n private readonly _topShadowDomNode: FastDomNode | null;\n private readonly _topLeftShadowDomNode: FastDomNode | null;\n\n private readonly _listenOnDomNode: HTMLElement;\n\n private _mouseWheelToDispose: IDisposable[];\n\n private _isDragging: boolean;\n private _mouseIsOver: boolean;\n\n private readonly _hideTimeout: TimeoutTimer;\n private _shouldRender: boolean;\n\n private _revealOnScroll: boolean;\n\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll: IEvent = this._onScroll.event;\n\n public get options(): Readonly {\n return this._options;\n }\n\n public constructor(element: HTMLElement, options: IScrollableElementCreationOptions, scrollable?: Scrollable) {\n super();\n options = options ?? {};\n let resolvedScrollable: Scrollable;\n const ownsScrollable = !scrollable;\n if (scrollable) {\n resolvedScrollable = scrollable;\n } else {\n options.mouseWheelSmoothScroll = false;\n resolvedScrollable = new Scrollable({\n forceIntegerValues: true,\n smoothScrollDuration: 0,\n scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n });\n }\n\n this._options = resolveOptions(options);\n this._scrollable = resolvedScrollable;\n\n this._register(this._scrollable.onScroll((e) => {\n this._handleScroll(e);\n this._onScroll.fire(e);\n }));\n if (ownsScrollable) {\n this._register(this._scrollable);\n }\n\n const scrollbarHost: IScrollbarHost = {\n handleMouseWheel: (mouseWheelEvent: StandardWheelEvent) => this._handleMouseWheel(mouseWheelEvent),\n handleDragStart: () => this._handleDragStart(),\n handleDragEnd: () => this._handleDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n\n this._domNode = document.createElement('div');\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n\n if (this._options.useShadows) {\n this._leftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n\n this._topShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n\n this._topLeftShadowDomNode = new FastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('xterm-shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n } else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n\n this._listenOnDomNode = this._options.listenOnDomNode ?? this._domNode;\n\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n\n this._onmouseover(this._listenOnDomNode, (e) => this._handleMouseOver(e));\n this._onmouseleave(this._listenOnDomNode, (e) => this._handleMouseLeave(e));\n\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n\n this._shouldRender = true;\n\n this._revealOnScroll = true;\n }\n\n public override dispose(): void {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n\n public getDomNode(): HTMLElement {\n return this._domNode;\n }\n\n public getScrollDimensions(): IScrollDimensions {\n return this._scrollable.getScrollDimensions();\n }\n\n public setScrollDimensions(dimensions: INewScrollDimensions): void {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n\n public setScrollPosition(update: INewScrollPosition & { reuseAnimation?: boolean }): void {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n } else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n\n public getScrollPosition(): IScrollPosition {\n return this._scrollable.getCurrentScrollPosition();\n }\n\n public updateClassName(newClassName: string): void {\n this._options.className = newClassName;\n if (platform.isMac) {\n this._options.className += ' xterm-mac';\n }\n this._domNode.className = 'xterm-scrollable-element ' + this._options.className;\n }\n\n public updateOptions(newOptions: IScrollableElementChangeOptions): void {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontal !== 'undefined') {\n this._options.horizontal = newOptions.horizontal;\n }\n if (typeof newOptions.vertical !== 'undefined') {\n this._options.vertical = newOptions.vertical;\n }\n if (typeof newOptions.horizontalHasArrows !== 'undefined') {\n this._options.horizontalHasArrows = newOptions.horizontalHasArrows;\n }\n if (typeof newOptions.verticalHasArrows !== 'undefined') {\n this._options.verticalHasArrows = newOptions.verticalHasArrows;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n }\n if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n }\n if (typeof newOptions.scrollByPage !== 'undefined') {\n this._options.scrollByPage = newOptions.scrollByPage;\n }\n this._horizontalScrollbar.updateOptions(this._options);\n this._verticalScrollbar.updateOptions(this._options);\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public delegateScrollFromMouseWheelEvent(browserEvent: IMouseWheelEvent): void {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n }\n\n // -------------------- mouse wheel scrolling --------------------\n\n private _setListeningToMouseWheel(shouldListen: boolean): void {\n const isListening = (this._mouseWheelToDispose.length > 0);\n\n if (isListening === shouldListen) {\n return;\n }\n\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n\n if (shouldListen) {\n const onMouseWheel = (browserEvent: IMouseWheelEvent): void => {\n this._handleMouseWheel(new StandardWheelEvent(browserEvent));\n };\n\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.eventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n\n private _handleMouseWheel(e: StandardWheelEvent): void {\n if (e.browserEvent?.defaultPrevented) {\n return;\n }\n\n const classifier = MouseWheelClassifier.INSTANCE;\n classifier.acceptStandardWheelEvent(e);\n\n let didScroll = false;\n\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n\n if (this._options.scrollPredominantAxis) {\n if (this._options.scrollYToX && deltaX + deltaY === 0) {\n deltaX = deltaY = 0;\n } else if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n } else {\n deltaY = 0;\n }\n }\n\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n\n const shiftConvert = !platform.isMac && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n if (e.browserEvent && e.browserEvent.altKey) {\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n\n let desiredScrollPosition: INewScrollPosition = {};\n if (deltaY) {\n const deltaScrollTop = Constants.SCROLL_WHEEL_SENSITIVITY * deltaY;\n const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const deltaScrollLeft = Constants.SCROLL_WHEEL_SENSITIVITY * deltaX;\n const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n\n const canPerformSmoothScroll = (\n this._options.mouseWheelSmoothScroll\n\t\t\t\t\t&& classifier.isPhysicalMouseWheel()\n );\n\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n } else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n\n didScroll = true;\n }\n }\n\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleScroll(e: IScrollEvent): void {\n this._shouldRender = this._horizontalScrollbar.handleScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.handleScroll(e) || this._shouldRender;\n\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n\n if (this._revealOnScroll) {\n this._reveal();\n }\n\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n\n public renderNow(): void {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n\n this._render();\n }\n\n private _render(): void {\n if (!this._shouldRender) {\n return;\n }\n\n this._shouldRender = false;\n\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n\n const leftClassName = (enableLeft ? ' xterm-shadow-left' : '');\n const topClassName = (enableTop ? ' xterm-shadow-top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' xterm-shadow-top-left-corner' : '');\n this._leftShadowDomNode!.setClassName(`xterm-shadow${leftClassName}`);\n this._topShadowDomNode!.setClassName(`xterm-shadow${topClassName}`);\n this._topLeftShadowDomNode!.setClassName(`xterm-shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n\n // -------------------- fade in / fade out --------------------\n\n private _handleDragStart(): void {\n this._isDragging = true;\n this._reveal();\n }\n\n private _handleDragEnd(): void {\n this._isDragging = false;\n this._hide();\n }\n\n private _handleMouseLeave(e: IMouseEvent): void {\n this._mouseIsOver = false;\n this._hide();\n }\n\n private _handleMouseOver(e: IMouseEvent): void {\n this._mouseIsOver = true;\n this._reveal();\n }\n\n private _reveal(): void {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n\n private _hide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n\n private _scheduleHide(): void {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), Constants.HIDE_TIMEOUT);\n }\n }\n}\n\nfunction resolveOptions(opts: IScrollableElementCreationOptions): IScrollableElementResolvedOptions {\n const result: IScrollableElementResolvedOptions = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : ScrollbarVisibility.AUTO),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : ScrollbarVisibility.AUTO),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n\n if (platform.isMac) {\n result.className += ' xterm-mac';\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2024 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';\nimport { ViewportConstants } from './shared/Constants';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';\nimport { CoreMouseEventType } from '../common/Types';\nimport { scheduleAtNextAnimationFrame } from './Dom';\nimport { SmoothScrollableElement } from './scrollable/scrollableElement';\nimport type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';\nimport { Emitter, EventUtils } from '../common/Event';\nimport { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';\n\nexport class Viewport extends Disposable {\n\n protected _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n private _scrollableElement: SmoothScrollableElement;\n private _styleElement: HTMLStyleElement;\n\n private _queuedAnimationFrame?: number;\n private _latestYDisp?: number;\n private _isSyncing: boolean = false;\n private _isHandlingScroll: boolean = false;\n private _suppressOnScrollHandler: boolean = false;\n private _needsSyncOnRender: boolean = false;\n\n constructor(\n element: HTMLElement,\n screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseStateService mouseStateService: IMouseStateService,\n @IThemeService themeService: IThemeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n const scrollable = this._register(new Scrollable({\n forceIntegerValues: false,\n smoothScrollDuration: this._optionsService.rawOptions.smoothScrollDuration,\n // This is used over `IRenderService.addRefreshCallback` since it can be canceled\n scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(coreBrowserService.window, cb)\n }));\n this._register(this._optionsService.onSpecificOptionChange('smoothScrollDuration', () => {\n scrollable.setSmoothScrollDuration(this._optionsService.rawOptions.smoothScrollDuration);\n }));\n\n this._scrollableElement = this._register(new SmoothScrollableElement(screenElement, {\n vertical: ScrollbarVisibility.AUTO,\n horizontal: ScrollbarVisibility.HIDDEN,\n useShadows: false,\n mouseWheelSmoothScroll: true,\n verticalHasArrows: this._optionsService.rawOptions.scrollbar?.showArrows ?? false,\n ...this._getChangeOptions()\n }, scrollable));\n this._register(this._optionsService.onMultipleOptionChange([\n 'scrollSensitivity',\n 'fastScrollSensitivity',\n 'scrollbar'\n ], () => this._scrollableElement.updateOptions(this._getChangeOptions())));\n // Don't handle mouse wheel if wheel events are supported by the current mouse prototcol\n this._register(mouseStateService.onProtocolChange(type => {\n this._scrollableElement.updateOptions({\n handleMouseWheel: !(type & CoreMouseEventType.WHEEL)\n });\n }));\n\n this._scrollableElement.setScrollDimensions({ height: 0, scrollHeight: 0 });\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n element.style.backgroundColor = themeService.colors.background.css;\n this._scrollableElement.getDomNode().style.backgroundColor = themeService.colors.background.css;\n }));\n element.appendChild(this._scrollableElement.getDomNode());\n this._register(toDisposable(() => this._scrollableElement.getDomNode().remove()));\n\n this._styleElement = coreBrowserService.mainDocument.createElement('style');\n screenElement.appendChild(this._styleElement);\n this._register(toDisposable(() => this._styleElement.remove()));\n this._register(EventUtils.runAndSubscribe(themeService.onChangeColors, () => {\n this._styleElement.textContent = [\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider {`,\n ` background: ${themeService.colors.scrollbarSliderBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider:hover {`,\n ` background: ${themeService.colors.scrollbarSliderHoverBackground.css};`,\n `}`,\n `.xterm .xterm-scrollable-element > .xterm-scrollbar > .xterm-slider.xterm-active {`,\n ` background: ${themeService.colors.scrollbarSliderActiveBackground.css};`,\n `}`\n ].join('\\n');\n }));\n\n this._register(this._bufferService.onResize(() => this.queueSync()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n // Reset _latestYDisp when switching buffers to prevent stale scroll position\n // from alt buffer contaminating normal buffer scroll position\n this._latestYDisp = undefined;\n this.queueSync();\n }));\n this._register(this._bufferService.onScroll(() => this._sync()));\n\n // Flush deferred viewport sync after a render completes (e.g. after ESU ends\n // synchronized output mode). This ensures DOM scroll position updates atomically\n // with the canvas render.\n this._register(this._renderService.onRender(() => {\n if (this._needsSyncOnRender) {\n this._needsSyncOnRender = false;\n this._sync();\n }\n }));\n\n this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));\n\n }\n\n public scrollLines(disp: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n reuseAnimation: true,\n scrollTop: pos.scrollTop + disp * this._renderService.dimensions.css.cell.height\n });\n }\n\n public scrollToLine(line: number, disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll) {\n this._latestYDisp = line;\n }\n this._scrollableElement.setScrollPosition({\n reuseAnimation: !disableSmoothScroll,\n scrollTop: line * this._renderService.dimensions.css.cell.height\n });\n }\n\n private _getChangeOptions(): IScrollableElementChangeOptions {\n const showScrollbar = this._optionsService.rawOptions.scrollbar?.showScrollbar ?? true;\n const showArrows = this._optionsService.rawOptions.scrollbar?.showArrows ?? false;\n const verticalScrollbarSize = showScrollbar\n ? (this._optionsService.rawOptions.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH)\n : 0;\n return {\n mouseWheelScrollSensitivity: this._optionsService.rawOptions.scrollSensitivity,\n fastScrollSensitivity: this._optionsService.rawOptions.fastScrollSensitivity,\n vertical: showScrollbar ? ScrollbarVisibility.AUTO : ScrollbarVisibility.HIDDEN,\n verticalScrollbarSize,\n verticalHasArrows: showArrows\n };\n }\n\n public queueSync(ydisp?: number): void {\n // Update state\n if (ydisp !== undefined) {\n this._latestYDisp = ydisp;\n }\n\n // Don't queue more than one callback\n if (this._queuedAnimationFrame !== undefined) {\n return;\n }\n this._queuedAnimationFrame = this._renderService.addRefreshCallback(() => {\n this._queuedAnimationFrame = undefined;\n this._sync(this._latestYDisp);\n });\n }\n\n private _sync(ydisp: number = this._bufferService.buffer.ydisp): void {\n if (!this._renderService || this._isSyncing) {\n return;\n }\n // Defer DOM scroll updates during synchronized output to prevent visible\n // scroll position flickering while the canvas content is frozen.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._needsSyncOnRender = true;\n return;\n }\n this._isSyncing = true;\n\n // Ignore any onScroll event that happens as a result of dimensions changing as this should\n // never cause a scrollLines call, only setScrollPosition can do that.\n this._suppressOnScrollHandler = true;\n this._scrollableElement.setScrollDimensions({\n height: this._renderService.dimensions.css.canvas.height,\n scrollHeight: this._renderService.dimensions.css.cell.height * this._bufferService.buffer.lines.length\n });\n this._suppressOnScrollHandler = false;\n\n // If ydisp has been changed by some other component (input/buffer), then stop animating smooth\n // scroll and scroll there immediately.\n if (ydisp !== this._latestYDisp) {\n this._scrollableElement.setScrollPosition({\n scrollTop: ydisp * this._renderService.dimensions.css.cell.height\n });\n }\n\n this._isSyncing = false;\n }\n\n private _handleScroll(e: IScrollEvent): void {\n if (!this._renderService) {\n return;\n }\n if (this._isHandlingScroll || this._suppressOnScrollHandler) {\n return;\n }\n this._isHandlingScroll = true;\n const newRow = Math.round(e.scrollTop / this._renderService.dimensions.css.cell.height);\n const diff = newRow - this._bufferService.buffer.ydisp;\n if (diff !== 0) {\n this._latestYDisp = newRow;\n this._onRequestScrollLines.fire(diff);\n }\n this._isHandlingScroll = false;\n }\n\n public handleTouchScroll(translationY: number): void {\n const pos = this._scrollableElement.getScrollPosition();\n this._scrollableElement.setScrollPosition({\n scrollTop: pos.scrollTop - translationY\n });\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ICoreBrowserService, IRenderService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';\n\nexport class BufferDecorationRenderer extends Disposable {\n private readonly _container: HTMLElement;\n private readonly _decorationElements: Map = new Map();\n\n private _animationFrame: number | undefined;\n private _altBufferIsActive: boolean = false;\n private _dimensionsChanged: boolean = false;\n\n constructor(\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n\n this._container = document.createElement('div');\n this._container.classList.add('xterm-decoration-container');\n this._screenElement.appendChild(this._container);\n\n this._register(this._renderService.onRenderedViewportChange(() => this._doRefreshDecorations()));\n this._register(this._renderService.onDimensionsChange(() => {\n this._dimensionsChanged = true;\n this._queueRefresh();\n }));\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._altBufferIsActive = this._bufferService.buffer === this._bufferService.buffers.alt;\n }));\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh()));\n this._register(this._decorationService.onDecorationRemoved(decoration => this._removeDecoration(decoration)));\n this._register(toDisposable(() => {\n this._container.remove();\n this._decorationElements.clear();\n }));\n }\n\n private _queueRefresh(): void {\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._renderService.addRefreshCallback(() => {\n this._doRefreshDecorations();\n this._animationFrame = undefined;\n });\n }\n\n private _doRefreshDecorations(): void {\n for (const decoration of this._decorationService.decorations) {\n this._renderDecoration(decoration);\n }\n this._dimensionsChanged = false;\n }\n\n private _renderDecoration(decoration: IInternalDecoration): void {\n this._refreshStyle(decoration);\n if (this._dimensionsChanged) {\n this._refreshXPosition(decoration);\n }\n }\n\n private _createElement(decoration: IInternalDecoration): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.classList.add('xterm-decoration');\n element.classList.toggle('xterm-decoration-top-layer', decoration?.options?.layer === 'top');\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${(decoration.marker.line - this._bufferService.buffers.active.ydisp) * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n\n const x = decoration.options.x ?? 0;\n if (x && x > this._bufferService.cols) {\n // exceeded the container width, so hide\n element.style.display = 'none';\n }\n this._refreshXPosition(decoration, element);\n\n return element;\n }\n\n private _refreshStyle(decoration: IInternalDecoration): void {\n const line = decoration.marker.line - this._bufferService.buffers.active.ydisp;\n if (line < 0 || line >= this._bufferService.rows) {\n // outside of viewport\n if (decoration.element) {\n decoration.element.style.display = 'none';\n decoration.onRenderEmitter.fire(decoration.element);\n }\n } else {\n let element = this._decorationElements.get(decoration);\n if (!element) {\n element = this._createElement(decoration);\n decoration.element = element;\n this._decorationElements.set(decoration, element);\n this._container.appendChild(element);\n decoration.onDispose(() => {\n this._decorationElements.delete(decoration);\n element!.remove();\n });\n }\n element.style.display = this._altBufferIsActive ? 'none' : 'block';\n if (!this._altBufferIsActive) {\n element.style.width = `${Math.round((decoration.options.width || 1) * this._renderService.dimensions.css.cell.width)}px`;\n element.style.height = `${(decoration.options.height || 1) * this._renderService.dimensions.css.cell.height}px`;\n element.style.top = `${line * this._renderService.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this._renderService.dimensions.css.cell.height}px`;\n }\n decoration.onRenderEmitter.fire(element);\n }\n }\n\n private _refreshXPosition(decoration: IInternalDecoration, element: HTMLElement | undefined = decoration.element): void {\n if (!element) {\n return;\n }\n const x = decoration.options.x ?? 0;\n if ((decoration.options.anchor || 'left') === 'right') {\n element.style.right = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n } else {\n element.style.left = x ? `${x * this._renderService.dimensions.css.cell.width}px` : '';\n }\n }\n\n private _removeDecoration(decoration: IInternalDecoration): void {\n this._decorationElements.get(decoration)?.remove();\n this._decorationElements.delete(decoration);\n decoration.dispose();\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInternalDecoration } from '../../common/services/Services';\n\nexport interface IColorZoneStore {\n readonly zones: IColorZone[];\n clear(): void;\n addDecoration(decoration: IInternalDecoration): void;\n /**\n * Sets the amount of padding in lines that will be added between zones, if new lines intersect\n * the padding they will be merged into the same zone.\n */\n setPadding(padding: { [position: string]: number }): void;\n}\n\nexport interface IColorZone {\n /** Color in a format supported by canvas' fillStyle. */\n color: string;\n position: 'full' | 'left' | 'center' | 'right' | undefined;\n startBufferLine: number;\n endBufferLine: number;\n}\n\ninterface IMinimalDecorationForColorZone {\n marker: Pick;\n options: Pick;\n}\n\nexport class ColorZoneStore implements IColorZoneStore {\n private _zones: IColorZone[] = [];\n\n // The zone pool is used to keep zone objects from being freed between clearing the color zone\n // store and fetching the zones. This helps reduce GC pressure since the color zones are\n // accumulated on potentially every scroll event.\n private _zonePool: IColorZone[] = [];\n private _zonePoolIndex = 0;\n\n private _linePadding: { [position: string]: number } = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n };\n\n public get zones(): IColorZone[] {\n // Trim the zone pool to free unused memory\n this._zonePool.length = Math.min(this._zonePool.length, this._zones.length);\n return this._zones;\n }\n\n public clear(): void {\n this._zones.length = 0;\n this._zonePoolIndex = 0;\n }\n\n public addDecoration(decoration: IMinimalDecorationForColorZone): void {\n if (!decoration.options.overviewRulerOptions) {\n return;\n }\n for (const z of this._zones) {\n if (z.color === decoration.options.overviewRulerOptions.color &&\n z.position === decoration.options.overviewRulerOptions.position) {\n if (this._lineIntersectsZone(z, decoration.marker.line)) {\n return;\n }\n if (this._lineAdjacentToZone(z, decoration.marker.line, decoration.options.overviewRulerOptions.position)) {\n this._addLineToZone(z, decoration.marker.line);\n return;\n }\n }\n }\n // Create using zone pool if possible\n if (this._zonePoolIndex < this._zonePool.length) {\n this._zonePool[this._zonePoolIndex].color = decoration.options.overviewRulerOptions.color;\n this._zonePool[this._zonePoolIndex].position = decoration.options.overviewRulerOptions.position;\n this._zonePool[this._zonePoolIndex].startBufferLine = decoration.marker.line;\n this._zonePool[this._zonePoolIndex].endBufferLine = decoration.marker.line;\n this._zones.push(this._zonePool[this._zonePoolIndex++]);\n return;\n }\n // Create\n this._zones.push({\n color: decoration.options.overviewRulerOptions.color,\n position: decoration.options.overviewRulerOptions.position,\n startBufferLine: decoration.marker.line,\n endBufferLine: decoration.marker.line\n });\n this._zonePool.push(this._zones[this._zones.length - 1]);\n this._zonePoolIndex++;\n }\n\n public setPadding(padding: { [position: string]: number }): void {\n this._linePadding = padding;\n }\n\n private _lineIntersectsZone(zone: IColorZone, line: number): boolean {\n return (\n line >= zone.startBufferLine &&\n line <= zone.endBufferLine\n );\n }\n\n private _lineAdjacentToZone(zone: IColorZone, line: number, position: IColorZone['position']): boolean {\n return (\n (line >= zone.startBufferLine - this._linePadding[position || 'full']) &&\n (line <= zone.endBufferLine + this._linePadding[position || 'full'])\n );\n }\n\n private _addLineToZone(zone: IColorZone, line: number): void {\n zone.startBufferLine = Math.min(zone.startBufferLine, line);\n zone.endBufferLine = Math.max(zone.endBufferLine, line);\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';\nimport { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';\n\nconst enum Constants {\n OVERVIEW_RULER_BORDER_WIDTH = 1\n}\n\n// Helper objects to avoid excessive calculation and garbage collection during rendering. These are\n// static values for each render and can be accessed using the decoration position as the key.\nconst drawHeight = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawWidth = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\nconst drawX = {\n full: 0,\n left: 0,\n center: 0,\n right: 0\n};\n\nexport class OverviewRulerRenderer extends Disposable {\n private readonly _canvas: HTMLCanvasElement;\n private readonly _ctx: CanvasRenderingContext2D;\n private readonly _colorZoneStore: IColorZoneStore = new ColorZoneStore();\n private get _width(): number {\n const scrollbar = this._optionsService.rawOptions.scrollbar;\n const showScrollbar = scrollbar?.showScrollbar ?? true;\n if (!showScrollbar) {\n return 0;\n }\n return scrollbar?.width ?? 0;\n }\n private _animationFrame: number | undefined;\n\n private _shouldUpdateDimensions: boolean | undefined = true;\n private _shouldUpdateAnchor: boolean | undefined = true;\n private _lastKnownBufferLength: number = 0;\n\n constructor(\n private readonly _viewportElement: HTMLElement,\n private readonly _screenElement: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IRenderService private readonly _renderService: IRenderService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IThemeService private readonly _themeService: IThemeService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n this._canvas = this._coreBrowserService.mainDocument.createElement('canvas');\n this._canvas.classList.add('xterm-decoration-overview-ruler');\n this._refreshCanvasDimensions();\n this._viewportElement.parentElement?.insertBefore(this._canvas, this._viewportElement);\n this._register(toDisposable(() => this._canvas?.remove()));\n\n const ctx = this._canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Ctx cannot be null');\n } else {\n this._ctx = ctx;\n }\n\n this._register(this._decorationService.onDecorationRegistered(() => this._queueRefresh(undefined, true)));\n this._register(this._decorationService.onDecorationRemoved(() => this._queueRefresh(undefined, true)));\n\n this._register(this._renderService.onRenderedViewportChange(() => this._queueRefresh()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._canvas!.style.display = this._bufferService.buffer === this._bufferService.buffers.alt ? 'none' : 'block';\n }));\n this._register(this._bufferService.onScroll(() => {\n if (this._lastKnownBufferLength !== this._bufferService.buffers.normal.lines.length) {\n this._refreshDrawHeightConstants();\n this._refreshColorZonePadding();\n }\n }));\n\n this._register(this._renderService.onDimensionsChange(() => this._queueRefresh(true)));\n\n this._register(this._coreBrowserService.onDprChange(() => this._queueRefresh(true)));\n this._register(this._optionsService.onSpecificOptionChange('scrollbar', () => this._queueRefresh(true)));\n this._register(this._themeService.onChangeColors(() => this._queueRefresh()));\n this._register(toDisposable(() => {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }));\n this._queueRefresh(true);\n }\n\n private _refreshDrawConstants(): void {\n // width\n const outerWidth = Math.floor((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n const innerWidth = Math.ceil((this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH) / 3);\n drawWidth.full = this._canvas.width;\n drawWidth.left = outerWidth;\n drawWidth.center = innerWidth;\n drawWidth.right = outerWidth;\n // height\n this._refreshDrawHeightConstants();\n // x\n drawX.full = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.left = Constants.OVERVIEW_RULER_BORDER_WIDTH;\n drawX.center = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left;\n drawX.right = Constants.OVERVIEW_RULER_BORDER_WIDTH + drawWidth.left + drawWidth.center;\n }\n\n private _refreshDrawHeightConstants(): void {\n drawHeight.full = Math.round(2 * this._coreBrowserService.dpr);\n // Calculate actual pixels per line\n const pixelsPerLine = this._canvas.height / this._bufferService.buffer.lines.length;\n // Clamp actual pixels within a range\n const nonFullHeight = Math.round(Math.max(Math.min(pixelsPerLine, 12), 6) * this._coreBrowserService.dpr);\n drawHeight.left = nonFullHeight;\n drawHeight.center = nonFullHeight;\n drawHeight.right = nonFullHeight;\n }\n\n private _refreshColorZonePadding(): void {\n this._colorZoneStore.setPadding({\n full: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.full),\n left: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.left),\n center: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.center),\n right: Math.floor(this._bufferService.buffers.active.lines.length / (this._canvas.height - 1) * drawHeight.right)\n });\n this._lastKnownBufferLength = this._bufferService.buffers.normal.lines.length;\n }\n\n private _refreshCanvasDimensions(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n const cssCanvasHeight = this._renderService.dimensions.css.canvas.height;\n const deviceCanvasHeight = this._renderService.dimensions.device.canvas.height;\n this._canvas.style.width = `${this._width}px`;\n this._canvas.width = Math.round(this._width * this._coreBrowserService.dpr);\n this._canvas.style.height = `${cssCanvasHeight}px`;\n this._canvas.height = deviceCanvasHeight;\n this._refreshDrawConstants();\n this._refreshColorZonePadding();\n }\n\n private _refreshDecorations(): void {\n if (this._store.isDisposed || !this._renderService.hasRenderer()) {\n return;\n }\n if (this._shouldUpdateDimensions) {\n this._refreshCanvasDimensions();\n }\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n this._colorZoneStore.clear();\n for (const decoration of this._decorationService.decorations) {\n this._colorZoneStore.addDecoration(decoration);\n }\n this._ctx.lineWidth = 1;\n this._renderRulerOutline();\n const zones = this._colorZoneStore.zones;\n for (const zone of zones) {\n if (zone.position !== 'full') {\n this._renderColorZone(zone);\n }\n }\n for (const zone of zones) {\n if (zone.position === 'full') {\n this._renderColorZone(zone);\n }\n }\n this._shouldUpdateDimensions = false;\n this._shouldUpdateAnchor = false;\n }\n\n private _renderRulerOutline(): void {\n this._ctx.fillStyle = this._themeService.colors.overviewRulerBorder.css;\n this._ctx.fillRect(0, 0, Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showTopBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, 0, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, Constants.OVERVIEW_RULER_BORDER_WIDTH);\n }\n if (this._optionsService.rawOptions.scrollbar?.overviewRuler?.showBottomBorder) {\n this._ctx.fillRect(Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.width - Constants.OVERVIEW_RULER_BORDER_WIDTH, this._canvas.height);\n }\n }\n\n private _renderColorZone(zone: IColorZone): void {\n this._ctx.fillStyle = zone.color;\n this._ctx.fillRect(\n /* x */ drawX[zone.position || 'full'],\n /* y */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n (zone.startBufferLine / this._bufferService.buffers.active.lines.length) - drawHeight[zone.position || 'full'] / 2\n ),\n /* w */ drawWidth[zone.position || 'full'],\n /* h */ Math.round(\n (this._canvas.height - 1) * // -1 to ensure at least 2px are allowed for decoration on last line\n ((zone.endBufferLine - zone.startBufferLine) / this._bufferService.buffers.active.lines.length) + drawHeight[zone.position || 'full']\n )\n );\n }\n\n private _queueRefresh(updateCanvasDimensions?: boolean, updateAnchor?: boolean): void {\n if (this._store.isDisposed) {\n return;\n }\n this._shouldUpdateDimensions = updateCanvasDimensions || this._shouldUpdateDimensions;\n this._shouldUpdateAnchor = updateAnchor || this._shouldUpdateAnchor;\n if (this._animationFrame !== undefined) {\n return;\n }\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => {\n if (!this._store.isDisposed) {\n this._refreshDecorations();\n }\n this._animationFrame = undefined;\n });\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDimensions, IRenderDimensions } from './Types';\n\nexport function throwIfFalsy(value: T | undefined | null): T {\n if (!value) {\n throw new Error('value must not be falsy');\n }\n return value;\n}\n\nexport function isPowerlineGlyph(codepoint: number): boolean {\n // Only return true for Powerline symbols which require\n // different padding and should be excluded from minimum contrast\n // ratio standards\n return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;\n}\n\nexport function isRestrictedPowerlineGlyph(codepoint: number): boolean {\n return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;\n}\n\nfunction isNerdFontGlyph(codepoint: number): boolean {\n return 0xE000 <= codepoint && codepoint <= 0xF8FF;\n}\n\nfunction isBoxOrBlockGlyph(codepoint: number): boolean {\n return 0x2500 <= codepoint && codepoint <= 0x259F;\n}\n\nexport function isEmoji(codepoint: number): boolean {\n return (\n codepoint >= 0x1F600 && codepoint <= 0x1F64F || // Emoticons\n codepoint >= 0x1F300 && codepoint <= 0x1F5FF || // Misc Symbols and Pictographs\n codepoint >= 0x1F680 && codepoint <= 0x1F6FF || // Transport and Map\n codepoint >= 0x2600 && codepoint <= 0x26FF || // Misc symbols\n codepoint >= 0x2700 && codepoint <= 0x27BF || // Dingbats\n codepoint >= 0xFE00 && codepoint <= 0xFE0F || // Variation Selectors\n codepoint >= 0x1F900 && codepoint <= 0x1F9FF || // Supplemental Symbols and Pictographs\n codepoint >= 0x1F1E6 && codepoint <= 0x1F1FF\n );\n}\n\nexport function allowRescaling(codepoint: number | undefined, width: number, glyphSizeX: number, deviceCellWidth: number): boolean {\n return (\n // Is single cell width\n width === 1 &&\n // Glyph exceeds cell bounds, add 50% to avoid hurting readability by rescaling glyphs that\n // barely overlap\n glyphSizeX > Math.ceil(deviceCellWidth * 1.5) &&\n // Never rescale ascii\n codepoint !== undefined && codepoint > 0xFF &&\n // Never rescale emoji\n !isEmoji(codepoint) &&\n // Never rescale powerline or nerd fonts\n !isPowerlineGlyph(codepoint) && !isNerdFontGlyph(codepoint)\n );\n}\n\nexport function treatGlyphAsBackgroundColor(codepoint: number): boolean {\n return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);\n}\n\nexport function createRenderDimensions(): IRenderDimensions {\n return {\n css: {\n canvas: createDimension(),\n cell: createDimension()\n },\n device: {\n canvas: createDimension(),\n cell: createDimension(),\n char: {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }\n }\n };\n}\n\nfunction createDimension(): IDimensions {\n return {\n width: 0,\n height: 0\n };\n}\n\nexport function computeNextVariantOffset(cellWidth: number, lineWidth: number, currentOffset: number = 0): number {\n return (cellWidth - (Math.round(lineWidth) * 2 - currentOffset)) % (Math.round(lineWidth) * 2);\n}\n", "/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { throwIfFalsy } from '../shared/RendererUtils';\nimport { IDisposable } from '../../../common/Types';\nimport { FontWeight } from '../../../common/services/Services';\n\n\nexport const enum WidthCacheSettings {\n /** sentinel for unset values in flat cache */\n FLAT_UNSET = -9999,\n /** size of flat cache, size-1 equals highest codepoint handled by flat */\n FLAT_SIZE = 256,\n /** char repeat for measuring */\n REPEAT = 32\n}\n\n\nconst enum FontVariant {\n REGULAR = 0,\n BOLD = 1,\n ITALIC = 2,\n BOLD_ITALIC = 3\n}\n\nexport interface IWidthCacheFontVariantCanvas {\n setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void;\n measure(c: string): number;\n}\n\nexport class WidthCache implements IDisposable {\n // flat cache for regular variant up to CacheSettings.FLAT_SIZE\n // NOTE: ~4x faster access than holey (serving >>80% of terminal content)\n // It has a small memory footprint (only 1MB for full BMP caching),\n // still the sweet spot is not reached before touching 32k different codepoints,\n // thus we store the remaining <<20% of terminal data in a holey structure.\n protected _flat = new Float32Array(WidthCacheSettings.FLAT_SIZE);\n\n // holey cache for bold, italic and bold&italic for any string\n // FIXME: can grow really big over time (~8.5 MB for full BMP caching),\n // so a shared API across terminals is needed\n protected _holey: Map | undefined;\n\n private _font = '';\n private _fontSize = 0;\n private _weight: FontWeight = 'normal';\n private _weightBold: FontWeight = 'bold';\n private _canvasElements: IWidthCacheFontVariantCanvas[] = [];\n\n constructor(\n canvasFactory: () => IWidthCacheFontVariantCanvas = () => new WidthCacheFontVariantCanvas()\n ) {\n this._canvasElements = [\n canvasFactory(),\n canvasFactory(),\n canvasFactory(),\n canvasFactory()\n ];\n\n this.clear();\n }\n\n public dispose(): void {\n this._canvasElements.length = 0;\n this._holey = undefined; // free cache memory via GC\n }\n\n /**\n * Clear the width cache.\n */\n public clear(): void {\n this._flat.fill(WidthCacheSettings.FLAT_UNSET);\n // .clear() has some overhead, re-assign instead (>3 times faster)\n this._holey = new Map();\n }\n\n /**\n * Set the font for measuring.\n * Must be called for any changes on font settings.\n * Also clears the cache.\n */\n public setFont(font: string, fontSize: number, weight: FontWeight, weightBold: FontWeight): void {\n // skip if nothing changed\n if (\n font === this._font &&\n fontSize === this._fontSize &&\n weight === this._weight &&\n weightBold === this._weightBold\n ) {\n return;\n }\n\n this._font = font;\n this._fontSize = fontSize;\n this._weight = weight;\n this._weightBold = weightBold;\n\n this._canvasElements[FontVariant.REGULAR].setFont(font, fontSize, weight, false);\n this._canvasElements[FontVariant.BOLD].setFont(font, fontSize, weightBold, false);\n this._canvasElements[FontVariant.ITALIC].setFont(font, fontSize, weight, true);\n this._canvasElements[FontVariant.BOLD_ITALIC].setFont(font, fontSize, weightBold, true);\n\n this.clear();\n }\n\n /**\n * Get the render width for cell content `c` with current font settings.\n * `variant` denotes the font variant to be used.\n */\n public get(c: string, bold: boolean | number, italic: boolean | number): number {\n let cp: number;\n if (!bold && !italic && c.length === 1 && (cp = c.charCodeAt(0)) < WidthCacheSettings.FLAT_SIZE) {\n if (this._flat[cp] !== WidthCacheSettings.FLAT_UNSET) {\n return this._flat[cp];\n }\n const width = this._measure(c, 0);\n if (width > 0) {\n this._flat[cp] = width;\n }\n return width;\n }\n let key = c;\n if (bold) key += 'B';\n if (italic) key += 'I';\n let width = this._holey!.get(key);\n if (width === undefined) {\n let variant = 0;\n if (bold) variant |= FontVariant.BOLD;\n if (italic) variant |= FontVariant.ITALIC;\n width = this._measure(c, variant);\n if (width > 0) {\n this._holey!.set(key, width);\n }\n }\n return width;\n }\n\n protected _measure(c: string, variant: FontVariant): number {\n return this._canvasElements[variant].measure(c);\n }\n}\n\nexport class WidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {\n private _canvas: OffscreenCanvas | HTMLCanvasElement;\n private _ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n\n constructor() {\n if (typeof OffscreenCanvas !== 'undefined') {\n this._canvas = new OffscreenCanvas(1, 1);\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n } else {\n this._canvas = document.createElement('canvas');\n this._canvas.width = 1;\n this._canvas.height = 1;\n this._ctx = throwIfFalsy(this._canvas.getContext('2d'));\n }\n }\n\n public setFont(fontFamily: string, fontSize: number, fontWeight: FontWeight, italic: boolean): void {\n const fontStyle = italic ? 'italic' : '';\n this._ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`.trim();\n }\n\n public measure(c: string): number {\n return this._ctx.measureText(c).width;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, IColorRGB } from './Types';\n\nlet $r = 0;\nlet $g = 0;\nlet $b = 0;\nlet $a = 0;\n\nexport const NULL_COLOR: IColor = {\n css: '#00000000',\n rgba: 0\n};\n\n/**\n * Helper functions where the source type is \"channels\" (individual color channels as numbers).\n */\nexport namespace channels {\n export function toCss(r: number, g: number, b: number, a?: number): string {\n if (a !== undefined) {\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}${toPaddedHex(a)}`;\n }\n return `#${toPaddedHex(r)}${toPaddedHex(g)}${toPaddedHex(b)}`;\n }\n\n export function toRgba(r: number, g: number, b: number, a: number = 0xFF): number {\n // Note: The aggregated number is RGBA32 (BE), thus needs to be converted to ABGR32\n // on LE systems, before it can be used for direct 32-bit buffer writes.\n // >>> 0 forces an unsigned int\n return (r << 24 | g << 16 | b << 8 | a) >>> 0;\n }\n\n export function toColor(r: number, g: number, b: number, a?: number): IColor {\n return {\n css: channels.toCss(r, g, b, a),\n rgba: channels.toRgba(r, g, b, a)\n };\n }\n}\n\n/**\n * Helper functions where the source type is `IColor`.\n */\nexport namespace color {\n export function blend(bg: IColor, fg: IColor): IColor {\n $a = (fg.rgba & 0xFF) / 255;\n if ($a === 1) {\n return {\n css: fg.css,\n rgba: fg.rgba\n };\n }\n const fgR = (fg.rgba >> 24) & 0xFF;\n const fgG = (fg.rgba >> 16) & 0xFF;\n const fgB = (fg.rgba >> 8) & 0xFF;\n const bgR = (bg.rgba >> 24) & 0xFF;\n const bgG = (bg.rgba >> 16) & 0xFF;\n const bgB = (bg.rgba >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n const css = channels.toCss($r, $g, $b);\n const rgba = channels.toRgba($r, $g, $b);\n return { css, rgba };\n }\n\n export function isOpaque(color: IColor): boolean {\n return (color.rgba & 0xFF) === 0xFF;\n }\n\n export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {\n const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);\n if (!result) {\n return undefined;\n }\n return channels.toColor(\n (result >> 24 & 0xFF),\n (result >> 16 & 0xFF),\n (result >> 8 & 0xFF)\n );\n }\n\n export function opaque(color: IColor): IColor {\n const rgbaColor = (color.rgba | 0xFF) >>> 0;\n [$r, $g, $b] = rgba.toChannels(rgbaColor);\n return {\n css: channels.toCss($r, $g, $b),\n rgba: rgbaColor\n };\n }\n\n export function opacity(color: IColor, opacity: number): IColor {\n $a = Math.round(opacity * 0xFF);\n [$r, $g, $b] = rgba.toChannels(color.rgba);\n return {\n css: channels.toCss($r, $g, $b, $a),\n rgba: channels.toRgba($r, $g, $b, $a)\n };\n }\n\n export function multiplyOpacity(color: IColor, factor: number): IColor {\n $a = color.rgba & 0xFF;\n return opacity(color, ($a * factor) / 0xFF);\n }\n\n export function toColorRGB(color: IColor): IColorRGB {\n return [(color.rgba >> 24) & 0xFF, (color.rgba >> 16) & 0xFF, (color.rgba >> 8) & 0xFF];\n }\n}\n\n/**\n * Helper functions where the source type is \"css\" (string: '#rgb', '#rgba', '#rrggbb',\n * '#rrggbbaa').\n */\nexport namespace css {\n // Attempt to set get the shared canvas context\n let $ctx: CanvasRenderingContext2D | undefined;\n let $litmusColor: CanvasGradient | undefined;\n try {\n // This is guaranteed to run in the first window, so document should be correct\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n if (ctx) {\n $ctx = ctx;\n $ctx.globalCompositeOperation = 'copy';\n $litmusColor = $ctx.createLinearGradient(0, 0, 1, 1);\n }\n }\n catch {\n // noop\n }\n\n /**\n * Converts a css string to an IColor, this should handle all valid CSS color strings and will\n * throw if it's invalid. The ideal format to use is `#rrggbb[aa]` as it's the fastest to parse.\n *\n * Only `#rgb[a]`, `#rrggbb[aa]`, `rgb()` and `rgba()` formats are supported when run in a Node\n * environment.\n */\n export function toColor(css: string): IColor {\n // Formats: #rgb[a] and #rrggbb[aa]\n if (css.match(/#[\\da-f]{3,8}/i)) {\n switch (css.length) {\n case 4: { // #rgb\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n return channels.toColor($r, $g, $b);\n }\n case 5: { // #rgba\n $r = parseInt(css.slice(1, 2).repeat(2), 16);\n $g = parseInt(css.slice(2, 3).repeat(2), 16);\n $b = parseInt(css.slice(3, 4).repeat(2), 16);\n $a = parseInt(css.slice(4, 5).repeat(2), 16);\n return channels.toColor($r, $g, $b, $a);\n }\n case 7: // #rrggbb\n return {\n css,\n rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0\n };\n case 9: // #rrggbbaa\n return {\n css,\n rgba: parseInt(css.slice(1), 16) >>> 0\n };\n }\n }\n\n // Formats: rgb() or rgba()\n const rgbaMatch = css.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);\n if (rgbaMatch) {\n $r = parseInt(rgbaMatch[1], 10);\n $g = parseInt(rgbaMatch[2], 10);\n $b = parseInt(rgbaMatch[3], 10);\n $a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);\n return channels.toColor($r, $g, $b, $a);\n }\n\n // Handle the \"transparent\" keyword\n if (css === 'transparent') {\n return {\n css: 'transparent',\n rgba: 0x00000000\n };\n }\n\n // Validate the context is available for canvas-based color parsing\n if (!$ctx || !$litmusColor) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Validate the color using canvas fillStyle\n // See https://html.spec.whatwg.org/multipage/canvas.html#fill-and-stroke-styles\n $ctx.fillStyle = $litmusColor;\n $ctx.fillStyle = css;\n if (typeof $ctx.fillStyle !== 'string') {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n $ctx.fillRect(0, 0, 1, 1);\n [$r, $g, $b, $a] = $ctx.getImageData(0, 0, 1, 1).data;\n\n // Validate the color is non-transparent as color hue gets lost when drawn to the canvas\n if ($a !== 0xFF) {\n throw new Error('css.toColor: Unsupported css format');\n }\n\n // Extract the color from the canvas' fillStyle property which exposes the color value in rgba()\n // format\n // See https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color\n return {\n rgba: channels.toRgba($r, $g, $b, $a),\n css\n };\n }\n}\n\n/**\n * Helper functions where the source type is \"rgb\" (number: 0xrrggbb).\n */\nexport namespace rgb {\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param rgb The color to use.\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance(rgb: number): number {\n return relativeLuminance2(\n (rgb >> 16) & 0xFF,\n (rgb >> 8 ) & 0xFF,\n (rgb ) & 0xFF);\n }\n\n /**\n * Gets the relative luminance of an RGB color, this is useful in determining the contrast ratio\n * between two colors.\n * @param r The red channel (0x00 to 0xFF).\n * @param g The green channel (0x00 to 0xFF).\n * @param b The blue channel (0x00 to 0xFF).\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\n export function relativeLuminance2(r: number, g: number, b: number): number {\n const rs = r / 255;\n const gs = g / 255;\n const bs = b / 255;\n const rr = rs <= 0.03928 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const rg = gs <= 0.03928 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const rb = bs <= 0.03928 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n return rr * 0.2126 + rg * 0.7152 + rb * 0.0722;\n }\n}\n\n/**\n * Helper functions where the source type is \"rgba\" (number: 0xrrggbbaa).\n */\nexport namespace rgba {\n export function blend(bg: number, fg: number): number {\n $a = (fg & 0xFF) / 0xFF;\n if ($a === 1) {\n return fg;\n }\n const fgR = (fg >> 24) & 0xFF;\n const fgG = (fg >> 16) & 0xFF;\n const fgB = (fg >> 8) & 0xFF;\n const bgR = (bg >> 24) & 0xFF;\n const bgG = (bg >> 16) & 0xFF;\n const bgB = (bg >> 8) & 0xFF;\n $r = bgR + Math.round((fgR - bgR) * $a);\n $g = bgG + Math.round((fgG - bgG) * $a);\n $b = bgB + Math.round((fgB - bgB) * $a);\n return channels.toRgba($r, $g, $b);\n }\n\n /**\n * Given a foreground color and a background color, either increase or reduce the luminance of the\n * foreground color until the specified contrast ratio is met. If pure white or black is hit\n * without the contrast ratio being met, go the other direction using the background color as the\n * foreground color and take either the first or second result depending on which has the higher\n * contrast ratio.\n *\n * `undefined` will be returned if the contrast ratio is already met.\n *\n * @param bgRgba The background color in rgba format.\n * @param fgRgba The foreground color in rgba format.\n * @param ratio The contrast ratio to achieve.\n */\n export function ensureContrastRatio(bgRgba: number, fgRgba: number, ratio: number): number | undefined {\n const bgL = rgb.relativeLuminance(bgRgba >> 8);\n const fgL = rgb.relativeLuminance(fgRgba >> 8);\n const cr = contrastRatio(bgL, fgL);\n if (cr < ratio) {\n if (fgL < bgL) {\n const resultA = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n const resultA = increaseLuminance(bgRgba, fgRgba, ratio);\n const resultARatio = contrastRatio(bgL, rgb.relativeLuminance(resultA >> 8));\n if (resultARatio < ratio) {\n const resultB = reduceLuminance(bgRgba, fgRgba, ratio);\n const resultBRatio = contrastRatio(bgL, rgb.relativeLuminance(resultB >> 8));\n return resultARatio > resultBRatio ? resultA : resultB;\n }\n return resultA;\n }\n return undefined;\n }\n\n export function reduceLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to reducing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR > 0 || fgG > 0 || fgB > 0)) {\n // Reduce by 10% until the ratio is hit\n fgR -= Math.max(0, Math.ceil(fgR * 0.1));\n fgG -= Math.max(0, Math.ceil(fgG * 0.1));\n fgB -= Math.max(0, Math.ceil(fgB * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function increaseLuminance(bgRgba: number, fgRgba: number, ratio: number): number {\n // This is a naive but fast approach to increasing luminance as converting to\n // HSL and back is expensive\n const bgR = (bgRgba >> 24) & 0xFF;\n const bgG = (bgRgba >> 16) & 0xFF;\n const bgB = (bgRgba >> 8) & 0xFF;\n let fgR = (fgRgba >> 24) & 0xFF;\n let fgG = (fgRgba >> 16) & 0xFF;\n let fgB = (fgRgba >> 8) & 0xFF;\n let cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n while (cr < ratio && (fgR < 0xFF || fgG < 0xFF || fgB < 0xFF)) {\n // Increase by 10% until the ratio is hit\n fgR = Math.min(0xFF, fgR + Math.ceil((255 - fgR) * 0.1));\n fgG = Math.min(0xFF, fgG + Math.ceil((255 - fgG) * 0.1));\n fgB = Math.min(0xFF, fgB + Math.ceil((255 - fgB) * 0.1));\n cr = contrastRatio(rgb.relativeLuminance2(fgR, fgG, fgB), rgb.relativeLuminance2(bgR, bgG, bgB));\n }\n return (fgR << 24 | fgG << 16 | fgB << 8 | 0xFF) >>> 0;\n }\n\n export function toChannels(value: number): [number, number, number, number] {\n return [(value >> 24) & 0xFF, (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF];\n }\n}\n\nexport function toPaddedHex(c: number): string {\n const s = c.toString(16);\n return s.length < 2 ? '0' + s : s;\n}\n\n/**\n * Gets the contrast ratio between two relative luminance values.\n * @param l1 The first relative luminance.\n * @param l2 The second relative luminance.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function contrastRatio(l1: number, l2: number): number {\n if (l1 < l2) {\n return (l2 + 0.05) / (l1 + 0.05);\n }\n return (l1 + 0.05) / (l2 + 0.05);\n}\n", "/// \n/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderService, IThemeService } from '../services/Services';\nimport { IBufferService, ICoreService, IOptionsService, IUnicodeService } from '../../common/services/Services';\nimport { WidthCacheFontVariantCanvas } from '../renderer/dom/WidthCache';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable } from '../../common/Lifecycle';\nimport { color } from '../../common/Color';\nimport { C0 } from '../../common/data/EscapeSequences';\n\ninterface IPosition {\n start: number;\n end: number;\n}\n\ninterface IPendingComposition {\n transactionId: number;\n finalizerTimer?: ReturnType;\n lifecycleSettled: boolean;\n sessionEnded: boolean;\n position: IPosition;\n suffix: string;\n dataAlreadySent: string;\n compositionData: string;\n endData: string;\n inputData: string;\n keypressData: string;\n keypressMayOverlapComposition: boolean;\n expectsPostCompositionInput: boolean;\n nextCompositionStart?: number;\n}\n\nconst XTERM_COMPOSITION_SESSION_START_EVENT = 'xterm-composition-session-start';\nconst XTERM_COMPOSITION_SESSION_END_EVENT = 'xterm-composition-session-end';\nconst XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT =\n 'xterm-composition-transaction-accepted';\n/**\n * Encapsulates the logic for handling compositionstart, compositionupdate and compositionend\n * events, displaying the in-progress composition to the UI and forwarding the final composition\n * to the handler.\n */\nexport class CompositionHelper {\n /**\n * Whether input composition is currently happening, eg. via a mobile keyboard, speech input or\n * IME. This variable determines whether the compositionText should be displayed on the UI.\n */\n private _isComposing: boolean;\n public get isComposing(): boolean { return this._isComposing; }\n public get hasPendingCompositionFinalization(): boolean {\n return this._pendingComposition !== undefined;\n }\n public get _isSendingComposition(): boolean {\n return this.hasPendingCompositionFinalization;\n }\n public get _pendingKeypressData(): string {\n return this._pendingComposition?.keypressData ?? '';\n }\n\n /**\n * The position within the input textarea's value of the current composition.\n */\n private _compositionPosition: IPosition;\n\n /**\n * Text that existed after the composing range when composition started.\n * This is used to avoid treating existing trailing text as new input.\n */\n private _compositionSuffix: string;\n\n /**\n * Data already sent due to keydown event.\n */\n private _dataAlreadySent: string;\n\n private _pendingComposition?: IPendingComposition;\n\n private _isAwaitingCompositionEnd: boolean;\n\n private _compositionInputData: string;\n\n private _lastCompositionData: string;\n\n private _compositionStartValue: string;\n\n private _compositionStartSelection: IPosition;\n\n private _compositionHasObservedProgress: boolean;\n\n private _canceledKey?: Pick;\n\n /**\n * The pending textarea change timer, if any.\n */\n private _textareaChangeTimer?: number;\n\n /**\n * Whether the IME consumed the last keydown and still owes the commit it produced. Nothing is\n * forwarded for such a keydown, so the commit is claimed by whichever observes it first.\n */\n private _imeKeydownAwaitingCommit: boolean;\n\n /**\n * Identifies the composition transaction that owns deferred work.\n */\n private _compositionTransactionId: number;\n\n /**\n * Timers that still own deferred composition state.\n */\n private _compositionTimers: Set>;\n\n private _compositionPositionTimer?: ReturnType;\n\n private _compositionViewTimer?: ReturnType;\n\n private _compositionEndTimer?: ReturnType;\n\n private _preeditRenderer?: CompositionPreeditRenderer;\n\n /** The preedit's own span, used to anchor the native candidate window. */\n private _compositionPreedit?: HTMLElement;\n\n /** The rendered row tail, set only while the cursor sits mid-line. */\n private _compositionRemainder?: HTMLElement;\n\n /** The insertion caret painted above the renderer cursor the composition view covers. */\n private _compositionCaret?: HTMLElement;\n\n // Keep the six-argument form callable: upstream's own CompositionHelper.test.ts constructs\n // this class directly, and `.npmignore` strips src/**/*.test.ts from the published tarball, so\n // the shipped patch has no hunk that could update that call. Dropping this overload fails the\n // upstream build with TS2554. The theme service is therefore optional, and every color read\n // below keeps the stock fallback that path needs.\n constructor(\n textarea: HTMLTextAreaElement,\n compositionView: HTMLElement,\n bufferService: IBufferService,\n optionsService: IOptionsService,\n coreService: ICoreService,\n renderService: IRenderService\n );\n constructor(\n private readonly _textarea: HTMLTextAreaElement,\n private readonly _compositionView: HTMLElement,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreService private readonly _coreService: ICoreService,\n @IRenderService private readonly _renderService: IRenderService,\n @IThemeService private readonly _themeService?: IThemeService,\n @IUnicodeService private readonly _unicodeService?: IUnicodeService\n ) {\n this._isComposing = false;\n this._isAwaitingCompositionEnd = false;\n this._compositionPosition = { start: 0, end: 0 };\n this._compositionSuffix = '';\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionStartValue = '';\n this._compositionStartSelection = { start: 0, end: 0 };\n this._compositionHasObservedProgress = false;\n this._compositionTransactionId = 0;\n this._compositionTimers = new Set();\n this._imeKeydownAwaitingCommit = false;\n }\n\n /**\n * Handles the compositionstart event, activating the composition view.\n */\n public compositionstart(): void {\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = undefined;\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = undefined;\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n // It's important to use the selection here instead of textarea length to avoid conflicts with\n // screen reader mode\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n this._compositionPosition.start = Math.min(start, end);\n this._compositionPosition.end = Math.max(start, end);\n this._compositionStartValue = this._textarea.value;\n this._compositionStartSelection = { start, end };\n this._compositionHasObservedProgress = false;\n // A real session owns everything it commits, so no keydown is left owing one.\n this._imeKeydownAwaitingCommit = false;\n if (this._pendingComposition) {\n this._pendingComposition.nextCompositionStart = this._compositionPosition.start;\n }\n this._compositionTransactionId++;\n this._isComposing = true;\n this._isAwaitingCompositionEnd = true;\n this._compositionSuffix = this._textarea.value.substring(this._compositionPosition.end);\n this._resetCompositionView();\n this._dataAlreadySent = '';\n this._compositionInputData = '';\n this._lastCompositionData = '';\n this._compositionView.classList.add('active');\n this._dispatchCompositionSessionEvent(new CustomEvent(XTERM_COMPOSITION_SESSION_START_EVENT, {\n bubbles: true,\n detail: { id: this._compositionTransactionId }\n }));\n }\n\n /**\n * Handles the compositionupdate event, updating the composition view.\n * @param ev The event.\n */\n public compositionupdate(ev: Pick): void {\n if (ev.data && !this._isComposing) {\n this.compositionstart();\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (ev.data?.length > 0) {\n this._lastCompositionData = ev.data;\n }\n this._renderCompositionView(ev.data ?? '');\n // Some IMEs resume without compositionstart; keep that inferred transaction visible until\n // compositionend settles it. An empty update hides the overlay without ending the transaction.\n this._compositionView.classList.toggle('active', Boolean(ev.data));\n this.updateCompositionElements();\n const transactionId = this._compositionTransactionId;\n this._cancelDeferredTimer(this._compositionPositionTimer);\n this._compositionPositionTimer = this._defer(() => {\n if (this._isComposing && this._compositionTransactionId === transactionId) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n });\n }\n\n /**\n * Handles the compositionend event, hiding the composition view and sending the composition to\n * the handler.\n */\n public compositionend(ev?: Pick): boolean {\n if (!this._isAwaitingCompositionEnd) {\n return false;\n }\n if (!this._isComposing) {\n const pending = this._pendingComposition;\n if (pending?.transactionId === this._compositionTransactionId) {\n pending.endData = ev?.data ?? '';\n this._updatePostCompositionInputExpectation(pending);\n }\n return false;\n }\n const endData = ev?.data ?? '';\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n const pending = this._pendingComposition;\n if (pending && pending.transactionId !== this._compositionTransactionId) {\n this._sendPendingComposition(pending);\n }\n this._deferCompositionEnd(endData);\n return false;\n }\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n this._finalizeComposition(true, endData);\n return true;\n }\n\n public blur(): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n this._compositionEndTimer = undefined;\n if (this._isComposing) {\n const end = this._textarea.selectionEnd ?? this._textarea.value.length;\n this._compositionPosition.end = Math.max(this._compositionPosition.start, end);\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n this._finalizeComposition(false);\n }\n }\n\n public dispose(): void {\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n for (const timer of this._compositionTimers) {\n clearTimeout(timer);\n }\n this._compositionTimers.clear();\n this._compositionPositionTimer = undefined;\n this._compositionViewTimer = undefined;\n this._compositionEndTimer = undefined;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionTransactionId++;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._preeditRenderer?.dispose();\n this._preeditRenderer = undefined;\n }\n\n /**\n * Handles the keydown event, routing any necessary events to the CompositionHelper functions.\n * @param ev The keydown event.\n * @returns Whether the Terminal should continue processing the keydown event.\n */\n public keydown(ev: KeyboardEvent): boolean {\n if (this._canceledKey?.code === ev.code && this._canceledKey.timeStamp === ev.timeStamp) {\n this._canceledKey = undefined;\n return false;\n }\n if (ev.key === 'Escape' && (this._isComposing || this.hasPendingCompositionFinalization)) {\n this._canceledKey = { code: ev.code, timeStamp: ev.timeStamp };\n this._cancelComposition();\n return false;\n }\n if (this._isComposing || this.hasPendingCompositionFinalization) {\n // A key the IME swallows can also empty the preedit \u2014 backspacing over the last radical of a\n // Cangjie composition \u2014 and some IMEs report that with no composition event at all.\n this._deferPreeditResync(this._composedRegionLength() > 0);\n if (ev.keyCode === 20 || ev.keyCode === 229) {\n // 20 is CapsLock, 229 is Enter\n // Continue composing if the keyCode is the \"composition character\"\n return false;\n }\n if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {\n // Continue composing if the keyCode is a modifier key\n return false;\n }\n // Finish composition immediately. This is mainly here for the case where enter is\n // pressed and the handler needs to be triggered before the command is executed.\n this._finalizeComposition(false);\n }\n\n // Nothing is forwarded for a keydown the IME consumed, so it is left owing its commit; any\n // other keydown either forwards its own text or produces none, and clears the debt.\n this._imeKeydownAwaitingCommit = ev.keyCode === 229;\n\n if (ev.keyCode === 229) {\n // If the \"composition character\" is used but gets to this point it means a non-composition\n // character (eg. numbers and punctuation) was pressed when the IME was active.\n this._handleAnyTextareaChanges();\n return false;\n }\n\n return true;\n }\n\n /**\n * Defers keypress text while a composition finalizer is pending so all input is emitted once\n * after reconciliation with the final textarea candidate.\n */\n public keypress(text: string): boolean {\n const pending = this._pendingComposition;\n if (!pending) {\n return false;\n }\n if (pending.keypressMayOverlapComposition) {\n pending.keypressData += text;\n return true;\n }\n if (pending.expectsPostCompositionInput && pending.keypressData.length === 0) {\n pending.keypressData = text;\n return true;\n }\n this._sendPendingComposition(pending);\n return false;\n }\n\n public input(text: string): boolean {\n if (this._isComposing) {\n this._compositionHasObservedProgress ||= this._hasCompositionProgress();\n this._compositionInputData += text;\n return true;\n }\n const pending = this._pendingComposition;\n if (!pending) {\n return this._claimImeKeydownCommit(text);\n }\n if (pending.expectsPostCompositionInput) {\n pending.inputData += text;\n pending.expectsPostCompositionInput = false;\n this._sendPendingComposition(pending);\n return true;\n }\n const repeatsPendingTextareaInput =\n text.length > 0 &&\n this._getPendingTextareaInput(pending) === text &&\n this._getPendingTextareaInput(pending, true) === text;\n this._sendPendingComposition(pending);\n if (!repeatsPendingTextareaInput) {\n this._coreService.triggerDataEvent(text, true);\n }\n return true;\n }\n\n /**\n * Settles the commit a keydown the IME consumed still owes. That commit normally arrives as the\n * deferred textarea diff, but an asynchronous IME can deliver it after the diff has already run\n * and found the textarea unchanged, and with the key still down the terminal drops the input\n * event instead (#12099). Whichever path sees the commit first sends it and cancels the other, so\n * an IME that commits before the diff runs still sends once.\n */\n private _claimImeKeydownCommit(text: string): boolean {\n if (!this._imeKeydownAwaitingCommit) {\n return false;\n }\n this._imeKeydownAwaitingCommit = false;\n if (this._textareaChangeTimer !== undefined) {\n clearTimeout(this._textareaChangeTimer);\n this._textareaChangeTimer = undefined;\n }\n this._coreService.triggerDataEvent(text, true);\n return true;\n }\n\n /**\n * Finalizes the composition, resuming regular input actions. This is called when a composition\n * is ending.\n * @param waitForPropagation Whether to wait for events to propagate before sending\n * the input. This should be false if a non-composition keystroke is entered before the\n * compositionend event is triggered, such as enter, so that the composition is sent before\n * the command is executed.\n */\n private _finalizeComposition(waitForPropagation: boolean, endData: string = ''): void {\n const wasComposing = this._isComposing;\n this._compositionView.classList.remove('active');\n // Cleared, not just hidden: a rendered tail left in the view is stale DOM the next composition\n // would have to correct before its own first update lands.\n this._resetCompositionView();\n this._isComposing = false;\n if (waitForPropagation && !wasComposing) {\n return;\n }\n\n if (!waitForPropagation) {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition, true);\n }\n if (wasComposing) {\n const input = this._getCompositionInput(\n this._compositionPosition.start + this._dataAlreadySent.length,\n this._compositionSuffix\n );\n this._sendCompositionInput(this._compositionTransactionId, input);\n }\n } else {\n if (this._pendingComposition) {\n this._sendPendingComposition(this._pendingComposition);\n }\n const pending: IPendingComposition = {\n transactionId: this._compositionTransactionId,\n lifecycleSettled: false,\n sessionEnded: false,\n position: {\n start: this._compositionPosition.start,\n end: this._compositionPosition.end\n },\n suffix: this._compositionSuffix,\n dataAlreadySent: this._dataAlreadySent,\n compositionData: this._lastCompositionData,\n endData,\n inputData: this._compositionInputData,\n keypressData: '',\n keypressMayOverlapComposition:\n this._lastCompositionData.length === 0 && endData.length === 0,\n expectsPostCompositionInput: false\n };\n this._updatePostCompositionInputExpectation(pending);\n this._pendingComposition = pending;\n\n // Since composition* events happen before the changes take place in the textarea on most\n // browsers, use a setTimeout with 0ms time to allow the native compositionend event to\n // complete. This ensures the correct character is retrieved.\n // This solution was used because:\n // - The compositionend event's data property is unreliable, at least on Chromium\n // - The last compositionupdate event's data property does not always accurately describe\n // the character, a counter example being Korean where an ending consonsant can move to\n // the following character if the following input is a vowel.\n pending.finalizerTimer = this._defer(() => {\n pending.finalizerTimer = undefined;\n if (this._compositionTransactionId === pending.transactionId) {\n this._isAwaitingCompositionEnd = false;\n }\n if (this._pendingComposition === pending) {\n this._sendPendingComposition(pending, true);\n }\n });\n }\n }\n\n private _sendPendingComposition(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): void {\n this._cancelPendingFinalizer(pending);\n if (this._pendingComposition === pending) {\n this._pendingComposition = undefined;\n }\n const textareaInput = this._getPendingTextareaInput(pending, includeFollowingInput);\n const observedInput = this._removeAlreadySentData(\n pending.inputData || pending.keypressData,\n pending.dataAlreadySent\n );\n // Why: with no textarea, end, input, or keypress evidence the composition\n // was cancelled (e.g. Backspace over the whole preedit); stale\n // compositionupdate data must not be replayed as committed text.\n const input = this._mergeTextObservations(\n textareaInput || pending.endData || (observedInput ? pending.compositionData : ''),\n observedInput,\n pending.keypressMayOverlapComposition\n );\n this._sendCompositionInput(pending.transactionId, input, !pending.sessionEnded);\n this._settlePendingComposition(pending);\n }\n\n private _cancelPendingFinalizer(pending: IPendingComposition): void {\n if (pending.finalizerTimer === undefined) {\n return;\n }\n clearTimeout(pending.finalizerTimer);\n this._compositionTimers.delete(pending.finalizerTimer);\n pending.finalizerTimer = undefined;\n }\n\n private _settlePendingComposition(pending: IPendingComposition): void {\n if (pending.lifecycleSettled) {\n return;\n }\n pending.lifecycleSettled = true;\n this._dispatchCompositionTransactionSettled();\n }\n\n private _mergeTextObservations(\n candidate: string,\n observed: string,\n findShortestOrder: boolean\n ): string {\n if (!observed || candidate.includes(observed)) {\n return candidate;\n }\n if (!candidate || observed.includes(candidate)) {\n return observed;\n }\n if (findShortestOrder) {\n let candidateFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n candidateFirstOverlap > 0 &&\n !candidate.endsWith(observed.substring(0, candidateFirstOverlap))\n ) {\n candidateFirstOverlap--;\n }\n let observedFirstOverlap = Math.min(candidate.length, observed.length);\n while (\n observedFirstOverlap > 0 &&\n !observed.endsWith(candidate.substring(0, observedFirstOverlap))\n ) {\n observedFirstOverlap--;\n }\n return candidateFirstOverlap > observedFirstOverlap\n ? candidate + observed.substring(candidateFirstOverlap)\n : observed + candidate.substring(observedFirstOverlap);\n }\n let overlap = Math.min(candidate.length, observed.length);\n while (overlap > 0 && !candidate.endsWith(observed.substring(0, overlap))) {\n overlap--;\n }\n return candidate + observed.substring(overlap);\n }\n\n private _updatePostCompositionInputExpectation(pending: IPendingComposition): void {\n pending.expectsPostCompositionInput =\n (pending.endData.length > 0 || pending.compositionData.length > 0) &&\n pending.inputData.length === 0 &&\n this._getPendingTextareaInput(pending).length === 0;\n }\n\n private _getPendingTextareaInput(\n pending: IPendingComposition,\n includeFollowingInput: boolean = false\n ): string {\n const value = this._textarea.value;\n const start = pending.position.start + pending.dataAlreadySent.length;\n if (pending.nextCompositionStart !== undefined) {\n return value.substring(start, Math.max(start, pending.nextCompositionStart));\n }\n const suffixEnd =\n pending.suffix.length > 0 && value.endsWith(pending.suffix)\n ? value.length - pending.suffix.length\n : value.length;\n const compositionLength = (pending.endData || pending.compositionData).length;\n const observedEnd = includeFollowingInput\n ? suffixEnd\n : Math.max(pending.position.end, start + compositionLength);\n return value.substring(start, Math.max(start, Math.min(suffixEnd, observedEnd)));\n }\n\n private _getCompositionInput(start: number, suffix: string): string {\n const value = this._textarea.value;\n const valueEnd =\n suffix.length > 0 && value.endsWith(suffix) ? value.length - suffix.length : value.length;\n return value.substring(start, Math.max(start, valueEnd));\n }\n\n private _removeAlreadySentData(input: string, dataAlreadySent: string): string {\n if (dataAlreadySent.length === 0) {\n return input;\n }\n if (input.startsWith(dataAlreadySent)) {\n return input.substring(dataAlreadySent.length);\n }\n return dataAlreadySent.includes(input) ? '' : input;\n }\n\n private _cancelComposition(): void {\n const pending = this._pendingComposition;\n if (\n pending &&\n this._isComposing &&\n pending.transactionId !== this._compositionTransactionId\n ) {\n this._sendPendingComposition(pending);\n }\n const transactionId = this._isComposing\n ? this._compositionTransactionId\n : this._pendingComposition?.transactionId ?? 0;\n const settlesPending = pending !== undefined && this._pendingComposition === pending;\n this._pendingComposition = undefined;\n this._isAwaitingCompositionEnd = false;\n this._isComposing = false;\n this._compositionView.classList.remove('active');\n this._resetCompositionView();\n this._textarea.value =\n this._textarea.value.substring(0, this._compositionPosition.start) + this._compositionSuffix;\n this._sendCompositionInput(transactionId, '');\n if (settlesPending && pending) {\n this._settlePendingComposition(pending);\n }\n }\n\n private _sendCompositionInput(\n transactionId: number,\n input: string,\n dispatchSessionEnd: boolean = true\n ): void {\n let prevented = false;\n if (dispatchSessionEnd) {\n const event = new CustomEvent(XTERM_COMPOSITION_SESSION_END_EVENT, {\n bubbles: true,\n cancelable: true,\n detail: { id: transactionId, data: input }\n });\n this._dispatchCompositionSessionEvent(event);\n prevented = event.defaultPrevented;\n }\n if (input.length > 0 && !prevented) {\n this._coreService.triggerDataEvent(input, true);\n }\n }\n\n private _endPendingCompositionSession(pending: IPendingComposition): void {\n if (pending.sessionEnded) {\n return;\n }\n pending.sessionEnded = true;\n const input =\n this._getPendingTextareaInput(pending) ||\n pending.endData ||\n pending.compositionData;\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_SESSION_END_EVENT,\n {\n bubbles: true,\n cancelable: true,\n detail: {\n id: pending.transactionId,\n data: input,\n dataPendingReconciliation: true\n }\n }\n ));\n }\n\n private _dispatchCompositionSessionEvent(event: CustomEvent): void {\n if (typeof this._textarea.dispatchEvent === 'function') {\n this._textarea.dispatchEvent(event);\n }\n }\n\n private _dispatchCompositionTransactionSettled(): void {\n this._dispatchCompositionSessionEvent(new CustomEvent(\n 'xterm-composition-transaction-settled',\n { bubbles: true }\n ));\n }\n\n private _deferCompositionEnd(endData: string): void {\n this._cancelDeferredTimer(this._compositionEndTimer);\n const transactionId = this._compositionTransactionId;\n const timer = this._defer(() => {\n if (\n this._compositionEndTimer !== timer ||\n !this._isComposing ||\n this._compositionTransactionId !== transactionId\n ) {\n return;\n }\n this._compositionEndTimer = undefined;\n if (!this._compositionEndBelongsToCurrentTransaction(endData)) {\n if (endData.length === 0 && !this._hasCompositionProgress()) {\n this._cancelComposition();\n }\n return;\n }\n this._finalizeComposition(true, endData);\n this._dispatchCompositionSessionEvent(new CustomEvent(\n XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT,\n { bubbles: true }\n ));\n const pending = this._pendingComposition;\n if (pending?.transactionId === transactionId) {\n this._sendPendingComposition(pending, true);\n }\n });\n this._compositionEndTimer = timer;\n }\n\n /** How much of the textarea the IME currently owns; 0 means there is no preedit left. */\n private _composedRegionLength(): number {\n const end = this._textarea.value.length - this._compositionSuffix.length;\n return Math.max(0, end - this._compositionPosition.start);\n }\n\n /**\n * Re-derives the preedit from the textarea once the key that changed it has settled, and treats\n * a composition emptied that way as cancelled. Mirrors how native terminals clear a preedit on\n * the empty-marked-text state instead of on a specific key.\n */\n private _deferPreeditResync(hadPreedit: boolean): void {\n if (!hadPreedit || !this._isComposing) {\n return;\n }\n const transactionId = this._compositionTransactionId;\n this._defer(() => {\n if (\n this._isComposing &&\n this._compositionTransactionId === transactionId &&\n this._composedRegionLength() === 0\n ) {\n this._cancelComposition();\n }\n });\n }\n\n private _hasCompositionProgress(): boolean {\n const start = this._textarea.selectionStart ?? this._textarea.value.length;\n const end = this._textarea.selectionEnd ?? start;\n return this._compositionHasObservedProgress || (\n this._textarea.value !== this._compositionStartValue ||\n start !== this._compositionStartSelection.start ||\n end !== this._compositionStartSelection.end\n );\n }\n\n private _compositionEndBelongsToCurrentTransaction(endData: string): boolean {\n return (\n this._hasCompositionProgress() ||\n (endData.length > 0 && endData === this._lastCompositionData)\n );\n }\n\n private _defer(callback: () => void): ReturnType {\n const timer = setTimeout(() => {\n this._compositionTimers.delete(timer);\n callback();\n }, 0);\n this._compositionTimers.add(timer);\n return timer;\n }\n\n private _cancelDeferredTimer(timer?: ReturnType): void {\n if (timer === undefined) {\n return;\n }\n clearTimeout(timer);\n this._compositionTimers.delete(timer);\n }\n\n /**\n * Apply any changes made to the textarea after the current event chain is allowed to complete.\n * This should be called when not currently composing but a keydown event with the \"composition\n * character\" (229) is triggered, in order to allow non-composition text to be entered when an\n * IME is active.\n */\n private _handleAnyTextareaChanges(): void {\n if (this._textareaChangeTimer) {\n return;\n }\n const oldValue = this._textarea.value;\n this._textareaChangeTimer = window.setTimeout(() => {\n this._textareaChangeTimer = undefined;\n // Ignore if a composition has started since the timeout\n if (!this._isComposing) {\n const newValue = this._textarea.value;\n\n const diff = newValue.replace(oldValue, '');\n\n if (newValue !== oldValue) {\n this._imeKeydownAwaitingCommit = false;\n }\n this._dataAlreadySent = diff;\n\n if (newValue.length > oldValue.length) {\n this._coreService.triggerDataEvent(diff, true);\n } else if (newValue.length < oldValue.length) {\n this._coreService.triggerDataEvent(`${C0.DEL}`, true);\n } else if ((newValue.length === oldValue.length) && (newValue !== oldValue)) {\n this._coreService.triggerDataEvent(newValue, true);\n }\n\n }\n }, 0);\n }\n\n /**\n * Renders the preedit into the view and, when the cursor sits mid-line, the rest of the row\n * after it, so a composition reads as inserted text pushing the tail right rather than an opaque\n * box hiding the character under the cursor. Nothing reaches the pty while composing, so those\n * cells still hold their characters; only what the overlay shows changes.\n */\n private _renderCompositionView(data: string): void {\n if (!data) {\n this._resetCompositionView();\n return;\n }\n const doc = this._compositionView.ownerDocument;\n const preedit = doc.createElement('span');\n preedit.className = 'xterm-composition-preedit';\n // Underlined so the composing text stays distinguishable from the tail it pushed right.\n preedit.style.flexShrink = '0';\n preedit.style.textDecoration = 'underline';\n preedit.textContent = `\u200E${data}\u200E`;\n const caret = doc.createElement('span');\n caret.className = 'xterm-composition-caret';\n caret.setAttribute('aria-hidden', 'true');\n this._compositionView.replaceChildren(preedit, caret);\n this._compositionPreedit = preedit;\n this._compositionCaret = caret;\n this._compositionRemainder = undefined;\n this._renderCompositionRemainder(this._getRowRemainderText());\n this._styleCompositionCaret();\n }\n\n private _renderCompositionRemainder(data: string): void {\n if (!data) {\n this._compositionRemainder?.remove();\n this._compositionRemainder = undefined;\n return;\n }\n if (!this._compositionRemainder) {\n const remainder = this._compositionView.ownerDocument.createElement('span');\n remainder.className = 'xterm-composition-remainder';\n // Preserve padding cells before the trailing glyphs.\n remainder.style.whiteSpace = 'pre';\n this._compositionView.appendChild(remainder);\n this._compositionRemainder = remainder;\n }\n this._compositionRemainder.textContent = data;\n }\n\n /** The committed row text from the cursor rightwards \u2014 what a mid-line preedit would cover. */\n private _getRowRemainderText(): string {\n const buffer = this._bufferService.buffer;\n if (!buffer.isCursorInViewport) {\n return '';\n }\n const line = buffer.lines.get(buffer.ybase + buffer.y);\n // The explicit end column keeps this off the line string cache, whose self-renewing\n // idle-clear timer the composition path must not arm.\n return line\n ? line.translateToString(true, Math.min(buffer.x, this._bufferService.cols - 1), line.length)\n : '';\n }\n\n private _styleCompositionCaret(): void {\n const caret = this._compositionCaret;\n if (!caret) {\n return;\n }\n const width = Math.max(1, this._optionsService.rawOptions.cursorWidth);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const colors = this._themeService?.colors;\n const cursor = colors && (\n color.ensureContrastRatio(colors.background, colors.cursor, 3) ?? colors.cursor\n );\n caret.style.backgroundColor = cursor?.css ?? '#FFF';\n caret.style.display = 'inline-block';\n caret.style.flexShrink = '0';\n caret.style.height = cellHeight + 'px';\n caret.style.marginLeft = -width + 'px';\n caret.style.verticalAlign = 'top';\n caret.style.width = width + 'px';\n }\n\n private _resetCompositionView(): void {\n this._preeditRenderer?.clear();\n this._compositionView.textContent = '';\n this._compositionPreedit = undefined;\n this._compositionRemainder = undefined;\n this._compositionCaret = undefined;\n this._compositionView.style.display = '';\n this._compositionView.style.justifyContent = '';\n }\n\n /**\n * The theme background with any alpha dropped. The view masks the cells it draws over, so a\n * see-through background would re-expose the very characters the rendered tail stands in for.\n */\n private _opaqueViewBackground(): string {\n const background = this._themeService?.colors.background;\n return background ? color.opaque(background).css : '#000';\n }\n\n /**\n * Positions the composition view on top of the cursor and the textarea just below it (so the\n * IME helper dialog is positioned correctly).\n * @param dontRecurse Whether to use setTimeout to recursively trigger another update, this is\n * necessary as the IME events across browsers are not consistently triggered.\n */\n public updateCompositionElements(dontRecurse?: boolean): void {\n // Empty updates hide the overlay without ending the inferred transaction.\n if (!this._compositionView.classList.contains('active')) {\n return;\n }\n\n // A TUI can repaint the row under an open composition (spinners, streamed output), and this\n // already runs on every render \u2014 so keep the rendered tail current with the buffer. A string\n // compare adds no layout read.\n const rowRemainder = this._getRowRemainderText();\n if (\n this._compositionPreedit &&\n rowRemainder !== (this._compositionRemainder?.textContent ?? '')\n ) {\n this._renderCompositionRemainder(rowRemainder);\n }\n this._styleCompositionCaret();\n\n if (this._bufferService.buffer.isCursorInViewport) {\n const cursorX = Math.min(this._bufferService.buffer.x, this._bufferService.cols - 1);\n\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const cursorTop = this._bufferService.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n this._compositionView.style.setProperty('--xterm-composition-cell-width', this._renderService.dimensions.css.cell.width + 'px');\n this._compositionView.style.left = cursorLeft + 'px';\n this._compositionView.style.top = cursorTop + 'px';\n this._compositionView.style.height = cellHeight + 'px';\n this._compositionView.style.lineHeight = cellHeight + 'px';\n this._compositionView.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._compositionView.style.fontSize = this._optionsService.rawOptions.fontSize + 'px';\n if (this._compositionPreedit && this._unicodeService && typeof Intl.Segmenter !== 'undefined') {\n this._preeditRenderer ??= new CompositionPreeditRenderer(\n this._unicodeService, this._compositionView.ownerDocument, () => this.updateCompositionElements(true)\n );\n this._preeditRenderer.render(this._compositionPreedit);\n }\n // Limit the composition view width to the space between the cursor and\n // the terminal's right edge, preventing it from overflowing the terminal.\n const maxWidth = this._bufferService.cols * this._renderService.dimensions.css.cell.width - cursorLeft;\n this._compositionView.style.maxWidth = maxWidth + 'px';\n this._compositionView.style.overflow = 'hidden';\n const anchorBounds =\n (this._compositionPreedit ?? this._compositionView).getBoundingClientRect();\n const anchorLeft = cursorLeft + Math.min(0, maxWidth - anchorBounds.width);\n const showsRemainder =\n Boolean(this._compositionRemainder) && anchorBounds.width < maxWidth;\n if (this._compositionRemainder) {\n this._compositionRemainder.style.display = showsRemainder ? '' : 'none';\n }\n // End alignment keeps the caret visible when the preedit consumes the remaining width.\n this._compositionView.style.direction = 'ltr';\n this._compositionView.style.display = showsRemainder ? '' : 'flex';\n this._compositionView.style.justifyContent = showsRemainder ? '' : 'flex-end';\n // Themed rather than the stock #000/#FFF, so the pushed tail reads as ordinary terminal text\n // and light themes keep contrast.\n this._compositionView.style.background = this._opaqueViewBackground();\n this._compositionView.style.color = this._themeService?.colors.foreground.css ?? '#FFF';\n // Sized and placed to match the preedit, not the whole view, so the candidate window\n // anchors to the composing text rather than the end of the rendered tail. The clamp has to\n // be applied here and not only in Orca's terminal-ime-candidate-anchor.ts, because\n // CoreBrowserTerminal calls this from onRender as well as from composition events, and a\n // render can land after the last composition event that module can hear.\n this._textarea.style.left = anchorLeft + 'px';\n this._textarea.style.top = cursorTop + 'px';\n // Ensure the text area is at least 1x1, otherwise certain IMEs may break\n this._textarea.style.width = Math.max(anchorBounds.width, 1) + 'px';\n this._textarea.style.height = Math.max(anchorBounds.height, 1) + 'px';\n this._textarea.style.lineHeight = anchorBounds.height + 'px';\n }\n\n if (!dontRecurse) {\n this._cancelDeferredTimer(this._compositionViewTimer);\n this._compositionViewTimer = this._defer(() => this.updateCompositionElements(true));\n }\n }\n}\n\nconst CJK = /^[\\p{Script_Extensions=Han}\\p{Script_Extensions=Hiragana}\\p{Script_Extensions=Katakana}\\uac00-\\ud7a3\\u3131-\\u318e\\uff01-\\uff60]$/u;\nconst NATIVE = /[\\p{Mark}\\p{Extended_Pictographic}]/u;\nconst MAX_PREEDIT_LAYOUT_WORK = 128;\n\nclass CompositionPreeditRenderer extends Disposable {\n private readonly _segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n private _measure?: WidthCacheFontVariantCanvas;\n private _preedit?: HTMLElement;\n private _font = '';\n\n constructor(private readonly _unicodeService: IUnicodeService, doc: Document, refresh: () => void) {\n super();\n if (doc.fonts) {\n this._register(addDisposableListener(doc.fonts, 'loadingdone', () => {\n this._font = '';\n if (this._preedit) {\n refresh();\n }\n }));\n }\n }\n\n public clear(): void {\n this._preedit = undefined;\n this._font = '';\n }\n\n public override dispose(): void {\n this.clear();\n this._measure = undefined;\n super.dispose();\n }\n\n public render(preedit: HTMLElement): void {\n const doc = preedit.ownerDocument;\n const style = doc.defaultView?.getComputedStyle(preedit);\n if (!style) {\n return;\n }\n const font = [style.fontFamily, style.fontSize, style.fontWeight, style.fontStyle, doc.defaultView?.devicePixelRatio].join('|');\n if (this._preedit === preedit && this._font === font) {\n return;\n }\n this._preedit = preedit;\n this._font = font;\n const data = (preedit.textContent ?? '').slice(1, -1);\n const widths = new Map();\n const nodes: Node[] = [doc.createTextNode('\u200E')];\n let start = 0;\n let spacing: string | undefined;\n let work = 0;\n const emit = (end: number): void => {\n if (end === start) {\n return;\n }\n const text = data.slice(start, end);\n if (spacing === undefined) {\n nodes.push(doc.createTextNode(text));\n } else {\n const span = doc.createElement('span');\n span.style.letterSpacing = spacing;\n span.style.fontKerning = 'none';\n span.style.textDecoration = 'inherit';\n span.textContent = text;\n nodes.push(span);\n work++;\n }\n start = end;\n };\n for (const { segment, index } of this._segmenter.segment(data)) {\n // Bound cold measurements and styled runs without changing an already-corrected prefix.\n if (work >= MAX_PREEDIT_LAYOUT_WORK) {\n emit(index);\n spacing = undefined;\n break;\n }\n let nextSpacing: string | undefined;\n const columns = this._unicodeService.wcwidth(segment.codePointAt(0)!);\n if (CJK.test(segment) && !NATIVE.test(segment) && (columns === 2 || /^[\\uff61-\\uff9f]$/u.test(segment))) {\n let width = widths.get(segment);\n if (width === undefined) {\n this._measure ??= new WidthCacheFontVariantCanvas();\n this._measure.setFont(style.fontFamily, parseFloat(style.fontSize), parseFloat(style.fontWeight) || 400, style.fontStyle === 'italic');\n width = this._measure.measure(segment);\n widths.set(segment, width);\n work++;\n }\n nextSpacing = `calc(var(--xterm-composition-cell-width) * ${columns} - ${width}px)`;\n }\n if (nextSpacing !== spacing) {\n emit(index);\n spacing = nextSpacing;\n }\n }\n emit(data.length);\n nodes.push(doc.createTextNode('\u200E'));\n preedit.replaceChildren(...nodes);\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { ICharacterJoiner } from '../Types';\nimport { AttributeData } from '../../common/buffer/AttributeData';\nimport { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService } from '../../common/services/Services';\nimport { ICharacterJoinerService } from './Services';\n\nexport class JoinedCellData extends AttributeData implements ICellData {\n private _width: number;\n // .content carries no meaning for joined CellData, simply nullify it\n // thus we have to overload all other .content accessors\n public content: number = 0;\n public fg: number;\n public bg: number;\n public combinedData: string = '';\n\n constructor(firstCell: ICellData, chars: string, width: number) {\n super();\n this.fg = firstCell.fg;\n this.bg = firstCell.bg;\n this.combinedData = chars;\n this._width = width;\n }\n\n public isCombined(): number {\n // always mark joined cell data as combined\n return Content.IS_COMBINED_MASK;\n }\n\n public getWidth(): number {\n return this._width;\n }\n\n public getChars(): string {\n return this.combinedData;\n }\n\n public getCode(): number {\n // code always gets the highest possible fake codepoint (read as -1)\n // this is needed as code is used by caches as identifier\n return 0x1FFFFF;\n }\n\n public setFromCharData(value: CharData): void {\n throw new Error('not implemented');\n }\n\n public getAsCharData(): CharData {\n return [this.fg, this.getChars(), this.getWidth(), this.getCode()];\n }\n}\n\nexport class CharacterJoinerService implements ICharacterJoinerService {\n public serviceBrand: undefined;\n\n private _characterJoiners: ICharacterJoiner[] = [];\n private _nextCharacterJoinerId: number = 0;\n private _workCell: CellData = new CellData();\n\n constructor(\n @IBufferService private _bufferService: IBufferService\n ) { }\n\n public register(handler: (text: string) => [number, number][]): number {\n const joiner: ICharacterJoiner = {\n id: this._nextCharacterJoinerId++,\n handler\n };\n\n this._characterJoiners.push(joiner);\n return joiner.id;\n }\n\n public deregister(joinerId: number): boolean {\n for (let i = 0; i < this._characterJoiners.length; i++) {\n if (this._characterJoiners[i].id === joinerId) {\n this._characterJoiners.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n public getJoinedCharacters(row: number): [number, number][] {\n if (this._characterJoiners.length === 0) {\n return [];\n }\n\n const line = this._bufferService.buffer.lines.get(row);\n if (!line || line.length === 0) {\n return [];\n }\n\n const ranges: [number, number][] = [];\n const lineStr = line.translateToString(true);\n const trimmedLength = line.getTrimmedLength();\n\n // Because some cells can be represented by multiple javascript characters,\n // we track the cell and the string indexes separately. This allows us to\n // translate the string ranges we get from the joiners back into cell ranges\n // for use when rendering\n let rangeStartColumn = 0;\n let currentStringIndex = 0;\n let rangeStartStringIndex = 0;\n let rangeAttrFG = line.getFg(0);\n let rangeAttrBG = line.getBg(0);\n\n for (let x = 0; x < trimmedLength; x++) {\n line.loadCell(x, this._workCell);\n\n if (this._workCell.getWidth() === 0) {\n // If this character is of width 0, skip it.\n continue;\n }\n\n // End of range\n if (this._workCell.fg !== rangeAttrFG || this._workCell.bg !== rangeAttrBG) {\n // If we ended up with a sequence of more than one character,\n // look for ranges to join.\n if (x - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n // Reset our markers for a new range.\n rangeStartColumn = x;\n rangeStartStringIndex = currentStringIndex;\n rangeAttrFG = this._workCell.fg;\n rangeAttrBG = this._workCell.bg;\n }\n\n currentStringIndex += this._workCell.getChars().length || WHITESPACE_CELL_CHAR.length;\n }\n\n // Process any trailing ranges.\n if (trimmedLength - rangeStartColumn > 1) {\n const joinedRanges = this._getJoinedRanges(\n lineStr,\n rangeStartStringIndex,\n currentStringIndex,\n line,\n rangeStartColumn\n );\n for (let i = 0; i < joinedRanges.length; i++) {\n ranges.push(joinedRanges[i]);\n }\n }\n\n return ranges;\n }\n\n /**\n * Given a segment of a line of text, find all ranges of text that should be\n * joined in a single rendering unit. Ranges are internally converted to\n * column ranges, rather than string ranges.\n * @param line String representation of the full line of text\n * @param startIndex Start position of the range to search in the string (inclusive)\n * @param endIndex End position of the range to search in the string (exclusive)\n */\n private _getJoinedRanges(line: string, startIndex: number, endIndex: number, lineData: IBufferLine, startCol: number): [number, number][] {\n const text = line.substring(startIndex, endIndex);\n // At this point we already know that there is at least one joiner so\n // we can just pull its value and assign it directly rather than\n // merging it into an empty array, which incurs unnecessary writes.\n let allJoinedRanges: [number, number][] = [];\n try {\n allJoinedRanges = this._characterJoiners[0].handler(text);\n } catch (error) {\n console.error(error);\n }\n for (let i = 1; i < this._characterJoiners.length; i++) {\n // We merge any overlapping ranges across the different joiners\n try {\n const joinerRanges = this._characterJoiners[i].handler(text);\n for (let j = 0; j < joinerRanges.length; j++) {\n CharacterJoinerService._mergeRanges(allJoinedRanges, joinerRanges[j]);\n }\n } catch (error) {\n console.error(error);\n }\n }\n this._stringRangesToCellRanges(allJoinedRanges, lineData, startCol);\n return allJoinedRanges;\n }\n\n /**\n * Modifies the provided ranges in-place to adjust for variations between\n * string length and cell width so that the range represents a cell range,\n * rather than the string range the joiner provides.\n * @param ranges String ranges containing start (inclusive) and end (exclusive) index\n * @param line Cell data for the relevant line in the terminal\n * @param startCol Offset within the line to start from\n */\n private _stringRangesToCellRanges(ranges: [number, number][], line: IBufferLine, startCol: number): void {\n let currentRangeIndex = 0;\n let currentRangeStarted = false;\n let currentStringIndex = 0;\n let currentRange = ranges[currentRangeIndex];\n\n // If we got through all of the ranges, stop searching\n if (!currentRange) {\n return;\n }\n\n const trimmedLength = line.getTrimmedLength();\n for (let x = startCol; x < trimmedLength; x++) {\n const width = line.getWidth(x);\n const length = line.getString(x).length || WHITESPACE_CELL_CHAR.length;\n\n // We skip zero-width characters when creating the string to join the text\n // so we do the same here\n if (width === 0) {\n continue;\n }\n\n // Adjust the start of the range\n if (!currentRangeStarted && currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n }\n\n // Adjust the end of the range\n if (currentRange[1] <= currentStringIndex) {\n currentRange[1] = x;\n\n // We're finished with this range, so we move to the next one\n currentRange = ranges[++currentRangeIndex];\n\n // If there are no more ranges left, stop searching\n if (!currentRange) {\n break;\n }\n\n // Ranges can be on adjacent characters. Because the end index of the\n // ranges are exclusive, this means that the index for the start of a\n // range can be the same as the end index of the previous range. To\n // account for the start of the next range, we check here just in case.\n if (currentRange[0] <= currentStringIndex) {\n currentRange[0] = x;\n currentRangeStarted = true;\n } else {\n currentRangeStarted = false;\n }\n }\n\n // Adjust the string index based on the character length to line up with\n // the column adjustment\n currentStringIndex += length;\n }\n\n // If there is still a range left at the end, it must extend all the way to\n // the end of the line.\n if (currentRange) {\n currentRange[1] = trimmedLength;\n }\n }\n\n /**\n * Merges the range defined by the provided start and end into the list of\n * existing ranges. The merge is done in place on the existing range for\n * performance and is also returned.\n * @param ranges Existing range list\n * @param newRange Tuple of two numbers representing the new range to merge in.\n * @returns The ranges input with the new range merged in place\n */\n private static _mergeRanges(ranges: [number, number][], newRange: [number, number]): [number, number][] {\n let inRange = false;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (!inRange) {\n if (newRange[1] <= range[0]) {\n // Case 1: New range is before the search range\n ranges.splice(i, 0, newRange);\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 2: New range is either wholly contained within the\n // search range or overlaps with the front of it\n range[0] = Math.min(newRange[0], range[0]);\n return ranges;\n }\n\n if (newRange[0] < range[1]) {\n // Case 3: New range either wholly contains the search range\n // or overlaps with the end of it\n range[0] = Math.min(newRange[0], range[0]);\n inRange = true;\n }\n\n // Case 4: New range starts after the search range\n continue;\n } else {\n if (newRange[1] <= range[0]) {\n // Case 5: New range extends from previous range but doesn't\n // reach the current one\n ranges[i - 1][1] = newRange[1];\n return ranges;\n }\n\n if (newRange[1] <= range[1]) {\n // Case 6: New range extends from prvious range into the\n // current range\n ranges[i - 1][1] = Math.max(newRange[1], range[1]);\n ranges.splice(i, 1);\n return ranges;\n }\n\n // Case 7: New range extends from previous range past the\n // end of the current range\n ranges.splice(i, 1);\n i--;\n }\n }\n\n if (inRange) {\n // Case 8: New range extends past the last existing range\n ranges[ranges.length - 1][1] = newRange[1];\n } else {\n // Case 9: New range starts after the last existing range\n ranges.push(newRange);\n }\n\n return ranges;\n }\n}\n", "/**\n * Copyright (c) 2018, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor } from '../../../common/Types';\nimport { IBufferLine, ICellData } from '../../../common/buffer/Types';\nimport { INVERTED_DEFAULT_COLOR } from '../shared/Constants';\nimport { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';\nimport { CellData } from '../../../common/buffer/CellData';\nimport { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';\nimport { channels, color } from '../../../common/Color';\nimport { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { JoinedCellData } from '../../services/CharacterJoinerService';\nimport { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';\nimport { AttributeData } from '../../../common/buffer/AttributeData';\nimport { WidthCache } from './WidthCache';\nimport { IColorContrastCache } from '../../Types';\n\n\nexport const enum RowCss {\n BOLD_CLASS = 'xterm-bold',\n DIM_CLASS = 'xterm-dim',\n ITALIC_CLASS = 'xterm-italic',\n UNDERLINE_CLASS = 'xterm-underline',\n OVERLINE_CLASS = 'xterm-overline',\n STRIKETHROUGH_CLASS = 'xterm-strikethrough',\n BLINK_HIDDEN_CLASS = 'xterm-blink-hidden',\n CURSOR_CLASS = 'xterm-cursor',\n CURSOR_BLINK_CLASS = 'xterm-cursor-blink',\n CURSOR_STYLE_BLOCK_CLASS = 'xterm-cursor-block',\n CURSOR_STYLE_OUTLINE_CLASS = 'xterm-cursor-outline',\n CURSOR_STYLE_BAR_CLASS = 'xterm-cursor-bar',\n CURSOR_STYLE_UNDERLINE_CLASS = 'xterm-cursor-underline'\n}\n\n\nexport class DomRendererRowFactory {\n private _workCell: CellData = new CellData();\n\n private _selectionStart: [number, number] | undefined;\n private _selectionEnd: [number, number] | undefined;\n private _columnSelectMode: boolean = false;\n\n public defaultSpacing = 0;\n\n constructor(\n private readonly _document: Document,\n @ICharacterJoinerService private readonly _characterJoinerService: ICharacterJoinerService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService private readonly _decorationService: IDecorationService,\n @IThemeService private readonly _themeService: IThemeService\n ) {}\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._columnSelectMode = columnSelectMode;\n }\n\n public createRow(\n lineData: IBufferLine,\n row: number,\n isCursorRow: boolean,\n cursorStyle: string | undefined,\n cursorInactiveStyle: string | undefined,\n cursorX: number,\n cursorBlink: boolean,\n blinkOn: boolean,\n cellWidth: number,\n widthCache: WidthCache,\n linkStart: number,\n linkEnd: number,\n rowInfo?: { hasBlinkingCells: boolean }\n ): HTMLSpanElement[] {\n\n const elements: HTMLSpanElement[] = [];\n if (rowInfo) {\n rowInfo.hasBlinkingCells = false;\n }\n const joinedRanges = this._characterJoinerService.getJoinedCharacters(row);\n const colors = this._themeService.colors;\n\n let lineLength = lineData.getNoBgTrimmedLength();\n if (isCursorRow && lineLength < cursorX + 1) {\n lineLength = cursorX + 1;\n }\n\n let charElement: HTMLSpanElement | undefined;\n let cellAmount = 0;\n let text = '';\n let i;\n let oldBg = 0;\n let oldFg = 0;\n let oldExt = 0;\n let oldLinkHover: number | boolean = false;\n let oldSpacing = 0;\n let oldIsInSelection: boolean = false;\n let spacing;\n let skipJoinedCheckUntilX = 0;\n const classes: string[] = [];\n\n const hasHover = linkStart !== -1 && linkEnd !== -1;\n\n for (let x = 0; x < lineLength; x++) {\n lineData.loadCell(x, this._workCell);\n let width = this._workCell.getWidth();\n\n // The character to the left is a wide character, drawing is owned by the char at x-1\n if (width === 0) {\n continue;\n }\n\n // If true, indicates that the current character(s) to draw were joined.\n let isJoined = false;\n\n // Indicates whether this cell is part of a joined range that should be ignored as it cannot\n // be rendered entirely, like the selection state differs across the range.\n let isValidJoinRange = (x >= skipJoinedCheckUntilX);\n\n let lastCharX = x;\n\n // Process any joined character ranges as needed. Because of how the\n // ranges are produced, we know that they are valid for the characters\n // and attributes of our input.\n let cell: ICellData = this._workCell;\n if (joinedRanges.length > 0 && x === joinedRanges[0][0] && isValidJoinRange) {\n const range = joinedRanges.shift()!;\n // If the ligature's selection state is not consistent, don't join it. This helps the\n // selection render correctly regardless whether they should be joined.\n const firstSelectionState = this._isCellInSelection(range[0], row);\n for (i = range[0] + 1; i < range[1]; i++) {\n isValidJoinRange &&= (firstSelectionState === this._isCellInSelection(i, row));\n }\n // Similarly, if the cursor is in the ligature, don't join it.\n isValidJoinRange &&= !isCursorRow || cursorX < range[0] || cursorX >= range[1];\n if (!isValidJoinRange) {\n skipJoinedCheckUntilX = range[1];\n } else {\n isJoined = true;\n\n // We already know the exact start and end column of the joined range,\n // so we get the string and width representing it directly\n cell = new JoinedCellData(\n this._workCell,\n lineData.translateToString(true, range[0], range[1]),\n range[1] - range[0]\n );\n\n // Skip over the cells occupied by this range in the loop\n lastCharX = range[1] - 1;\n\n // Recalculate width\n width = cell.getWidth();\n }\n }\n\n const isInSelection = this._isCellInSelection(x, row);\n const isCursorCell = isCursorRow && x === cursorX;\n const isLinkHover = hasHover && x >= linkStart && x <= linkEnd;\n if (rowInfo && cell.isBlink()) {\n rowInfo.hasBlinkingCells = true;\n }\n const isBlinkHidden = !blinkOn && cell.isBlink();\n if (isBlinkHidden) {\n classes.push(RowCss.BLINK_HIDDEN_CLASS);\n }\n\n let isDecorated = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n isDecorated = true;\n });\n\n // get chars to render for this cell\n let chars = cell.getChars() || WHITESPACE_CELL_CHAR;\n if (chars === ' ' && (cell.isUnderline() || cell.isOverline())) {\n chars = '\\xa0';\n }\n\n // lookup char render width and calc spacing\n spacing = width * cellWidth - widthCache.get(chars, cell.isBold(), cell.isItalic());\n\n if (!charElement) {\n charElement = this._document.createElement('span');\n } else {\n /**\n * chars can only be merged on existing span if:\n * - existing span only contains mergeable chars (cellAmount != 0)\n * - bg did not change (or both are in selection)\n * - fg did not change (or both are in selection and selection fg is set)\n * - ext did not change\n * - underline from hover state did not change\n * - cell content renders to same letter-spacing\n * - cell is not cursor\n */\n if (\n cellAmount\n && (\n (isInSelection && oldIsInSelection)\n || (!isInSelection && !oldIsInSelection && cell.bg === oldBg)\n )\n && (\n (isInSelection && oldIsInSelection && colors.selectionForeground)\n || cell.fg === oldFg\n )\n && cell.extended.ext === oldExt\n && isLinkHover === oldLinkHover\n && spacing === oldSpacing\n && !isCursorCell\n && !isJoined\n && !isDecorated\n && isValidJoinRange\n ) {\n // no span alterations, thus only account chars skipping all code below\n if (cell.isInvisible()) {\n text += WHITESPACE_CELL_CHAR;\n } else {\n text += chars;\n }\n cellAmount++;\n continue;\n } else {\n /**\n * cannot merge:\n * - apply left-over text to old span\n * - create new span, reset state holders cellAmount & text\n */\n if (cellAmount) {\n charElement.textContent = text;\n }\n charElement = this._document.createElement('span');\n cellAmount = 0;\n text = '';\n }\n }\n // preserve conditions for next merger eval round\n oldBg = cell.bg;\n oldFg = cell.fg;\n oldExt = cell.extended.ext;\n oldLinkHover = isLinkHover;\n oldSpacing = spacing;\n oldIsInSelection = isInSelection;\n\n if (isJoined) {\n // The DOM renderer colors the background of the cursor but for ligatures all cells are\n // joined. The workaround here is to show a cursor around the whole ligature so it shows up,\n // the cursor looks the same when on any character of the ligature though\n if (cursorX >= x && cursorX <= lastCharX) {\n cursorX = x;\n }\n }\n\n if (!this._coreService.isCursorHidden && isCursorCell && this._coreService.isCursorInitialized) {\n classes.push(RowCss.CURSOR_CLASS);\n if (this._coreBrowserService.isFocused) {\n if (cursorBlink) {\n classes.push(RowCss.CURSOR_BLINK_CLASS);\n }\n classes.push(\n cursorStyle === 'bar'\n ? RowCss.CURSOR_STYLE_BAR_CLASS\n : cursorStyle === 'underline'\n ? RowCss.CURSOR_STYLE_UNDERLINE_CLASS\n : RowCss.CURSOR_STYLE_BLOCK_CLASS\n );\n } else {\n if (cursorInactiveStyle) {\n switch (cursorInactiveStyle) {\n case 'outline':\n classes.push(RowCss.CURSOR_STYLE_OUTLINE_CLASS);\n break;\n case 'block':\n classes.push(RowCss.CURSOR_STYLE_BLOCK_CLASS);\n break;\n case 'bar':\n classes.push(RowCss.CURSOR_STYLE_BAR_CLASS);\n break;\n case 'underline':\n classes.push(RowCss.CURSOR_STYLE_UNDERLINE_CLASS);\n break;\n default:\n break;\n }\n }\n }\n }\n\n if (cell.isBold()) {\n classes.push(RowCss.BOLD_CLASS);\n }\n\n if (cell.isItalic()) {\n classes.push(RowCss.ITALIC_CLASS);\n }\n\n if (cell.isDim()) {\n classes.push(RowCss.DIM_CLASS);\n }\n\n if (cell.isInvisible()) {\n text = WHITESPACE_CELL_CHAR;\n } else {\n text = cell.getChars() || WHITESPACE_CELL_CHAR;\n }\n\n if (cell.isUnderline()) {\n classes.push(`${RowCss.UNDERLINE_CLASS}-${cell.extended.underlineStyle}`);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n if (!cell.isUnderlineColorDefault()) {\n if (cell.isUnderlineColorRGB()) {\n charElement.style.textDecorationColor = `rgb(${AttributeData.toColorRGB(cell.getUnderlineColor()).join(',')})`;\n } else {\n let fg = cell.getUnderlineColor();\n if (this._optionsService.rawOptions.drawBoldTextInBrightColors && cell.isBold() && fg < 8) {\n fg += 8;\n }\n charElement.style.textDecorationColor = colors.ansi[fg].css;\n }\n }\n }\n\n if (cell.isOverline()) {\n classes.push(RowCss.OVERLINE_CLASS);\n if (text === ' ') {\n text = '\\xa0'; // =  \n }\n }\n\n if (cell.isStrikethrough()) {\n classes.push(RowCss.STRIKETHROUGH_CLASS);\n }\n\n // apply link hover underline late, effectively overrides any previous text-decoration\n // settings\n if (isLinkHover) {\n charElement.style.textDecoration = 'underline';\n }\n\n let fg = cell.getFgColor();\n let fgColorMode = cell.getFgColorMode();\n let bg = cell.getBgColor();\n let bgColorMode = cell.getBgColorMode();\n const isInverse = !!cell.isInverse();\n if (isInverse) {\n const temp = fg;\n fg = bg;\n bg = temp;\n const temp2 = fgColorMode;\n fgColorMode = bgColorMode;\n bgColorMode = temp2;\n }\n\n // Apply any decoration foreground/background overrides, this must happen after inverse has\n // been applied\n let bgOverride: IColor | undefined;\n let fgOverride: IColor | undefined;\n let isTop = false;\n this._decorationService.forEachDecorationAtCell(x, row, undefined, d => {\n if (d.options.layer !== 'top' && isTop) {\n return;\n }\n if (d.backgroundColorRGB) {\n bgColorMode = Attributes.CM_RGB;\n bg = d.backgroundColorRGB.rgba >> 8 & 0xFFFFFF;\n bgOverride = d.backgroundColorRGB;\n }\n if (d.foregroundColorRGB) {\n fgColorMode = Attributes.CM_RGB;\n fg = d.foregroundColorRGB.rgba >> 8 & 0xFFFFFF;\n fgOverride = d.foregroundColorRGB;\n }\n isTop = d.options.layer === 'top';\n });\n\n // Apply selection\n if (!isTop && isInSelection) {\n // If in the selection, force the element to be above the selection to improve contrast and\n // support opaque selections. The applies background is not actually needed here as\n // selection is drawn in a seperate container, the main purpose of this to ensuring minimum\n // contrast ratio\n bgOverride = this._coreBrowserService.isFocused ? colors.selectionBackgroundOpaque : colors.selectionInactiveBackgroundOpaque;\n bg = bgOverride.rgba >> 8 & 0xFFFFFF;\n bgColorMode = Attributes.CM_RGB;\n // Since an opaque selection is being rendered, the selection pretends to be a decoration to\n // ensure text is drawn above the selection.\n isTop = true;\n // Apply selection foreground if applicable\n if (colors.selectionForeground) {\n fgColorMode = Attributes.CM_RGB;\n fg = colors.selectionForeground.rgba >> 8 & 0xFFFFFF;\n fgOverride = colors.selectionForeground;\n }\n }\n\n // If it's a top decoration, render above the selection\n if (isTop) {\n classes.push('xterm-decoration-top');\n }\n\n // Background\n let resolvedBg: IColor;\n switch (bgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n resolvedBg = colors.ansi[bg];\n classes.push(`xterm-bg-${bg}`);\n break;\n case Attributes.CM_RGB:\n resolvedBg = channels.toColor(bg >> 16, bg >> 8 & 0xFF, bg & 0xFF);\n this._addStyle(charElement, `background-color:#${(bg >>> 0).toString(16).padStart(6, '0')}`);\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (isInverse) {\n resolvedBg = colors.foreground;\n classes.push(`xterm-bg-${INVERTED_DEFAULT_COLOR}`);\n } else {\n resolvedBg = colors.background;\n }\n }\n\n // If there is no background override by now it's the original color, so apply dim if needed\n if (!bgOverride) {\n if (cell.isDim()) {\n bgOverride = color.multiplyOpacity(resolvedBg, 0.5);\n }\n }\n\n // Foreground\n switch (fgColorMode) {\n case Attributes.CM_P16:\n case Attributes.CM_P256:\n if (cell.isBold() && fg < 8 && this._optionsService.rawOptions.drawBoldTextInBrightColors) {\n fg += 8;\n }\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.ansi[fg], cell, bgOverride, undefined)) {\n classes.push(`xterm-fg-${fg}`);\n }\n break;\n case Attributes.CM_RGB:\n const color = channels.toColor(\n (fg >> 16) & 0xFF,\n (fg >> 8) & 0xFF,\n (fg ) & 0xFF\n );\n if (!this._applyMinimumContrast(charElement, resolvedBg, color, cell, bgOverride, fgOverride)) {\n this._addStyle(charElement, `color:#${fg.toString(16).padStart(6, '0')}`);\n }\n break;\n case Attributes.CM_DEFAULT:\n default:\n if (!this._applyMinimumContrast(charElement, resolvedBg, colors.foreground, cell, bgOverride, fgOverride)) {\n if (isInverse) {\n classes.push(`xterm-fg-${INVERTED_DEFAULT_COLOR}`);\n }\n }\n }\n\n // apply CSS classes\n // slightly faster than using classList by omitting\n // checks for doubled entries (code above should not have doublets)\n if (classes.length) {\n charElement.className = classes.join(' ');\n classes.length = 0;\n }\n\n // exclude conditions for cell merging - never merge these\n if (!isCursorCell && !isJoined && !isDecorated && isValidJoinRange) {\n cellAmount++;\n } else {\n charElement.textContent = text;\n }\n // apply letter-spacing rule\n if (spacing !== this.defaultSpacing) {\n charElement.style.letterSpacing = `${spacing}px`;\n }\n\n elements.push(charElement);\n x = lastCharX;\n }\n\n // postfix text of last merged span\n if (charElement && cellAmount) {\n charElement.textContent = text;\n }\n\n return elements;\n }\n\n private _applyMinimumContrast(element: HTMLElement, bg: IColor, fg: IColor, cell: ICellData, bgOverride: IColor | undefined, fgOverride: IColor | undefined): boolean {\n if (this._optionsService.rawOptions.minimumContrastRatio === 1 || treatGlyphAsBackgroundColor(cell.getCode())) {\n return false;\n }\n\n // Try get from cache first, only use the cache when there are no decoration overrides\n const cache = this._getContrastCache(cell);\n let adjustedColor: IColor | undefined | null = undefined;\n if (!bgOverride && !fgOverride) {\n adjustedColor = cache.getColor(bg.rgba, fg.rgba);\n }\n\n // Calculate and store in cache\n if (adjustedColor === undefined) {\n // Dim cells only require half the contrast, otherwise they wouldn't be distinguishable from\n // non-dim cells\n const ratio = this._optionsService.rawOptions.minimumContrastRatio / (cell.isDim() ? 2 : 1);\n adjustedColor = color.ensureContrastRatio(bgOverride ?? bg, fgOverride ?? fg, ratio);\n cache.setColor((bgOverride ?? bg).rgba, (fgOverride ?? fg).rgba, adjustedColor ?? null);\n }\n\n if (adjustedColor) {\n this._addStyle(element, `color:${adjustedColor.css}`);\n return true;\n }\n\n return false;\n }\n\n private _getContrastCache(cell: ICellData): IColorContrastCache {\n if (cell.isDim()) {\n return this._themeService.colors.halfContrastCache;\n }\n return this._themeService.colors.contrastCache;\n }\n\n private _addStyle(element: HTMLElement, style: string): void {\n element.setAttribute('style', `${element.getAttribute('style') || ''}${style};`);\n }\n\n private _isCellInSelection(x: number, y: number): boolean {\n const start = this._selectionStart;\n const end = this._selectionEnd;\n if (!start || !end) {\n return false;\n }\n if (this._columnSelectMode) {\n if (start[0] <= end[0]) {\n return x >= start[0] && y >= start[1] &&\n x < end[0] && y <= end[1];\n }\n return x < start[0] && y >= start[1] &&\n x >= end[0] && y <= end[1];\n }\n return (y > start[1] && y < end[1]) ||\n (start[1] === end[1] && y === start[1] && x >= start[0] && x < end[0]) ||\n (start[1] < end[1] && y === end[1] && x < end[0]) ||\n (start[1] < end[1] && y === start[1] && x >= start[0]);\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminal } from '../../Types';\nimport { ISelectionRenderModel } from './Types';\nimport { Terminal } from '@xterm/xterm';\n\nclass SelectionRenderModel implements ISelectionRenderModel {\n public hasSelection!: boolean;\n public columnSelectMode!: boolean;\n public viewportStartRow!: number;\n public viewportEndRow!: number;\n public viewportCappedStartRow!: number;\n public viewportCappedEndRow!: number;\n public startCol!: number;\n public endCol!: number;\n public selectionStart: [number, number] | undefined;\n public selectionEnd: [number, number] | undefined;\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.hasSelection = false;\n this.columnSelectMode = false;\n this.viewportStartRow = 0;\n this.viewportEndRow = 0;\n this.viewportCappedStartRow = 0;\n this.viewportCappedEndRow = 0;\n this.startCol = 0;\n this.endCol = 0;\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n }\n\n public update(terminal: ITerminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {\n this.selectionStart = start;\n this.selectionEnd = end;\n // Selection does not exist\n if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {\n this.clear();\n return;\n }\n\n // Translate from buffer position to viewport position\n const viewportY = terminal.buffers.active.ydisp;\n const viewportStartRow = start[1] - viewportY;\n const viewportEndRow = end[1] - viewportY;\n const viewportCappedStartRow = Math.max(viewportStartRow, 0);\n const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);\n\n // No need to draw the selection\n if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {\n this.clear();\n return;\n }\n\n this.hasSelection = true;\n this.columnSelectMode = columnSelectMode;\n this.viewportStartRow = viewportStartRow;\n this.viewportEndRow = viewportEndRow;\n this.viewportCappedStartRow = viewportCappedStartRow;\n this.viewportCappedEndRow = viewportCappedEndRow;\n this.startCol = start[0];\n this.endCol = end[0];\n }\n\n public isCellSelected(terminal: Terminal, x: number, y: number): boolean {\n if (!this.hasSelection) {\n return false;\n }\n y -= terminal.buffer.active.viewportY;\n if (this.columnSelectMode) {\n if (this.startCol <= this.endCol) {\n return x >= this.startCol && y >= this.viewportCappedStartRow &&\n x < this.endCol && y <= this.viewportCappedEndRow;\n }\n return x < this.startCol && y >= this.viewportCappedStartRow &&\n x >= this.endCol && y <= this.viewportCappedEndRow;\n }\n return (y > this.viewportStartRow && y < this.viewportEndRow) ||\n (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||\n (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);\n }\n}\n\nexport function createSelectionRenderModel(): ISelectionRenderModel {\n return new SelectionRenderModel();\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from '../../services/Services';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IOptionsService } from '../../../common/services/Services';\n\nexport class TextBlinkStateManager extends Disposable {\n private _intervalDuration: number = 0;\n private _interval: number | undefined;\n private _blinkOn: boolean = true;\n private _needsBlinkInViewport: boolean = false;\n private _isViewportVisible: boolean = true;\n\n constructor(\n private readonly _renderCallback: () => void,\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _optionsService: IOptionsService\n ) {\n super();\n this._register(this._optionsService.onSpecificOptionChange('blinkIntervalDuration', duration => {\n this.setIntervalDuration(duration);\n }));\n this.setIntervalDuration(this._optionsService.rawOptions.blinkIntervalDuration);\n this._register(toDisposable(() => this._clearInterval()));\n }\n\n public get isBlinkOn(): boolean {\n return this._blinkOn;\n }\n\n public get isEnabled(): boolean {\n return this._intervalDuration > 0;\n }\n\n public setNeedsBlinkInViewport(needsBlinkInViewport: boolean): void {\n if (this._needsBlinkInViewport === needsBlinkInViewport) {\n return;\n }\n\n this._needsBlinkInViewport = needsBlinkInViewport;\n this._updateIntervalState();\n }\n\n public setViewportVisible(isVisible: boolean): void {\n if (this._isViewportVisible === isVisible) {\n return;\n }\n\n this._isViewportVisible = isVisible;\n this._updateIntervalState();\n }\n\n public setIntervalDuration(duration: number): void {\n if (duration === this._intervalDuration) {\n return;\n }\n\n this._intervalDuration = duration;\n this._clearInterval();\n this._updateIntervalState();\n }\n\n private _updateIntervalState(): void {\n const shouldBlink = this._intervalDuration > 0 && this._needsBlinkInViewport && this._isViewportVisible;\n if (shouldBlink) {\n if (this._interval !== undefined) {\n return;\n }\n const wasBlinkOn = this._blinkOn;\n this._blinkOn = true;\n this._interval = this._coreBrowserService.window.setInterval(() => {\n this._blinkOn = !this._blinkOn;\n this._renderCallback();\n }, this._intervalDuration);\n if (!wasBlinkOn) {\n this._renderCallback();\n }\n return;\n }\n\n this._clearInterval();\n if (!this._blinkOn) {\n this._blinkOn = true;\n this._renderCallback();\n }\n }\n\n private _clearInterval(): void {\n if (this._interval !== undefined) {\n this._coreBrowserService.window.clearInterval(this._interval);\n this._interval = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';\nimport { WidthCache } from './WidthCache';\nimport { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';\nimport { createRenderDimensions } from '../shared/RendererUtils';\nimport { createSelectionRenderModel } from '../shared/SelectionRenderModel';\nimport { TextBlinkStateManager } from '../shared/TextBlinkStateManager';\nimport { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';\nimport { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';\nimport { color } from '../../../common/Color';\nimport { Disposable, toDisposable } from '../../../common/Lifecycle';\nimport { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';\nimport { Emitter } from '../../../common/Event';\nimport { addDisposableListener } from '../../Dom';\n\n\nconst enum Constants {\n TERMINAL_CLASS_PREFIX = 'xterm-dom-renderer-owner-',\n ROW_CONTAINER_CLASS = 'xterm-rows',\n FG_CLASS_PREFIX = 'xterm-fg-',\n BG_CLASS_PREFIX = 'xterm-bg-',\n FOCUS_CLASS = 'xterm-focus',\n SELECTION_CLASS = 'xterm-selection',\n CURSOR_BLINK_IDLE_CLASS = 'xterm-cursor-blink-idle'\n}\n\nlet nextTerminalId = 1;\n\n/**\n * The standard renderer and fallback for when the webgl addon is slow. This is not meant to be\n * particularly fast and will even lack some features such as custom glyphs, hoever this is more\n * reliable as webgl may not work on some machines.\n */\nexport class DomRenderer extends Disposable implements IRenderer {\n private _rowFactory: DomRendererRowFactory;\n private _terminalClass: number = nextTerminalId++;\n\n private _themeStyleElement!: HTMLStyleElement;\n private _dimensionsStyleElement!: HTMLStyleElement;\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[] = [];\n private _selectionContainer: HTMLElement;\n private _widthCache: WidthCache;\n private _selectionRenderModel: ISelectionRenderModel = createSelectionRenderModel();\n private _lastSelectionStart: [number, number] | undefined;\n private _lastSelectionEnd: [number, number] | undefined;\n private _lastSelectionColumnMode: boolean = false;\n private _cursorBlinkStateManager: CursorBlinkStateManager;\n private _textBlinkStateManager: TextBlinkStateManager;\n private _rowHasBlinkingCells: boolean[] = [];\n private _rowHasBlinkingCellsCount: number = 0;\n\n public dimensions: IRenderDimensions;\n\n private readonly _onRequestRedraw = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRequestRedraw.event;\n\n constructor(\n private readonly _terminal: ITerminal,\n private readonly _document: Document,\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _viewportElement: HTMLElement,\n private readonly _helperContainer: HTMLElement,\n private readonly _linkifier2: ILinkifier2,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService private readonly _themeService: IThemeService\n ) {\n super();\n this._rowContainer = this._document.createElement('div');\n this._rowContainer.classList.add(Constants.ROW_CONTAINER_CLASS);\n this._rowContainer.style.lineHeight = 'normal';\n this._rowContainer.setAttribute('aria-hidden', 'true');\n this._refreshRowElements(this._bufferService.cols, this._bufferService.rows);\n this._selectionContainer = this._document.createElement('div');\n this._selectionContainer.classList.add(Constants.SELECTION_CLASS);\n this._selectionContainer.setAttribute('aria-hidden', 'true');\n\n this.dimensions = createRenderDimensions();\n this._updateDimensions();\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n\n this._register(this._themeService.onChangeColors(e => this._injectCss(e)));\n this._injectCss(this._themeService.colors);\n\n this._rowFactory = instantiationService.createInstance(DomRendererRowFactory, document);\n\n this._element.classList.add(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n this._screenElement.appendChild(this._rowContainer);\n this._screenElement.appendChild(this._selectionContainer);\n\n this._register(this._linkifier2.onShowLinkUnderline(e => this._handleLinkHover(e)));\n this._register(this._linkifier2.onHideLinkUnderline(e => this._handleLinkLeave(e)));\n\n this._cursorBlinkStateManager = new CursorBlinkStateManager(this._rowContainer, this._coreBrowserService);\n this._register(addDisposableListener(this._document, 'mousedown', () => this._cursorBlinkStateManager.restartBlinkAnimation()));\n this._register(toDisposable(() => this._cursorBlinkStateManager.dispose()));\n this._textBlinkStateManager = this._register(new TextBlinkStateManager(\n () => this._onRequestRedraw.fire({ start: 0, end: this._bufferService.rows - 1 }),\n this._coreBrowserService,\n this._optionsService\n ));\n\n this._register(toDisposable(() => {\n this._element.classList.remove(Constants.TERMINAL_CLASS_PREFIX + this._terminalClass);\n\n // Outside influences such as React unmounts may manipulate the DOM before our disposal.\n // https://github.com/xtermjs/xterm.js/issues/2960\n this._rowContainer.remove();\n this._selectionContainer.remove();\n this._widthCache.dispose();\n this._themeStyleElement.remove();\n this._dimensionsStyleElement.remove();\n }));\n\n this._widthCache = new WidthCache();\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n private _updateDimensions(): void {\n const dpr = this._coreBrowserService.dpr;\n this.dimensions.device.char.width = this._charSizeService.width * dpr;\n this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr);\n this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing);\n this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight);\n this.dimensions.device.char.left = 0;\n this.dimensions.device.char.top = 0;\n this.dimensions.device.canvas.width = this.dimensions.device.cell.width * this._bufferService.cols;\n this.dimensions.device.canvas.height = this.dimensions.device.cell.height * this._bufferService.rows;\n this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr);\n this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr);\n this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols;\n this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows;\n\n for (const element of this._rowElements) {\n element.style.width = `${this.dimensions.css.canvas.width}px`;\n element.style.height = `${this.dimensions.css.cell.height}px`;\n element.style.lineHeight = `${this.dimensions.css.cell.height}px`;\n // Make sure rows don't overflow onto following row\n element.style.overflow = 'hidden';\n }\n\n if (!this._dimensionsStyleElement) {\n this._dimensionsStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._dimensionsStyleElement);\n }\n\n const styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` display: inline-block;` + // TODO: find workaround for inline-block (creates ~20% render penalty)\n ` height: 100%;` +\n ` vertical-align: top;` +\n `}`;\n\n this._dimensionsStyleElement.textContent = styles;\n\n this._selectionContainer.style.height = this._viewportElement.style.height;\n this._screenElement.style.width = `${this.dimensions.css.canvas.width}px`;\n this._screenElement.style.height = `${this.dimensions.css.canvas.height}px`;\n }\n\n private _injectCss(colors: ReadonlyColorSet): void {\n if (!this._themeStyleElement) {\n this._themeStyleElement = this._document.createElement('style');\n this._screenElement.appendChild(this._themeStyleElement);\n }\n\n // Base CSS\n let styles =\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} {` +\n // Disabling pointer events circumvents a browser behavior that prevents `click` events from\n // being delivered if the target element is replaced during the click. This happened due to\n // refresh() being called during the mousedown handler to start a selection.\n ` pointer-events: none;` +\n ` color: ${colors.foreground.css};` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}, ${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} span {` +\n ` font-family: ${this._optionsService.rawOptions.fontFamily};` +\n ` font-size: ${this._optionsService.rawOptions.fontSize}px;` +\n ` font-kerning: none;` +\n ` white-space: pre` +\n `}`;\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .xterm-dim {` +\n ` color: ${color.multiplyOpacity(colors.foreground, 0.5).css};` +\n `}`;\n // Text styles\n styles +=\n `${this._terminalSelector} span:not(.${RowCss.BOLD_CLASS}) {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeight};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BOLD_CLASS} {` +\n ` font-weight: ${this._optionsService.rawOptions.fontWeightBold};` +\n `}` +\n `${this._terminalSelector} span.${RowCss.ITALIC_CLASS} {` +\n ` font-style: italic;` +\n `}` +\n `${this._terminalSelector} span.${RowCss.BLINK_HIDDEN_CLASS} {` +\n ` visibility: hidden;` +\n `}`;\n // Blink animation\n const blinkAnimationUnderlineId = `blink_underline_${this._terminalClass}`;\n const blinkAnimationBarId = `blink_bar_${this._terminalClass}`;\n const blinkAnimationBlockId = `blink_block_${this._terminalClass}`;\n styles +=\n `@keyframes ${blinkAnimationUnderlineId} {` +\n ` 50% {` +\n ` border-bottom-style: hidden;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBarId} {` +\n ` 50% {` +\n ` box-shadow: none;` +\n ` }` +\n `}`;\n styles +=\n `@keyframes ${blinkAnimationBlockId} {` +\n ` 0% {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n ` }` +\n ` 50% {` +\n ` background-color: inherit;` +\n ` color: ${colors.cursor.css};` +\n ` }` +\n `}`;\n // Cursor\n styles +=\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` animation: ${blinkAnimationUnderlineId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` animation: ${blinkAnimationBarId} 1s step-end infinite;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.FOCUS_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` animation: ${blinkAnimationBlockId} 1s step-end infinite;` +\n `}` +\n // Disable cursor blinking when idle\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS}.${Constants.CURSOR_BLINK_IDLE_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_BLINK_CLASS} {` +\n ` animation: none !important;` +\n `}` +\n // !important helps fix an issue where the cursor will not render on top of the selection,\n // however it's very hard to fix this issue and retain the blink animation without the use of\n // !important. So this edge case fails when cursor blink is on.\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS} {` +\n ` background-color: ${colors.cursor.css};` +\n ` color: ${colors.cursorAccent.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BLOCK_CLASS}:not(.${RowCss.CURSOR_BLINK_CLASS}) {` +\n ` background-color: ${colors.cursor.css} !important;` +\n ` color: ${colors.cursorAccent.css} !important;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_OUTLINE_CLASS} {` +\n ` outline: 1px solid ${colors.cursor.css};` +\n ` outline-offset: -1px;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_BAR_CLASS} {` +\n ` box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${colors.cursor.css} inset;` +\n `}` +\n `${this._terminalSelector} .${Constants.ROW_CONTAINER_CLASS} .${RowCss.CURSOR_CLASS}.${RowCss.CURSOR_STYLE_UNDERLINE_CLASS} {` +\n ` border-bottom: 1px ${colors.cursor.css};` +\n ` border-bottom-style: solid;` +\n ` height: calc(100% - 1px);` +\n `}`;\n // Selection\n styles +=\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} {` +\n ` position: absolute;` +\n ` top: 0;` +\n ` left: 0;` +\n ` z-index: 1;` +\n ` pointer-events: none;` +\n `}` +\n `${this._terminalSelector}.focus .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionBackgroundOpaque.css};` +\n `}` +\n `${this._terminalSelector} .${Constants.SELECTION_CLASS} div {` +\n ` position: absolute;` +\n ` background-color: ${colors.selectionInactiveBackgroundOpaque.css};` +\n `}`;\n // Colors\n for (const [i, c] of colors.ansi.entries()) {\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i} { color: ${c.css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${i}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(c, 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${i} { background-color: ${c.css}; }`;\n }\n styles +=\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { color: ${color.opaque(colors.background).css}; }` +\n `${this._terminalSelector} .${Constants.FG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR}.${RowCss.DIM_CLASS} { color: ${color.multiplyOpacity(color.opaque(colors.background), 0.5).css}; }` +\n `${this._terminalSelector} .${Constants.BG_CLASS_PREFIX}${INVERTED_DEFAULT_COLOR} { background-color: ${colors.foreground.css}; }`;\n\n this._themeStyleElement.textContent = styles;\n }\n\n /**\n * default letter spacing\n * Due to rounding issues in dimensions dpr calc glyph might render\n * slightly too wide or too narrow. The method corrects the stacking offsets\n * by applying a default letter-spacing for all chars.\n * The value gets passed to the row factory to avoid setting this value again\n * (render speedup is roughly 10%).\n */\n private _setDefaultSpacing(): void {\n // measure same char as in CharSizeService to get the base deviation\n const spacing = this.dimensions.css.cell.width - this._widthCache.get('W', false, false);\n this._rowContainer.style.letterSpacing = `${spacing}px`;\n this._rowFactory.defaultSpacing = spacing;\n }\n\n public handleDevicePixelRatioChange(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n private _refreshRowElements(cols: number, rows: number): void {\n // Add missing elements\n for (let i = this._rowElements.length; i <= rows; i++) {\n const row = this._document.createElement('div');\n this._rowContainer.appendChild(row);\n this._rowElements.push(row);\n this._rowHasBlinkingCells.push(false);\n }\n // Remove excess elements\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n if (this._rowHasBlinkingCells.pop()) {\n this._rowHasBlinkingCellsCount--;\n }\n }\n }\n\n public handleResize(cols: number, rows: number): void {\n this._refreshRowElements(cols, rows);\n this._updateDimensions();\n this.handleSelectionChanged(this._selectionRenderModel.selectionStart, this._selectionRenderModel.selectionEnd, this._selectionRenderModel.columnSelectMode);\n }\n\n public handleCharSizeChanged(): void {\n this._updateDimensions();\n this._widthCache.clear();\n this._setDefaultSpacing();\n }\n\n public handleBlur(): void {\n this._rowContainer.classList.remove(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.pause();\n this.renderRows(0, this._bufferService.rows - 1);\n }\n\n public handleFocus(): void {\n this._rowContainer.classList.add(Constants.FOCUS_CLASS);\n this._cursorBlinkStateManager.resume();\n this.renderRows(this._bufferService.buffer.y, this._bufferService.buffer.y);\n }\n\n public handleViewportVisibilityChange(isVisible: boolean): void {\n this._textBlinkStateManager.setViewportVisible(isVisible);\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n const rows = this._bufferService.rows;\n\n // Remove all selections\n this._selectionContainer.replaceChildren();\n this._rowFactory.handleSelectionChanged(start, end, columnSelectMode);\n\n // Determine old selection viewport band\n let oldViewportStart = 0;\n let oldViewportEnd = -1;\n if (this._lastSelectionStart && this._lastSelectionEnd) {\n this._selectionRenderModel.update(this._terminal, this._lastSelectionStart, this._lastSelectionEnd, this._lastSelectionColumnMode);\n if (this._selectionRenderModel.hasSelection) {\n oldViewportStart = this._selectionRenderModel.viewportCappedStartRow;\n oldViewportEnd = this._selectionRenderModel.viewportCappedEndRow;\n }\n }\n\n // Determine new selection viewport band and create overlays\n let newViewportStart = 0;\n let newViewportEnd = -1;\n if (!start || !end) {\n return;\n }\n this._selectionRenderModel.update(this._terminal, start, end, columnSelectMode);\n if (this._selectionRenderModel.hasSelection) {\n const viewportStartRow = this._selectionRenderModel.viewportStartRow;\n const viewportEndRow = this._selectionRenderModel.viewportEndRow;\n const viewportCappedStartRow = this._selectionRenderModel.viewportCappedStartRow;\n const viewportCappedEndRow = this._selectionRenderModel.viewportCappedEndRow;\n\n newViewportStart = viewportCappedStartRow;\n newViewportEnd = viewportCappedEndRow;\n\n // Create the selections\n const documentFragment = this._document.createDocumentFragment();\n\n if (columnSelectMode) {\n const isXFlipped = start[0] > end[0];\n documentFragment.appendChild(\n this._createSelectionElement(viewportCappedStartRow, isXFlipped ? end[0] : start[0], isXFlipped ? start[0] : end[0], viewportCappedEndRow - viewportCappedStartRow + 1)\n );\n } else {\n // Draw first row\n const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;\n const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));\n // Draw middle rows\n const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow + 1, 0, this._bufferService.cols, middleRowsCount));\n // Draw final row\n if (viewportCappedStartRow !== viewportCappedEndRow) {\n // Only draw viewportEndRow if it's not the same as viewporttartRow\n const finalEndCol = viewportEndRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;\n documentFragment.appendChild(this._createSelectionElement(viewportCappedEndRow, 0, finalEndCol));\n }\n }\n this._selectionContainer.appendChild(documentFragment);\n }\n\n // Compute minimal row range to redraw\n let renderStartRow = Math.min(oldViewportStart, newViewportStart);\n let renderEndRow = Math.max(oldViewportEnd, newViewportEnd);\n\n if (renderEndRow >= 0) {\n // Clamp to viewport\n renderStartRow = Math.max(renderStartRow, 0);\n renderEndRow = Math.min(renderEndRow, rows - 1);\n\n // Ensure cursor row is included when a selection is present\n const buffer = this._bufferService.buffer;\n const cursorViewportRow = buffer.y;\n if (this._selectionRenderModel.hasSelection && cursorViewportRow >= 0 && cursorViewportRow < rows) {\n renderStartRow = Math.min(renderStartRow, cursorViewportRow);\n renderEndRow = Math.max(renderEndRow, cursorViewportRow);\n }\n\n this.renderRows(renderStartRow, renderEndRow);\n }\n\n // Update last selection state\n this._lastSelectionStart = start;\n this._lastSelectionEnd = end;\n this._lastSelectionColumnMode = columnSelectMode;\n }\n\n /**\n * Creates a selection element at the specified position.\n * @param row The row of the selection.\n * @param colStart The start column.\n * @param colEnd The end columns.\n */\n private _createSelectionElement(row: number, colStart: number, colEnd: number, rowCount: number = 1): HTMLElement {\n const element = this._document.createElement('div');\n const left = colStart * this.dimensions.css.cell.width;\n let width = this.dimensions.css.cell.width * (colEnd - colStart);\n if (left + width > this.dimensions.css.canvas.width) {\n width = this.dimensions.css.canvas.width - left;\n }\n\n element.style.height = `${rowCount * this.dimensions.css.cell.height}px`;\n element.style.top = `${row * this.dimensions.css.cell.height}px`;\n element.style.left = `${left}px`;\n element.style.width = `${width}px`;\n return element;\n }\n\n public handleCursorMove(): void {\n // Reset idle timer on cursor movement (which happens on input)\n this._cursorBlinkStateManager.restartBlinkAnimation();\n }\n\n private _handleOptionsChanged(): void {\n // Force a refresh\n this._updateDimensions();\n // Refresh CSS\n this._injectCss(this._themeService.colors);\n // update spacing cache\n this._widthCache.setFont(\n this._optionsService.rawOptions.fontFamily,\n this._optionsService.rawOptions.fontSize,\n this._optionsService.rawOptions.fontWeight,\n this._optionsService.rawOptions.fontWeightBold\n );\n this._setDefaultSpacing();\n }\n\n public clear(): void {\n for (const e of this._rowElements) {\n /**\n * NOTE: This used to be `e.innerText = '';` but that doesn't work when using `jsdom` and\n * `@testing-library/react`\n *\n * references:\n * - https://github.com/testing-library/react-testing-library/issues/1146\n * - https://github.com/jsdom/jsdom/issues/1245\n */\n e.replaceChildren();\n }\n if (this._rowHasBlinkingCellsCount > 0) {\n this._rowHasBlinkingCells.fill(false);\n this._rowHasBlinkingCellsCount = 0;\n this._textBlinkStateManager.setNeedsBlinkInViewport(false);\n }\n }\n\n public renderRows(start: number, end: number): void {\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, this._bufferService.cols - 1);\n const cursorBlink = this._coreService.decPrivateModes.cursorBlink ?? this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._coreService.decPrivateModes.cursorStyle ?? this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n for (let y = start; y <= end; y++) {\n const row = y + buffer.ydisp;\n const rowElement = this._rowElements[y];\n if (!rowElement) {\n continue;\n }\n const lineData = buffer.lines.get(row);\n if (!lineData) {\n rowElement.replaceChildren();\n this._setRowBlinkState(y, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n lineData,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n -1,\n -1,\n rowInfo\n )\n );\n this._setRowBlinkState(y, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private get _terminalSelector(): string {\n return `.${Constants.TERMINAL_CLASS_PREFIX}${this._terminalClass}`;\n }\n\n private _handleLinkHover(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, true);\n }\n\n private _handleLinkLeave(e: ILinkifierEvent): void {\n this._setCellUnderline(e.x1, e.x2, e.y1, e.y2, e.cols, false);\n }\n\n private _setCellUnderline(x: number, x2: number, y: number, y2: number, cols: number, enabled: boolean): void {\n /**\n * NOTE: The linkifier may send out of viewport y-values if:\n * - negative y-value: the link started at a higher line\n * - y-value >= maxY: the link ends at a line below viewport\n *\n * For negative y-values we can simply adjust x = 0,\n * as higher up link start means, that everything from\n * (0,0) is a link under top-down-left-right char progression\n *\n * Additionally there might be a small chance of out-of-sync x|y-values\n * from a race condition of render updates vs. link event handler execution:\n * - (sync) resize: chances terminal buffer in sync, schedules render update async\n * - (async) link handler race condition: new buffer metrics, but still on old render state\n * - (async) render update: brings term metrics and render state back in sync\n */\n // clip coords into viewport\n if (y < 0) x = 0;\n if (y2 < 0) x2 = 0;\n const maxY = this._bufferService.rows - 1;\n y = Math.max(Math.min(y, maxY), 0);\n y2 = Math.max(Math.min(y2, maxY), 0);\n\n cols = Math.min(cols, this._bufferService.cols);\n const buffer = this._bufferService.buffer;\n const cursorAbsoluteY = buffer.ybase + buffer.y;\n const cursorX = Math.min(buffer.x, cols - 1);\n const cursorBlink = this._optionsService.rawOptions.cursorBlink;\n const cursorStyle = this._optionsService.rawOptions.cursorStyle;\n const cursorInactiveStyle = this._optionsService.rawOptions.cursorInactiveStyle;\n const rowInfo = { hasBlinkingCells: false };\n\n // refresh rows within link range\n for (let i = y; i <= y2; ++i) {\n const row = i + buffer.ydisp;\n const rowElement = this._rowElements[i];\n if (!rowElement) {\n continue;\n }\n const bufferline = buffer.lines.get(row);\n if (!bufferline) {\n rowElement.replaceChildren();\n this._setRowBlinkState(i, false);\n continue;\n }\n rowElement.replaceChildren(\n ...this._rowFactory.createRow(\n bufferline,\n row,\n row === cursorAbsoluteY,\n cursorStyle,\n cursorInactiveStyle,\n cursorX,\n cursorBlink,\n this._textBlinkStateManager.isBlinkOn,\n this.dimensions.css.cell.width,\n this._widthCache,\n enabled ? (i === y ? x : 0) : -1,\n enabled ? ((i === y2 ? x2 : cols) - 1) : -1,\n rowInfo\n )\n );\n this._setRowBlinkState(i, rowInfo.hasBlinkingCells);\n }\n this._updateTextBlinkState();\n }\n\n private _setRowBlinkState(row: number, hasBlinkingCells: boolean): void {\n const previous = this._rowHasBlinkingCells[row];\n if (previous === hasBlinkingCells) {\n return;\n }\n this._rowHasBlinkingCells[row] = hasBlinkingCells;\n this._rowHasBlinkingCellsCount += hasBlinkingCells ? 1 : -1;\n }\n\n private _updateTextBlinkState(): void {\n this._textBlinkStateManager.setNeedsBlinkInViewport(this._rowHasBlinkingCellsCount > 0);\n }\n}\n\nclass CursorBlinkStateManager {\n private _idleTimeout: number | undefined;\n private _isIdlePaused: boolean = false;\n\n constructor(\n private readonly _rowContainer: HTMLElement,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n if (this._coreBrowserService.isFocused) {\n this._resetIdleTimer();\n }\n }\n\n public dispose(): void {\n this._clearIdleTimer();\n }\n\n public restartBlinkAnimation(): void {\n if (this._isIdlePaused) {\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n }\n this._resetIdleTimer();\n }\n\n public pause(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n }\n\n public resume(): void {\n this._isIdlePaused = false;\n this._rowContainer.classList.remove(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._resetIdleTimer();\n }\n\n private _resetIdleTimer(): void {\n this._isIdlePaused = false;\n this._clearIdleTimer();\n this._idleTimeout = this._coreBrowserService.window.setTimeout(() => {\n this._stopBlinkingDueToIdle();\n }, RendererConstants.CURSOR_BLINK_IDLE_TIMEOUT);\n }\n\n private _clearIdleTimer(): void {\n if (this._idleTimeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._idleTimeout);\n this._idleTimeout = undefined;\n }\n }\n\n private _stopBlinkingDueToIdle(): void {\n this._rowContainer.classList.add(Constants.CURSOR_BLINK_IDLE_CLASS);\n this._isIdlePaused = true;\n this._idleTimeout = undefined;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOptionsService } from '../../common/services/Services';\nimport { ICharSizeService } from './Services';\nimport { Disposable } from '../../common/Lifecycle';\nimport { Emitter } from '../../common/Event';\n\nexport class CharSizeService extends Disposable implements ICharSizeService {\n public serviceBrand: undefined;\n\n public width: number = 0;\n public height: number = 0;\n private _measureStrategy: IMeasureStrategy;\n\n public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; }\n\n private readonly _onCharSizeChange = this._register(new Emitter());\n public readonly onCharSizeChange = this._onCharSizeChange.event;\n\n constructor(\n document: Document,\n parentElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n try {\n this._measureStrategy = this._register(new TextMetricsMeasureStrategy(this._optionsService));\n } catch {\n this._measureStrategy = this._register(new DomMeasureStrategy(document, parentElement, this._optionsService));\n }\n this._register(this._optionsService.onMultipleOptionChange(['fontFamily', 'fontSize'], () => this.measure()));\n }\n\n public measure(): void {\n const result = this._measureStrategy.measure();\n if (result.width !== this.width || result.height !== this.height) {\n this.width = result.width;\n this.height = result.height;\n this._onCharSizeChange.fire();\n }\n }\n}\n\ninterface IMeasureStrategy {\n measure(): Readonly;\n}\n\ninterface IMeasureResult {\n width: number;\n height: number;\n}\n\nconst enum DomMeasureStrategyConstants {\n REPEAT = 32\n}\n\nabstract class BaseMeasureStategy extends Disposable implements IMeasureStrategy {\n protected _result: IMeasureResult = { width: 0, height: 0 };\n\n protected _validateAndSet(width: number | undefined, height: number | undefined): void {\n // If values are 0 then the element is likely currently display:none, in which case we should\n // retain the previous value.\n if (width !== undefined && width > 0 && height !== undefined && height > 0) {\n this._result.width = width;\n this._result.height = height;\n }\n }\n\n public abstract measure(): Readonly;\n}\n\nclass DomMeasureStrategy extends BaseMeasureStategy {\n private _measureElement: HTMLElement;\n\n constructor(\n private _document: Document,\n private _parentElement: HTMLElement,\n private _optionsService: IOptionsService\n ) {\n super();\n this._measureElement = this._document.createElement('span');\n this._measureElement.classList.add('xterm-char-measure-element');\n this._measureElement.textContent = 'W'.repeat(DomMeasureStrategyConstants.REPEAT);\n this._measureElement.setAttribute('aria-hidden', 'true');\n this._measureElement.style.whiteSpace = 'pre';\n this._measureElement.style.fontKerning = 'none';\n this._parentElement.appendChild(this._measureElement);\n }\n\n public measure(): Readonly {\n this._measureElement.style.fontFamily = this._optionsService.rawOptions.fontFamily;\n this._measureElement.style.fontSize = `${this._optionsService.rawOptions.fontSize}px`;\n\n // Note that this triggers a synchronous layout\n this._validateAndSet(Number(this._measureElement.offsetWidth) / DomMeasureStrategyConstants.REPEAT, Number(this._measureElement.offsetHeight));\n\n return this._result;\n }\n}\n\nclass TextMetricsMeasureStrategy extends BaseMeasureStategy {\n private _canvas: OffscreenCanvas;\n private _ctx: OffscreenCanvasRenderingContext2D;\n\n constructor(\n private _optionsService: IOptionsService\n ) {\n super();\n // This will throw if any required API is not supported\n this._canvas = new OffscreenCanvas(100, 100);\n this._ctx = this._canvas.getContext('2d')!;\n const a = this._ctx.measureText('W');\n if (!('width' in a && 'fontBoundingBoxAscent' in a && 'fontBoundingBoxDescent' in a)) {\n throw new Error('Required font metrics not supported');\n }\n }\n\n public measure(): Readonly {\n this._ctx.font = `${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;\n const metrics = this._ctx.measureText('W');\n this._validateAndSet(metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent);\n return this._result;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreBrowserService } from './Services';\nimport { Emitter, EventUtils } from '../../common/Event';\nimport { addDisposableListener } from '../Dom';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\n\nexport class CoreBrowserService extends Disposable implements ICoreBrowserService {\n public serviceBrand: undefined;\n\n private _isFocused = false;\n private _cachedIsFocused: boolean | undefined = undefined;\n private _screenDprMonitor: ScreenDprMonitor;\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n private readonly _onWindowChange = this._register(new Emitter());\n public readonly onWindowChange = this._onWindowChange.event;\n\n constructor(\n private _textarea: HTMLTextAreaElement,\n private _window: Window & typeof globalThis,\n public readonly mainDocument: Document\n ) {\n super();\n\n this._screenDprMonitor = this._register(new ScreenDprMonitor(this._window));\n\n // Monitor device pixel ratio\n this._register(this.onWindowChange(w => this._screenDprMonitor.setWindow(w)));\n this._register(EventUtils.forward(this._screenDprMonitor.onDprChange, this._onDprChange));\n\n this._register(addDisposableListener(this._textarea, 'focus', () => this._isFocused = true));\n this._register(addDisposableListener(this._textarea, 'blur', () => this._isFocused = false));\n }\n\n public get window(): Window & typeof globalThis {\n return this._window;\n }\n\n public set window(value: Window & typeof globalThis) {\n if (this._window !== value) {\n this._window = value;\n this._onWindowChange.fire(this._window);\n }\n }\n\n public get dpr(): number {\n return this.window.devicePixelRatio;\n }\n\n public get isFocused(): boolean {\n if (this._cachedIsFocused === undefined) {\n this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();\n queueMicrotask(() => this._cachedIsFocused = undefined);\n }\n return this._cachedIsFocused;\n }\n}\n\n\n/**\n * The screen device pixel ratio monitor allows listening for when the\n * window.devicePixelRatio value changes. This is done not with polling but with\n * the use of window.matchMedia to watch media queries. When the event fires,\n * the listener will be reattached using a different media query to ensure that\n * any further changes will _register.\n *\n * The listener should fire on both window zoom changes and switching to a\n * monitor with a different DPI.\n */\nclass ScreenDprMonitor extends Disposable {\n private _currentDevicePixelRatio: number;\n private _outerListener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | undefined;\n private _resolutionMediaMatchList: MediaQueryList | undefined;\n private _windowResizeListener = this._register(new MutableDisposable());\n\n private readonly _onDprChange = this._register(new Emitter());\n public readonly onDprChange = this._onDprChange.event;\n\n constructor(private _parentWindow: Window) {\n super();\n\n // Initialize listener and dpr value\n this._outerListener = () => this._setDprAndFireIfDiffers();\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._updateDpr();\n\n // Monitor active window resize\n this._setWindowResizeListener();\n\n // Setup additional disposables\n this._register(toDisposable(() => this.clearListener()));\n }\n\n\n public setWindow(parentWindow: Window): void {\n this._parentWindow = parentWindow;\n this._setWindowResizeListener();\n this._setDprAndFireIfDiffers();\n }\n\n private _setWindowResizeListener(): void {\n this._windowResizeListener.value = addDisposableListener(this._parentWindow, 'resize', () => this._setDprAndFireIfDiffers());\n }\n\n private _setDprAndFireIfDiffers(): void {\n if (this._parentWindow.devicePixelRatio !== this._currentDevicePixelRatio) {\n this._onDprChange.fire(this._parentWindow.devicePixelRatio);\n }\n this._updateDpr();\n }\n\n private _updateDpr(): void {\n if (!this._outerListener) {\n return;\n }\n\n // Clear listeners for old DPR\n this._resolutionMediaMatchList?.removeListener(this._outerListener);\n\n // Add listeners for new DPR\n this._currentDevicePixelRatio = this._parentWindow.devicePixelRatio;\n this._resolutionMediaMatchList = this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`);\n this._resolutionMediaMatchList.addListener(this._outerListener);\n }\n\n public clearListener(): void {\n if (!this._resolutionMediaMatchList || !this._outerListener) {\n return;\n }\n this._resolutionMediaMatchList.removeListener(this._outerListener);\n this._resolutionMediaMatchList = undefined;\n this._outerListener = undefined;\n }\n}\n", "import { ILinkProvider, ILinkProviderService } from './Services';\nimport { Disposable, toDisposable } from '../../common/Lifecycle';\nimport { IDisposable } from '../../common/Types';\n\nexport class LinkProviderService extends Disposable implements ILinkProviderService {\n declare public serviceBrand: undefined;\n\n public readonly linkProviders: ILinkProvider[] = [];\n\n constructor() {\n super();\n this._register(toDisposable(() => this.linkProviders.length = 0));\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n this.linkProviders.push(linkProvider);\n return {\n dispose: () => {\n // Remove the link provider from the list\n const providerIndex = this.linkProviders.indexOf(linkProvider);\n\n if (providerIndex !== -1) {\n this.linkProviders.splice(providerIndex, 1);\n }\n }\n };\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport function getCoordsRelativeToElement(window: Pick, event: {clientX: number, clientY: number}, element: HTMLElement): [number, number] {\n const rect = element.getBoundingClientRect();\n const elementStyle = window.getComputedStyle(element);\n const leftPadding = parseInt(elementStyle.getPropertyValue('padding-left'), 10);\n const topPadding = parseInt(elementStyle.getPropertyValue('padding-top'), 10);\n return [\n event.clientX - rect.left - leftPadding,\n event.clientY - rect.top - topPadding\n ];\n}\n\n/**\n * Gets coordinates within the terminal for a particular mouse event. The result\n * is returned as an array in the form [x, y] instead of an object as it's a\n * little faster and this function is used in some low level code.\n * @param window The window object the element belongs to.\n * @param event The mouse event.\n * @param element The terminal's container element.\n * @param colCount The number of columns in the terminal.\n * @param rowCount The number of rows in the terminal.\n * @param hasValidCharSize Whether there is a valid character size available.\n * @param cssCellWidth The cell width device pixel render dimensions.\n * @param cssCellHeight The cell height device pixel render dimensions.\n * @param isSelection Whether the request is for the selection or not. This will\n * apply an offset to the x value such that the left half of the cell will\n * select that cell and the right half will select the next cell.\n */\nexport function getCoords(window: Pick, event: Pick, element: HTMLElement, colCount: number, rowCount: number, hasValidCharSize: boolean, cssCellWidth: number, cssCellHeight: number, isSelection?: boolean): [number, number] | undefined {\n // Coordinates cannot be measured if there is no valid character size.\n if (!hasValidCharSize) {\n return undefined;\n }\n\n const coords = getCoordsRelativeToElement(window, event, element);\n coords[0] = Math.ceil((coords[0] + (isSelection ? cssCellWidth / 2 : 0)) / cssCellWidth);\n coords[1] = Math.ceil(coords[1] / cssCellHeight);\n\n // Ensure coordinates are within the terminal viewport. Note that selections\n // need an additional point of precision to cover the end point (as characters\n // cover half of one char and half of the next).\n coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0));\n coords[1] = Math.min(Math.max(coords[1], 1), rowCount);\n\n return coords;\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { getWindow } from '../Dom';\nimport { getCoords, getCoordsRelativeToElement } from '../input/Mouse';\nimport { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';\n\nexport class MouseCoordsService implements IMouseCoordsService {\n public serviceBrand: undefined;\n\n constructor(\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n }\n\n public getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined {\n return getCoords(\n getWindow(element),\n event,\n element,\n colCount,\n rowCount,\n this._charSizeService.hasValidSize,\n this._renderService.dimensions.css.cell.width,\n this._renderService.dimensions.css.cell.height,\n isSelection\n );\n }\n\n public getMouseReportCoords(event: MouseEvent, element: HTMLElement): { col: number, row: number, x: number, y: number } | undefined {\n const coords = getCoordsRelativeToElement(getWindow(element), event, element);\n if (!this._charSizeService.hasValidSize) {\n return undefined;\n }\n coords[0] = Math.min(Math.max(coords[0], 0), this._renderService.dimensions.css.canvas.width - 1);\n coords[1] = Math.min(Math.max(coords[1], 0), this._renderService.dimensions.css.canvas.height - 1);\n return {\n col: Math.floor(coords[0] / this._renderService.dimensions.css.cell.width),\n row: Math.floor(coords[1] / this._renderService.dimensions.css.cell.height),\n x: Math.floor(coords[0]),\n y: Math.floor(coords[1])\n };\n }\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as DomUtils from '../Dom';\nimport { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';\n\nconst mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;\n\nfunction tail(array: ArrayLike, n: number = 0): T | undefined {\n return array[array.length - (1 + n)];\n}\n\nfunction memoize(_target: any, key: string, descriptor: PropertyDescriptor): void {\n let fnKey: string | null = null;\n let fn: Function | null = null;\n\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n\n if (fn!.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n } else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n\n if (!fn || !fnKey) {\n throw new Error('not supported');\n }\n\n const memoizeKey = `$memoize$${key}`;\n const descriptorAny = descriptor as { [key: string]: any };\n descriptorAny[fnKey] = function (...args: any[]) {\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: fn.apply(this, args)\n });\n }\n\n return (this as { [key: string]: any })[memoizeKey];\n };\n}\n\nclass LinkedListNode {\n\n public static readonly Undefined = new LinkedListNode(undefined);\n\n public element: E;\n public next: LinkedListNode;\n public prev: LinkedListNode;\n\n public constructor(element: E) {\n this.element = element;\n this.next = LinkedListNode.Undefined;\n this.prev = LinkedListNode.Undefined;\n }\n}\n\nclass LinkedList {\n\n private _first: LinkedListNode = LinkedListNode.Undefined;\n private _last: LinkedListNode = LinkedListNode.Undefined;\n\n public push(element: E): () => void {\n return this._insert(element, true);\n }\n\n private _insert(element: E, atTheEnd: boolean): () => void {\n const newNode = new LinkedListNode(element);\n if (this._first === LinkedListNode.Undefined) {\n this._first = newNode;\n this._last = newNode;\n\n } else if (atTheEnd) {\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n\n } else {\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n\n private _remove(node: LinkedListNode): void {\n if (node.prev !== LinkedListNode.Undefined && node.next !== LinkedListNode.Undefined) {\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n\n } else if (node.prev === LinkedListNode.Undefined && node.next === LinkedListNode.Undefined) {\n this._first = LinkedListNode.Undefined;\n this._last = LinkedListNode.Undefined;\n\n } else if (node.next === LinkedListNode.Undefined) {\n this._last = this._last.prev!;\n this._last.next = LinkedListNode.Undefined;\n\n } else if (node.prev === LinkedListNode.Undefined) {\n this._first = this._first.next!;\n this._first.prev = LinkedListNode.Undefined;\n }\n }\n\n public *[Symbol.iterator](): Iterator {\n let node = this._first;\n while (node !== LinkedListNode.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n\nexport namespace EventType {\n export const TAP = '-xterm-gesturetap';\n export const CHANGE = '-xterm-gesturechange';\n export const START = '-xterm-gesturestart';\n export const END = '-xterm-gesturesend';\n export const CONTEXT_MENU = '-xterm-gesturecontextmenu';\n}\n\ninterface ITouchData {\n id: number;\n initialTarget: EventTarget;\n initialTimeStamp: number;\n initialPageX: number;\n initialPageY: number;\n rollingTimestamps: number[];\n rollingPageX: number[];\n rollingPageY: number[];\n}\n\nexport interface IGestureEvent extends MouseEvent {\n initialTarget: EventTarget | undefined;\n translationX: number;\n translationY: number;\n pageX: number;\n pageY: number;\n clientX: number;\n clientY: number;\n tapCount: number;\n}\n\ninterface ITouch {\n identifier: number;\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n radiusX: number;\n radiusY: number;\n rotationAngle: number;\n force: number;\n target: Element;\n}\n\ninterface ITouchList {\n [i: number]: ITouch;\n length: number;\n item(index: number): ITouch;\n identifiedTouch(id: number): ITouch;\n}\n\ninterface ITouchEvent extends Event {\n touches: ITouchList;\n targetTouches: ITouchList;\n changedTouches: ITouchList;\n}\n\nexport class Gesture extends Disposable {\n\n private static readonly _scrollFriction = -0.005;\n private static _instance: Gesture;\n private static readonly _holdDelay = 700;\n\n private _dispatched = false;\n private readonly _targets = new LinkedList();\n private readonly _ignoreTargets = new LinkedList();\n private _handle: IDisposable | null;\n\n private readonly _activeTouches: { [id: number]: ITouchData };\n\n private _lastSetTapCountTime: number;\n\n private static readonly _clearTapCountTime = 400; // ms\n\n\n private constructor() {\n super();\n\n this._activeTouches = {};\n this._handle = null;\n this._lastSetTapCountTime = 0;\n\n const targetWindow = mainWindow;\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchstart', (e: ITouchEvent) => this._handleTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchend', (e: ITouchEvent) => this._handleTouchEnd(targetWindow, e)));\n this._register(DomUtils.addDisposableListener(targetWindow.document, 'touchmove', (e: ITouchEvent) => this._handleTouchMove(e), { passive: false }));\n }\n\n public static addTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._targets.push(element);\n return toDisposable(remove);\n }\n\n public static ignoreTarget(element: HTMLElement): IDisposable {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture._instance) {\n Gesture._instance = new Gesture();\n }\n\n const remove = Gesture._instance._ignoreTargets.push(element);\n return toDisposable(remove);\n }\n\n @memoize\n public static isTouchDevice(): boolean {\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n\n public override dispose(): void {\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n super.dispose();\n }\n\n private _handleTouchStart(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n if (this._handle) {\n this._handle.dispose();\n this._handle = null;\n }\n\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n\n this._activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n\n const evt = this._newGestureEvent(EventType.START, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this._dispatchEvent(evt);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _handleTouchEnd(targetWindow: Window, e: ITouchEvent): void {\n const timestamp = Date.now();\n\n const activeTouchCount = Object.keys(this._activeTouches).length;\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n const holdTime = Date.now() - data.initialTimeStamp;\n\n if (holdTime < Gesture._holdDelay\n && Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n && Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.TAP, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (holdTime >= Gesture._holdDelay\n\t\t\t\t&& Math.abs(data.initialPageX - tail(data.rollingPageX)!) < 30\n\t\t\t\t&& Math.abs(data.initialPageY - tail(data.rollingPageY)!) < 30) {\n\n const evt = this._newGestureEvent(EventType.CONTEXT_MENU, data.initialTarget);\n evt.pageX = tail(data.rollingPageX)!;\n evt.pageY = tail(data.rollingPageY)!;\n this._dispatchEvent(evt);\n\n } else if (activeTouchCount === 1) {\n const finalX = tail(data.rollingPageX)!;\n const finalY = tail(data.rollingPageY)!;\n\n const deltaT = tail(data.rollingTimestamps)! - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n\n const dispatchTo = [...this._targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this._inertia(targetWindow, dispatchTo, timestamp,\n Math.abs(deltaX) / deltaT,\n deltaX > 0 ? 1 : -1,\n finalX,\n Math.abs(deltaY) / deltaT,\n deltaY > 0 ? 1 : -1,\n finalY\n );\n }\n\n\n this._dispatchEvent(this._newGestureEvent(EventType.END, data.initialTarget));\n delete this._activeTouches[touch.identifier];\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n\n private _newGestureEvent(type: string, initialTarget?: EventTarget): IGestureEvent {\n const event = document.createEvent('CustomEvent') as unknown as IGestureEvent;\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n\n private _dispatchEvent(event: IGestureEvent): void {\n if (event.type === EventType.TAP) {\n const currentTime = (new Date()).getTime();\n let setTapCount;\n if (currentTime - this._lastSetTapCountTime > Gesture._clearTapCountTime) {\n setTapCount = 1;\n } else {\n setTapCount = 2;\n }\n\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n } else if (event.type === EventType.CHANGE || event.type === EventType.CONTEXT_MENU) {\n this._lastSetTapCountTime = 0;\n }\n\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this._ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n\n const targets: [number, HTMLElement][] = [];\n for (const target of this._targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now: Node | null = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n\n targets.sort((a, b) => a[0] - b[0]);\n\n for (const [, target] of targets) {\n target.dispatchEvent(event);\n this._dispatched = true;\n }\n }\n }\n\n private _inertia(targetWindow: Window, dispatchTo: ReadonlyArray, t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void {\n this._handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n\n const deltaT = now - t1;\n let deltaPosX = 0;\n let deltaPosY = 0;\n let stopped = true;\n\n vX += Gesture._scrollFriction * deltaT;\n vY += Gesture._scrollFriction * deltaT;\n\n if (vX > 0) {\n stopped = false;\n deltaPosX = dirX * vX * deltaT;\n }\n\n if (vY > 0) {\n stopped = false;\n deltaPosY = dirY * vY * deltaT;\n }\n\n const evt = this._newGestureEvent(EventType.CHANGE);\n evt.translationX = deltaPosX;\n evt.translationY = deltaPosY;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n\n if (!stopped) {\n this._inertia(targetWindow, dispatchTo, now, vX, dirX, x + deltaPosX, vY, dirY, y + deltaPosY);\n }\n });\n }\n\n private _handleTouchMove(e: ITouchEvent): void {\n const timestamp = Date.now();\n\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n\n const touch = e.changedTouches.item(i);\n\n if (!this._activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n\n const data = this._activeTouches[touch.identifier];\n\n const evt = this._newGestureEvent(EventType.CHANGE, data.initialTarget);\n evt.translationX = touch.pageX - tail(data.rollingPageX)!;\n evt.translationY = touch.pageY - tail(data.rollingPageY)!;\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n evt.clientX = touch.clientX;\n evt.clientY = touch.clientY;\n this._dispatchEvent(evt);\n\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n\n if (this._dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this._dispatched = false;\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { addDisposableListener } from '../Dom';\nimport { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { DisposableStore, MutableDisposable } from '../../common/Lifecycle';\nimport { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';\nimport { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';\n\ntype RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;\n\nexport const enum MouseEventCssClasses {\n ENABLE_MOUSE_EVENTS = 'enable-mouse-events'\n}\n\ninterface IMouseBindContext {\n readonly target: IMouseServiceTarget;\n readonly focus: () => void;\n readonly requestedEvents: RequestedMouseEvents;\n readonly mouseupListener: MutableDisposable;\n readonly mousedragListener: MutableDisposable;\n}\n\nexport class MouseService implements IMouseService {\n public serviceBrand: undefined;\n\n private _lastEvent: ICoreMouseEvent | null = null;\n private _wheelPartialScroll: number = 0;\n private _touchScrollAccumulator: number = 0;\n private _altMouseCursor: AltMouseCursorController | undefined;\n\n constructor(\n @IRenderService private readonly _renderService: IRenderService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @ICoreService private readonly _coreService: ICoreService,\n @IBufferService private readonly _bufferService: IBufferService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ISelectionService private readonly _selectionService: ISelectionService,\n @ILogService private readonly _logService: ILogService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public bindMouse(target: IMouseServiceTarget, register: (disposable: IDisposable) => void, focus: () => void): void {\n const { element, document } = target;\n\n /**\n * Event listener state handling.\n * We listen to the onProtocolChange event of MouseStateService and put\n * requested listeners in `requestedEvents`. With this the listeners\n * have all bits to do the event listener juggling.\n * Note: 'mousedown' currently is \"always on\" and not managed\n * by onProtocolChange.\n */\n const requestedEvents: RequestedMouseEvents = {\n mouseup: null,\n wheel: null,\n mousedrag: null,\n mousemove: null\n };\n const mouseupListener = new MutableDisposable();\n const mousedragListener = new MutableDisposable();\n register(mouseupListener);\n register(mousedragListener);\n const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };\n const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {\n mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),\n wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),\n mousedrag: (ev: Event) => this._handleMouseDrag(ctx, ev as MouseEvent),\n mousemove: (ev: Event) => this._handleMouseMove(ctx, ev as MouseEvent)\n };\n this._altMouseCursor = new AltMouseCursorController(\n element,\n document,\n () => this._mouseStateService.areMouseEventsActive\n && !!this._optionsService.rawOptions.mouseEventsRequireAlt\n );\n register(this._altMouseCursor);\n register(this._mouseStateService.onProtocolChange(events => {\n this._handleProtocolChange(ctx, eventListeners, events);\n }));\n register(this._optionsService.onSpecificOptionChange('mouseEventsRequireAlt', () => {\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n }));\n // force initial onProtocolChange so we dont miss early mouse requests\n this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;\n\n /**\n * \"Always on\" event listeners.\n */\n register(addDisposableListener(element, 'mousedown', (ev: MouseEvent) => this._handleMouseDown(ctx, ev)));\n register(addDisposableListener(element, 'wheel', (ev: WheelEvent) => this._handlePassiveWheel(ctx, ev), { passive: false }));\n register(Gesture.addTarget(target.screenElement));\n register(addDisposableListener(target.screenElement, GestureEventType.START, () => this._handleTouchStart()));\n register(addDisposableListener(target.screenElement, GestureEventType.CHANGE, (e: IGestureEvent) => this._handleTouchChange(ctx, e)));\n }\n\n private _sendEvent(ctx: IMouseBindContext, ev: MouseEvent | WheelEvent): boolean {\n // Get mouse coordinates\n const pos = this._mouseCoordsService.getMouseReportCoords(ev as MouseEvent, ctx.target.screenElement);\n if (!pos) {\n return false;\n }\n\n let but: CoreMouseButton;\n let action: CoreMouseAction | undefined;\n switch ((ev as MouseEvent & { overrideType?: string }).overrideType || ev.type) {\n case 'mousemove':\n action = CoreMouseAction.MOVE;\n if (ev.buttons === undefined) {\n // buttons is not supported on macOS, try to get a value from button instead\n but = CoreMouseButton.NONE;\n if (ev.button !== undefined) {\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n }\n } else {\n // according to MDN buttons only reports up to button 5 (AUX2)\n but = ev.buttons & 1 ? CoreMouseButton.LEFT :\n ev.buttons & 4 ? CoreMouseButton.MIDDLE :\n ev.buttons & 2 ? CoreMouseButton.RIGHT :\n CoreMouseButton.NONE; // fallback to NONE\n }\n break;\n case 'mouseup':\n action = CoreMouseAction.UP;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'mousedown':\n action = CoreMouseAction.DOWN;\n but = ev.button < 3 ? ev.button : CoreMouseButton.NONE;\n break;\n case 'wheel':\n if (!this._mouseStateService.allowCustomWheelEvent(ev as WheelEvent)) {\n return false;\n }\n const deltaY = (ev as WheelEvent).deltaY;\n if (deltaY === 0) {\n return false;\n }\n const lines = this._consumeWheelEvent(\n ev as WheelEvent,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n return false;\n }\n action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;\n but = CoreMouseButton.WHEEL;\n break;\n default:\n // dont handle other event types by accident\n return false;\n }\n\n // exit if we cannot determine valid button/action values\n // do nothing for higher buttons than wheel\n if (action === undefined || but === undefined || but > CoreMouseButton.WHEEL) {\n return false;\n }\n\n if (but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive\n && !ev.altKey) {\n return false;\n }\n\n // Alt is only used locally to gate mouse passthrough; do not forward it to the\n // application (e.g. tmux ignores alt-modified mouse reports).\n const stripAltFromReport = but !== CoreMouseButton.WHEEL\n && this._optionsService.rawOptions.mouseEventsRequireAlt\n && this._mouseStateService.areMouseEventsActive;\n\n return this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: but,\n action,\n ctrl: ev.ctrlKey,\n alt: stripAltFromReport ? false : ev.altKey,\n shift: ev.shiftKey\n });\n }\n\n private _handleMouseUp(ctx: IMouseBindContext, ev: MouseEvent): void {\n this._sendEvent(ctx, ev);\n if (!ev.buttons) {\n // if no other button is held remove global handlers\n ctx.mouseupListener.clear();\n ctx.mousedragListener.clear();\n }\n }\n\n private _handleWheel(ctx: IMouseBindContext, ev: WheelEvent): false {\n this._sendEvent(ctx, ev);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n private _handleMouseDrag(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move while a button is held\n if (ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseMove(ctx: IMouseBindContext, ev: MouseEvent): void {\n // deal only with move without any button\n if (!ev.buttons) {\n this._sendEvent(ctx, ev);\n }\n }\n\n private _handleMouseDown(ctx: IMouseBindContext, ev: MouseEvent): void {\n ev.preventDefault();\n ctx.focus();\n\n // Don't send the mouse button to the pty if mouse events are disabled or\n // if the selection manager is having selection forced (ie. a modifier is\n // held).\n if (!this._mouseStateService.areMouseEventsActive || this._selectionService.shouldForceSelection(ev)) {\n return;\n }\n\n this._sendEvent(ctx, ev);\n\n // Register additional global handlers which should keep reporting outside\n // of the terminal element.\n // Note: Other emulators also do this for 'mousedown' while a button\n // is held, we currently limit 'mousedown' to the terminal only.\n // Use the element's current document in case it moved to another window after open.\n const { element, document: targetDocument } = ctx.target;\n const listenerDocument = element.ownerDocument ?? targetDocument;\n if (ctx.requestedEvents.mouseup) {\n ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);\n }\n if (ctx.requestedEvents.mousedrag) {\n ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);\n }\n }\n\n private _handlePassiveWheel(ctx: IMouseBindContext, ev: WheelEvent): false | void {\n // do nothing, if app side handles wheel itself\n if (ctx.requestedEvents.wheel) {\n return;\n }\n\n if (!this._mouseStateService.allowCustomWheelEvent(ev)) {\n return false;\n }\n\n if (!this._bufferService.buffer.hasScrollback) {\n // Convert wheel events into up/down events when the buffer does not have scrollback, this\n // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse\n // events are not enabled.\n // This used implementation used get the actual lines/partial lines scrolled from the\n // viewport but since moving to the new viewport implementation has been simplified to\n // simply send a single up or down sequence.\n\n // Do nothing if there's no vertical scroll\n const deltaY = ev.deltaY;\n if (deltaY === 0) {\n return false;\n }\n\n const lines = this._consumeWheelEvent(\n ev,\n this._renderService?.dimensions?.device?.cell?.height,\n this._coreBrowserService?.dpr\n );\n if (lines === 0) {\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n // Construct and send sequences\n const sequence = C0.ESC + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');\n this._coreService.triggerDataEvent(sequence, true);\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n }\n\n private _handleTouchStart(): void {\n this._touchScrollAccumulator = 0;\n }\n\n private _handleTouchChange(ctx: IMouseBindContext, e: IGestureEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n // When mouse protocol has wheel events active, send as mouse wheel events.\n if (ctx.requestedEvents.wheel) {\n this._handleTouchScrollAsWheel(ctx, e);\n return;\n }\n\n // When in alt buffer (no scrollback), send up/down key sequences.\n if (!this._bufferService.buffer.hasScrollback) {\n this._handleTouchScrollAsKeys(e);\n return;\n }\n\n // Normal scrollback: delegate to viewport scrolling when available.\n ctx.target.handleTouchScroll?.(e.translationY);\n }\n\n private _handleTouchScrollAsKeys(e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const sequence = C0.ESC\n + (this._coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[')\n + (lines < 0 ? 'A' : 'B');\n for (let i = 0; i < Math.abs(lines); i++) {\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n\n private _handleTouchScrollAsWheel(ctx: IMouseBindContext, e: IGestureEvent): void {\n const cellHeight = this._renderService?.dimensions.css.cell.height;\n if (!cellHeight) {\n return;\n }\n\n this._touchScrollAccumulator -= e.translationY;\n const lines = Math.trunc(this._touchScrollAccumulator / cellHeight);\n if (lines === 0) {\n return;\n }\n\n this._touchScrollAccumulator -= lines * cellHeight;\n const pos = this._mouseCoordsService.getMouseReportCoords(e, ctx.target.screenElement);\n if (!pos) {\n return;\n }\n\n for (let i = 0; i < Math.abs(lines); i++) {\n this._triggerMouseEvent({\n col: pos.col,\n row: pos.row,\n x: pos.x,\n y: pos.y,\n button: CoreMouseButton.WHEEL,\n action: lines < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN,\n ctrl: false,\n alt: false,\n shift: false\n });\n }\n }\n\n public reset(): void {\n this._lastEvent = null;\n this._wheelPartialScroll = 0;\n this._touchScrollAccumulator = 0;\n }\n\n private _syncMouseModeState(element: HTMLElement): void {\n if (this._mouseStateService.areMouseEventsActive) {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt) {\n this._altMouseCursor?.resetClass();\n this._selectionService.enable();\n } else {\n element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.disable();\n }\n } else {\n element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n this._selectionService.enable();\n }\n }\n\n private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {\n const { element } = ctx.target;\n const { requestedEvents } = ctx;\n // apply global changes on events\n if (events) {\n if (this._optionsService.rawOptions.logLevel === 'debug') {\n this._logService.debug('Binding to mouse events:', this._explainEvents(events));\n }\n } else {\n this._logService.debug('Unbinding from mouse events.');\n }\n this._syncMouseModeState(element);\n this._altMouseCursor?.sync();\n\n // add/remove handlers from requestedEvents\n if (!(events & CoreMouseEventType.MOVE)) {\n if (requestedEvents.mousemove) {\n element.removeEventListener('mousemove', requestedEvents.mousemove);\n }\n requestedEvents.mousemove = null;\n } else if (!requestedEvents.mousemove) {\n element.addEventListener('mousemove', eventListeners.mousemove);\n requestedEvents.mousemove = eventListeners.mousemove;\n }\n\n if (!(events & CoreMouseEventType.WHEEL)) {\n if (requestedEvents.wheel) {\n element.removeEventListener('wheel', requestedEvents.wheel);\n }\n requestedEvents.wheel = null;\n } else if (!requestedEvents.wheel) {\n element.addEventListener('wheel', eventListeners.wheel, { passive: false });\n requestedEvents.wheel = eventListeners.wheel;\n }\n\n if (!(events & CoreMouseEventType.UP)) {\n ctx.mouseupListener.clear();\n requestedEvents.mouseup = null;\n } else {\n requestedEvents.mouseup ??= eventListeners.mouseup;\n }\n\n if (!(events & CoreMouseEventType.DRAG)) {\n ctx.mousedragListener.clear();\n requestedEvents.mousedrag = null;\n } else {\n requestedEvents.mousedrag ??= eventListeners.mousedrag;\n }\n }\n\n private _applyScrollModifier(amount: number, ev: WheelEvent): number {\n // Multiply the scroll speed when the modifier key is pressed\n if (ev.altKey || ev.ctrlKey || ev.shiftKey) {\n return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;\n }\n return amount * this._optionsService.rawOptions.scrollSensitivity;\n }\n\n /**\n * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.\n * This prevents hyper-sensitive scrolling in alt buffer.\n */\n private _consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {\n // Do nothing if it's not a vertical scroll event\n if (ev.deltaY === 0 || ev.shiftKey) {\n return 0;\n }\n\n if (cellHeight === undefined || dpr === undefined) {\n return 0;\n }\n\n const targetWheelEventPixels = cellHeight / dpr;\n let amount = this._applyScrollModifier(ev.deltaY, ev);\n\n if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n amount /= (targetWheelEventPixels + 0.0); // Prevent integer division\n\n const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;\n if (isLikelyTrackpad) {\n amount *= 0.3;\n }\n\n this._wheelPartialScroll += amount;\n amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);\n this._wheelPartialScroll %= 1;\n } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n amount *= this._bufferService.rows;\n }\n return amount;\n }\n\n /**\n * Triggers a mouse event to be sent.\n *\n * Returns true if the event passed all protocol restrictions and a report\n * was sent, otherwise false. The return value may be used to decide whether\n * the default event action in the browser component should be omitted.\n *\n * Note: The method will change values of the given event object\n * to fulfill protocol and encoding restrictions.\n */\n private _triggerMouseEvent(e: ICoreMouseEvent): boolean {\n // range check for col/row\n if (e.col < 0 || e.col >= this._bufferService.cols\n || e.row < 0 || e.row >= this._bufferService.rows) {\n return false;\n }\n\n // filter nonsense combinations of button + action\n if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {\n return false;\n }\n if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {\n return false;\n }\n\n // report 1-based coords\n e.col++;\n e.row++;\n\n // debounce move events at grid or pixel level\n if (e.action === CoreMouseAction.MOVE\n && this._lastEvent\n && this._equalEvents(this._lastEvent, e, this._mouseStateService.isPixelEncoding)\n ) {\n return false;\n }\n\n // apply protocol restrictions\n if (!this._mouseStateService.restrictMouseEvent(e)) {\n return false;\n }\n\n // encode report and send\n const report = this._mouseStateService.encodeMouseEvent(e);\n if (report) {\n if (this._mouseStateService.isDefaultEncoding) {\n this._coreService.triggerBinaryEvent(report);\n } else {\n this._coreService.triggerDataEvent(report, true);\n }\n }\n\n this._lastEvent = e;\n return true;\n }\n\n private _explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {\n return {\n down: !!(events & CoreMouseEventType.DOWN),\n up: !!(events & CoreMouseEventType.UP),\n drag: !!(events & CoreMouseEventType.DRAG),\n move: !!(events & CoreMouseEventType.MOVE),\n wheel: !!(events & CoreMouseEventType.WHEEL)\n };\n }\n\n private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {\n if (pixels) {\n if (e1.x !== e2.x) return false;\n if (e1.y !== e2.y) return false;\n } else {\n if (e1.col !== e2.col) return false;\n if (e1.row !== e2.row) return false;\n }\n if (e1.button !== e2.button) return false;\n if (e1.action !== e2.action) return false;\n if (e1.ctrl !== e2.ctrl) return false;\n if (e1.alt !== e2.alt) return false;\n if (e1.shift !== e2.shift) return false;\n return true;\n }\n\n}\n\n/**\n * Toggles MouseEventCssClasses.ENABLE_MOUSE_EVENTS on the terminal element while alt is held when\n * `mouseEventsRequireAlt` is active. DOM listeners are only registered while active.\n */\nexport class AltMouseCursorController implements IDisposable {\n private readonly _listeners = new MutableDisposable();\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _document: Document,\n private readonly _isActive: () => boolean\n ) {\n }\n\n public dispose(): void {\n this._listeners.dispose();\n }\n\n public sync(): void {\n this._listeners.clear();\n\n if (!this._isActive()) {\n return;\n }\n\n const store = new DisposableStore();\n const syncFromModifier = (ev: KeyboardEvent | MouseEvent): void => this.syncFromModifier(ev);\n store.add(addDisposableListener(this._document, 'keydown', syncFromModifier));\n store.add(addDisposableListener(this._document, 'keyup', syncFromModifier));\n store.add(addDisposableListener(this._element, 'mousemove', syncFromModifier));\n const targetWindow = this._element.ownerDocument?.defaultView;\n if (targetWindow) {\n store.add(addDisposableListener(targetWindow, 'blur', () => {\n if (this._isActive()) {\n this.resetClass();\n }\n }));\n }\n this._listeners.value = store;\n }\n\n public resetClass(): void {\n this._updateClass(false);\n }\n\n public syncFromModifier(ev: KeyboardEvent | MouseEvent): void {\n if (!this._isActive()) {\n return;\n }\n this._updateClass(ev.getModifierState('Alt'));\n }\n\n private _updateClass(altHeld: boolean): void {\n if (altHeld) {\n this._element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncerWithCallback } from './Types';\nimport { ICoreBrowserService } from './services/Services';\n\n/**\n * Debounces calls to render terminal rows using animation frames.\n */\nexport class RenderDebouncer implements IRenderDebouncerWithCallback {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n private _animationFrame: number | undefined;\n private _refreshCallbacks: FrameRequestCallback[] = [];\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _coreBrowserService: ICoreBrowserService\n ) {\n }\n\n public dispose(): void {\n if (this._animationFrame !== undefined) {\n this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame);\n this._animationFrame = undefined;\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n this._refreshCallbacks.push(callback);\n this._animationFrame ??= this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n return this._animationFrame;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n if (this._animationFrame !== undefined) {\n return;\n }\n\n this._animationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._innerRefresh());\n }\n\n private _innerRefresh(): void {\n this._animationFrame = undefined;\n\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n this._runRefreshCallbacks();\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n this._runRefreshCallbacks();\n }\n\n private _runRefreshCallbacks(): void {\n for (const callback of this._refreshCallbacks) {\n callback(0);\n }\n this._refreshCallbacks = [];\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ILogService } from './services/Services';\n\ninterface ITaskQueue {\n /**\n * Adds a task to the queue which will run in a future idle callback.\n * To avoid perceivable stalls on the main thread, tasks with heavy workload\n * should split their work into smaller pieces and return `true` to get\n * called again until the work is done (on falsy return value).\n */\n enqueue(task: () => boolean | void): void;\n\n /**\n * Flushes the queue, running all remaining tasks synchronously.\n */\n flush(): void;\n\n /**\n * Clears any remaining tasks from the queue, these will not be run.\n */\n clear(): void;\n}\n\ninterface ITaskDeadline {\n timeRemaining(): number;\n}\ntype CallbackWithDeadline = (deadline: ITaskDeadline) => void;\n\nabstract class TaskQueue implements ITaskQueue {\n private _tasks: (() => boolean | void)[] = [];\n private _idleCallback?: number;\n private _i = 0;\n protected readonly _logService: ILogService;\n\n constructor(logService: ILogService) {\n this._logService = logService;\n }\n\n protected abstract _requestCallback(callback: CallbackWithDeadline): number;\n protected abstract _cancelCallback(identifier: number): void;\n\n public enqueue(task: () => boolean | void): void {\n this._tasks.push(task);\n this._start();\n }\n\n public flush(): void {\n while (this._i < this._tasks.length) {\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n }\n this.clear();\n }\n\n public clear(): void {\n if (this._idleCallback) {\n this._cancelCallback(this._idleCallback);\n this._idleCallback = undefined;\n }\n this._i = 0;\n this._tasks.length = 0;\n }\n\n private _start(): void {\n if (!this._idleCallback) {\n this._idleCallback = this._requestCallback(this._process.bind(this));\n }\n }\n\n private _process(deadline: ITaskDeadline): void {\n this._idleCallback = undefined;\n let taskDuration: number;\n let longestTask = 0;\n let lastDeadlineRemaining = deadline.timeRemaining();\n let deadlineRemaining: number;\n while (this._i < this._tasks.length) {\n taskDuration = performance.now();\n if (!this._tasks[this._i]()) {\n this._i++;\n }\n // other than performance.now, performance.now might not be stable (changes on wall clock\n // changes), this is not an issue here as a clock change during a short running task is very\n // unlikely in case it still happened and leads to negative duration, simply assume 1 msec\n taskDuration = Math.max(1, performance.now() - taskDuration);\n longestTask = Math.max(taskDuration, longestTask);\n // Guess the following task will take a similar time to the longest task in this batch, allow\n // additional room to try avoid exceeding the deadline\n deadlineRemaining = deadline.timeRemaining();\n if (longestTask * 1.5 > deadlineRemaining) {\n // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the\n // task should be split into sub-tasks to ensure the UI remains responsive.\n if (lastDeadlineRemaining - taskDuration < -20) {\n this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);\n }\n this._start();\n return;\n }\n lastDeadlineRemaining = deadlineRemaining;\n }\n this.clear();\n }\n}\n\n/**\n * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames\n * per second. The tasks will run in the order they are enqueued, but they will run some time later,\n * and care should be taken to ensure they're non-urgent and will not introduce race conditions.\n */\nexport class PriorityTaskQueue extends TaskQueue {\n protected _requestCallback(callback: CallbackWithDeadline): number {\n return setTimeout(() => callback(this._createDeadline(16)));\n }\n\n protected _cancelCallback(identifier: number): void {\n clearTimeout(identifier);\n }\n\n private _createDeadline(duration: number): ITaskDeadline {\n const end = performance.now() + duration;\n return {\n timeRemaining: () => Math.max(0, end - performance.now())\n };\n }\n}\n\nclass IdleTaskQueueInternal extends TaskQueue {\n protected _requestCallback(callback: IdleRequestCallback): number {\n return requestIdleCallback(callback);\n }\n\n protected _cancelCallback(identifier: number): void {\n cancelIdleCallback(identifier);\n }\n}\n\n/**\n * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's\n * deadline given by the environment. The tasks will run in the order they are enqueued, but they\n * will run some time later, and care should be taken to ensure they're non-urgent and will not\n * introduce race conditions.\n *\n * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;\n\n/**\n * An object that tracks a single debounced task that will run on the next idle frame. When called\n * multiple times, only the last set task will run.\n */\nexport class DebouncedIdleTask {\n private _queue: ITaskQueue;\n\n constructor(logService: ILogService) {\n this._queue = new IdleTaskQueue(logService);\n }\n\n public set(task: () => boolean | void): void {\n this._queue.clear();\n this._queue.enqueue(task);\n }\n\n public flush(): void {\n this._queue.flush();\n }\n\n public dispose(): void {\n this._queue.clear();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { RenderDebouncer } from '../RenderDebouncer';\nimport { IRenderDebouncerWithCallback } from '../Types';\nimport { IRenderDimensions, IRenderer } from '../renderer/shared/Types';\nimport { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport { DebouncedIdleTask } from '../../common/TaskQueue';\nimport { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\ninterface ISelectionState {\n start: [number, number] | undefined;\n end: [number, number] | undefined;\n columnSelectMode: boolean;\n}\n\nconst enum Constants {\n SYNCHRONIZED_OUTPUT_TIMEOUT_MS = 1000\n}\n\nexport class RenderService extends Disposable implements IRenderService {\n public serviceBrand: undefined;\n\n private _renderer: MutableDisposable = this._register(new MutableDisposable());\n private _renderDebouncer: IRenderDebouncerWithCallback;\n private _pausedResizeTask: DebouncedIdleTask;\n private _observerDisposable = this._register(new MutableDisposable());\n private _intersectionObserver: IntersectionObserver | undefined;\n\n private _isPaused: boolean = false;\n private _needsFullRefresh: boolean = false;\n private _isNextRenderRedrawOnly: boolean = true;\n private _needsSelectionRefresh: boolean = false;\n private _canvasWidth: number = 0;\n private _canvasHeight: number = 0;\n private _syncOutputHandler: SynchronizedOutputHandler;\n private _selectionState: ISelectionState = {\n start: undefined,\n end: undefined,\n columnSelectMode: false\n };\n\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n private readonly _onRenderedViewportChange = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRenderedViewportChange = this._onRenderedViewportChange.event;\n private readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onRefreshRequest = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRefreshRequest = this._onRefreshRequest.event;\n\n public get dimensions(): IRenderDimensions { return this._renderer.value!.dimensions; }\n\n constructor(\n private _rowCount: number,\n screenElement: HTMLElement,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @ILogService private readonly _logService: ILogService,\n @ICharSizeService private readonly _charSizeService: ICharSizeService,\n @ICoreService private readonly _coreService: ICoreService,\n @IDecorationService decorationService: IDecorationService,\n @IBufferService bufferService: IBufferService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IThemeService themeService: IThemeService\n ) {\n super();\n\n this._pausedResizeTask = this._register(new DebouncedIdleTask(this._logService));\n\n this._renderDebouncer = new RenderDebouncer((start, end) => this._renderRows(start, end), this._coreBrowserService);\n this._register(this._renderDebouncer);\n\n this._syncOutputHandler = new SynchronizedOutputHandler(\n this._coreBrowserService,\n this._coreService,\n () => this._fullRefresh()\n );\n this._register(toDisposable(() => this._syncOutputHandler.dispose()));\n\n this._register(this._coreBrowserService.onDprChange(() => this.handleDevicePixelRatioChange()));\n\n this._register(bufferService.onResize(() => this._fullRefresh()));\n this._register(bufferService.buffers.onBufferActivate(() => this._renderer.value?.clear()));\n this._register(this._optionsService.onOptionChange(() => this._handleOptionsChanged()));\n this._register(this._charSizeService.onCharSizeChange(() => this.handleCharSizeChanged()));\n\n // Do a full refresh whenever any decoration is added or removed. This may not actually result\n // in changes but since decorations should be used sparingly or added/removed all in the same\n // frame this should have minimal performance impact.\n this._register(decorationService.onDecorationRegistered(() => this._fullRefresh()));\n this._register(decorationService.onDecorationRemoved(() => this._fullRefresh()));\n\n // Clear the renderer when the a change that could affect glyphs occurs\n this._register(this._optionsService.onMultipleOptionChange([\n 'drawBoldTextInBrightColors',\n 'letterSpacing',\n 'lineHeight',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontWeightBold',\n 'minimumContrastRatio',\n 'rescaleOverlappingGlyphs'\n ], () => {\n this.clear();\n this.handleResize(bufferService.cols, bufferService.rows);\n this._fullRefresh();\n }));\n\n // Refresh the cursor line when the cursor changes\n this._register(this._optionsService.onMultipleOptionChange([\n 'cursorBlink',\n 'cursorStyle'\n ], () => this.refreshRows(bufferService.buffer.y, bufferService.buffer.y, undefined, true)));\n\n this._register(themeService.onChangeColors(() => this._fullRefresh()));\n\n this._registerIntersectionObserver(this._coreBrowserService.window, screenElement);\n this._register(this._coreBrowserService.onWindowChange((w) => this._registerIntersectionObserver(w, screenElement)));\n }\n\n private _registerIntersectionObserver(w: Window & typeof globalThis, screenElement: HTMLElement): void {\n // Detect whether IntersectionObserver is detected and enable renderer pause\n // and resume based on terminal visibility if so\n if ('IntersectionObserver' in w) {\n const observer = new w.IntersectionObserver(e => this._handleIntersectionChange(e[e.length - 1]), { threshold: 0 });\n this._observerDisposable.value = toDisposable(() => {\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = undefined;\n });\n this._intersectionObserver = observer;\n observer.observe(screenElement);\n }\n }\n\n private _handleIntersectionChange(entry: IntersectionObserverEntry): void {\n this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;\n this._renderer.value?.handleViewportVisibilityChange?.(!this._isPaused);\n\n // Terminal was hidden on open\n if (!this._isPaused && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n\n if (!this._isPaused && this._needsFullRefresh) {\n this._pausedResizeTask.flush();\n this.refreshRows(0, this._rowCount - 1);\n this._needsFullRefresh = false;\n }\n }\n\n public refreshRows(start: number, end: number, sync: boolean = false, isRedrawOnly: boolean = false): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n return;\n }\n\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n const buffered = this._syncOutputHandler.flush();\n if (buffered) {\n start = Math.min(start, buffered.start);\n end = Math.max(end, buffered.end);\n }\n\n if (!isRedrawOnly) {\n this._isNextRenderRedrawOnly = false;\n }\n\n if (sync) {\n this._renderRows(start, end);\n } else {\n this._renderDebouncer.refresh(start, end, this._rowCount);\n }\n }\n\n private _renderRows(start: number, end: number): void {\n if (!this._renderer.value) {\n return;\n }\n\n // Skip rendering if synchronized output mode is enabled. This check must happen here\n // (in addition to refreshRows) to handle renders that were queued before the mode was enabled.\n if (this._coreService.decPrivateModes.synchronizedOutput) {\n this._syncOutputHandler.bufferRows(start, end);\n return;\n }\n\n // Since this is debounced, a resize event could have happened between the time a refresh was\n // requested and when this triggers. Clamp the values of start and end to ensure they're valid\n // given the current viewport state.\n start = Math.min(start, this._rowCount - 1);\n end = Math.min(end, this._rowCount - 1);\n\n // Render\n this._renderer.value.renderRows(start, end);\n\n // Update selection if needed\n if (this._needsSelectionRefresh) {\n this._renderer.value.handleSelectionChanged(this._selectionState.start, this._selectionState.end, this._selectionState.columnSelectMode);\n this._needsSelectionRefresh = false;\n }\n\n // Fire render event only if it was not a redraw\n if (!this._isNextRenderRedrawOnly) {\n this._onRenderedViewportChange.fire({ start, end });\n }\n this._onRender.fire({ start, end });\n this._isNextRenderRedrawOnly = true;\n }\n\n public resize(cols: number, rows: number): void {\n this._rowCount = rows;\n this._fireOnCanvasResize();\n }\n\n private _handleOptionsChanged(): void {\n if (!this._renderer.value) {\n return;\n }\n this.refreshRows(0, this._rowCount - 1);\n this._fireOnCanvasResize();\n }\n\n private _fireOnCanvasResize(): void {\n if (!this._renderer.value) {\n return;\n }\n // Don't fire the event if the dimensions haven't changed\n if (this._renderer.value.dimensions.css.canvas.width === this._canvasWidth && this._renderer.value.dimensions.css.canvas.height === this._canvasHeight) {\n return;\n }\n this._onDimensionsChange.fire(this._renderer.value.dimensions);\n }\n\n public hasRenderer(): boolean {\n return !!this._renderer.value;\n }\n\n public setRenderer(renderer: IRenderer): void {\n this._renderer.value = renderer;\n // If the value was not set, the terminal is being disposed so ignore it\n if (this._renderer.value) {\n this._renderer.value.onRequestRedraw(e => this.refreshRows(e.start, e.end, e.sync, true));\n\n // Force a refresh\n this._needsSelectionRefresh = true;\n this._fullRefresh();\n }\n }\n\n public addRefreshCallback(callback: FrameRequestCallback): number {\n return this._renderDebouncer.addRefreshCallback(callback);\n }\n\n private _fullRefresh(): void {\n if (this._isPaused) {\n this._needsFullRefresh = true;\n } else {\n this.refreshRows(0, this._rowCount - 1);\n }\n }\n\n public clearTextureAtlas(): void {\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.clearTextureAtlas?.();\n this._fullRefresh();\n }\n\n public handleDevicePixelRatioChange(): void {\n // Force char size measurement as DomMeasureStrategy(getBoundingClientRect) is not stable\n // when devicePixelRatio changes\n this._charSizeService.measure();\n\n if (!this._renderer.value) {\n return;\n }\n this._renderer.value.handleDevicePixelRatioChange();\n this.refreshRows(0, this._rowCount - 1);\n }\n\n public handleResize(cols: number, rows: number): void {\n if (!this._renderer.value) {\n return;\n }\n if (this._isPaused) {\n this._pausedResizeTask.set(() => this._renderer.value?.handleResize(cols, rows));\n } else {\n this._renderer.value.handleResize(cols, rows);\n }\n this._fullRefresh();\n }\n\n // TODO: Is this useful when we have onResize?\n public handleCharSizeChanged(): void {\n this._renderer.value?.handleCharSizeChanged();\n }\n\n public handleBlur(): void {\n this._renderer.value?.handleBlur();\n }\n\n public handleFocus(): void {\n this._renderer.value?.handleFocus();\n }\n\n public handleSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {\n this._selectionState.start = start;\n this._selectionState.end = end;\n this._selectionState.columnSelectMode = columnSelectMode;\n this._renderer.value?.handleSelectionChanged(start, end, columnSelectMode);\n }\n\n public handleCursorMove(): void {\n this._renderer.value?.handleCursorMove();\n }\n\n public clear(): void {\n this._renderer.value?.clear();\n }\n}\n\n/**\n * Buffers row refresh requests during synchronized output mode (DEC mode 2026).\n * When the mode is disabled, the accumulated row range is flushed for rendering.\n * A safety timeout ensures rendering occurs even if the end sequence is not received.\n */\nclass SynchronizedOutputHandler {\n private _start: number = 0;\n private _end: number = 0;\n private _timeout: number | undefined;\n private _isBuffering: boolean = false;\n\n constructor(\n private readonly _coreBrowserService: ICoreBrowserService,\n private readonly _coreService: ICoreService,\n private readonly _onTimeout: () => void\n ) {}\n\n public bufferRows(start: number, end: number): void {\n if (!this._isBuffering) {\n this._start = start;\n this._end = end;\n this._isBuffering = true;\n } else {\n this._start = Math.min(this._start, start);\n this._end = Math.max(this._end, end);\n }\n\n this._timeout ??= this._coreBrowserService.window.setTimeout(() => {\n this._timeout = undefined;\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onTimeout();\n }, Constants.SYNCHRONIZED_OUTPUT_TIMEOUT_MS);\n }\n\n public flush(): { start: number, end: number } | undefined {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n\n if (!this._isBuffering) {\n return undefined;\n }\n\n const result = { start: this._start, end: this._end };\n this._isBuffering = false;\n return result;\n }\n\n public dispose(): void {\n if (this._timeout !== undefined) {\n this._coreBrowserService.window.clearTimeout(this._timeout);\n this._timeout = undefined;\n }\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { C0 } from '../../common/data/EscapeSequences';\nimport { IBufferService } from '../../common/services/Services';\n\nconst enum Direction {\n UP = 'A',\n DOWN = 'B',\n RIGHT = 'C',\n LEFT = 'D'\n}\n\n/**\n * Concatenates all the arrow sequences together.\n * Resets the starting row to an unwrapped row, moves to the requested row,\n * then moves to requested col.\n */\nexport function moveToCellSequence(targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startX = bufferService.buffer.x;\n const startY = bufferService.buffer.y;\n\n // The alt buffer should try to navigate between rows\n if (!bufferService.buffer.hasScrollback) {\n return resetStartingRow(startX, startY, targetX, targetY, bufferService, applicationCursor) +\n moveToRequestedRow(startY, targetY, bufferService, applicationCursor) +\n moveToRequestedCol(startX, startY, targetX, targetY, bufferService, applicationCursor);\n }\n\n // Only move horizontally for the normal buffer\n let direction;\n if (startY === targetY) {\n direction = startX > targetX ? Direction.LEFT : Direction.RIGHT;\n return repeat(Math.abs(startX - targetX), sequence(direction, applicationCursor));\n }\n direction = startY > targetY ? Direction.LEFT : Direction.RIGHT;\n const rowDifference = Math.abs(startY - targetY);\n const cellsToMove = colsFromRowEnd(startY > targetY ? targetX : startX, bufferService) +\n (rowDifference - 1) * bufferService.cols + 1 /* wrap around 1 row */ +\n colsFromRowBeginning(startY > targetY ? startX : targetX, bufferService);\n return repeat(cellsToMove, sequence(direction, applicationCursor));\n}\n\n/**\n * Find the number of cols from a row beginning to a col.\n */\nfunction colsFromRowBeginning(currX: number, bufferService: IBufferService): number {\n return currX - 1;\n}\n\n/**\n * Find the number of cols from a col to row end.\n */\nfunction colsFromRowEnd(currX: number, bufferService: IBufferService): number {\n return bufferService.cols - currX;\n}\n\n/**\n * If the initial position of the cursor is on a row that is wrapped, move the\n * cursor up to the first row that is not wrapped to have accurate vertical\n * positioning.\n */\nfunction resetStartingRow(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length === 0) {\n return '';\n }\n return repeat(bufferLine(\n startX, startY, startX,\n startY - wrappedRowsForRow(startY, bufferService), false, bufferService\n ).length, sequence(Direction.LEFT, applicationCursor));\n}\n\n/**\n * Using the reset starting and ending row, move to the requested row,\n * ignoring wrapped rows\n */\nfunction moveToRequestedRow(startY: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n const rowsToMove = Math.abs(startRow - endRow) - wrappedRowsCount(startY, targetY, bufferService);\n\n return repeat(rowsToMove, sequence(verticalDirection(startY, targetY), applicationCursor));\n}\n\n/**\n * Move to the requested col on the ending row\n */\nfunction moveToRequestedCol(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): string {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n const endRow = targetY;\n const direction = horizontalDirection(startX, startY, targetX, targetY, bufferService, applicationCursor);\n\n return repeat(bufferLine(\n startX, startRow, targetX, endRow,\n direction === Direction.RIGHT, bufferService\n ).length, sequence(direction, applicationCursor));\n}\n\n/**\n * Utility functions\n */\n\n/**\n * Calculates the number of wrapped rows between the unwrapped starting and\n * ending rows. These rows need to ignored since the cursor skips over them.\n */\nfunction wrappedRowsCount(startY: number, targetY: number, bufferService: IBufferService): number {\n let wrappedRows = 0;\n const startRow = startY - wrappedRowsForRow(startY, bufferService);\n const endRow = targetY - wrappedRowsForRow(targetY, bufferService);\n\n for (let i = 0; i < Math.abs(startRow - endRow); i++) {\n const direction = verticalDirection(startY, targetY) === Direction.UP ? -1 : 1;\n const line = bufferService.buffer.lines.get(startRow + (direction * i));\n if (line?.isWrapped) {\n wrappedRows++;\n }\n }\n\n return wrappedRows;\n}\n\n/**\n * Calculates the number of wrapped rows that make up a given row.\n * @param currentRow The row to determine how many wrapped rows make it up\n */\nfunction wrappedRowsForRow(currentRow: number, bufferService: IBufferService): number {\n let rowCount = 0;\n let line = bufferService.buffer.lines.get(currentRow);\n let lineWraps = line?.isWrapped;\n\n while (lineWraps && currentRow >= 0 && currentRow < bufferService.rows) {\n rowCount++;\n line = bufferService.buffer.lines.get(--currentRow);\n lineWraps = line?.isWrapped;\n }\n\n return rowCount;\n}\n\n/**\n * Direction determiners\n */\n\n/**\n * Determines if the right or left arrow is needed\n */\nfunction horizontalDirection(startX: number, startY: number, targetX: number, targetY: number, bufferService: IBufferService, applicationCursor: boolean): Direction {\n let startRow;\n if (moveToRequestedRow(startY, targetY, bufferService, applicationCursor).length > 0) {\n startRow = targetY - wrappedRowsForRow(targetY, bufferService);\n } else {\n startRow = startY;\n }\n\n if ((startX < targetX &&\n startRow <= targetY) || // down/right or same y/right\n (startX >= targetX &&\n startRow < targetY)) { // down/left or same y/left\n return Direction.RIGHT;\n }\n return Direction.LEFT;\n}\n\n/**\n * Determines if the up or down arrow is needed\n */\nfunction verticalDirection(startY: number, targetY: number): Direction {\n return startY > targetY ? Direction.UP : Direction.DOWN;\n}\n\n/**\n * Constructs the string of chars in the buffer from a starting row and col\n * to an ending row and col\n * @param startCol The starting column position\n * @param startRow The starting row position\n * @param endCol The ending column position\n * @param endRow The ending row position\n * @param forward Direction to move\n */\nfunction bufferLine(\n startCol: number,\n startRow: number,\n endCol: number,\n endRow: number,\n forward: boolean,\n bufferService: IBufferService\n): string {\n let currentCol = startCol;\n let currentRow = startRow;\n let bufferStr = '';\n\n while ((currentCol !== endCol || currentRow !== endRow) &&\n currentRow >= 0 &&\n currentRow < bufferService.buffer.lines.length) {\n currentCol += forward ? 1 : -1;\n\n if (forward && currentCol > bufferService.cols - 1) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n currentCol = 0;\n startCol = 0;\n currentRow++;\n } else if (!forward && currentCol < 0) {\n bufferStr += bufferService.buffer.translateBufferLineToString(\n currentRow, false, 0, startCol + 1\n );\n currentCol = bufferService.cols - 1;\n startCol = currentCol;\n currentRow--;\n }\n }\n\n return bufferStr + bufferService.buffer.translateBufferLineToString(\n currentRow, false, startCol, currentCol\n );\n}\n\n/**\n * Constructs the escape sequence for clicking an arrow\n * @param direction The direction to move\n */\nfunction sequence(direction: Direction, applicationCursor: boolean): string {\n const mod = applicationCursor ? 'O' : '[';\n return C0.ESC + mod + direction;\n}\n\n/**\n * Returns a string repeated a given number of times\n * Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n * @param count The number of times to repeat the string\n * @param str The string that is to be repeated\n */\nfunction repeat(count: number, str: string): string {\n count = Math.floor(count);\n let rpt = '';\n for (let i = 0; i < count; i++) {\n rpt += str;\n }\n return rpt;\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferService } from '../../common/services/Services';\n\n/**\n * Represents a selection within the buffer. This model only cares about column\n * and row coordinates, not wide characters.\n */\nexport class SelectionModel {\n /**\n * Whether select all is currently active.\n */\n public isSelectAllActive: boolean = false;\n\n /**\n * The minimal length of the selection from the start position. When double\n * clicking on a word, the word will be selected which makes the selection\n * start at the start of the word and makes this variable the length.\n */\n public selectionStartLength: number = 0;\n\n /**\n * The [x, y] position the selection starts at.\n */\n public selectionStart: [number, number] | undefined;\n\n /**\n * The [x, y] position the selection ends at.\n */\n public selectionEnd: [number, number] | undefined;\n\n constructor(\n private _bufferService: IBufferService\n ) {\n }\n\n /**\n * Clears the current selection.\n */\n public clearSelection(): void {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.isSelectAllActive = false;\n this.selectionStartLength = 0;\n }\n\n /**\n * The final selection start, taking into consideration select all.\n */\n public get finalSelectionStart(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [0, 0];\n }\n\n if (!this.selectionEnd || !this.selectionStart) {\n return this.selectionStart;\n }\n\n return this.areSelectionValuesReversed() ? this.selectionEnd : this.selectionStart;\n }\n\n /**\n * The final selection end, taking into consideration select all, double click\n * word selection and triple click line selection.\n */\n public get finalSelectionEnd(): [number, number] | undefined {\n if (this.isSelectAllActive) {\n return [this._bufferService.cols, this._bufferService.buffer.ybase + this._bufferService.rows - 1];\n }\n\n if (!this.selectionStart) {\n return undefined;\n }\n\n // Use the selection start + length if the end doesn't exist or they're reversed\n if (!this.selectionEnd || this.areSelectionValuesReversed()) {\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n // Ensure the trailing EOL isn't included when the selection ends on the right edge\n if (startPlusLength % this._bufferService.cols === 0) {\n return [this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols) - 1];\n }\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [startPlusLength, this.selectionStart[1]];\n }\n\n // Ensure the the word/line is selected after a double/triple click\n if (this.selectionStartLength) {\n // Select the larger of the two when start and end are on the same line\n if (this.selectionEnd[1] === this.selectionStart[1]) {\n // Keep the whole wrapped word/line selected if the content wraps multiple lines\n const startPlusLength = this.selectionStart[0] + this.selectionStartLength;\n if (startPlusLength > this._bufferService.cols) {\n return [startPlusLength % this._bufferService.cols, this.selectionStart[1] + Math.floor(startPlusLength / this._bufferService.cols)];\n }\n return [Math.max(startPlusLength, this.selectionEnd[0]), this.selectionEnd[1]];\n }\n }\n return this.selectionEnd;\n }\n\n /**\n * Returns whether the selection start and end are reversed.\n */\n public areSelectionValuesReversed(): boolean {\n const start = this.selectionStart;\n const end = this.selectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[1] > end[1] || (start[1] === end[1] && start[0] > end[0]);\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n * @returns Whether a refresh is necessary.\n */\n public handleTrim(amount: number): boolean {\n // Adjust the selection position based on the trimmed amount.\n if (this.selectionStart) {\n this.selectionStart[1] -= amount;\n }\n if (this.selectionEnd) {\n this.selectionEnd[1] -= amount;\n }\n\n // The selection has moved off the buffer, clear it.\n if (this.selectionEnd && this.selectionEnd[1] < 0) {\n this.clearSelection();\n return true;\n }\n\n // If the selection start row is trimmed away, reset to the buffer origin.\n if (this.selectionStart && this.selectionStart[1] < 0) {\n this.selectionStart = [0, 0];\n return true;\n }\n return false;\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange } from '@xterm/xterm';\n\nexport function getRangeLength(range: IBufferRange, bufferCols: number): number {\n if (range.start.y > range.end.y) {\n throw new Error(`Buffer range end (${range.end.x}, ${range.end.y}) cannot be before start (${range.start.x}, ${range.start.y})`);\n }\n return bufferCols * (range.end.y - range.start.y) + (range.end.x - range.start.x + 1);\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferRange, ILinkifier2 } from '../Types';\nimport { getCoordsRelativeToElement } from '../input/Mouse';\nimport { moveToCellSequence } from '../input/MoveToCell';\nimport { SelectionModel } from '../selection/SelectionModel';\nimport { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';\nimport { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';\nimport { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';\nimport * as Browser from '../../common/Platform';\nimport { IDisposable } from '../../common/Types';\nimport { IBuffer, IBufferLine, ICellData } from '../../common/buffer/Types';\nimport { getRangeLength } from '../../common/buffer/BufferRange';\nimport { CellData } from '../../common/buffer/CellData';\nimport { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';\nimport { Emitter } from '../../common/Event';\n\nconst enum Constants {\n /**\n * The number of pixels the mouse needs to be above or below the viewport in\n * order to scroll at the maximum speed.\n */\n DRAG_SCROLL_MAX_THRESHOLD = 50,\n /**\n * The maximum scrolling speed\n */\n DRAG_SCROLL_MAX_SPEED = 15,\n /**\n * The number of milliseconds between drag scroll updates.\n */\n DRAG_SCROLL_INTERVAL = 50,\n /**\n * The maximum amount of time that can have elapsed for an alt click to move the\n * cursor.\n */\n ALT_CLICK_MOVE_CURSOR_TIME = 500\n}\n\nconst NON_BREAKING_SPACE_CHAR = String.fromCharCode(160);\nconst ALL_NON_BREAKING_SPACE_REGEX = new RegExp(NON_BREAKING_SPACE_CHAR, 'g');\n\n/**\n * Represents a position of a word on a line.\n */\ninterface IWordPosition {\n start: number;\n length: number;\n}\n\n/**\n * A selection mode, this drives how the selection behaves on mouse move.\n */\nexport const enum SelectionMode {\n NORMAL,\n WORD,\n LINE,\n COLUMN\n}\n\n/**\n * A class that manages the selection of the terminal. With help from\n * SelectionModel, SelectionService handles with all logic associated with\n * dealing with the selection, including handling mouse interaction, wide\n * characters and fetching the actual text within the selection. Rendering is\n * not handled by the SelectionService but the onRedrawRequest event is fired\n * when the selection is ready to be redrawn (on an animation frame).\n */\nexport class SelectionService extends Disposable implements ISelectionService {\n public serviceBrand: undefined;\n\n protected _model: SelectionModel;\n\n /**\n * The amount to scroll every drag scroll update (depends on how far the mouse\n * drag is above or below the terminal).\n */\n private _dragScrollAmount: number = 0;\n\n /**\n * The current selection mode.\n */\n protected _activeSelectionMode: SelectionMode;\n\n /**\n * A setInterval timer that is active while the mouse is down whose callback\n * scrolls the viewport when necessary.\n */\n private _dragScrollIntervalTimer: number | undefined;\n\n /**\n * The animation frame ID used for refreshing the selection.\n */\n private _refreshAnimationFrame: number | undefined;\n\n /**\n * Whether selection is enabled.\n */\n private _enabled = true;\n\n private _mouseMoveListener: EventListener;\n private _mouseUpListener: EventListener;\n private readonly _trimListener = this._register(new MutableDisposable());\n private _workCell: CellData = new CellData();\n\n private _mouseDownTimeStamp: number = 0;\n private _oldHasSelection: boolean = false;\n private _oldSelectionStart: [number, number] | undefined = undefined;\n private _oldSelectionEnd: [number, number] | undefined = undefined;\n\n private readonly _onLinuxMouseSelection = this._register(new Emitter());\n public readonly onLinuxMouseSelection = this._onLinuxMouseSelection.event;\n private readonly _onRedrawRequest = this._register(new Emitter());\n public readonly onRequestRedraw = this._onRedrawRequest.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onRequestScrollLines = this._register(new Emitter());\n public readonly onRequestScrollLines = this._onRequestScrollLines.event;\n\n constructor(\n private readonly _element: HTMLElement,\n private readonly _screenElement: HTMLElement,\n private readonly _linkifier: ILinkifier2,\n @IBufferService private readonly _bufferService: IBufferService,\n @ICoreService private readonly _coreService: ICoreService,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IOptionsService private readonly _optionsService: IOptionsService,\n @IMouseStateService private readonly _mouseStateService: IMouseStateService,\n @IRenderService private readonly _renderService: IRenderService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService\n ) {\n super();\n\n // Init listeners\n this._mouseMoveListener = event => this._handleMouseMove(event as MouseEvent);\n this._mouseUpListener = event => this._handleMouseUp(event as MouseEvent);\n this._coreService.onUserInput(() => {\n if (this.hasSelection) {\n this.clearSelection();\n }\n });\n this._trimListener.value = this._bufferService.buffer.lines.onTrim(amount => this._handleTrim(amount));\n this._register(this._bufferService.buffers.onBufferActivate(e => this._handleBufferActivate(e)));\n\n this.enable();\n\n this._model = new SelectionModel(this._bufferService);\n this._activeSelectionMode = SelectionMode.NORMAL;\n\n this._register(toDisposable(() => {\n this._removeMouseDownListeners();\n }));\n\n // Clear selection when resizing vertically. This experience could be improved, this is the\n // simple option to fix the buggy behavior. https://github.com/xtermjs/xterm.js/issues/5300\n this._register(this._bufferService.onResize(e => {\n if (e.rowsChanged) {\n this.clearSelection();\n }\n }));\n }\n\n public reset(): void {\n this.clearSelection();\n }\n\n /**\n * Disables the selection manager. This is useful for when terminal mouse\n * are enabled.\n */\n public disable(): void {\n this.clearSelection();\n this._enabled = false;\n }\n\n /**\n * Enable the selection manager.\n */\n public enable(): void {\n this._enabled = true;\n }\n\n public get selectionStart(): [number, number] | undefined { return this._model.finalSelectionStart; }\n public get selectionEnd(): [number, number] | undefined { return this._model.finalSelectionEnd; }\n\n /**\n * Gets whether there is an active text selection.\n */\n public get hasSelection(): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return start[0] !== end[0] || start[1] !== end[1];\n }\n\n /**\n * Gets the text currently selected.\n */\n public get selectionText(): string {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return '';\n }\n\n const buffer = this._bufferService.buffer;\n const result: string[] = [];\n\n if (this._activeSelectionMode === SelectionMode.COLUMN) {\n // Ignore zero width selections\n if (start[0] === end[0]) {\n return '';\n }\n\n // For column selection it's not enough to rely on final selection's swapping of reversed\n // values, it also needs the x coordinates to swap independently of the y coordinate is needed\n const startCol = start[0] < end[0] ? start[0] : end[0];\n const endCol = start[0] < end[0] ? end[0] : start[0];\n for (let i = start[1]; i <= end[1]; i++) {\n const lineText = buffer.translateBufferLineToString(i, true, startCol, endCol);\n result.push(lineText);\n }\n } else {\n // Get first row\n const startRowEndCol = start[1] === end[1] ? end[0] : undefined;\n result.push(buffer.translateBufferLineToString(start[1], true, start[0], startRowEndCol));\n\n // Get middle rows\n for (let i = start[1] + 1; i <= end[1] - 1; i++) {\n const bufferLine = buffer.lines.get(i);\n const lineText = buffer.translateBufferLineToString(i, true);\n if (bufferLine?.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n\n // Get final row\n if (start[1] !== end[1]) {\n const bufferLine = buffer.lines.get(end[1]);\n const lineText = buffer.translateBufferLineToString(end[1], true, 0, end[0]);\n if (bufferLine && bufferLine!.isWrapped) {\n result[result.length - 1] += lineText;\n } else {\n result.push(lineText);\n }\n }\n }\n\n // Format string by replacing non-breaking space chars with regular spaces\n // and joining the array into a multi-line string.\n const formattedResult = result.map(line => {\n return line.replace(ALL_NON_BREAKING_SPACE_REGEX, ' ');\n }).join(Browser.isWindows ? '\\r\\n' : '\\n');\n\n return formattedResult;\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Queues a refresh, redrawing the selection on the next opportunity.\n * @param isLinuxMouseSelection Whether the selection should be registered as a new\n * selection on Linux.\n */\n public refresh(isLinuxMouseSelection?: boolean): void {\n // Queue the refresh for the renderer\n if (!this._refreshAnimationFrame) {\n this._refreshAnimationFrame = this._coreBrowserService.window.requestAnimationFrame(() => this._refresh());\n }\n\n // If the platform is Linux and the refresh call comes from a mouse event,\n // we need to update the selection for middle click to paste selection.\n if (Browser.isLinux && isLinuxMouseSelection) {\n const selectionText = this.selectionText;\n if (selectionText.length) {\n this._onLinuxMouseSelection.fire(this.selectionText);\n }\n }\n }\n\n /**\n * Fires the refresh event, causing consumers to pick it up and redraw the\n * selection state.\n */\n private _refresh(): void {\n this._refreshAnimationFrame = undefined;\n this._onRedrawRequest.fire({\n start: this._model.finalSelectionStart,\n end: this._model.finalSelectionEnd,\n columnSelectMode: this._activeSelectionMode === SelectionMode.COLUMN\n });\n }\n\n /**\n * Checks if the current click was inside the current selection\n * @param event The mouse event\n */\n private _isClickInSelection(event: MouseEvent): boolean {\n const coords = this._getMouseBufferCoords(event);\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n\n if (!start || !end || !coords) {\n return false;\n }\n\n return this._areCoordsInSelection(coords, start, end);\n }\n\n public isCellInSelection(x: number, y: number): boolean {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n if (!start || !end) {\n return false;\n }\n return this._areCoordsInSelection([x, y], start, end);\n }\n\n protected _areCoordsInSelection(coords: [number, number], start: [number, number], end: [number, number]): boolean {\n return (coords[1] > start[1] && coords[1] < end[1]) ||\n (start[1] === end[1] && coords[1] === start[1] && coords[0] >= start[0] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === end[1] && coords[0] < end[0]) ||\n (start[1] < end[1] && coords[1] === start[1] && coords[0] >= start[0]);\n }\n\n /**\n * Selects word at the current mouse event coordinates.\n * @param event The mouse event.\n */\n private _selectWordAtCursor(event: MouseEvent, allowWhitespaceOnlySelection: boolean): boolean {\n // Check if there is a link under the cursor first and select that if so\n const range = this._linkifier.currentLink?.link?.range;\n if (range) {\n this._model.selectionStart = [range.start.x - 1, range.start.y - 1];\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n this._model.selectionEnd = undefined;\n return true;\n }\n\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._selectWordAt(coords, allowWhitespaceOnlySelection);\n this._model.selectionEnd = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._model.isSelectAllActive = true;\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n public selectLines(start: number, end: number): void {\n this._model.clearSelection();\n start = Math.max(start, 0);\n end = Math.min(end, this._bufferService.buffer.lines.length - 1);\n this._model.selectionStart = [0, start];\n this._model.selectionEnd = [this._bufferService.cols, end];\n this.refresh();\n this._onSelectionChange.fire();\n }\n\n /**\n * Handle the buffer being trimmed, adjust the selection position.\n * @param amount The amount the buffer is being trimmed.\n */\n private _handleTrim(amount: number): void {\n const needsRefresh = this._model.handleTrim(amount);\n if (needsRefresh) {\n this.refresh();\n }\n }\n\n /**\n * Gets the 0-based [x, y] buffer coordinates of the current mouse event.\n * @param event The mouse event.\n */\n private _getMouseBufferCoords(event: MouseEvent): [number, number] | undefined {\n const coords = this._mouseCoordsService.getCoords(event, this._screenElement, this._bufferService.cols, this._bufferService.rows, true);\n if (!coords) {\n return undefined;\n }\n\n // Convert to 0-based\n coords[0]--;\n coords[1]--;\n\n // Convert viewport coords to buffer coords\n coords[1] += this._bufferService.buffer.ydisp;\n return coords;\n }\n\n /**\n * Gets the amount the viewport should be scrolled based on how far out of the\n * terminal the mouse is.\n * @param event The mouse event.\n */\n private _getMouseEventScrollAmount(event: MouseEvent): number {\n let offset = getCoordsRelativeToElement(this._coreBrowserService.window, event, this._screenElement)[1];\n const terminalHeight = this._renderService.dimensions.css.canvas.height;\n if (offset >= 0 && offset <= terminalHeight) {\n return 0;\n }\n if (offset > terminalHeight) {\n offset -= terminalHeight;\n }\n\n offset = Math.min(Math.max(offset, -Constants.DRAG_SCROLL_MAX_THRESHOLD), Constants.DRAG_SCROLL_MAX_THRESHOLD);\n offset /= Constants.DRAG_SCROLL_MAX_THRESHOLD;\n return (offset / Math.abs(offset)) + Math.round(offset * (Constants.DRAG_SCROLL_MAX_SPEED - 1));\n }\n\n /**\n * Returns whether the selection manager should force selection, regardless of\n * whether the terminal is in mouse events mode.\n * @param event The mouse event.\n */\n public shouldForceSelection(event: MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return !event.altKey;\n }\n\n if (Browser.isMac) {\n return event.altKey && this._optionsService.rawOptions.macOptionClickForcesSelection;\n }\n\n return event.shiftKey;\n }\n\n /**\n * Handles te mousedown event, setting up for a new selection.\n * @param event The mousedown event.\n */\n public handleMouseDown(event: MouseEvent): void {\n this._mouseDownTimeStamp = event.timeStamp;\n // If we have selection, we want the context menu on right click even if the\n // terminal is in mouse mode.\n if (event.button === 2 && this.hasSelection) {\n return;\n }\n\n // Only action the primary button\n if (event.button !== 0) {\n return;\n }\n\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive && event.altKey) {\n return;\n }\n\n // Allow selection when using a specific modifier key, even when disabled\n if (!this._enabled) {\n if (!this.shouldForceSelection(event)) {\n return;\n }\n\n // Don't send the mouse down event to the current process, we want to select\n event.stopPropagation();\n }\n\n // Tell the browser not to start a regular selection\n event.preventDefault();\n\n // Reset drag scroll state\n this._dragScrollAmount = 0;\n\n if (this._enabled && event.shiftKey) {\n this._handleIncrementalClick(event);\n } else {\n if (event.detail === 1) {\n this._handleSingleClick(event);\n } else if (event.detail === 2) {\n this._handleDoubleClick(event);\n } else if (event.detail === 3) {\n this._handleTripleClick(event);\n }\n }\n\n this._addMouseDownListeners();\n this.refresh(true);\n }\n\n /**\n * Adds listeners when mousedown is triggered.\n */\n private _addMouseDownListeners(): void {\n // Listen on the document so that dragging outside of viewport works\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.addEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.addEventListener('mouseup', this._mouseUpListener);\n }\n this._dragScrollIntervalTimer = this._coreBrowserService.window.setInterval(() => this._dragScroll(), Constants.DRAG_SCROLL_INTERVAL);\n }\n\n /**\n * Removes the listeners that are registered when mousedown is triggered.\n */\n private _removeMouseDownListeners(): void {\n if (this._screenElement.ownerDocument) {\n this._screenElement.ownerDocument.removeEventListener('mousemove', this._mouseMoveListener);\n this._screenElement.ownerDocument.removeEventListener('mouseup', this._mouseUpListener);\n }\n this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer);\n this._dragScrollIntervalTimer = undefined;\n }\n\n /**\n * Performs an incremental click, setting the selection end position to the mouse\n * position.\n * @param event The mouse event.\n */\n private _handleIncrementalClick(event: MouseEvent): void {\n if (this._model.selectionStart) {\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n }\n }\n\n /**\n * Performs a single click, resetting relevant state and setting the selection\n * start position.\n * @param event The mouse event.\n */\n private _handleSingleClick(event: MouseEvent): void {\n // Track if there was a selection before clearing\n const hadSelection = this.hasSelection;\n\n this._model.selectionStartLength = 0;\n this._model.isSelectAllActive = false;\n this._activeSelectionMode = this.shouldColumnSelect(event) ? SelectionMode.COLUMN : SelectionMode.NORMAL;\n\n // Initialize the new selection\n this._model.selectionStart = this._getMouseBufferCoords(event);\n if (!this._model.selectionStart) {\n return;\n }\n this._model.selectionEnd = undefined;\n\n // Fire selection change event if a selection was cleared\n if (hadSelection) {\n this._fireOnSelectionChange(this._model.finalSelectionStart, this._model.finalSelectionEnd, false);\n }\n\n // Ensure the line exists\n const line = this._bufferService.buffer.lines.get(this._model.selectionStart[1]);\n if (!line) {\n return;\n }\n\n // Return early if the click event is not in the buffer (eg. in scroll bar)\n if (line.length === this._model.selectionStart[0]) {\n return;\n }\n\n // If the mouse is over the second half of a wide character, adjust the\n // selection to cover the whole character\n if (line.hasWidth(this._model.selectionStart[0]) === 0) {\n this._model.selectionStart[0]++;\n }\n }\n\n /**\n * Performs a double click, selecting the current word.\n * @param event The mouse event.\n */\n private _handleDoubleClick(event: MouseEvent): void {\n if (this._selectWordAtCursor(event, true)) {\n this._activeSelectionMode = SelectionMode.WORD;\n }\n }\n\n /**\n * Performs a triple click, selecting the current line and activating line\n * select mode.\n * @param event The mouse event.\n */\n private _handleTripleClick(event: MouseEvent): void {\n const coords = this._getMouseBufferCoords(event);\n if (coords) {\n this._activeSelectionMode = SelectionMode.LINE;\n this._selectLineAt(coords[1]);\n }\n }\n\n /**\n * Returns whether the selection manager should operate in column select mode\n * @param event the mouse or keyboard event\n */\n public shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean {\n if (this._optionsService.rawOptions.mouseEventsRequireAlt && this._mouseStateService.areMouseEventsActive) {\n return false;\n }\n return event.altKey && !(Browser.isMac && this._optionsService.rawOptions.macOptionClickForcesSelection);\n }\n\n /**\n * Handles the mousemove event when the mouse button is down, recording the\n * end of the selection and refreshing the selection.\n * @param event The mousemove event.\n */\n private _handleMouseMove(event: MouseEvent): void {\n // If the mousemove listener is active it means that a selection is\n // currently being made, we should stop propagation to prevent mouse events\n // to be sent to the pty.\n event.stopImmediatePropagation();\n\n // Do nothing if there is no selection start, this can happen if the first\n // click in the terminal is an incremental click\n if (!this._model.selectionStart) {\n return;\n }\n\n // Record the previous position so we know whether to redraw the selection\n // at the end.\n const previousSelectionEnd = this._model.selectionEnd ? [this._model.selectionEnd[0], this._model.selectionEnd[1]] : null;\n\n // Set the initial selection end based on the mouse coordinates\n this._model.selectionEnd = this._getMouseBufferCoords(event);\n if (!this._model.selectionEnd) {\n this.refresh(true);\n return;\n }\n\n // Select the entire line if line select mode is active.\n if (this._activeSelectionMode === SelectionMode.LINE) {\n if (this._model.selectionEnd[1] < this._model.selectionStart[1]) {\n this._model.selectionEnd[0] = 0;\n } else {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n } else if (this._activeSelectionMode === SelectionMode.WORD) {\n this._selectToWordAt(this._model.selectionEnd);\n }\n\n // Determine the amount of scrolling that will happen.\n this._dragScrollAmount = this._getMouseEventScrollAmount(event);\n\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n if (this._dragScrollAmount > 0) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n } else if (this._dragScrollAmount < 0) {\n this._model.selectionEnd[0] = 0;\n }\n }\n\n // If the character is a wide character include the cell to the right in the\n // selection. Note that selections at the very end of the line will never\n // have a character.\n const buffer = this._bufferService.buffer;\n if (this._model.selectionEnd[1] < buffer.lines.length) {\n const line = buffer.lines.get(this._model.selectionEnd[1]);\n if (line && line.hasWidth(this._model.selectionEnd[0]) === 0) {\n if (this._model.selectionEnd[0] < this._bufferService.cols) {\n this._model.selectionEnd[0]++;\n }\n }\n }\n\n // Only draw here if the selection changes.\n if (!previousSelectionEnd ||\n previousSelectionEnd[0] !== this._model.selectionEnd[0] ||\n previousSelectionEnd[1] !== this._model.selectionEnd[1]) {\n this.refresh(true);\n }\n }\n\n /**\n * The callback that occurs every Constants.DRAG_SCROLL_INTERVAL ms that does the\n * scrolling of the viewport.\n */\n private _dragScroll(): void {\n if (!this._model.selectionEnd || !this._model.selectionStart) {\n return;\n }\n if (this._dragScrollAmount) {\n this._onRequestScrollLines.fire({ amount: this._dragScrollAmount, suppressScrollEvent: false });\n // Re-evaluate selection\n // If the cursor was above or below the viewport, make sure it's at the\n // start or end of the viewport respectively. This should only happen when\n // NOT in column select mode.\n const buffer = this._bufferService.buffer;\n if (this._dragScrollAmount > 0) {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = this._bufferService.cols;\n }\n this._model.selectionEnd[1] = Math.min(buffer.ydisp + this._bufferService.rows - 1, buffer.lines.length - 1);\n } else {\n if (this._activeSelectionMode !== SelectionMode.COLUMN) {\n this._model.selectionEnd[0] = 0;\n }\n this._model.selectionEnd[1] = buffer.ydisp;\n }\n this.refresh();\n }\n }\n\n /**\n * Handles the mouseup event, removing the mousedown listeners.\n * @param event The mouseup event.\n */\n private _handleMouseUp(event: MouseEvent): void {\n const timeElapsed = event.timeStamp - this._mouseDownTimeStamp;\n\n this._removeMouseDownListeners();\n\n if (this.selectionText.length <= 1 && timeElapsed < Constants.ALT_CLICK_MOVE_CURSOR_TIME && event.altKey && this._optionsService.rawOptions.altClickMovesCursor) {\n if (this._bufferService.buffer.ybase === this._bufferService.buffer.ydisp) {\n const coordinates = this._mouseCoordsService.getCoords(\n event,\n this._element,\n this._bufferService.cols,\n this._bufferService.rows,\n false\n );\n if (coordinates && coordinates[0] !== undefined && coordinates[1] !== undefined) {\n const sequence = moveToCellSequence(coordinates[0] - 1, coordinates[1] - 1, this._bufferService, this._coreService.decPrivateModes.applicationCursorKeys);\n this._coreService.triggerDataEvent(sequence, true);\n }\n }\n } else {\n this._fireEventIfSelectionChanged();\n }\n }\n\n private _fireEventIfSelectionChanged(): void {\n const start = this._model.finalSelectionStart;\n const end = this._model.finalSelectionEnd;\n const hasSelection = !!start && !!end && (start[0] !== end[0] || start[1] !== end[1]);\n\n if (!hasSelection) {\n if (this._oldHasSelection) {\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n return;\n }\n\n // Sanity check, these should not be undefined as there is a selection\n if (!start || !end) {\n return;\n }\n\n if (!this._oldSelectionStart || !this._oldSelectionEnd || (\n start[0] !== this._oldSelectionStart[0] || start[1] !== this._oldSelectionStart[1] ||\n end[0] !== this._oldSelectionEnd[0] || end[1] !== this._oldSelectionEnd[1])) {\n\n this._fireOnSelectionChange(start, end, hasSelection);\n }\n }\n\n private _fireOnSelectionChange(start: [number, number] | undefined, end: [number, number] | undefined, hasSelection: boolean): void {\n this._oldSelectionStart = start;\n this._oldSelectionEnd = end;\n this._oldHasSelection = hasSelection;\n this._onSelectionChange.fire();\n }\n\n private _handleBufferActivate(e: {activeBuffer: IBuffer, inactiveBuffer: IBuffer}): void {\n this.clearSelection();\n // Only adjust the selection on trim, shiftElements is rarely used (only in\n // reverseIndex) and delete in a splice is only ever used when the same\n // number of elements was just added. Given this is could actually be\n // beneficial to leave the selection as is for these cases.\n this._trimListener.value = e.activeBuffer.lines.onTrim(amount => this._handleTrim(amount));\n }\n\n /**\n * Converts a viewport column (0 to cols - 1) to the character index on the\n * buffer line, the latter takes into account wide and null characters.\n * @param bufferLine The buffer line to use.\n * @param x The x index in the buffer line to convert.\n */\n private _convertViewportColToCharacterIndex(bufferLine: IBufferLine, x: number): number {\n let charIndex = x;\n for (let i = 0; x >= i; i++) {\n const length = bufferLine.loadCell(i, this._workCell).getChars().length;\n if (this._workCell.getWidth() === 0) {\n // Wide characters aren't included in the line string so decrement the\n // index so the index is back on the wide character.\n charIndex--;\n } else if (length > 1 && x !== i) {\n // Emojis take up multiple characters, so adjust accordingly. For these\n // we don't want ot include the character at the column as we're\n // returning the start index in the string, not the end index.\n charIndex += length - 1;\n }\n }\n return charIndex;\n }\n\n public setSelection(col: number, row: number, length: number): void {\n this._model.clearSelection();\n this._removeMouseDownListeners();\n this._model.selectionStart = [col, row];\n this._model.selectionStartLength = length;\n this.refresh();\n this._fireEventIfSelectionChanged();\n }\n\n public rightClickSelect(ev: MouseEvent): void {\n if (!this._isClickInSelection(ev)) {\n if (this._selectWordAtCursor(ev, false)) {\n this.refresh(true);\n }\n this._fireEventIfSelectionChanged();\n }\n }\n\n /**\n * Gets positional information for the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _getWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean, followWrappedLinesAbove: boolean = true, followWrappedLinesBelow: boolean = true): IWordPosition | undefined {\n // Ensure coords are within viewport (eg. not within scroll bar)\n if (coords[0] >= this._bufferService.cols) {\n return undefined;\n }\n\n const buffer = this._bufferService.buffer;\n const bufferLine = buffer.lines.get(coords[1]);\n if (!bufferLine) {\n return undefined;\n }\n\n const line = buffer.translateBufferLineToString(coords[1], false);\n\n // Get actual index, taking into consideration wide characters\n let startIndex = this._convertViewportColToCharacterIndex(bufferLine, coords[0]);\n let endIndex = startIndex;\n\n // Record offset to be used later\n const charOffset = coords[0] - startIndex;\n let leftWideCharCount = 0;\n let rightWideCharCount = 0;\n let leftLongCharOffset = 0;\n let rightLongCharOffset = 0;\n\n if (line.charAt(startIndex) === ' ') {\n // Expand until non-whitespace is hit\n while (startIndex > 0 && line.charAt(startIndex - 1) === ' ') {\n startIndex--;\n }\n while (endIndex < line.length && line.charAt(endIndex + 1) === ' ') {\n endIndex++;\n }\n } else {\n // Expand until whitespace is hit. This algorithm works by scanning left\n // and right from the starting position, keeping both the index format\n // (line) and the column format (bufferLine) in sync. When a wide\n // character is hit, it is recorded and the column index is adjusted.\n let startCol = coords[0];\n let endCol = coords[0];\n\n // Consider the initial position, skip it and increment the wide char\n // variable\n if (bufferLine.getWidth(startCol) === 0) {\n leftWideCharCount++;\n startCol--;\n }\n if (bufferLine.getWidth(endCol) === 2) {\n rightWideCharCount++;\n endCol++;\n }\n\n // Adjust the end index for characters whose length are > 1 (emojis)\n const length = bufferLine.getString(endCol).length;\n if (length > 1) {\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n\n // Expand the string in both directions until a space is hit\n while (startCol > 0 && startIndex > 0 && !this._isCharWordSeparator(bufferLine.loadCell(startCol - 1, this._workCell))) {\n bufferLine.loadCell(startCol - 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 0) {\n // If the next character is a wide char, record it and skip the column\n leftWideCharCount++;\n startCol--;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n leftLongCharOffset += length - 1;\n startIndex -= length - 1;\n }\n startIndex--;\n startCol--;\n }\n while (endCol < bufferLine.length && endIndex + 1 < line.length && !this._isCharWordSeparator(bufferLine.loadCell(endCol + 1, this._workCell))) {\n bufferLine.loadCell(endCol + 1, this._workCell);\n const length = this._workCell.getChars().length;\n if (this._workCell.getWidth() === 2) {\n // If the next character is a wide char, record it and skip the column\n rightWideCharCount++;\n endCol++;\n } else if (length > 1) {\n // If the next character's string is longer than 1 char (eg. emoji),\n // adjust the index\n rightLongCharOffset += length - 1;\n endIndex += length - 1;\n }\n endIndex++;\n endCol++;\n }\n }\n\n // Incremenet the end index so it is at the start of the next character\n endIndex++;\n\n // Calculate the start _column_, converting the the string indexes back to\n // column coordinates.\n let start =\n startIndex // The index of the selection's start char in the line string\n + charOffset // The difference between the initial char's column and index\n - leftWideCharCount // The number of wide chars left of the initial char\n + leftLongCharOffset; // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n\n // Calculate the length in _columns_, converting the the string indexes back\n // to column coordinates.\n let length = Math.min(this._bufferService.cols, // Disallow lengths larger than the terminal cols\n endIndex // The index of the selection's end char in the line string\n - startIndex // The index of the selection's start char in the line string\n + leftWideCharCount // The number of wide chars left of the initial char\n + rightWideCharCount // The number of wide chars right of the initial char (inclusive)\n - leftLongCharOffset // The number of additional chars left of the initial char added by columns with strings longer than 1 (emojis)\n - rightLongCharOffset); // The number of additional chars right of the initial char (inclusive) added by columns with strings longer than 1 (emojis)\n\n if (!allowWhitespaceOnlySelection && line.slice(startIndex, endIndex).trim() === '') {\n return undefined;\n }\n\n // Recurse upwards if the line is wrapped and the word wraps to the above line\n if (followWrappedLinesAbove) {\n if (start === 0 && bufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const previousBufferLine = buffer.lines.get(coords[1] - 1);\n if (previousBufferLine && bufferLine.isWrapped && previousBufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const previousLineWordPosition = this._getWordAt([this._bufferService.cols - 1, coords[1] - 1], false, true, false);\n if (previousLineWordPosition) {\n const offset = this._bufferService.cols - previousLineWordPosition.start;\n start -= offset;\n length += offset;\n }\n }\n }\n }\n\n // Recurse downwards if the line is wrapped and the word wraps to the next line\n if (followWrappedLinesBelow) {\n if (start + length === this._bufferService.cols && bufferLine.getCodePoint(this._bufferService.cols - 1) !== 32 /* ' ' */) {\n const nextBufferLine = buffer.lines.get(coords[1] + 1);\n if (nextBufferLine?.isWrapped && nextBufferLine.getCodePoint(0) !== 32 /* ' ' */) {\n const nextLineWordPosition = this._getWordAt([0, coords[1] + 1], false, false, true);\n if (nextLineWordPosition) {\n length += nextLineWordPosition.length;\n }\n }\n }\n }\n\n return { start, length };\n }\n\n /**\n * Selects the word at the coordinates specified.\n * @param coords The coordinates to get the word at.\n * @param allowWhitespaceOnlySelection If whitespace should be selected\n */\n protected _selectWordAt(coords: [number, number], allowWhitespaceOnlySelection: boolean): void {\n const wordPosition = this._getWordAt(coords, allowWhitespaceOnlySelection);\n if (wordPosition) {\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n coords[1]--;\n }\n this._model.selectionStart = [wordPosition.start, coords[1]];\n this._model.selectionStartLength = wordPosition.length;\n }\n }\n\n /**\n * Sets the selection end to the word at the coordinated specified.\n * @param coords The coordinates to get the word at.\n */\n private _selectToWordAt(coords: [number, number]): void {\n const wordPosition = this._getWordAt(coords, true);\n if (wordPosition) {\n let endRow = coords[1];\n\n // Adjust negative start value\n while (wordPosition.start < 0) {\n wordPosition.start += this._bufferService.cols;\n endRow--;\n }\n\n // Adjust wrapped length value, this only needs to happen when values are reversed as in that\n // case we're interested in the start of the word, not the end\n if (!this._model.areSelectionValuesReversed()) {\n while (wordPosition.start + wordPosition.length > this._bufferService.cols) {\n wordPosition.length -= this._bufferService.cols;\n endRow++;\n }\n }\n\n this._model.selectionEnd = [this._model.areSelectionValuesReversed() ? wordPosition.start : wordPosition.start + wordPosition.length, endRow];\n }\n }\n\n /**\n * Gets whether the character is considered a word separator by the select\n * word logic.\n * @param cell The cell to check.\n */\n private _isCharWordSeparator(cell: ICellData): boolean {\n // Zero width characters are never separators as they are always to the\n // right of wide characters\n if (cell.getWidth() === 0) {\n return false;\n }\n return this._optionsService.rawOptions.wordSeparator.indexOf(cell.getChars()) >= 0;\n }\n\n /**\n * Selects the line specified.\n * @param line The line index.\n */\n protected _selectLineAt(line: number): void {\n const wrappedRange = this._bufferService.buffer.getWrappedRangeForLine(line);\n const range: IBufferRange = {\n start: { x: 0, y: wrappedRange.first },\n end: { x: this._bufferService.cols - 1, y: wrappedRange.last }\n };\n this._model.selectionStart = [0, wrappedRange.first];\n this._model.selectionEnd = undefined;\n this._model.selectionStartLength = getRangeLength(range, this._bufferService.cols);\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nexport class TwoKeyMap {\n private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};\n\n public set(first: TFirst, second: TSecond, value: TValue): void {\n if (!this._data[first]) {\n this._data[first] = {};\n }\n this._data[first as string | number]![second] = value;\n }\n\n public get(first: TFirst, second: TSecond): TValue | undefined {\n return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;\n }\n\n public clear(): void {\n this._data = {};\n }\n}\n\nexport class FourKeyMap {\n private _data: TwoKeyMap> = new TwoKeyMap();\n\n public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {\n if (!this._data.get(first, second)) {\n this._data.set(first, second, new TwoKeyMap());\n }\n this._data.get(first, second)!.set(third, fourth, value);\n }\n\n public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {\n return this._data.get(first, second)?.get(third, fourth);\n }\n\n public clear(): void {\n this._data.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColorContrastCache } from './Types';\nimport { IColor } from '../common/Types';\nimport { TwoKeyMap } from '../common/MultiKeyMap';\n\nexport class ColorContrastCache implements IColorContrastCache {\n private _color: TwoKeyMap = new TwoKeyMap();\n private _css: TwoKeyMap = new TwoKeyMap();\n\n public setCss(bg: number, fg: number, value: string | null): void {\n this._css.set(bg, fg, value);\n }\n\n public getCss(bg: number, fg: number): string | null | undefined {\n return this._css.get(bg, fg);\n }\n\n public setColor(bg: number, fg: number, value: IColor | null): void {\n this._color.set(bg, fg, value);\n }\n\n public getColor(bg: number, fg: number): IColor | null | undefined {\n return this._color.get(bg, fg);\n }\n\n public clear(): void {\n this._color.clear();\n this._css.clear();\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IColor, ITerminalOptions } from '../common/Types';\nimport { CharData, IBuffer } from '../common/buffer/Types';\nimport { ICoreTerminal } from '../common/CoreTerminal';\nimport { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';\nimport { channels, css } from '../common/Color';\nimport type { IEvent } from '../common/Event';\n\n/**\n * A portion of the public API that are implemented identially internally and simply passed through.\n */\ntype InternalPassthroughApis = Omit;\n\nexport interface ITerminal extends InternalPassthroughApis, ICoreTerminal {\n screenElement: HTMLElement | undefined;\n browser: IBrowser;\n buffer: IBuffer;\n linkifier: ILinkifier2 | undefined;\n options: Required;\n\n readonly dimensions: IRenderDimensionsApi | undefined;\n\n onBlur: IEvent;\n onFocus: IEvent;\n onDimensionsChange: IEvent;\n onA11yChar: IEvent;\n onA11yTab: IEvent;\n onWillOpen: IEvent;\n}\n\nexport type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;\nexport type CustomWheelEventHandler = (event: WheelEvent) => boolean;\n\nexport type LineData = CharData[];\n\nexport interface ICompositionHelper {\n readonly isComposing: boolean;\n compositionstart(): void;\n compositionupdate(ev: CompositionEvent): void;\n compositionend(): boolean | void;\n updateCompositionElements(dontRecurse?: boolean): void;\n keydown(ev: KeyboardEvent): boolean;\n keypress?(text: string): boolean;\n}\n\nexport interface IBrowser {\n isNode: boolean;\n userAgent: string;\n platform: string;\n isFirefox: boolean;\n isMac: boolean;\n isIpad: boolean;\n isIphone: boolean;\n isWindows: boolean;\n}\n\nexport interface IColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n cursorAccent: IColor;\n selectionForeground: IColor | undefined;\n selectionBackgroundTransparent: IColor;\n /** The selection blended on top of background. */\n selectionBackgroundOpaque: IColor;\n selectionInactiveBackgroundTransparent: IColor;\n selectionInactiveBackgroundOpaque: IColor;\n scrollbarSliderBackground: IColor;\n scrollbarSliderHoverBackground: IColor;\n scrollbarSliderActiveBackground: IColor;\n overviewRulerBorder: IColor;\n ansi: IColor[];\n /** Maps original colors to colors that respect minimum contrast ratio. */\n contrastCache: IColorContrastCache;\n /** Maps original colors to colors that respect _half_ of the minimum contrast ratio. */\n halfContrastCache: IColorContrastCache;\n}\n\nexport type ReadonlyColorSet = Readonly> & { ansi: Readonly['ansi']> };\n\nexport interface IColorContrastCache {\n clear(): void;\n setCss(bg: number, fg: number, value: string | null): void;\n getCss(bg: number, fg: number): string | null | undefined;\n setColor(bg: number, fg: number, value: IColor | null): void;\n getColor(bg: number, fg: number): IColor | null | undefined;\n}\n\nexport interface IPartialColorSet {\n foreground: IColor;\n background: IColor;\n cursor?: IColor;\n cursorAccent?: IColor;\n selectionBackground?: IColor;\n ansi: IColor[];\n}\n\nexport interface IViewport extends IDisposable {\n scrollBarWidth: number;\n readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;\n syncScrollArea(immediate?: boolean, force?: boolean): void;\n getLinesScrolled(ev: WheelEvent): number;\n getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };\n handleWheel(ev: WheelEvent): boolean;\n handleTouchStart(ev: TouchEvent): void;\n handleTouchMove(ev: TouchEvent): boolean;\n scrollLines(disp: number): void; // todo api name?\n reset(): void;\n}\n\nexport interface ILinkifierEvent {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n cols: number;\n fg: number | undefined;\n}\n\ninterface ILinkState {\n decorations: ILinkDecorations;\n isHovered: boolean;\n}\nexport interface ILinkWithState {\n link: ILink;\n state?: ILinkState;\n}\n\nexport interface ILinkifier2 extends IDisposable {\n onShowLinkUnderline: IEvent;\n onHideLinkUnderline: IEvent;\n readonly currentLink: ILinkWithState | undefined;\n}\n\nexport interface ILink {\n range: IBufferRange;\n text: string;\n decorations?: ILinkDecorations;\n activate(event: MouseEvent, text: string): void;\n hover?(event: MouseEvent, text: string): void;\n leave?(event: MouseEvent, text: string): void;\n dispose?(): void;\n}\n\nexport interface ILinkDecorations {\n pointerCursor: boolean;\n underline: boolean;\n}\n\nexport interface IBufferRange {\n start: IBufferCellPosition;\n end: IBufferCellPosition;\n}\n\nexport interface IBufferCellPosition {\n x: number;\n y: number;\n}\n\nexport type CharacterJoinerHandler = (text: string) => [number, number][];\n\nexport interface ICharacterJoiner {\n id: number;\n handler: CharacterJoinerHandler;\n}\n\nexport interface IRenderDebouncer extends IDisposable {\n refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void;\n}\n\nexport interface IRenderDebouncerWithCallback extends IRenderDebouncer {\n addRefreshCallback(callback: FrameRequestCallback): number;\n}\n\nexport interface IBufferElementProvider {\n provideBufferElements(): DocumentFragment | HTMLElement;\n}\n\n// An IIFE to generate DEFAULT_ANSI_COLORS.\nexport const DEFAULT_ANSI_COLORS = Object.freeze((() => {\n const colors = [\n // dark:\n css.toColor('#2e3436'),\n css.toColor('#cc0000'),\n css.toColor('#4e9a06'),\n css.toColor('#c4a000'),\n css.toColor('#3465a4'),\n css.toColor('#75507b'),\n css.toColor('#06989a'),\n css.toColor('#d3d7cf'),\n // bright:\n css.toColor('#555753'),\n css.toColor('#ef2929'),\n css.toColor('#8ae234'),\n css.toColor('#fce94f'),\n css.toColor('#729fcf'),\n css.toColor('#ad7fa8'),\n css.toColor('#34e2e2'),\n css.toColor('#eeeeec')\n ];\n\n // Fill in the remaining 240 ANSI colors.\n // Generate colors (16-231)\n const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];\n for (let i = 0; i < 216; i++) {\n const r = v[(i / 36) % 6 | 0];\n const g = v[(i / 6) % 6 | 0];\n const b = v[i % 6];\n colors.push({\n css: channels.toCss(r, g, b),\n rgba: channels.toRgba(r, g, b)\n });\n }\n\n // Generate greys (232-255)\n for (let i = 0; i < 24; i++) {\n const c = 8 + i * 10;\n colors.push({\n css: channels.toCss(c, c, c),\n rgba: channels.toRgba(c, c, c)\n });\n }\n\n return colors;\n})());\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ColorContrastCache } from '../ColorContrastCache';\nimport { IThemeService } from './Services';\nimport { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';\nimport { color, css, NULL_COLOR } from '../../common/Color';\nimport { Disposable } from '../../common/Lifecycle';\nimport { IOptionsService, ITheme } from '../../common/services/Services';\nimport { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';\nimport { Emitter } from '../../common/Event';\n\ninterface IRestoreColorSet {\n foreground: IColor;\n background: IColor;\n cursor: IColor;\n ansi: IColor[];\n}\n\n\nconst DEFAULT_FOREGROUND = css.toColor('#ffffff');\nconst DEFAULT_BACKGROUND = css.toColor('#000000');\nconst DEFAULT_CURSOR = css.toColor('#ffffff');\nconst DEFAULT_CURSOR_ACCENT = DEFAULT_BACKGROUND;\nconst DEFAULT_SELECTION = {\n css: 'rgba(255, 255, 255, 0.3)',\n rgba: 0xFFFFFF4D\n};\nconst DEFAULT_OVERVIEW_RULER_BORDER = DEFAULT_FOREGROUND;\n\nexport class ThemeService extends Disposable implements IThemeService {\n public serviceBrand: undefined;\n\n private _colors: IColorSet;\n private _contrastCache: IColorContrastCache = new ColorContrastCache();\n private _halfContrastCache: IColorContrastCache = new ColorContrastCache();\n private _restoreColors!: IRestoreColorSet;\n\n public get colors(): ReadonlyColorSet { return this._colors; }\n\n private readonly _onChangeColors = this._register(new Emitter());\n public readonly onChangeColors = this._onChangeColors.event;\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n\n this._colors = {\n foreground: DEFAULT_FOREGROUND,\n background: DEFAULT_BACKGROUND,\n cursor: DEFAULT_CURSOR,\n cursorAccent: DEFAULT_CURSOR_ACCENT,\n selectionForeground: undefined,\n selectionBackgroundTransparent: DEFAULT_SELECTION,\n selectionBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n selectionInactiveBackgroundTransparent: DEFAULT_SELECTION,\n selectionInactiveBackgroundOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),\n scrollbarSliderBackground: color.opacity(DEFAULT_FOREGROUND, 0.2),\n scrollbarSliderHoverBackground: color.opacity(DEFAULT_FOREGROUND, 0.4),\n scrollbarSliderActiveBackground: color.opacity(DEFAULT_FOREGROUND, 0.5),\n overviewRulerBorder: DEFAULT_FOREGROUND,\n ansi: DEFAULT_ANSI_COLORS.slice(),\n contrastCache: this._contrastCache,\n halfContrastCache: this._halfContrastCache\n };\n this._updateRestoreColors();\n this._setTheme(this._optionsService.rawOptions.theme);\n\n this._register(this._optionsService.onSpecificOptionChange('minimumContrastRatio', () => this._contrastCache.clear()));\n this._register(this._optionsService.onSpecificOptionChange('theme', () => this._setTheme(this._optionsService.rawOptions.theme)));\n }\n\n /**\n * Sets the terminal's theme.\n * @param theme The theme to use. If a partial theme is provided then default\n * colors will be used where colors are not defined.\n */\n private _setTheme(theme: ITheme = {}): void {\n const colors = this._colors;\n colors.foreground = parseColor(theme.foreground, DEFAULT_FOREGROUND);\n colors.background = parseColor(theme.background, DEFAULT_BACKGROUND);\n colors.cursor = color.blend(colors.background, parseColor(theme.cursor, DEFAULT_CURSOR));\n colors.cursorAccent = color.blend(colors.background, parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT));\n colors.selectionBackgroundTransparent = parseColor(theme.selectionBackground, DEFAULT_SELECTION);\n colors.selectionBackgroundOpaque = color.blend(colors.background, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundTransparent = parseColor(theme.selectionInactiveBackground, colors.selectionBackgroundTransparent);\n colors.selectionInactiveBackgroundOpaque = color.blend(colors.background, colors.selectionInactiveBackgroundTransparent);\n colors.selectionForeground = theme.selectionForeground ? parseColor(theme.selectionForeground, NULL_COLOR) : undefined;\n if (colors.selectionForeground === NULL_COLOR) {\n colors.selectionForeground = undefined;\n }\n\n /**\n * If selection color is opaque, blend it with background with 0.3 opacity\n * Issue #2737\n */\n if (color.isOpaque(colors.selectionBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionBackgroundTransparent = color.opacity(colors.selectionBackgroundTransparent, opacity);\n }\n if (color.isOpaque(colors.selectionInactiveBackgroundTransparent)) {\n const opacity = 0.3;\n colors.selectionInactiveBackgroundTransparent = color.opacity(colors.selectionInactiveBackgroundTransparent, opacity);\n }\n colors.scrollbarSliderBackground = parseColor(theme.scrollbarSliderBackground, color.opacity(colors.foreground, 0.2));\n colors.scrollbarSliderHoverBackground = parseColor(theme.scrollbarSliderHoverBackground, color.opacity(colors.foreground, 0.4));\n colors.scrollbarSliderActiveBackground = parseColor(theme.scrollbarSliderActiveBackground, color.opacity(colors.foreground, 0.5));\n colors.overviewRulerBorder = parseColor(theme.overviewRulerBorder, DEFAULT_OVERVIEW_RULER_BORDER);\n colors.ansi = DEFAULT_ANSI_COLORS.slice();\n colors.ansi[0] = parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);\n colors.ansi[1] = parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);\n colors.ansi[2] = parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);\n colors.ansi[3] = parseColor(theme.yellow, DEFAULT_ANSI_COLORS[3]);\n colors.ansi[4] = parseColor(theme.blue, DEFAULT_ANSI_COLORS[4]);\n colors.ansi[5] = parseColor(theme.magenta, DEFAULT_ANSI_COLORS[5]);\n colors.ansi[6] = parseColor(theme.cyan, DEFAULT_ANSI_COLORS[6]);\n colors.ansi[7] = parseColor(theme.white, DEFAULT_ANSI_COLORS[7]);\n colors.ansi[8] = parseColor(theme.brightBlack, DEFAULT_ANSI_COLORS[8]);\n colors.ansi[9] = parseColor(theme.brightRed, DEFAULT_ANSI_COLORS[9]);\n colors.ansi[10] = parseColor(theme.brightGreen, DEFAULT_ANSI_COLORS[10]);\n colors.ansi[11] = parseColor(theme.brightYellow, DEFAULT_ANSI_COLORS[11]);\n colors.ansi[12] = parseColor(theme.brightBlue, DEFAULT_ANSI_COLORS[12]);\n colors.ansi[13] = parseColor(theme.brightMagenta, DEFAULT_ANSI_COLORS[13]);\n colors.ansi[14] = parseColor(theme.brightCyan, DEFAULT_ANSI_COLORS[14]);\n colors.ansi[15] = parseColor(theme.brightWhite, DEFAULT_ANSI_COLORS[15]);\n if (theme.extendedAnsi) {\n const colorCount = Math.min(colors.ansi.length - 16, theme.extendedAnsi.length);\n for (let i = 0; i < colorCount; i++) {\n colors.ansi[i + 16] = parseColor(theme.extendedAnsi[i], DEFAULT_ANSI_COLORS[i + 16]);\n }\n }\n // Clear the cache\n this._contrastCache.clear();\n this._halfContrastCache.clear();\n this._updateRestoreColors();\n this._onChangeColors.fire(this.colors);\n }\n\n public restoreColor(slot?: AllColorIndex): void {\n this._restoreColor(slot);\n this._onChangeColors.fire(this.colors);\n }\n\n private _restoreColor(slot: AllColorIndex | undefined): void {\n // unset slot restores all ansi colors\n if (slot === undefined) {\n for (let i = 0; i < this._restoreColors.ansi.length; ++i) {\n this._colors.ansi[i] = this._restoreColors.ansi[i];\n }\n return;\n }\n switch (slot) {\n case SpecialColorIndex.FOREGROUND:\n this._colors.foreground = this._restoreColors.foreground;\n break;\n case SpecialColorIndex.BACKGROUND:\n this._colors.background = this._restoreColors.background;\n break;\n case SpecialColorIndex.CURSOR:\n this._colors.cursor = this._restoreColors.cursor;\n break;\n default:\n this._colors.ansi[slot] = this._restoreColors.ansi[slot];\n }\n }\n\n public modifyColors(callback: (colors: IColorSet) => void): void {\n callback(this._colors);\n // Assume the change happened\n this._onChangeColors.fire(this.colors);\n }\n\n private _updateRestoreColors(): void {\n this._restoreColors = {\n foreground: this._colors.foreground,\n background: this._colors.background,\n cursor: this._colors.cursor,\n ansi: this._colors.ansi.slice()\n };\n }\n}\n\nfunction parseColor(\n cssString: string | undefined,\n fallback: IColor\n): IColor {\n if (cssString !== undefined) {\n try {\n return css.toColor(cssString);\n } catch {\n // no-op\n }\n }\n return fallback;\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n// reg + shift key mappings for digits and special chars\nconst KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {\n // digits 0-9\n 48: ['0', ')'],\n 49: ['1', '!'],\n 50: ['2', '@'],\n 51: ['3', '#'],\n 52: ['4', '$'],\n 53: ['5', '%'],\n 54: ['6', '^'],\n 55: ['7', '&'],\n 56: ['8', '*'],\n 57: ['9', '('],\n\n // special chars\n 186: [';', ':'],\n 187: ['=', '+'],\n 188: [',', '<'],\n 189: ['-', '_'],\n 190: ['.', '>'],\n 191: ['/', '?'],\n 192: ['`', '~'],\n 219: ['[', '{'],\n 220: ['\\\\', '|'],\n 221: [']', '}'],\n 222: ['\\'', '\"']\n};\n\nexport function evaluateKeyboardEvent(\n ev: IKeyboardEvent,\n applicationCursorMode: boolean,\n isMac: boolean,\n macOptionIsMeta: boolean\n): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n // Whether to cancel event propagation (NOTE: this may not be needed since the event is\n // canceled at the end of keyDown\n cancel: false,\n // The new key event to emit\n key: undefined\n };\n const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);\n switch (ev.keyCode) {\n case 0:\n if (ev.key === 'UIKeyInputUpArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n }\n else if (ev.key === 'UIKeyInputLeftArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n }\n else if (ev.key === 'UIKeyInputRightArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n }\n else if (ev.key === 'UIKeyInputDownArrow') {\n if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n }\n break;\n case 8:\n // backspace\n result.key = ev.ctrlKey ? '\\b' : C0.DEL; // ^H or ^?\n if (ev.altKey) {\n result.key = C0.ESC + result.key;\n }\n break;\n case 9:\n // tab\n if (ev.shiftKey) {\n result.key = C0.ESC + '[Z';\n break;\n }\n result.key = C0.HT;\n result.cancel = true;\n break;\n case 13:\n // return/enter\n if (ev.key === 'c' && ev.ctrlKey) {\n // HACK: Safari on iPad, iOS, AppleVisionPro sends key 13 when typing ctrl-c on hardware\n // keyboard\n result.key = C0.ETX;\n } else {\n result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;\n }\n result.cancel = true;\n break;\n case 27:\n // escape\n result.key = C0.ESC;\n if (ev.altKey) {\n result.key = C0.ESC + C0.ESC;\n }\n result.cancel = true;\n break;\n case 37:\n // left-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OD';\n } else {\n result.key = C0.ESC + '[D';\n }\n break;\n case 39:\n // right-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OC';\n } else {\n result.key = C0.ESC + '[C';\n }\n break;\n case 38:\n // up-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OA';\n } else {\n result.key = C0.ESC + '[A';\n }\n break;\n case 40:\n // down-arrow\n if (ev.metaKey) {\n break;\n }\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OB';\n } else {\n result.key = C0.ESC + '[B';\n }\n break;\n case 45:\n // insert\n if (!ev.shiftKey && !ev.ctrlKey) {\n // or + are used to\n // copy-paste on some systems.\n result.key = C0.ESC + '[2~';\n }\n break;\n case 46:\n // delete\n if (modifiers) {\n result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[3~';\n }\n break;\n case 36:\n // home\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OH';\n } else {\n result.key = C0.ESC + '[H';\n }\n break;\n case 35:\n // end\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';\n } else if (applicationCursorMode) {\n result.key = C0.ESC + 'OF';\n } else {\n result.key = C0.ESC + '[F';\n }\n break;\n case 33:\n // page up\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_UP;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[5~';\n }\n break;\n case 34:\n // page down\n if (ev.shiftKey) {\n result.type = KeyboardResultType.PAGE_DOWN;\n } else if (ev.ctrlKey) {\n result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[6~';\n }\n break;\n case 112:\n // F1-F12\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';\n } else {\n result.key = C0.ESC + 'OP';\n }\n break;\n case 113:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';\n } else {\n result.key = C0.ESC + 'OQ';\n }\n break;\n case 114:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';\n } else {\n result.key = C0.ESC + 'OR';\n }\n break;\n case 115:\n if (modifiers) {\n result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';\n } else {\n result.key = C0.ESC + 'OS';\n }\n break;\n case 116:\n if (modifiers) {\n result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[15~';\n }\n break;\n case 117:\n if (modifiers) {\n result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[17~';\n }\n break;\n case 118:\n if (modifiers) {\n result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[18~';\n }\n break;\n case 119:\n if (modifiers) {\n result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[19~';\n }\n break;\n case 120:\n if (modifiers) {\n result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[20~';\n }\n break;\n case 121:\n if (modifiers) {\n result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[21~';\n }\n break;\n case 122:\n if (modifiers) {\n result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[23~';\n }\n break;\n case 123:\n if (modifiers) {\n result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';\n } else {\n result.key = C0.ESC + '[24~';\n }\n break;\n default:\n // a-z and space\n if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {\n if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n result.key = String.fromCharCode(ev.keyCode - 64);\n } else if (ev.keyCode === 32) {\n result.key = C0.NUL;\n } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {\n // escape, file sep, group sep, record sep, unit sep\n result.key = String.fromCharCode(ev.keyCode - 51 + 27);\n } else if (ev.keyCode === 56) {\n result.key = C0.DEL;\n } else if (ev.key === '/') {\n result.key = C0.US; // https://github.com/xtermjs/xterm.js/issues/5457\n } else if (ev.keyCode === 219) {\n result.key = C0.ESC;\n } else if (ev.keyCode === 220) {\n result.key = C0.FS;\n } else if (ev.keyCode === 221) {\n result.key = C0.GS;\n }\n } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {\n // On macOS this is a third level shift when !macOptionIsMeta. Use instead.\n const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];\n const key = keyMapping?.[!ev.shiftKey ? 0 : 1];\n if (key) {\n result.key = C0.ESC + key;\n } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {\n const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;\n let keyString = String.fromCharCode(keyCode);\n if (ev.shiftKey) {\n keyString = keyString.toUpperCase();\n }\n result.key = C0.ESC + keyString;\n } else if (ev.keyCode === 32) {\n result.key = C0.ESC + (ev.ctrlKey ? C0.NUL : ' ');\n } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {\n // Reference: https://github.com/xtermjs/xterm.js/issues/3725\n // Alt will produce a \"dead key\" (initate composition) with some\n // of the letters in US layout (e.g. N/E/U).\n // It's safe to match against Key* since no other `code` values begin with \"Key\".\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac\n let keyString = ev.code.slice(3, 4);\n if (!ev.shiftKey) {\n keyString = keyString.toLowerCase();\n }\n result.key = C0.ESC + keyString;\n result.cancel = true;\n }\n } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {\n if (ev.keyCode === 65) { // cmd + a\n result.type = KeyboardResultType.SELECT_ALL;\n }\n } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {\n // Include only keys that that result in a _single_ character; don't include num lock,\n // volume up, etc.\n result.key = ev.key;\n } else if (ev.key && ev.ctrlKey && ev.shiftKey) {\n switch (ev.code) {\n case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_\n case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2)\n case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6)\n }\n }\n break;\n }\n\n return result;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Kitty keyboard protocol implementation.\n * @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Kitty keyboard protocol enhancement flags (bitfield).\n */\nexport const enum KittyKeyboardFlags {\n NONE = 0b00000,\n /** Disambiguate escape codes - fixes ambiguous legacy encodings */\n DISAMBIGUATE_ESCAPE_CODES = 0b00001,\n /** Report event types - press/repeat/release */\n REPORT_EVENT_TYPES = 0b00010,\n /** Report alternate keys - shifted key and base layout key */\n REPORT_ALTERNATE_KEYS = 0b00100,\n /** Report all keys as escape codes - text-producing keys as CSI u */\n REPORT_ALL_KEYS_AS_ESCAPE_CODES = 0b01000,\n /** Report associated text - includes text codepoints in escape code */\n REPORT_ASSOCIATED_TEXT = 0b10000,\n}\n\n/**\n * Kitty keyboard event types.\n */\nexport const enum KittyKeyboardEventType {\n PRESS = 1,\n REPEAT = 2,\n RELEASE = 3,\n}\n\n/**\n * Kitty modifier bits (different from xterm modifier encoding).\n * Value sent = 1 + modifier_bits\n */\nexport const enum KittyKeyboardModifiers {\n SHIFT = 0b00000001,\n ALT = 0b00000010,\n CTRL = 0b00000100,\n SUPER = 0b00001000,\n HYPER = 0b00010000,\n META = 0b00100000,\n CAPS_LOCK = 0b01000000,\n NUM_LOCK = 0b10000000,\n}\n\n/**\n * Kitty keyboard protocol handler class.\n * Encapsulates all key code mappings and encoding logic.\n */\nexport class KittyKeyboard {\n /**\n * Functional key codes for Kitty protocol.\n * Keys that don't produce text have specific unicode codepoint mappings.\n */\n private readonly _functionalKeyCodes: { [key: string]: number } = {\n 'Escape': 27,\n 'Enter': 13,\n 'Tab': 9,\n 'Backspace': 127,\n 'CapsLock': 57358,\n 'ScrollLock': 57359,\n 'NumLock': 57360,\n 'PrintScreen': 57361,\n 'Pause': 57362,\n 'ContextMenu': 57363,\n // F13-F35 (F1-F12 use legacy encoding)\n 'F13': 57376,\n 'F14': 57377,\n 'F15': 57378,\n 'F16': 57379,\n 'F17': 57380,\n 'F18': 57381,\n 'F19': 57382,\n 'F20': 57383,\n 'F21': 57384,\n 'F22': 57385,\n 'F23': 57386,\n 'F24': 57387,\n 'F25': 57388,\n // Keypad keys\n 'KP_0': 57399,\n 'KP_1': 57400,\n 'KP_2': 57401,\n 'KP_3': 57402,\n 'KP_4': 57403,\n 'KP_5': 57404,\n 'KP_6': 57405,\n 'KP_7': 57406,\n 'KP_8': 57407,\n 'KP_9': 57408,\n 'KP_Decimal': 57409,\n 'KP_Divide': 57410,\n 'KP_Multiply': 57411,\n 'KP_Subtract': 57412,\n 'KP_Add': 57413,\n 'KP_Enter': 57414,\n 'KP_Equal': 57415,\n // Modifier keys\n 'ShiftLeft': 57441,\n 'ShiftRight': 57447,\n 'ControlLeft': 57442,\n 'ControlRight': 57448,\n 'AltLeft': 57443,\n 'AltRight': 57449,\n 'MetaLeft': 57444,\n 'MetaRight': 57450,\n // Media keys\n 'MediaPlayPause': 57430,\n 'MediaStop': 57432,\n 'MediaTrackNext': 57435,\n 'MediaTrackPrevious': 57436,\n 'AudioVolumeDown': 57438,\n 'AudioVolumeUp': 57439,\n 'AudioVolumeMute': 57440\n };\n\n /**\n * Keys that use CSI ~ encoding with a number parameter.\n */\n private readonly _csiTildeKeys: { [key: string]: number } = {\n 'Insert': 2,\n 'Delete': 3,\n 'PageUp': 5,\n 'PageDown': 6,\n 'F5': 15,\n 'F6': 17,\n 'F7': 18,\n 'F8': 19,\n 'F9': 20,\n 'F10': 21,\n 'F11': 23,\n 'F12': 24\n };\n\n /**\n * Keys that use CSI letter encoding (arrows, Home, End).\n */\n private readonly _csiLetterKeys: { [key: string]: string } = {\n 'ArrowUp': 'A',\n 'ArrowDown': 'B',\n 'ArrowRight': 'C',\n 'ArrowLeft': 'D',\n 'Home': 'H',\n 'End': 'F'\n };\n\n /**\n * Function keys F1-F4 use SS3 encoding without modifiers.\n */\n private readonly _ss3FunctionKeys: { [key: string]: string } = {\n 'F1': 'P',\n 'F2': 'Q',\n 'F3': 'R',\n 'F4': 'S'\n };\n\n /**\n * Map browser key codes to Kitty numpad codes.\n */\n private _getNumpadKeyCode(ev: IKeyboardEvent): number | undefined {\n if (ev.code.startsWith('Numpad')) {\n const suffix = ev.code.slice(6);\n if (suffix >= '0' && suffix <= '9') {\n return 57399 + parseInt(suffix, 10);\n }\n switch (suffix) {\n case 'Decimal': return 57409;\n case 'Divide': return 57410;\n case 'Multiply': return 57411;\n case 'Subtract': return 57412;\n case 'Add': return 57413;\n case 'Enter': return 57414;\n case 'Equal': return 57415;\n }\n }\n return undefined;\n }\n\n /**\n * Get modifier key code from code property.\n */\n private _getModifierKeyCode(ev: IKeyboardEvent): number | undefined {\n switch (ev.code) {\n case 'ShiftLeft': return 57441;\n case 'ShiftRight': return 57447;\n case 'ControlLeft': return 57442;\n case 'ControlRight': return 57448;\n case 'AltLeft': return 57443;\n case 'AltRight': return 57449;\n case 'MetaLeft': return 57444;\n case 'MetaRight': return 57450;\n }\n return undefined;\n }\n\n /**\n * Encode modifiers for Kitty protocol.\n * Returns 1 + modifier bits, or 0 if no modifiers.\n */\n private _encodeModifiers(ev: IKeyboardEvent): number {\n let mods = 0;\n if (ev.shiftKey) mods |= KittyKeyboardModifiers.SHIFT;\n if (ev.altKey) mods |= KittyKeyboardModifiers.ALT;\n if (ev.ctrlKey) mods |= KittyKeyboardModifiers.CTRL;\n if (ev.metaKey) mods |= KittyKeyboardModifiers.SUPER;\n return mods > 0 ? mods + 1 : 0;\n }\n\n /**\n * Get the unicode key code for a keyboard event.\n * Returns the lowercase codepoint for letters.\n * For shifted keys, uses the code property to get the base key.\n */\n private _getKeyCode(ev: IKeyboardEvent, macOptionAsAlt: boolean): number | undefined {\n const numpadCode = this._getNumpadKeyCode(ev);\n if (numpadCode !== undefined) {\n return numpadCode;\n }\n\n const modifierCode = this._getModifierKeyCode(ev);\n if (modifierCode !== undefined) {\n return modifierCode;\n }\n\n const funcCode = this._functionalKeyCodes[ev.key];\n if (funcCode !== undefined) {\n return funcCode;\n }\n\n if ((ev.shiftKey || (macOptionAsAlt && ev.altKey)) && ev.code) {\n if (ev.code.startsWith('Digit') && ev.code.length === 6) {\n const digit = ev.code.charAt(5);\n if (digit >= '0' && digit <= '9') {\n return digit.charCodeAt(0);\n }\n }\n if (ev.code.startsWith('Key') && ev.code.length === 4) {\n const letter = ev.code.charAt(3).toLowerCase();\n return letter.charCodeAt(0);\n }\n }\n\n if (ev.key.length === 1) {\n const code = ev.key.codePointAt(0)!;\n if (code >= 65 && code <= 90) {\n return code + 32;\n }\n return code;\n }\n\n return undefined;\n }\n\n /**\n * Check if a key is a modifier key.\n */\n private _isModifierKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'Shift' || ev.key === 'Control' || ev.key === 'Alt' || ev.key === 'Meta';\n }\n\n /**\n * Check if a key is a lock key (CapsLock/NumLock/ScrollLock).\n *\n * Kitty's reference implementation classifies these as modifier keys for the\n * purpose of suppressing press events (kitty/keys.c `is_modifier_key()`\n * includes `GLFW_FKEY_CAPS_LOCK`, `GLFW_FKEY_SCROLL_LOCK`, `GLFW_FKEY_NUM_LOCK`),\n * and its test suite asserts that a CapsLock press with no protocol flags\n * produces empty output.\n */\n private _isLockKey(ev: IKeyboardEvent): boolean {\n return ev.key === 'CapsLock' || ev.key === 'NumLock' || ev.key === 'ScrollLock';\n }\n\n /**\n * Build CSI letter sequence for arrow keys, Home, End.\n * Format: CSI [1;mod] letter\n */\n private _buildCsiLetterSequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + '[' + letter;\n }\n\n /**\n * Build SS3 sequence for F1-F4.\n * Without modifiers: SS3 letter\n * With modifiers: CSI 1;mod letter\n */\n private _buildSs3Sequence(\n letter: string,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n if (modifiers > 0 || needsEventType) {\n let seq = C0.ESC + '[1;' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n seq += letter;\n return seq;\n }\n return C0.ESC + 'O' + letter;\n }\n\n /**\n * Build CSI ~ sequence for Insert, Delete, PageUp/Down, F5-F12.\n * Format: CSI number [;mod[:event]] ~\n */\n private _buildCsiTildeSequence(\n number: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n reportEventTypes: boolean\n ): string {\n const needsEventType = reportEventTypes && eventType !== KittyKeyboardEventType.PRESS;\n\n let seq = C0.ESC + '[' + number;\n if (modifiers > 0 || needsEventType) {\n seq += ';' + (modifiers > 0 ? modifiers : '1');\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n seq += '~';\n return seq;\n }\n\n /**\n * Build CSI u sequence.\n * Format: CSI keycode[:shifted[:base]] [;mod[:event][;text]] u\n */\n private _buildCsiUSequence(\n ev: IKeyboardEvent,\n keyCode: number,\n modifiers: number,\n eventType: KittyKeyboardEventType,\n flags: number,\n isFunc: boolean,\n isMod: boolean\n ): string {\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n const reportAlternateKeys = !!(flags & KittyKeyboardFlags.REPORT_ALTERNATE_KEYS);\n\n let seq = C0.ESC + '[' + keyCode;\n\n let shiftedKey: number | undefined;\n if (reportAlternateKeys && ev.shiftKey && ev.key.length === 1 && !isFunc && !isMod) {\n shiftedKey = ev.key.codePointAt(0);\n seq += ':' + shiftedKey;\n }\n\n const reportAssociatedText = !!(flags & KittyKeyboardFlags.REPORT_ASSOCIATED_TEXT) &&\n eventType !== KittyKeyboardEventType.RELEASE &&\n ev.key.length === 1 &&\n !isFunc &&\n !isMod &&\n !ev.ctrlKey;\n const textCode = reportAssociatedText ? ev.key.codePointAt(0) : undefined;\n\n const needsEventType = reportEventTypes &&\n eventType !== KittyKeyboardEventType.PRESS &&\n (eventType === KittyKeyboardEventType.RELEASE || textCode === undefined);\n\n if (modifiers > 0 || needsEventType || textCode !== undefined) {\n seq += ';';\n if (modifiers > 0) {\n seq += modifiers;\n } else if (needsEventType) {\n seq += '1';\n }\n if (needsEventType) {\n seq += ':' + eventType;\n }\n }\n\n if (textCode !== undefined) {\n seq += ';' + textCode;\n }\n\n seq += 'u';\n return seq;\n }\n\n /**\n * Evaluate a keyboard event using Kitty keyboard protocol.\n *\n * @param ev The keyboard event.\n * @param flags The active Kitty keyboard enhancement flags.\n * @param eventType The event type (press, repeat, release).\n * @param macOptionAsAlt When true, macOS Option-composed ev.key values are unwound via ev.code.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluate(\n ev: IKeyboardEvent,\n flags: number,\n eventType: KittyKeyboardEventType = KittyKeyboardEventType.PRESS,\n macOptionAsAlt: boolean = false\n ): IKeyboardResult {\n const result: IKeyboardResult = {\n type: KeyboardResultType.SEND_KEY,\n cancel: false,\n key: undefined\n };\n\n const modifiers = this._encodeModifiers(ev);\n const isMod = this._isModifierKey(ev);\n const reportEventTypes = !!(flags & KittyKeyboardFlags.REPORT_EVENT_TYPES);\n\n if (!reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) {\n return result;\n }\n\n if (isMod && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n // Spec \u00A7 \"Report all keys as escape codes\": \"Additionally, with this mode,\n // events for pressing modifier keys are reported.\" \u2014 i.e. *without* this\n // mode, modifier-key press events are suppressed. Kitty's is_modifier_key()\n // treats CapsLock/NumLock/ScrollLock as modifier keys for this rule.\n if (this._isLockKey(ev) && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const csiLetter = this._csiLetterKeys[ev.key];\n if (csiLetter) {\n result.key = this._buildCsiLetterSequence(csiLetter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const ss3Letter = this._ss3FunctionKeys[ev.key];\n if (ss3Letter) {\n result.key = this._buildSs3Sequence(ss3Letter, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const tildeCode = this._csiTildeKeys[ev.key];\n if (tildeCode !== undefined) {\n result.key = this._buildCsiTildeSequence(tildeCode, modifiers, eventType, reportEventTypes);\n result.cancel = true;\n return result;\n }\n\n const keyCode = this._getKeyCode(ev, macOptionAsAlt);\n if (keyCode === undefined) {\n return result;\n }\n\n // Special handling for Enter/Tab/Backspace.\n const specialKey = keyCode === 13 || keyCode === 9 || keyCode === 127;\n\n // Per spec, Enter/Tab/Backspace will not have release events unless \"Report all keys as escape\n // codes\" is also set.\n if (specialKey && eventType === KittyKeyboardEventType.RELEASE && !(flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES)) {\n return result;\n }\n\n const isFunc = this._functionalKeyCodes[ev.key] !== undefined || this._getNumpadKeyCode(ev) !== undefined;\n\n const useCsiU = !!(\n flags & KittyKeyboardFlags.REPORT_ALL_KEYS_AS_ESCAPE_CODES ||\n (reportEventTypes && eventType === KittyKeyboardEventType.RELEASE) ||\n // Enabling REPORT_EVENT_TYPES without DISAMBIGUATE_ESCAPE_CODES doesn't really make sense, so\n // just make REPORT_EVENT_TYPES imply DISAMBIGUATE_ESCAPE_CODES here for simplicity.\n // See: https://github.com/kovidgoyal/kitty/issues/9999\n ((flags & KittyKeyboardFlags.DISAMBIGUATE_ESCAPE_CODES || reportEventTypes) &&\n (\n // Per spec, Enter/Tab/Backspace \"still generate the same bytes as in legacy mode\" and\n // consider space to be a text-generating key, so these skip the isFunc fast-path and only\n // get CSI u when modifiers are present (handled below).\n (isFunc && !specialKey) ||\n (\n (modifiers > 0 && ev.key.length !== 1) ||\n modifiers - 1 > KittyKeyboardModifiers.SHIFT\n )\n )\n )\n );\n\n if (useCsiU) {\n result.key = this._buildCsiUSequence(ev, keyCode, modifiers, eventType, flags, isFunc, isMod);\n result.cancel = true;\n } else {\n const legacyByte = keyCode === 13 ? '\\r' : keyCode === 9 ? '\\t' : keyCode === 127 ? '\\x7f' : undefined;\n if (legacyByte) {\n result.key = legacyByte;\n } else if (ev.key.length === 1 && !ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n result.key = ev.key;\n }\n }\n\n return result;\n }\n\n /**\n * Check if Kitty protocol should be used based on flags.\n */\n public static shouldUseProtocol(flags: number): boolean {\n return flags > 0;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * Win32 input mode implementation.\n * @see https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md\n *\n * Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n * Vk: Virtual key code (decimal)\n * Sc: Scan code (decimal)\n * Uc: Unicode character (decimal codepoint, 0 if none)\n * Kd: Key down (1) or up (0)\n * Cs: Control key state (modifier flags)\n * Rc: Repeat count (usually 1)\n */\n\nimport { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';\nimport { C0 } from '../data/EscapeSequences';\n\n/**\n * Win32 control key state flags (from Windows API).\n */\nexport const enum Win32ControlKeyState {\n RIGHT_ALT_PRESSED = 0b000000001,\n LEFT_ALT_PRESSED = 0b000000010,\n RIGHT_CTRL_PRESSED = 0b000000100,\n LEFT_CTRL_PRESSED = 0b000001000,\n SHIFT_PRESSED = 0b000010000,\n NUMLOCK_ON = 0b000100000,\n SCROLLLOCK_ON = 0b001000000,\n CAPSLOCK_ON = 0b010000000,\n ENHANCED_KEY = 0b100000000,\n}\n\n/**\n * Win32 input mode handler. Lookup tables are only initialized when this class\n * is instantiated, reducing bundle size for environments that don't use this mode.\n */\nexport class Win32InputMode {\n /**\n * Mapping from browser KeyboardEvent.code to Win32 virtual key codes.\n * Based on https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n */\n private readonly _codeToVk: { [code: string]: number } = {\n // Letters\n 'KeyA': 0x41, 'KeyB': 0x42, 'KeyC': 0x43, 'KeyD': 0x44, 'KeyE': 0x45,\n 'KeyF': 0x46, 'KeyG': 0x47, 'KeyH': 0x48, 'KeyI': 0x49, 'KeyJ': 0x4A,\n 'KeyK': 0x4B, 'KeyL': 0x4C, 'KeyM': 0x4D, 'KeyN': 0x4E, 'KeyO': 0x4F,\n 'KeyP': 0x50, 'KeyQ': 0x51, 'KeyR': 0x52, 'KeyS': 0x53, 'KeyT': 0x54,\n 'KeyU': 0x55, 'KeyV': 0x56, 'KeyW': 0x57, 'KeyX': 0x58, 'KeyY': 0x59,\n 'KeyZ': 0x5A,\n\n // Digits\n 'Digit0': 0x30, 'Digit1': 0x31, 'Digit2': 0x32, 'Digit3': 0x33, 'Digit4': 0x34,\n 'Digit5': 0x35, 'Digit6': 0x36, 'Digit7': 0x37, 'Digit8': 0x38, 'Digit9': 0x39,\n\n // Function keys\n 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75,\n 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B,\n 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81,\n 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87,\n\n // Numpad\n 'Numpad0': 0x60, 'Numpad1': 0x61, 'Numpad2': 0x62, 'Numpad3': 0x63, 'Numpad4': 0x64,\n 'Numpad5': 0x65, 'Numpad6': 0x66, 'Numpad7': 0x67, 'Numpad8': 0x68, 'Numpad9': 0x69,\n 'NumpadMultiply': 0x6A, 'NumpadAdd': 0x6B, 'NumpadSeparator': 0x6C,\n 'NumpadSubtract': 0x6D, 'NumpadDecimal': 0x6E, 'NumpadDivide': 0x6F,\n 'NumpadEnter': 0x0D, // Same as Enter but with ENHANCED_KEY flag\n 'NumLock': 0x90,\n\n // Navigation\n 'ArrowUp': 0x26, 'ArrowDown': 0x28, 'ArrowLeft': 0x25, 'ArrowRight': 0x27,\n 'Home': 0x24, 'End': 0x23, 'PageUp': 0x21, 'PageDown': 0x22,\n 'Insert': 0x2D, 'Delete': 0x2E,\n\n // Modifiers\n 'ShiftLeft': 0x10, 'ShiftRight': 0x10,\n 'ControlLeft': 0x11, 'ControlRight': 0x11,\n 'AltLeft': 0x12, 'AltRight': 0x12,\n 'MetaLeft': 0x5B, 'MetaRight': 0x5C,\n 'CapsLock': 0x14, 'ScrollLock': 0x91,\n\n // Special keys\n 'Escape': 0x1B, 'Enter': 0x0D, 'Tab': 0x09, 'Space': 0x20,\n 'Backspace': 0x08, 'Pause': 0x13, 'ContextMenu': 0x5D, 'PrintScreen': 0x2C,\n\n // OEM keys (US keyboard layout)\n 'Semicolon': 0xBA, // ;:\n 'Equal': 0xBB, // =+\n 'Comma': 0xBC, // ,<\n 'Minus': 0xBD, // -_\n 'Period': 0xBE, // .>\n 'Slash': 0xBF, // /?\n 'Backquote': 0xC0, // `~\n 'BracketLeft': 0xDB, // [{\n 'Backslash': 0xDC, // \\|\n 'BracketRight': 0xDD, // ]}\n 'Quote': 0xDE, // '\"\n 'IntlBackslash': 0xE2 // Non-US backslash\n };\n\n /**\n * Mapping from browser KeyboardEvent.code to approximate Win32 scan codes.\n * Note: Scan codes can vary by keyboard layout. These are approximations\n * based on standard US keyboard layout.\n */\n private readonly _codeToScancode: { [code: string]: number } = {\n // Letters (row by row)\n 'KeyQ': 0x10, 'KeyW': 0x11, 'KeyE': 0x12, 'KeyR': 0x13, 'KeyT': 0x14,\n 'KeyY': 0x15, 'KeyU': 0x16, 'KeyI': 0x17, 'KeyO': 0x18, 'KeyP': 0x19,\n 'KeyA': 0x1E, 'KeyS': 0x1F, 'KeyD': 0x20, 'KeyF': 0x21, 'KeyG': 0x22,\n 'KeyH': 0x23, 'KeyJ': 0x24, 'KeyK': 0x25, 'KeyL': 0x26,\n 'KeyZ': 0x2C, 'KeyX': 0x2D, 'KeyC': 0x2E, 'KeyV': 0x2F, 'KeyB': 0x30,\n 'KeyN': 0x31, 'KeyM': 0x32,\n\n // Digits\n 'Digit1': 0x02, 'Digit2': 0x03, 'Digit3': 0x04, 'Digit4': 0x05, 'Digit5': 0x06,\n 'Digit6': 0x07, 'Digit7': 0x08, 'Digit8': 0x09, 'Digit9': 0x0A, 'Digit0': 0x0B,\n\n // Function keys\n 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D, 'F4': 0x3E, 'F5': 0x3F, 'F6': 0x40,\n 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 'F10': 0x44, 'F11': 0x57, 'F12': 0x58,\n\n // Numpad\n 'Numpad0': 0x52, 'Numpad1': 0x4F, 'Numpad2': 0x50, 'Numpad3': 0x51, 'Numpad4': 0x4B,\n 'Numpad5': 0x4C, 'Numpad6': 0x4D, 'Numpad7': 0x47, 'Numpad8': 0x48, 'Numpad9': 0x49,\n 'NumpadMultiply': 0x37, 'NumpadAdd': 0x4E, 'NumpadSubtract': 0x4A,\n 'NumpadDecimal': 0x53, 'NumpadDivide': 0x35, 'NumpadEnter': 0x1C,\n 'NumLock': 0x45,\n\n // Navigation (extended keys)\n 'ArrowUp': 0x48, 'ArrowDown': 0x50, 'ArrowLeft': 0x4B, 'ArrowRight': 0x4D,\n 'Home': 0x47, 'End': 0x4F, 'PageUp': 0x49, 'PageDown': 0x51,\n 'Insert': 0x52, 'Delete': 0x53,\n\n // Modifiers\n 'ShiftLeft': 0x2A, 'ShiftRight': 0x36,\n 'ControlLeft': 0x1D, 'ControlRight': 0x1D,\n 'AltLeft': 0x38, 'AltRight': 0x38,\n 'CapsLock': 0x3A, 'ScrollLock': 0x46,\n\n // Special keys\n 'Escape': 0x01, 'Enter': 0x1C, 'Tab': 0x0F, 'Space': 0x39,\n 'Backspace': 0x0E, 'Pause': 0x45,\n\n // OEM keys\n 'Semicolon': 0x27, 'Equal': 0x0D, 'Comma': 0x33, 'Minus': 0x0C,\n 'Period': 0x34, 'Slash': 0x35, 'Backquote': 0x29,\n 'BracketLeft': 0x1A, 'Backslash': 0x2B, 'BracketRight': 0x1B, 'Quote': 0x28\n };\n\n /**\n * Codes that represent enhanced keys (extended keyboard keys).\n */\n private readonly _enhancedKeyCodes = new Set([\n 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight',\n 'Home', 'End', 'PageUp', 'PageDown', 'Insert', 'Delete',\n 'NumpadEnter', 'NumpadDivide',\n 'ControlRight', 'AltRight',\n 'PrintScreen', 'Pause', 'ContextMenu',\n 'MetaLeft', 'MetaRight'\n ]);\n\n /**\n * Mapping of special keys (ev.key values) to their Unicode control character codes.\n * These keys have multi-character ev.key strings but produce control characters.\n * @see https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n */\n private readonly _keyToControlChar: { [key: string]: number } = {\n 'Enter': 0x0D, // Carriage return\n 'Backspace': 0x08, // Backspace\n 'Tab': 0x09, // Horizontal tab\n 'Escape': 0x1B // Escape\n };\n\n /**\n * Get the Win32 virtual key code for a keyboard event.\n */\n private _getVirtualKeyCode(ev: IKeyboardEvent): number {\n const vk = this._codeToVk[ev.code];\n if (vk !== undefined) {\n return vk;\n }\n // Fall back to keyCode for unmapped keys\n return ev.keyCode || 0;\n }\n\n /**\n * Get the Win32 scan code for a keyboard event.\n * Returns 0 if unknown (scan codes vary by hardware).\n */\n private _getScanCode(ev: IKeyboardEvent): number {\n return this._codeToScancode[ev.code] || 0;\n }\n\n /**\n * Get the unicode character for a keyboard event.\n * Returns 0 for non-character keys.\n */\n private _getUnicodeChar(ev: IKeyboardEvent): number {\n // Handle special keys that produce control characters\n // Ctrl modifies some of these: Ctrl+Enter=LF, Ctrl+Backspace=DEL\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n if (ev.key === 'Enter') {\n return 0x0A; // Line feed (Ctrl+Enter)\n }\n if (ev.key === 'Backspace') {\n return 0x7F; // DEL (Ctrl+Backspace)\n }\n }\n\n // Check for special keys that always produce control characters\n const controlChar = this._keyToControlChar[ev.key];\n if (controlChar !== undefined) {\n return controlChar;\n }\n\n // Only single-character keys produce unicode output\n if (ev.key.length === 1) {\n const codePoint = ev.key.codePointAt(0) || 0;\n\n // Handle Ctrl+letter combinations - these produce control characters (0x01-0x1A)\n if (ev.ctrlKey && !ev.altKey && !ev.metaKey) {\n // Convert A-Z or a-z to control character (Ctrl+A = 0x01, Ctrl+C = 0x03, etc.)\n if (codePoint >= 0x41 && codePoint <= 0x5A) { // A-Z\n return codePoint - 0x40;\n }\n if (codePoint >= 0x61 && codePoint <= 0x7A) { // a-z\n return codePoint - 0x60;\n }\n }\n\n return codePoint;\n }\n return 0;\n }\n\n /**\n * Get the Win32 control key state flags.\n */\n private _getControlKeyState(ev: IKeyboardEvent): number {\n let state = 0;\n\n if (ev.shiftKey) {\n state |= Win32ControlKeyState.SHIFT_PRESSED;\n }\n\n // Note: We can't distinguish left/right for ctrl/alt in standard browser events,\n // so we use the generic pressed flags. The right-side flags are used when\n // we can detect them (e.g., via code property).\n if (ev.ctrlKey) {\n if (ev.code === 'ControlRight') {\n state |= Win32ControlKeyState.RIGHT_CTRL_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_CTRL_PRESSED;\n }\n }\n\n if (ev.altKey) {\n if (ev.code === 'AltRight') {\n state |= Win32ControlKeyState.RIGHT_ALT_PRESSED;\n } else {\n state |= Win32ControlKeyState.LEFT_ALT_PRESSED;\n }\n }\n\n // Check for enhanced key\n if (this._enhancedKeyCodes.has(ev.code)) {\n state |= Win32ControlKeyState.ENHANCED_KEY;\n }\n\n return state;\n }\n\n /**\n * Evaluate a keyboard event using Win32 input mode.\n *\n * @param ev The keyboard event.\n * @param isKeyDown Whether this is a keydown (true) or keyup (false) event.\n * @returns The keyboard result with the encoded key sequence.\n */\n public evaluateKeyboardEvent(ev: IKeyboardEvent, isKeyDown: boolean): IKeyboardResult {\n const vk = this._getVirtualKeyCode(ev);\n const sc = this._getScanCode(ev);\n const uc = this._getUnicodeChar(ev);\n const kd = isKeyDown ? 1 : 0;\n const cs = this._getControlKeyState(ev);\n const rc = 1; // Repeat count, always 1 for now\n\n // Format: CSI Vk ; Sc ; Uc ; Kd ; Cs ; Rc _\n return {\n type: KeyboardResultType.SEND_KEY,\n cancel: true,\n key: `${C0.ESC}[${vk};${sc};${uc};${kd};${cs};${rc}_`\n };\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IKeyboardService } from './Services';\nimport { evaluateKeyboardEvent } from '../../common/input/Keyboard';\nimport { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';\nimport { Win32InputMode } from '../../common/input/Win32InputMode';\nimport { isMac } from '../../common/Platform';\nimport { ICoreService, IOptionsService } from '../../common/services/Services';\nimport { IKeyboardResult } from '../../common/Types';\n\nexport class KeyboardService implements IKeyboardService {\n public serviceBrand: undefined;\n\n private _win32InputMode: Win32InputMode | undefined;\n private _kittyKeyboard: KittyKeyboard | undefined;\n\n constructor(\n @ICoreService private readonly _coreService: ICoreService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n }\n\n private _getWin32InputMode(): Win32InputMode {\n this._win32InputMode ??= new Win32InputMode();\n return this._win32InputMode;\n }\n\n private _getKittyKeyboard(): KittyKeyboard {\n this._kittyKeyboard ??= new KittyKeyboard();\n return this._kittyKeyboard;\n }\n\n public evaluateKeyDown(event: KeyboardEvent): IKeyboardResult {\n // Win32 input mode takes priority (most raw)\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, true);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return this.useKitty\n ? this._getKittyKeyboard().evaluate(event, kittyFlags, event.repeat ? KittyKeyboardEventType.REPEAT : KittyKeyboardEventType.PRESS, isMac && this._optionsService.rawOptions.macOptionIsMeta)\n : evaluateKeyboardEvent(event, this._coreService.decPrivateModes.applicationCursorKeys, isMac, this._optionsService.rawOptions.macOptionIsMeta);\n }\n\n public evaluateKeyUp(event: KeyboardEvent): IKeyboardResult | undefined {\n // Win32 input mode sends key up events\n if (this.useWin32InputMode) {\n return this._getWin32InputMode().evaluateKeyboardEvent(event, false);\n }\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n if (this.useKitty && (kittyFlags & KittyKeyboardFlags.REPORT_EVENT_TYPES)) {\n return this._getKittyKeyboard().evaluate(event, kittyFlags, KittyKeyboardEventType.RELEASE, isMac && this._optionsService.rawOptions.macOptionIsMeta);\n }\n return undefined;\n }\n\n public get useKitty(): boolean {\n const kittyFlags = this._coreService.kittyKeyboard.flags;\n return !!(this._optionsService.rawOptions.vtExtensions?.kittyKeyboard && KittyKeyboard.shouldUseProtocol(kittyFlags));\n }\n\n public get useWin32InputMode(): boolean {\n return !!(this._optionsService.rawOptions.vtExtensions?.win32InputMode && this._coreService.decPrivateModes.win32InputMode);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n *\n * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).\n */\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IInstantiationService } from './Services';\nimport { IServiceIdentifier, getServiceDependencies } from './ServiceRegistry';\n\nexport class ServiceCollection {\n\n private _entries = new Map, any>();\n\n constructor(...entries: [IServiceIdentifier, any][]) {\n for (const [id, service] of entries) {\n this.set(id, service);\n }\n }\n\n public set(id: IServiceIdentifier, instance: T): T {\n const result = this._entries.get(id);\n this._entries.set(id, instance);\n return result;\n }\n\n public forEach(callback: (id: IServiceIdentifier, instance: any) => any): void {\n for (const [key, value] of this._entries.entries()) {\n callback(key, value);\n }\n }\n\n public has(id: IServiceIdentifier): boolean {\n return this._entries.has(id);\n }\n\n public get(id: IServiceIdentifier): T | undefined {\n return this._entries.get(id);\n }\n}\n\nexport class InstantiationService implements IInstantiationService {\n public serviceBrand: undefined;\n\n private readonly _services: ServiceCollection = new ServiceCollection();\n\n constructor() {\n this._services.set(IInstantiationService, this);\n }\n\n public setService(id: IServiceIdentifier, instance: T): void {\n this._services.set(id, instance);\n }\n\n public getService(id: IServiceIdentifier): T | undefined {\n return this._services.get(id);\n }\n\n public createInstance(ctor: any, ...args: any[]): T {\n const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n\n const serviceArgs: any[] = [];\n for (const dependency of serviceDependencies) {\n const service = this._services.get(dependency.id);\n if (!service) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);\n }\n serviceArgs.push(service);\n }\n\n const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n }\n\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { ILogService, IOptionsService, LogLevelEnum } from './Services';\n\ntype LogType = (message?: any, ...optionalParams: any[]) => void;\n\ninterface IConsole {\n log: LogType;\n error: LogType;\n info: LogType;\n trace: LogType;\n warn: LogType;\n}\n\n// console is available on both node.js and browser contexts but the common\n// module doesn't depend on them so we need to explicitly declare it.\ndeclare const console: IConsole;\n\nconst optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {\n trace: LogLevelEnum.TRACE,\n debug: LogLevelEnum.DEBUG,\n info: LogLevelEnum.INFO,\n warn: LogLevelEnum.WARN,\n error: LogLevelEnum.ERROR,\n off: LogLevelEnum.OFF\n};\n\nconst LOG_PREFIX = 'xterm.js: ';\n\nexport class LogService extends Disposable implements ILogService {\n public serviceBrand: any;\n\n private _logLevel: LogLevelEnum = LogLevelEnum.OFF;\n public get logLevel(): LogLevelEnum { return this._logLevel; }\n\n constructor(\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this._updateLogLevel();\n this._register(this._optionsService.onSpecificOptionChange('logLevel', () => this._updateLogLevel()));\n }\n\n private _updateLogLevel(): void {\n this._logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];\n }\n\n private _evalLazyOptionalParams(optionalParams: any[]): void {\n for (let i = 0; i < optionalParams.length; i++) {\n if (typeof optionalParams[i] === 'function') {\n optionalParams[i] = optionalParams[i]();\n }\n }\n }\n\n private _log(type: LogType, message: string, optionalParams: any[]): void {\n this._evalLazyOptionalParams(optionalParams);\n type.call(console, (this._optionsService.options.logger ? '' : LOG_PREFIX) + message, ...optionalParams);\n }\n\n public trace(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.TRACE) {\n this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public debug(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.DEBUG) {\n this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger) ?? console.log, message, optionalParams);\n }\n }\n\n public info(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.INFO) {\n this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger) ?? console.info, message, optionalParams);\n }\n }\n\n public warn(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.WARN) {\n this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger) ?? console.warn, message, optionalParams);\n }\n }\n\n public error(message: string, ...optionalParams: any[]): void {\n if (this._logLevel <= LogLevelEnum.ERROR) {\n this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger) ?? console.error, message, optionalParams);\n }\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from './Lifecycle';\nimport { Emitter, type IEvent } from './Event';\n\nexport interface IInsertEvent {\n index: number;\n amount: number;\n}\n\nexport interface IDeleteEvent {\n index: number;\n amount: number;\n}\n\nexport interface ICircularList {\n length: number;\n maxLength: number;\n isFull: boolean;\n\n onDeleteEmitter: Emitter;\n onDelete: IEvent;\n onInsertEmitter: Emitter;\n onInsert: IEvent;\n onTrimEmitter: Emitter;\n onTrim: IEvent;\n\n get(index: number): T | undefined;\n set(index: number, value: T): void;\n push(value: T): void;\n recycle(): T;\n pop(): T | undefined;\n splice(start: number, deleteCount: number, ...items: T[]): void;\n trimStart(count: number): void;\n shiftElements(start: number, count: number, offset: number): void;\n}\n\n/**\n * Represents a circular list; a list with a maximum size that wraps around when push is called,\n * overriding values at the start of the list.\n */\nexport class CircularList extends Disposable implements ICircularList {\n protected _array: (T | undefined)[];\n private _startIndex: number;\n private _length: number;\n\n public readonly onDeleteEmitter = this._register(new Emitter());\n public readonly onDelete = this.onDeleteEmitter.event;\n public readonly onInsertEmitter = this._register(new Emitter());\n public readonly onInsert = this.onInsertEmitter.event;\n public readonly onTrimEmitter = this._register(new Emitter());\n public readonly onTrim = this.onTrimEmitter.event;\n\n constructor(\n private _maxLength: number\n ) {\n super();\n this._array = new Array(this._maxLength);\n this._startIndex = 0;\n this._length = 0;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(newMaxLength: number) {\n // There was no change in maxLength, return early.\n if (this._maxLength === newMaxLength) {\n return;\n }\n\n // Reconstruct array, starting at index 0. Only transfer values from the\n // indexes 0 to length.\n const newArray = new Array(newMaxLength);\n for (let i = 0; i < Math.min(newMaxLength, this.length); i++) {\n newArray[i] = this._array[this._getCyclicIndex(i)];\n }\n this._array = newArray;\n this._maxLength = newMaxLength;\n this._startIndex = 0;\n }\n\n public get length(): number {\n return this._length;\n }\n\n public set length(newLength: number) {\n if (newLength > this._length) {\n for (let i = this._length; i < newLength; i++) {\n this._array[i] = undefined;\n }\n }\n this._length = newLength;\n }\n\n /**\n * Gets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index of the value to get.\n * @returns The value corresponding to the index.\n */\n public get(index: number): T | undefined {\n return this._array[this._getCyclicIndex(index)];\n }\n\n /**\n * Sets the value at an index.\n *\n * Note that for performance reasons there is no bounds checking here, the index reference is\n * circular so this should always return a value and never throw.\n * @param index The index to set.\n * @param value The value to set.\n */\n public set(index: number, value: T | undefined): void {\n this._array[this._getCyclicIndex(index)] = value;\n }\n\n /**\n * Pushes a new value onto the list, wrapping around to the start of the array, overriding index 0\n * if the maximum length is reached.\n * @param value The value to push onto the list.\n */\n public push(value: T): void {\n this._array[this._getCyclicIndex(this._length)] = value;\n if (this._length === this._maxLength) {\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n } else {\n this._length++;\n }\n }\n\n /**\n * Advance ringbuffer index and return current element for recycling.\n * Note: The buffer must be full for this method to work.\n * @throws When the buffer is not full.\n */\n public recycle(): T {\n if (this._length !== this._maxLength) {\n throw new Error('Can only recycle when the buffer is full');\n }\n this._startIndex = ++this._startIndex % this._maxLength;\n this.onTrimEmitter.fire(1);\n return this._array[this._getCyclicIndex(this._length - 1)]!;\n }\n\n /**\n * Ringbuffer is at max length.\n */\n public get isFull(): boolean {\n return this._length === this._maxLength;\n }\n\n /**\n * Removes and returns the last value on the list.\n * @returns The popped value.\n */\n public pop(): T | undefined {\n return this._array[this._getCyclicIndex(this._length-- - 1)];\n }\n\n /**\n * Deletes and/or inserts items at a particular index (in that order). Unlike\n * Array.prototype.splice, this operation does not return the deleted items as a new array in\n * order to save creating a new array. Note that this operation may shift all values in the list\n * in the worst case.\n * @param start The index to delete and/or insert.\n * @param deleteCount The number of elements to delete.\n * @param items The items to insert.\n */\n public splice(start: number, deleteCount: number, ...items: T[]): void {\n // Delete items\n if (deleteCount) {\n for (let i = start; i < this._length - deleteCount; i++) {\n this._array[this._getCyclicIndex(i)] = this._array[this._getCyclicIndex(i + deleteCount)];\n }\n this._length -= deleteCount;\n this.onDeleteEmitter.fire({ index: start, amount: deleteCount });\n }\n\n // Add items\n for (let i = this._length - 1; i >= start; i--) {\n this._array[this._getCyclicIndex(i + items.length)] = this._array[this._getCyclicIndex(i)];\n }\n for (let i = 0; i < items.length; i++) {\n this._array[this._getCyclicIndex(start + i)] = items[i];\n }\n if (items.length) {\n this.onInsertEmitter.fire({ index: start, amount: items.length });\n }\n\n // Adjust length as needed\n if (this._length + items.length > this._maxLength) {\n const countToTrim = (this._length + items.length) - this._maxLength;\n this._startIndex += countToTrim;\n this._length = this._maxLength;\n this.onTrimEmitter.fire(countToTrim);\n } else {\n this._length += items.length;\n }\n }\n\n /**\n * Trims a number of items from the start of the list.\n * @param count The number of items to remove.\n */\n public trimStart(count: number): void {\n if (count > this._length) {\n count = this._length;\n }\n this._startIndex += count;\n this._length -= count;\n this.onTrimEmitter.fire(count);\n }\n\n public shiftElements(start: number, count: number, offset: number): void {\n if (count <= 0) {\n return;\n }\n if (start < 0 || start >= this._length) {\n throw new Error('start argument out of range');\n }\n if (start + offset < 0) {\n throw new Error('Cannot shift elements in list beyond index 0');\n }\n\n if (offset > 0) {\n for (let i = count - 1; i >= 0; i--) {\n this.set(start + i + offset, this.get(start + i));\n }\n const expandListBy = (start + count + offset) - this._length;\n if (expandListBy > 0) {\n this._length += expandListBy;\n while (this._length > this._maxLength) {\n this._length--;\n this._startIndex++;\n this.onTrimEmitter.fire(1);\n }\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.set(start + i + offset, this.get(start + i));\n }\n }\n }\n\n /**\n * Gets the cyclic index for the specified regular index. The cyclic index can then be used on the\n * backing array to get the element associated with the regular index.\n * @param index The regular index.\n * @returns The cyclic index.\n */\n private _getCyclicIndex(index: number): number {\n return (this._startIndex + index) % this._maxLength;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from './Types';\nimport { AttributeData } from './AttributeData';\nimport { CellData } from './CellData';\nimport { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from './Constants';\nimport { stringFromCodePoint } from '../input/TextDecoder';\n\n// Buffer memory layout:\n//\n// [0]: content `uint32_t` - wcwidth(2) comb(1) codepoint(21)\n// [1]: fg `uint32_t` - flags(8) r(8) g(8) b(8)\n// [2]: bg `uint32_t` - flags(8) r(8) g(8) b(8)\n\nconst enum Constants {\n /** The number of 32 bit array indices taken by one cell. */\n CELL_INDICIES = 3,\n /** Factor when to cleanup underlying array buffer after shrinking. */\n CLEANUP_THRESHOLD = 2\n}\n\n/**\n * Cell member indices.\n *\n * Direct access:\n * `content = data[column * Constants.CELL_INDICIES + Cell.CONTENT];`\n * `fg = data[column * Constants.CELL_INDICIES + Cell.FG];`\n * `bg = data[column * Constants.CELL_INDICIES + Cell.BG];`\n */\nconst enum Cell {\n CONTENT = 0,\n FG = 1, // currently simply holds all known attrs\n BG = 2 // currently unused\n}\n\n\ninterface IExtendedAttrsExt extends IExtendedAttrs {\n _ext: number;\n _urlId: number;\n}\n\n\nexport const DEFAULT_ATTR_DATA = Object.freeze(new AttributeData());\n\n// Work variables to avoid garbage collection\nlet $startIndex = 0;\nconst $workCell = new CellData();\nconst $extended = DEFAULT_ATTR_DATA.extended.clone() as IExtendedAttrsExt;\n\n\n/**\n * Typed array based bufferline implementation.\n *\n * There are 2 ways to insert data into the cell buffer:\n * - `setCellFromCodepoint` + `addCodepointToCell`\n * Use these for data that is already UTF32.\n * Used during normal input in `InputHandler` for faster buffer access.\n * - `setCell`\n * This method takes a CellData object and stores the data in the buffer.\n * Use `CellData.fromCharData` to create the CellData object (e.g. from JS string).\n *\n * To retrieve data from the buffer use either one of the primitive methods\n * (if only one particular value is needed) or `loadCell`. For `loadCell` in a loop\n * memory allocs / GC pressure can be greatly reduced by reusing the CellData object.\n */\nexport class BufferLine implements IBufferLine {\n protected _data: Uint32Array;\n /** Sparse cache; only read when `IS_COMBINED_MASK` is set in `_data`. */\n protected _combined: {[index: number]: string} = {};\n /** Sparse cache; only read when `HAS_EXTENDED` is set in `_data`. */\n protected _extendedAttrs: {[index: number]: IExtendedAttrs | undefined} = {};\n public length: number;\n\n /** line text cache */\n protected _cacheValid = false;\n protected _cache: string = '';\n protected _cacheTrimmed = false;\n\n constructor(\n cols: number,\n fillCellData?: ICellData,\n public isWrapped: boolean = false\n ) {\n this._data = new Uint32Array(cols * Constants.CELL_INDICIES);\n const cell = fillCellData ?? CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n for (let i = 0; i < cols; ++i) {\n this.setCell(i, cell);\n }\n this.length = cols;\n }\n\n /**\n * Get cell data CharData.\n * @deprecated\n */\n public get(index: number): CharData {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n return [\n this._data[index * Constants.CELL_INDICIES + Cell.FG],\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index]\n : (cp) ? stringFromCodePoint(cp) : '',\n content >> Content.WIDTH_SHIFT,\n (content & Content.IS_COMBINED_MASK)\n ? this._combined[index].charCodeAt(this._combined[index].length - 1)\n : cp\n ];\n }\n\n /**\n * Set cell data from CharData.\n * @deprecated\n */\n public set(index: number, value: CharData): void {\n this._cacheValid = false;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = value[CHAR_DATA_ATTR_INDEX];\n if (value[CHAR_DATA_CHAR_INDEX].length > 1) {\n this._combined[index] = value[1];\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = index | Content.IS_COMBINED_MASK | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n } else {\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = value[CHAR_DATA_CHAR_INDEX].charCodeAt(0) | (value[CHAR_DATA_WIDTH_INDEX] << Content.WIDTH_SHIFT);\n }\n }\n\n /**\n * primitive getters\n * use these when only one value is needed, otherwise use `loadCell`\n */\n public getWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT;\n }\n\n /** Test whether content has width. */\n public hasWidth(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.WIDTH_MASK;\n }\n\n /** Get FG cell component. */\n public getFg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.FG];\n }\n\n /** Get BG cell component. */\n public getBg(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG];\n }\n\n /**\n * Test whether contains any chars.\n * Basically an empty has no content, but other cells might differ in FG/BG\n * from real empty cells.\n */\n public hasContent(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK;\n }\n\n /**\n * Get codepoint of the cell.\n * To be in line with `code` in CharData this either returns\n * a single UTF32 codepoint or the last codepoint of a combined string.\n */\n public getCodePoint(index: number): number {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index].charCodeAt(this._combined[index].length - 1);\n }\n return content & Content.CODEPOINT_MASK;\n }\n\n /** Test whether the cell contains a combined string. */\n public isCombined(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] & Content.IS_COMBINED_MASK;\n }\n\n /** Returns the string content of the cell. */\n public getString(index: number): string {\n const content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n return this._combined[index];\n }\n if (content & Content.CODEPOINT_MASK) {\n return stringFromCodePoint(content & Content.CODEPOINT_MASK);\n }\n // return empty string for empty cells\n return '';\n }\n\n /** Get state of protected flag. */\n public isProtected(index: number): number {\n return this._data[index * Constants.CELL_INDICIES + Cell.BG] & BgFlags.PROTECTED;\n }\n\n /**\n * Load data at `index` into `cell`. This is used to access cells in a way that's more friendly\n * to GC as it significantly reduced the amount of new objects/references needed.\n */\n public loadCell(index: number, cell: ICellData): ICellData {\n $startIndex = index * Constants.CELL_INDICIES;\n cell.content = this._data[$startIndex + Cell.CONTENT];\n cell.fg = this._data[$startIndex + Cell.FG];\n cell.bg = this._data[$startIndex + Cell.BG];\n if (cell.content & Content.IS_COMBINED_MASK) {\n cell.combinedData = this._combined[index];\n } else {\n cell.combinedData = '';\n }\n cell.extended = this.getExtended(index);\n return cell;\n }\n\n public getExtended(index: number): IExtendedAttrs {\n $startIndex = index * Constants.CELL_INDICIES;\n if (this._data[$startIndex + Cell.BG] & BgFlags.HAS_EXTENDED) {\n return this._extendedAttrs[index]!;\n }\n // Do not mutate cell.extended in place: it may still reference this line's map entry from a\n // prior loadCell into a reused CellData (e.g. $workCell during insert/delete).\n // We use $extended as blueprint and reset the internals\n // mimicking the ctor to avoid a new allocation.\n $extended._ext = 0;\n $extended._urlId = 0;\n $extended.payload = undefined;\n return $extended;\n }\n\n /**\n * Set data at `index` to `cell`.\n */\n public setCell(index: number, cell: ICellData): void {\n this._cacheValid = false;\n if (cell.content & Content.IS_COMBINED_MASK) {\n this._combined[index] = cell.combinedData;\n }\n if (cell.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = cell.extended;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = cell.content;\n this._data[index * Constants.CELL_INDICIES + Cell.FG] = cell.fg;\n this._data[index * Constants.CELL_INDICIES + Cell.BG] = cell.bg;\n }\n\n /**\n * Set cell data from input handler.\n * Since the input handler see the incoming chars as UTF32 codepoints,\n * it gets an optimized access method.\n */\n public setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void {\n this._cacheValid = false;\n if (attrs.bg & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[index] = attrs.extended;\n }\n const $idx = index * Constants.CELL_INDICIES;\n this._data[$idx + Cell.CONTENT] = codePoint | (width << Content.WIDTH_SHIFT);\n this._data[$idx + Cell.FG] = attrs.fg;\n this._data[$idx + Cell.BG] = attrs.bg;\n }\n\n /**\n * Add a codepoint to a cell from input handler.\n * During input stage combining chars with a width of 0 follow and stack\n * onto a leading char. Since we already set the attrs\n * by the previous `setDataFromCodePoint` call, we can omit it here.\n */\n public addCodepointToCell(index: number, codePoint: number, width: number): void {\n this._cacheValid = false;\n let content = this._data[index * Constants.CELL_INDICIES + Cell.CONTENT];\n if (content & Content.IS_COMBINED_MASK) {\n // we already have a combined string, simply add\n this._combined[index] += stringFromCodePoint(codePoint);\n } else {\n if (content & Content.CODEPOINT_MASK) {\n // normal case for combining chars:\n // - move current leading char + new one into combined string\n // - set combined flag\n this._combined[index] = stringFromCodePoint(content & Content.CODEPOINT_MASK) + stringFromCodePoint(codePoint);\n content &= ~Content.CODEPOINT_MASK; // set codepoint in buffer to 0\n content |= Content.IS_COMBINED_MASK;\n } else {\n // should not happen - we actually have no data in the cell yet\n // simply set the data in the cell buffer with a width of 1\n content = codePoint | (1 << Content.WIDTH_SHIFT);\n }\n }\n if (width) {\n content &= ~Content.WIDTH_MASK;\n content |= width << Content.WIDTH_SHIFT;\n }\n this._data[index * Constants.CELL_INDICIES + Cell.CONTENT] = content;\n }\n\n public insertCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n\n // handle fullwidth at pos: reset cell one to the left if pos is second cell of a wide char\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n\n if (n < this.length - pos) {\n for (let i = this.length - pos - n - 1; i >= 0; --i) {\n this.setCell(pos + n + i, this.loadCell(pos + i, $workCell));\n }\n for (let i = 0; i < n; ++i) {\n this.setCell(pos + i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at line end: reset last cell if it is first cell of a wide char\n if (this.getWidth(this.length - 1) === 2) {\n this.setCellFromCodepoint(this.length - 1, 0, 1, fillCellData);\n }\n }\n\n public deleteCells(pos: number, n: number, fillCellData: ICellData): void {\n this._cacheValid = false;\n pos %= this.length;\n if (n < this.length - pos) {\n for (let i = 0; i < this.length - pos - n; ++i) {\n this.setCell(pos + i, this.loadCell(pos + n + i, $workCell));\n }\n for (let i = this.length - n; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n for (let i = pos; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n // handle fullwidth at pos:\n // - reset pos-1 if wide char\n // - reset pos if width==0 (previous second cell of a wide char)\n if (pos && this.getWidth(pos - 1) === 2) {\n this.setCellFromCodepoint(pos - 1, 0, 1, fillCellData);\n }\n if (this.getWidth(pos) === 0 && !this.hasContent(pos)) {\n this.setCellFromCodepoint(pos, 0, 1, fillCellData);\n }\n }\n\n public replaceCells(start: number, end: number, fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n if (start && this.getWidth(start - 1) === 2 && !this.isProtected(start - 1)) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n if (end < this.length && this.getWidth(end - 1) === 2 && !this.isProtected(end)) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n while (start < end && start < this.length) {\n if (!this.isProtected(start)) {\n this.setCell(start, fillCellData);\n }\n start++;\n }\n return;\n }\n\n // handle fullwidth at start: reset cell one to the left if start is second cell of a wide char\n if (start && this.getWidth(start - 1) === 2) {\n this.setCellFromCodepoint(start - 1, 0, 1, fillCellData);\n }\n // handle fullwidth at last cell + 1: reset to empty cell if it is second part of a wide char\n if (end < this.length && this.getWidth(end - 1) === 2) {\n this.setCellFromCodepoint(end, 0, 1, fillCellData);\n }\n\n while (start < end && start < this.length) {\n this.setCell(start++, fillCellData);\n }\n }\n\n /**\n * Resize BufferLine to `cols` filling excess cells with `fillCellData`.\n * The underlying array buffer will not change if there is still enough space\n * to hold the new buffer line data.\n * Returns a boolean indicating, whether a `cleanupMemory` call would free\n * excess memory (true after shrinking > Constants.CLEANUP_THRESHOLD).\n */\n public resize(cols: number, fillCellData: ICellData): boolean {\n this._cacheValid = false;\n if (cols === this.length) {\n return this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n const uint32Cells = cols * Constants.CELL_INDICIES;\n if (cols > this.length) {\n if (this._data.buffer.byteLength >= uint32Cells * 4) {\n // optimization: avoid alloc and data copy if buffer has enough room\n this._data = new Uint32Array(this._data.buffer, 0, uint32Cells);\n } else {\n // slow path: new alloc and full data copy\n const data = new Uint32Array(uint32Cells);\n data.set(this._data);\n this._data = data;\n }\n for (let i = this.length; i < cols; ++i) {\n this.setCell(i, fillCellData);\n }\n } else {\n // optimization: just shrink the view on existing buffer\n this._data = this._data.subarray(0, uint32Cells);\n // Remove any cut off combined data\n const keys = Object.keys(this._combined);\n for (let i = 0; i < keys.length; i++) {\n const key = parseInt(keys[i], 10);\n if (key >= cols) {\n delete this._combined[key];\n }\n }\n // remove any cut off extended attributes\n const extKeys = Object.keys(this._extendedAttrs);\n for (let i = 0; i < extKeys.length; i++) {\n const key = parseInt(extKeys[i], 10);\n if (key >= cols) {\n delete this._extendedAttrs[key];\n }\n }\n }\n this.length = cols;\n return uint32Cells * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength;\n }\n\n /**\n * Cleanup underlying array buffer.\n * A cleanup will be triggered if the array buffer exceeds the actual used\n * memory by a factor of Constants.CLEANUP_THRESHOLD.\n * Returns 0 or 1 indicating whether a cleanup happened.\n */\n public cleanupMemory(): number {\n if (this._data.length * 4 * Constants.CLEANUP_THRESHOLD < this._data.buffer.byteLength) {\n const data = new Uint32Array(this._data.length);\n data.set(this._data);\n this._data = data;\n return 1;\n }\n return 0;\n }\n\n /** fill a line with fillCharData */\n public fill(fillCellData: ICellData, respectProtect: boolean = false): void {\n this._cacheValid = false;\n // full branching on respectProtect==true, hopefully getting fast JIT for standard case\n if (respectProtect) {\n for (let i = 0; i < this.length; ++i) {\n if (!this.isProtected(i)) {\n this.setCell(i, fillCellData);\n }\n }\n return;\n }\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < this.length; ++i) {\n this.setCell(i, fillCellData);\n }\n }\n\n /** alter to a full copy of line */\n public copyFrom(line: BufferLine, blank?: boolean): void {\n if (this.length !== line.length) {\n this._data = new Uint32Array(line._data);\n } else {\n // use high speed copy if lengths are equal\n this._data.set(line._data);\n }\n this.length = line.length;\n if (blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n this._combined = {};\n this._extendedAttrs = {};\n } else {\n this._copySparseMapsFrom(line);\n }\n this._cache = '';\n this._cacheValid = false;\n this.isWrapped = line.isWrapped;\n }\n\n /** create a new clone */\n public clone(blank?: boolean): IBufferLine {\n const newLine = new BufferLine(0, undefined, false);\n newLine._data = new Uint32Array(this._data);\n newLine.length = this.length;\n if (!blank) {\n // a blank line may never hold combined or extended attrs,\n // thus we can skip handling them\n newLine._copySparseMapsFrom(this);\n }\n newLine.isWrapped = this.isWrapped;\n return newLine;\n }\n\n public getTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public getNoBgTrimmedLength(): number {\n for (let i = this.length - 1; i >= 0; --i) {\n if ((this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] & Content.HAS_CONTENT_MASK) || (this._data[i * Constants.CELL_INDICIES + Cell.BG] & Attributes.CM_MASK)) {\n return i + (this._data[i * Constants.CELL_INDICIES + Cell.CONTENT] >> Content.WIDTH_SHIFT);\n }\n }\n return 0;\n }\n\n public copyCellsFrom(src: BufferLine, srcCol: number, destCol: number, length: number, applyInReverse: boolean): void {\n this._cacheValid = false;\n const srcData = src._data;\n if (applyInReverse) {\n for (let cell = length - 1; cell >= 0; cell--) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n } else {\n for (let cell = 0; cell < length; cell++) {\n for (let i = 0; i < Constants.CELL_INDICIES; i++) {\n this._data[(destCol + cell) * Constants.CELL_INDICIES + i] = srcData[(srcCol + cell) * Constants.CELL_INDICIES + i];\n }\n this._copyCellMapsFrom(src, srcCol + cell, destCol + cell);\n }\n }\n }\n\n /**\n * Translates the buffer line to a string. Caching only applies to canonical full-line translation\n * requests (regardless of `trimRight` value).\n *\n * @param trimRight Whether to trim any empty cells on the right.\n * @param startCol The column to start the string (0-based inclusive).\n * @param endCol The column to end the string (0-based exclusive).\n * @param outColumns if specified, this array will be filled with column numbers such that\n * `returnedString[i]` is displayed at `outColumns[i]` column. `outColumns[returnedString.length]`\n * is where the character following `returnedString` will be displayed.\n *\n * When a single cell is translated to multiple UTF-16 code units (e.g. surrogate pair) in the\n * returned string, the corresponding entries in `outColumns` will have the same column number.\n */\n public translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string {\n const isCanonical = (startCol === undefined || startCol === 0) && endCol === undefined && outColumns === undefined;\n if (isCanonical && this._cacheValid) {\n if (trimRight) {\n return this._cacheTrimmed ? this._cache : this._cache.trimEnd();\n }\n if (!this._cacheTrimmed) {\n return this._cache;\n }\n }\n startCol = startCol ?? 0;\n endCol = endCol ?? this.length;\n if (trimRight) {\n endCol = Math.min(endCol, this.getTrimmedLength());\n }\n if (outColumns) {\n outColumns.length = 0;\n }\n const cellContents: string[] = [];\n while (startCol < endCol) {\n const content = this._data[startCol * Constants.CELL_INDICIES + Cell.CONTENT];\n const cp = content & Content.CODEPOINT_MASK;\n const chars = (content & Content.IS_COMBINED_MASK) ? this._combined[startCol] : (cp) ? stringFromCodePoint(cp) : WHITESPACE_CELL_CHAR;\n cellContents.push(chars);\n if (outColumns) {\n for (let i = 0; i < chars.length; ++i) {\n outColumns.push(startCol);\n }\n }\n startCol += (content >> Content.WIDTH_SHIFT) || 1; // always advance by at least 1\n }\n if (outColumns) {\n outColumns.push(startCol);\n }\n const result = cellContents.join('');\n if (isCanonical) {\n this._cache = result;\n this._cacheValid = true;\n this._cacheTrimmed = !!trimRight;\n }\n return result;\n }\n\n /** Copy sparse map entries for a single cell when `_data` flags require them. */\n private _copyCellMapsFrom(src: BufferLine, srcCol: number, destCol: number): void {\n const srcStart = srcCol * Constants.CELL_INDICIES;\n if (src._data[srcStart + Cell.CONTENT] & Content.IS_COMBINED_MASK) {\n this._combined[destCol] = src._combined[srcCol];\n }\n if (src._data[srcStart + Cell.BG] & BgFlags.HAS_EXTENDED) {\n this._extendedAttrs[destCol] = src._extendedAttrs[srcCol];\n }\n }\n\n /** Rebuild sparse maps from another line, keyed only by `_data` flags. */\n private _copySparseMapsFrom(line: BufferLine): void {\n this._combined = {};\n this._extendedAttrs = {};\n for (let i = 0; i < line.length; i++) {\n this._copyCellMapsFrom(line, i, i);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { BufferLine } from './BufferLine';\nimport { CircularList } from '../CircularList';\nimport { IBufferLine, ICellData } from './Types';\n\nexport interface INewLayoutResult {\n layout: number[];\n countRemoved: number;\n}\n\n/**\n * Evaluates and returns indexes to be removed after a reflow larger occurs. Lines will be removed\n * when a wrapped line unwraps.\n * @param lines The buffer lines.\n * @param oldCols The columns before resize\n * @param newCols The columns after resize.\n * @param bufferAbsoluteY The absolute y position of the cursor (baseY + cursorY).\n * @param nullCell The cell data to use when filling in empty cells.\n * @param reflowCursorLine Whether to reflow the line containing the cursor.\n */\nexport function reflowLargerGetLinesToRemove(lines: CircularList, oldCols: number, newCols: number, bufferAbsoluteY: number, nullCell: ICellData, reflowCursorLine: boolean): number[] {\n // Gather all BufferLines that need to be removed from the Buffer here so that they can be\n // batched up and only committed once\n const toRemove: number[] = [];\n\n for (let y = 0; y < lines.length - 1; y++) {\n // Check if this row is wrapped\n let i = y;\n let nextLine = lines.get(++i) as BufferLine;\n if (!nextLine.isWrapped) {\n continue;\n }\n\n // Check how many lines it's wrapped for\n const wrappedLines: BufferLine[] = [lines.get(y) as BufferLine];\n while (i < lines.length && nextLine.isWrapped) {\n wrappedLines.push(nextLine);\n nextLine = lines.get(++i) as BufferLine;\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n if (bufferAbsoluteY >= y && bufferAbsoluteY < i) {\n y += wrappedLines.length - 1;\n continue;\n }\n }\n\n // Copy buffer data to new locations\n let destLineIndex = 0;\n let destCol = getWrappedLineTrimmedLength(wrappedLines, destLineIndex, oldCols);\n let srcLineIndex = 1;\n let srcCol = 0;\n while (srcLineIndex < wrappedLines.length) {\n const srcTrimmedTineLength = getWrappedLineTrimmedLength(wrappedLines, srcLineIndex, oldCols);\n const srcRemainingCells = srcTrimmedTineLength - srcCol;\n const destRemainingCells = newCols - destCol;\n const cellsToCopy = Math.min(srcRemainingCells, destRemainingCells);\n\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol, destCol, cellsToCopy, false);\n\n destCol += cellsToCopy;\n if (destCol === newCols) {\n destLineIndex++;\n destCol = 0;\n }\n srcCol += cellsToCopy;\n if (srcCol === srcTrimmedTineLength) {\n srcLineIndex++;\n srcCol = 0;\n }\n\n // Make sure the last cell isn't wide, if it is copy it to the current dest\n if (destCol === 0 && destLineIndex !== 0) {\n if (wrappedLines[destLineIndex - 1].getWidth(newCols - 1) === 2) {\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[destLineIndex - 1], newCols - 1, destCol++, 1, false);\n // Null out the end of the last row\n wrappedLines[destLineIndex - 1].setCell(newCols - 1, nullCell);\n }\n }\n }\n\n // Clear out remaining cells or fragments could remain;\n wrappedLines[destLineIndex].replaceCells(destCol, newCols, nullCell);\n\n // Work backwards and remove any rows at the end that only contain null cells\n let countToRemove = 0;\n for (let i = wrappedLines.length - 1; i > 0; i--) {\n if (i > destLineIndex || wrappedLines[i].getTrimmedLength() === 0) {\n countToRemove++;\n } else {\n break;\n }\n }\n\n if (countToRemove > 0) {\n toRemove.push(y + wrappedLines.length - countToRemove); // index\n toRemove.push(countToRemove);\n }\n\n y += wrappedLines.length - 1;\n }\n return toRemove;\n}\n\n/**\n * Creates and return the new layout for lines given an array of indexes to be removed.\n * @param lines The buffer lines.\n * @param toRemove The indexes to remove.\n */\nexport function reflowLargerCreateNewLayout(lines: CircularList, toRemove: number[]): INewLayoutResult {\n const layout: number[] = [];\n // First iterate through the list and get the actual indexes to use for rows\n let nextToRemoveIndex = 0;\n let nextToRemoveStart = toRemove[nextToRemoveIndex];\n let countRemovedSoFar = 0;\n for (let i = 0; i < lines.length; i++) {\n if (nextToRemoveStart === i) {\n const countToRemove = toRemove[++nextToRemoveIndex];\n\n // Tell markers that there was a deletion\n lines.onDeleteEmitter.fire({\n index: i - countRemovedSoFar,\n amount: countToRemove\n });\n\n i += countToRemove - 1;\n countRemovedSoFar += countToRemove;\n nextToRemoveStart = toRemove[++nextToRemoveIndex];\n } else {\n layout.push(i);\n }\n }\n return {\n layout,\n countRemoved: countRemovedSoFar\n };\n}\n\n/**\n * Applies a new layout to the buffer. This essentially does the same as many splice calls but it's\n * done all at once in a single iteration through the list since splice is very expensive.\n * @param lines The buffer lines.\n * @param newLayout The new layout to apply.\n */\nexport function reflowLargerApplyNewLayout(lines: CircularList, newLayout: number[]): void {\n // Record original lines so they don't get overridden when we rearrange the list\n const newLayoutLines: BufferLine[] = [];\n for (let i = 0; i < newLayout.length; i++) {\n newLayoutLines.push(lines.get(newLayout[i]) as BufferLine);\n }\n\n // Rearrange the list\n for (let i = 0; i < newLayoutLines.length; i++) {\n lines.set(i, newLayoutLines[i]);\n }\n lines.length = newLayout.length;\n}\n\n/**\n * Gets the new line lengths for a given wrapped line. The purpose of this function it to pre-\n * compute the wrapping points since wide characters may need to be wrapped onto the following line.\n * This function will return an array of numbers of where each line wraps to, the resulting array\n * will only contain the values `newCols` (when the line does not end with a wide character) and\n * `newCols - 1` (when the line does end with a wide character), except for the last value which\n * will contain the remaining items to fill the line.\n *\n * Calling this with a `newCols` value of `1` will lock up.\n *\n * @param wrappedLines The wrapped lines to evaluate.\n * @param oldCols The columns before resize.\n * @param newCols The columns after resize.\n */\nexport function reflowSmallerGetNewLineLengths(wrappedLines: BufferLine[], oldCols: number, newCols: number): number[] {\n const newLineLengths: number[] = [];\n let cellsNeeded = 0;\n for (let i = 0; i < wrappedLines.length; i++) {\n cellsNeeded += getWrappedLineTrimmedLength(wrappedLines, i, oldCols);\n }\n\n // Use srcCol and srcLine to find the new wrapping point, use that to get the cellsAvailable and\n // linesNeeded\n let srcCol = 0;\n let srcLine = 0;\n let cellsAvailable = 0;\n while (cellsAvailable < cellsNeeded) {\n if (cellsNeeded - cellsAvailable < newCols) {\n // Add the final line and exit the loop\n newLineLengths.push(cellsNeeded - cellsAvailable);\n break;\n }\n srcCol += newCols;\n const oldTrimmedLength = getWrappedLineTrimmedLength(wrappedLines, srcLine, oldCols);\n if (srcCol > oldTrimmedLength) {\n srcCol -= oldTrimmedLength;\n srcLine++;\n }\n const endsWithWide = wrappedLines[srcLine].getWidth(srcCol - 1) === 2;\n if (endsWithWide) {\n srcCol--;\n }\n const lineLength = endsWithWide ? newCols - 1 : newCols;\n newLineLengths.push(lineLength);\n cellsAvailable += lineLength;\n }\n\n return newLineLengths;\n}\n\nexport function getWrappedLineTrimmedLength(lines: BufferLine[], i: number, cols: number): number {\n // If this is the last row in the wrapped line, get the actual trimmed length\n if (i === lines.length - 1) {\n return lines[i].getTrimmedLength();\n }\n // Detect whether the following line starts with a wide character and the end of the current line\n // is null, if so then we can be pretty sure the null character should be excluded from the line\n // length]\n const endsInNull = !(lines[i].hasContent(cols - 1)) && lines[i].getWidth(cols - 1) === 1;\n const followingLineStartsWithWide = lines[i + 1].getWidth(0) === 2;\n if (endsInNull && followingLineStartsWithWide) {\n return cols - 1;\n }\n return cols;\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { dispose, IDisposable } from '../Lifecycle';\nimport { IMarker } from './Types';\nimport { Emitter } from '../Event';\n\nexport class Marker implements IMarker {\n private static _nextId = 1;\n\n public isDisposed: boolean = false;\n private readonly _disposables: IDisposable[] = [];\n\n private readonly _id: number = Marker._nextId++;\n public get id(): number { return this._id; }\n\n private readonly _onDispose = this.register(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n constructor(\n public line: number\n ) {\n }\n\n public dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.line = -1;\n // Emit before super.dispose such that dispose listeners get a chance to react\n this._onDispose.fire();\n dispose(this._disposables);\n this._disposables.length = 0;\n }\n\n public register(disposable: T): T {\n this._disposables.push(disposable);\n return disposable;\n }\n}\n", "/**\n * Copyright (c) 2016 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharset } from '../Types';\n\n/**\n * The character sets supported by the terminal. These enable several languages\n * to be represented within the terminal with only 8-bit encoding. See ISO 2022\n * for a discussion on character sets. Only VT100 character sets are supported.\n */\nexport const CHARSETS: { [key: string]: ICharset | undefined } = {};\n\n/**\n * The default character set, US.\n */\nexport const DEFAULT_CHARSET: ICharset | undefined = CHARSETS['B'];\n\n/**\n * DEC Special Character and Line Drawing Set.\n * Reference: http://vt100.net/docs/vt102-ug/table5-13.html\n * A lot of curses apps use this if they see TERM=xterm.\n * testing: echo -e '\\e(0a\\e(B'\n * The xterm output sometimes seems to conflict with the\n * reference above. xterm seems in line with the reference\n * when running vttest however.\n * The table below now uses xterm's output from vttest.\n */\nCHARSETS['0'] = {\n '`': '\\u25c6', // '\u25C6'\n 'a': '\\u2592', // '\u2592'\n 'b': '\\u2409', // '\u2409' (HT)\n 'c': '\\u240c', // '\u240C' (FF)\n 'd': '\\u240d', // '\u240D' (CR)\n 'e': '\\u240a', // '\u240A' (LF)\n 'f': '\\u00b0', // '\u00B0'\n 'g': '\\u00b1', // '\u00B1'\n 'h': '\\u2424', // '\u2424' (NL)\n 'i': '\\u240b', // '\u240B' (VT)\n 'j': '\\u2518', // '\u2518'\n 'k': '\\u2510', // '\u2510'\n 'l': '\\u250c', // '\u250C'\n 'm': '\\u2514', // '\u2514'\n 'n': '\\u253c', // '\u253C'\n 'o': '\\u23ba', // '\u23BA'\n 'p': '\\u23bb', // '\u23BB'\n 'q': '\\u2500', // '\u2500'\n 'r': '\\u23bc', // '\u23BC'\n 's': '\\u23bd', // '\u23BD'\n 't': '\\u251c', // '\u251C'\n 'u': '\\u2524', // '\u2524'\n 'v': '\\u2534', // '\u2534'\n 'w': '\\u252c', // '\u252C'\n 'x': '\\u2502', // '\u2502'\n 'y': '\\u2264', // '\u2264'\n 'z': '\\u2265', // '\u2265'\n '{': '\\u03c0', // '\u03C0'\n '|': '\\u2260', // '\u2260'\n '}': '\\u00a3', // '\u00A3'\n '~': '\\u00b7' // '\u00B7'\n};\n\n/**\n * British character set\n * ESC (A\n * Reference: http://vt100.net/docs/vt220-rm/table2-5.html\n */\nCHARSETS['A'] = {\n '#': '\u00A3'\n};\n\n/**\n * United States character set\n * ESC (B\n */\nCHARSETS['B'] = undefined;\n\n/**\n * Dutch character set\n * ESC (4\n * Reference: http://vt100.net/docs/vt220-rm/table2-6.html\n */\nCHARSETS['4'] = {\n '#': '\u00A3',\n '@': '\u00BE',\n '[': 'ij',\n '\\\\': '\u00BD',\n ']': '|',\n '{': '\u00A8',\n '|': 'f',\n '}': '\u00BC',\n '~': '\u00B4'\n};\n\n/**\n * Finnish character set\n * ESC (C or ESC (5\n * Reference: http://vt100.net/docs/vt220-rm/table2-7.html\n */\nCHARSETS['C'] = CHARSETS['5'] = {\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * French character set\n * ESC (R\n * Reference: http://vt100.net/docs/vt220-rm/table2-8.html\n */\nCHARSETS['R'] = {\n '#': '\u00A3',\n '@': '\u00E0',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00A7',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00A8'\n};\n\n/**\n * French Canadian character set\n * ESC (Q\n * Reference: http://vt100.net/docs/vt220-rm/table2-9.html\n */\nCHARSETS['Q'] = {\n '@': '\u00E0',\n '[': '\u00E2',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n '`': '\u00F4',\n '{': '\u00E9',\n '|': '\u00F9',\n '}': '\u00E8',\n '~': '\u00FB'\n};\n\n/**\n * German character set\n * ESC (K\n * Reference: http://vt100.net/docs/vt220-rm/table2-10.html\n */\nCHARSETS['K'] = {\n '@': '\u00A7',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00DC',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00DF'\n};\n\n/**\n * Italian character set\n * ESC (Y\n * Reference: http://vt100.net/docs/vt220-rm/table2-11.html\n */\nCHARSETS['Y'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00B0',\n '\\\\': '\u00E7',\n ']': '\u00E9',\n '`': '\u00F9',\n '{': '\u00E0',\n '|': '\u00F2',\n '}': '\u00E8',\n '~': '\u00EC'\n};\n\n/**\n * Norwegian/Danish character set\n * ESC (E or ESC (6\n * Reference: http://vt100.net/docs/vt220-rm/table2-12.html\n */\nCHARSETS['E'] = CHARSETS['6'] = {\n '@': '\u00C4',\n '[': '\u00C6',\n '\\\\': '\u00D8',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E4',\n '{': '\u00E6',\n '|': '\u00F8',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Spanish character set\n * ESC (Z\n * Reference: http://vt100.net/docs/vt220-rm/table2-13.html\n */\nCHARSETS['Z'] = {\n '#': '\u00A3',\n '@': '\u00A7',\n '[': '\u00A1',\n '\\\\': '\u00D1',\n ']': '\u00BF',\n '{': '\u00B0',\n '|': '\u00F1',\n '}': '\u00E7'\n};\n\n/**\n * Swedish character set\n * ESC (H or ESC (7\n * Reference: http://vt100.net/docs/vt220-rm/table2-14.html\n */\nCHARSETS['H'] = CHARSETS['7'] = {\n '@': '\u00C9',\n '[': '\u00C4',\n '\\\\': '\u00D6',\n ']': '\u00C5',\n '^': '\u00DC',\n '`': '\u00E9',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00E5',\n '~': '\u00FC'\n};\n\n/**\n * Swiss character set\n * ESC (=\n * Reference: http://vt100.net/docs/vt220-rm/table2-15.html\n */\nCHARSETS['='] = {\n '#': '\u00F9',\n '@': '\u00E0',\n '[': '\u00E9',\n '\\\\': '\u00E7',\n ']': '\u00EA',\n '^': '\u00EE',\n\n '_': '\u00E8',\n '`': '\u00F4',\n '{': '\u00E4',\n '|': '\u00F6',\n '}': '\u00FC',\n '~': '\u00FB'\n};\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CircularList, IInsertEvent } from '../CircularList';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IdleTaskQueue } from '../TaskQueue';\nimport { ICharset } from '../Types';\nimport { IAttributeData, IBuffer, IBufferLine, ICellData } from './Types';\nimport { ExtendedAttrs } from './AttributeData';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './BufferLine';\nimport { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from './BufferReflow';\nimport { CellData } from './CellData';\nimport { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from './Constants';\nimport { Marker } from './Marker';\nimport { DEFAULT_CHARSET } from '../data/Charsets';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\n\nexport const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1\n\n/**\n * This class represents a terminal buffer (an internal state of the terminal), where the\n * following information is stored (in high-level):\n * - text content of this particular buffer\n * - cursor position\n * - scroll position\n */\nexport class Buffer extends Disposable implements IBuffer {\n public lines: CircularList;\n public ydisp: number = 0;\n public ybase: number = 0;\n public y: number = 0;\n public x: number = 0;\n public scrollBottom: number;\n public scrollTop: number;\n public tabs: { [column: number]: boolean | undefined } = {};\n public savedY: number = 0;\n public savedX: number = 0;\n public savedCurAttrData = DEFAULT_ATTR_DATA.clone();\n public savedCharset: ICharset | undefined = DEFAULT_CHARSET;\n public savedCharsets: (ICharset | undefined)[] = [];\n public savedGlevel: number = 0;\n public savedOriginMode: boolean = false;\n public savedWraparoundMode: boolean = true;\n public markers: Marker[] = [];\n private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);\n private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);\n private _cols: number;\n private _rows: number;\n private _isClearing: boolean = false;\n private _memoryCleanupQueue: InstanceType;\n private _memoryCleanupPosition = 0;\n\n constructor(\n private _hasScrollback: boolean,\n private _optionsService: IOptionsService,\n private _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this._cols = this._bufferService.cols;\n this._rows = this._bufferService.rows;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n this._memoryCleanupQueue = new IdleTaskQueue(this._logService);\n this._register(toDisposable(() => this._memoryCleanupQueue.clear()));\n this._register(toDisposable(() => this.clearAllMarkers()));\n }\n\n public getNullCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._nullCell.fg = attr.fg;\n this._nullCell.bg = attr.bg;\n this._nullCell.extended = attr.extended;\n } else {\n this._nullCell.fg = 0;\n this._nullCell.bg = 0;\n this._nullCell.extended = new ExtendedAttrs();\n }\n return this._nullCell;\n }\n\n public getWhitespaceCell(attr?: IAttributeData): ICellData {\n if (attr) {\n this._whitespaceCell.fg = attr.fg;\n this._whitespaceCell.bg = attr.bg;\n this._whitespaceCell.extended = attr.extended;\n } else {\n this._whitespaceCell.fg = 0;\n this._whitespaceCell.bg = 0;\n this._whitespaceCell.extended = new ExtendedAttrs();\n }\n return this._whitespaceCell;\n }\n\n public getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {\n return new BufferLine(this._bufferService.cols, this.getNullCell(attr), isWrapped);\n }\n\n public get hasScrollback(): boolean {\n return this._hasScrollback && this.lines.maxLength > this._rows;\n }\n\n public get isCursorInViewport(): boolean {\n const absoluteY = this.ybase + this.y;\n const relativeY = absoluteY - this.ydisp;\n return (relativeY >= 0 && relativeY < this._rows);\n }\n\n /**\n * Gets the correct buffer length based on the rows provided, the terminal's\n * scrollback and whether this buffer is flagged to have scrollback or not.\n * @param rows The terminal rows to use in the calculation.\n */\n private _getCorrectBufferLength(rows: number): number {\n if (!this._hasScrollback) {\n return rows;\n }\n\n const correctBufferLength = rows + this._optionsService.rawOptions.scrollback;\n\n return correctBufferLength > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : correctBufferLength;\n }\n\n /**\n * Fills the buffer's viewport with blank lines.\n */\n public fillViewportRows(fillAttr?: IAttributeData): void {\n if (this.lines.length === 0) {\n fillAttr ??= DEFAULT_ATTR_DATA;\n let i = this._rows;\n while (i--) {\n this.lines.push(this.getBlankLine(fillAttr));\n }\n }\n }\n\n /**\n * Clears the buffer to its initial state, discarding all previous data.\n */\n public clear(): void {\n this.ydisp = 0;\n this.ybase = 0;\n this.y = 0;\n this.x = 0;\n this.lines = new CircularList(this._getCorrectBufferLength(this._rows));\n this.scrollTop = 0;\n this.scrollBottom = this._rows - 1;\n this.setupTabStops();\n }\n\n /**\n * Resizes the buffer, adjusting its data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n // store reference to null cell with default attrs\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n\n // count bufferlines with overly big memory to be cleaned afterwards\n let dirtyMemoryLines = 0;\n\n // Increase max length if needed before adjustments to allow space to fill\n // as required.\n const newMaxLength = this._getCorrectBufferLength(newRows);\n if (newMaxLength > this.lines.maxLength) {\n this.lines.maxLength = newMaxLength;\n }\n\n // if (this._cols > newCols) {\n // console.log('increase!');\n // }\n\n // The following adjustments should only happen if the buffer has been\n // initialized/filled.\n if (this.lines.length > 0) {\n // Deal with columns increasing (reducing needs to happen after reflow)\n if (this._cols < newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n\n // Resize rows in both directions as needed\n let addToY = 0;\n if (this._rows < newRows) {\n for (let y = this._rows; y < newRows; y++) {\n if (this.lines.length < newRows + this.ybase) {\n if (this._optionsService.rawOptions.windowsPty.backend !== undefined || this._optionsService.rawOptions.windowsPty.buildNumber !== undefined) {\n // Just add the new missing rows on Windows as conpty reprints the screen with its\n // view of the world. Once a line enters scrollback for conpty it remains there\n this.lines.push(new BufferLine(newCols, nullCell, false));\n } else {\n if (this.ybase > 0 && this.lines.length <= this.ybase + this.y + addToY + 1) {\n // There is room above the buffer and there are no empty elements below the line,\n // scroll up\n this.ybase--;\n addToY++;\n if (this.ydisp > 0) {\n // Viewport is at the top of the buffer, must increase downwards\n this.ydisp--;\n }\n } else {\n // Add a blank line if there is no buffer left at the top to scroll to, or if there\n // are blank lines after the cursor\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n }\n }\n }\n } else { // (this._rows >= newRows)\n for (let y = this._rows; y > newRows; y--) {\n if (this.lines.length > newRows + this.ybase) {\n if (this.lines.length > this.ybase + this.y + 1) {\n // The line is a blank line below the cursor, remove it\n this.lines.pop();\n } else {\n // The line is the cursor, scroll down\n this.ybase++;\n this.ydisp++;\n }\n }\n }\n }\n\n // Reduce max length if needed after adjustments, this is done after as it\n // would otherwise cut data from the bottom of the buffer.\n if (newMaxLength < this.lines.maxLength) {\n // Trim from the top of the buffer and adjust ybase and ydisp.\n const amountToTrim = this.lines.length - newMaxLength;\n if (amountToTrim > 0) {\n this.lines.trimStart(amountToTrim);\n this.ybase = Math.max(this.ybase - amountToTrim, 0);\n this.ydisp = Math.max(this.ydisp - amountToTrim, 0);\n this.savedY = Math.max(this.savedY - amountToTrim, 0);\n }\n this.lines.maxLength = newMaxLength;\n }\n\n // Make sure that the cursor stays on screen\n this.x = Math.min(this.x, newCols - 1);\n this.y = Math.min(this.y, newRows - 1);\n if (addToY) {\n this.y += addToY;\n }\n this.savedX = Math.min(this.savedX, newCols - 1);\n\n this.scrollTop = 0;\n }\n\n this.scrollBottom = newRows - 1;\n\n if (this._isReflowEnabled) {\n this._reflow(newCols, newRows);\n\n // Trim the end of the line off if cols shrunk\n if (this._cols > newCols) {\n for (let i = 0; i < this.lines.length; i++) {\n // +boolean for fast 0 or 1 conversion\n dirtyMemoryLines += +this.lines.get(i)!.resize(newCols, nullCell);\n }\n }\n }\n\n this._cols = newCols;\n this._rows = newRows;\n\n // Ensure the cursor position invariant: ybase + y must be within buffer bounds\n // This can be violated during reflow or when shrinking rows\n if (this.lines.length > 0) {\n const maxY = Math.max(0, this.lines.length - this.ybase - 1);\n this.y = Math.min(this.y, maxY);\n }\n\n this._memoryCleanupQueue.clear();\n // schedule memory cleanup only, if more than 10% of the lines are affected\n if (dirtyMemoryLines > 0.1 * this.lines.length) {\n this._memoryCleanupPosition = 0;\n this._memoryCleanupQueue.enqueue(() => this._batchedMemoryCleanup());\n }\n }\n\n private _batchedMemoryCleanup(): boolean {\n let normalRun = true;\n if (this._memoryCleanupPosition >= this.lines.length) {\n // cleanup made it once through all lines, thus rescan in loop below to also catch shifted\n // lines, which should finish rather quick if there are no more cleanups pending\n this._memoryCleanupPosition = 0;\n normalRun = false;\n }\n let counted = 0;\n while (this._memoryCleanupPosition < this.lines.length) {\n counted += this.lines.get(this._memoryCleanupPosition++)!.cleanupMemory();\n // cleanup max 100 lines per batch\n if (counted > 100) {\n return true;\n }\n }\n // normal runs always need another rescan afterwards\n // if we made it here with normalRun=false, we are in a final run\n // and can end the cleanup task for sure\n return normalRun;\n }\n\n private get _isReflowEnabled(): boolean {\n const windowsPty = this._optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.buildNumber) {\n return this._hasScrollback && windowsPty.backend === 'conpty' && windowsPty.buildNumber >= 21376;\n }\n return this._hasScrollback;\n }\n\n private _reflow(newCols: number, newRows: number): void {\n if (this._cols === newCols) {\n return;\n }\n\n // Iterate through rows, ignore the last one as it cannot be wrapped\n if (newCols > this._cols) {\n this._reflowLarger(newCols, newRows);\n } else {\n this._reflowSmaller(newCols, newRows);\n }\n }\n\n private _reflowLarger(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const toRemove: number[] = reflowLargerGetLinesToRemove(this.lines, this._cols, newCols, this.ybase + this.y, this.getNullCell(DEFAULT_ATTR_DATA), reflowCursorLine);\n if (toRemove.length > 0) {\n const newLayoutResult = reflowLargerCreateNewLayout(this.lines, toRemove);\n reflowLargerApplyNewLayout(this.lines, newLayoutResult.layout);\n this._reflowLargerAdjustViewport(newCols, newRows, newLayoutResult.countRemoved);\n }\n }\n\n private _reflowLargerAdjustViewport(newCols: number, newRows: number, countRemoved: number): void {\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Adjust viewport based on number of items removed\n let viewportAdjustments = countRemoved;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y > 0) {\n this.y--;\n }\n if (this.lines.length < newRows) {\n // Add an extra row at the bottom of the viewport\n this.lines.push(new BufferLine(newCols, nullCell, false));\n }\n } else {\n if (this.ydisp === this.ybase) {\n this.ydisp--;\n }\n this.ybase--;\n }\n }\n this.savedY = Math.max(this.savedY - countRemoved, 0);\n }\n\n private _reflowSmaller(newCols: number, newRows: number): void {\n const reflowCursorLine = this._optionsService.rawOptions.reflowCursorLine;\n const nullCell = this.getNullCell(DEFAULT_ATTR_DATA);\n // Gather all BufferLines that need to be inserted into the Buffer here so that they can be\n // batched up and only committed once\n const toInsert = [];\n let countToInsert = 0;\n // Go backwards as many lines may be trimmed and this will avoid considering them\n for (let y = this.lines.length - 1; y >= 0; y--) {\n // Check whether this line is a problem\n let nextLine = this.lines.get(y) as BufferLine;\n if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) {\n continue;\n }\n\n // Gather wrapped lines and adjust y to be the starting line\n const wrappedLines: BufferLine[] = [nextLine];\n while (nextLine.isWrapped && y > 0) {\n nextLine = this.lines.get(--y) as BufferLine;\n wrappedLines.unshift(nextLine);\n }\n\n if (!reflowCursorLine) {\n // If these lines contain the cursor don't touch them, the program will handle fixing up\n // wrapped lines with the cursor\n const absoluteY = this.ybase + this.y;\n if (absoluteY >= y && absoluteY < y + wrappedLines.length) {\n continue;\n }\n }\n\n const lastLineLength = wrappedLines[wrappedLines.length - 1].getTrimmedLength();\n const destLineLengths = reflowSmallerGetNewLineLengths(wrappedLines, this._cols, newCols);\n const linesToAdd = destLineLengths.length - wrappedLines.length;\n let trimmedLines: number;\n if (this.ybase === 0 && this.y !== this.lines.length - 1) {\n // If the top section of the buffer is not yet filled\n trimmedLines = Math.max(0, this.y - this.lines.maxLength + linesToAdd);\n } else {\n trimmedLines = Math.max(0, this.lines.length - this.lines.maxLength + linesToAdd);\n }\n\n // Add the new lines\n const newLines: BufferLine[] = [];\n for (let i = 0; i < linesToAdd; i++) {\n const newLine = this.getBlankLine(DEFAULT_ATTR_DATA, true) as BufferLine;\n newLines.push(newLine);\n }\n if (newLines.length > 0) {\n toInsert.push({\n // countToInsert here gets the actual index, taking into account other inserted items.\n // using this we can iterate through the list forwards\n start: y + wrappedLines.length + countToInsert,\n newLines\n });\n countToInsert += newLines.length;\n }\n wrappedLines.push(...newLines);\n\n // Copy buffer data to new locations, this needs to happen backwards to do in-place\n let destLineIndex = destLineLengths.length - 1; // Math.floor(cellsNeeded / newCols);\n let destCol = destLineLengths[destLineIndex]; // cellsNeeded % newCols;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n let srcLineIndex = wrappedLines.length - linesToAdd - 1;\n let srcCol = lastLineLength;\n while (srcLineIndex >= 0) {\n const cellsToCopy = Math.min(srcCol, destCol);\n if (wrappedLines[destLineIndex] === undefined) {\n // Sanity check that the line exists, this has been known to fail for an unknown reason\n // which would stop the reflow from happening if an exception would throw.\n break;\n }\n wrappedLines[destLineIndex].copyCellsFrom(wrappedLines[srcLineIndex], srcCol - cellsToCopy, destCol - cellsToCopy, cellsToCopy, true);\n destCol -= cellsToCopy;\n if (destCol === 0) {\n destLineIndex--;\n destCol = destLineLengths[destLineIndex];\n }\n srcCol -= cellsToCopy;\n if (srcCol === 0) {\n srcLineIndex--;\n const wrappedLinesIndex = Math.max(srcLineIndex, 0);\n srcCol = getWrappedLineTrimmedLength(wrappedLines, wrappedLinesIndex, this._cols);\n }\n }\n\n // Null out the end of the line ends if a wide character wrapped to the following line\n for (let i = 0; i < wrappedLines.length; i++) {\n if (destLineLengths[i] < newCols) {\n wrappedLines[i].setCell(destLineLengths[i], nullCell);\n }\n }\n\n // Adjust viewport as needed\n let viewportAdjustments = linesToAdd - trimmedLines;\n while (viewportAdjustments-- > 0) {\n if (this.ybase === 0) {\n if (this.y < newRows - 1) {\n this.y++;\n this.lines.pop();\n } else {\n this.ybase++;\n this.ydisp++;\n }\n } else {\n // Ensure ybase does not exceed its maximum value\n if (this.ybase < Math.min(this.lines.maxLength, this.lines.length + countToInsert) - newRows) {\n if (this.ybase === this.ydisp) {\n this.ydisp++;\n }\n this.ybase++;\n }\n }\n }\n this.savedY = Math.min(this.savedY + linesToAdd, this.ybase + newRows - 1);\n }\n\n // Rearrange lines in the buffer if there are any insertions, this is done at the end rather\n // than earlier so that it's a single O(n) pass through the buffer, instead of O(n^2) from many\n // costly calls to CircularList.splice.\n if (toInsert.length > 0) {\n // Record buffer insert events and then play them back backwards so that the indexes are\n // correct\n const insertEvents: IInsertEvent[] = [];\n\n // Record original lines so they don't get overridden when we rearrange the list\n const originalLines: BufferLine[] = [];\n for (let i = 0; i < this.lines.length; i++) {\n originalLines.push(this.lines.get(i) as BufferLine);\n }\n const originalLinesLength = this.lines.length;\n\n let originalLineIndex = originalLinesLength - 1;\n let nextToInsertIndex = 0;\n let nextToInsert = toInsert[nextToInsertIndex];\n this.lines.length = Math.min(this.lines.maxLength, this.lines.length + countToInsert);\n let countInsertedSoFar = 0;\n for (let i = Math.min(this.lines.maxLength - 1, originalLinesLength + countToInsert - 1); i >= 0; i--) {\n if (nextToInsert && nextToInsert.start > originalLineIndex + countInsertedSoFar) {\n // Insert extra lines here, adjusting i as needed\n for (let nextI = nextToInsert.newLines.length - 1; nextI >= 0; nextI--) {\n this.lines.set(i--, nextToInsert.newLines[nextI]);\n }\n i++;\n\n // Create insert events for later\n insertEvents.push({\n index: originalLineIndex + 1,\n amount: nextToInsert.newLines.length\n });\n\n countInsertedSoFar += nextToInsert.newLines.length;\n nextToInsert = toInsert[++nextToInsertIndex];\n } else {\n this.lines.set(i, originalLines[originalLineIndex--]);\n }\n }\n\n // Update markers\n let insertCountEmitted = 0;\n for (let i = insertEvents.length - 1; i >= 0; i--) {\n insertEvents[i].index += insertCountEmitted;\n this.lines.onInsertEmitter.fire(insertEvents[i]);\n insertCountEmitted += insertEvents[i].amount;\n }\n const amountToTrim = Math.max(0, originalLinesLength + countToInsert - this.lines.maxLength);\n if (amountToTrim > 0) {\n this.lines.onTrimEmitter.fire(amountToTrim);\n }\n }\n }\n\n /**\n * Translates a buffer line to a string, with optional start and end columns.\n * Wide characters will count as two columns in the resulting string. This\n * function is useful for getting the actual text underneath the raw selection\n * position.\n * @param lineIndex The absolute index of the line being translated.\n * @param trimRight Whether to trim whitespace to the right.\n * @param startCol The column to start at.\n * @param endCol The column to end at.\n */\n public translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol: number = 0, endCol?: number): string {\n const line = this.lines.get(lineIndex);\n if (!line) {\n return '';\n }\n return line.translateToString(trimRight, startCol, endCol);\n }\n\n public getWrappedRangeForLine(y: number): { first: number, last: number } {\n let first = y;\n let last = y;\n // Scan upwards for wrapped lines\n while (first > 0 && this.lines.get(first)!.isWrapped) {\n first--;\n }\n // Scan downwards for wrapped lines\n while (last + 1 < this.lines.length && this.lines.get(last + 1)!.isWrapped) {\n last++;\n }\n return { first, last };\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n if (i !== null && i !== undefined) {\n if (!this.tabs[i]) {\n i = this.prevStop(i);\n }\n } else {\n this.tabs = {};\n i = 0;\n }\n\n for (; i < this._cols; i += this._optionsService.rawOptions.tabStopWidth) {\n this.tabs[i] = true;\n }\n }\n\n /**\n * Move the cursor to the previous tab stop from the given position (default is current).\n * @param x The position to move the cursor to the previous tab stop.\n */\n public prevStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[--x] && x > 0);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Move the cursor one tab stop forward from the given position (default is current).\n * @param x The position to move the cursor one tab stop forward.\n */\n public nextStop(x?: number): number {\n x ??= this.x;\n while (!this.tabs[++x] && x < this._cols);\n return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;\n }\n\n /**\n * Clears markers on single line.\n * @param y The line to clear.\n */\n public clearMarkers(y: number): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].line === y) {\n this.markers[i].dispose();\n this.markers.splice(i--, 1);\n }\n }\n this._isClearing = false;\n }\n\n /**\n * Clears markers on all lines\n */\n public clearAllMarkers(): void {\n this._isClearing = true;\n for (let i = 0; i < this.markers.length; i++) {\n this.markers[i].dispose();\n }\n this.markers.length = 0;\n this._isClearing = false;\n }\n\n public addMarker(y: number): Marker {\n const marker = new Marker(y);\n this.markers.push(marker);\n marker.register(this.lines.onTrim(amount => {\n marker.line -= amount;\n // The marker should be disposed when the line is trimmed from the buffer\n if (marker.line < 0) {\n marker.dispose();\n }\n }));\n marker.register(this.lines.onInsert(event => {\n if (marker.line >= event.index) {\n marker.line += event.amount;\n }\n }));\n marker.register(this.lines.onDelete(event => {\n // Delete the marker if it's within the range\n if (marker.line >= event.index && marker.line < event.index + event.amount) {\n marker.dispose();\n }\n\n // Shift the marker if it's after the deleted range\n if (marker.line > event.index) {\n marker.line -= event.amount;\n }\n }));\n marker.register(marker.onDispose(() => this._removeMarker(marker)));\n return marker;\n }\n\n private _removeMarker(marker: Marker): void {\n if (!this._isClearing) {\n this.markers.splice(this.markers.indexOf(marker), 1);\n }\n }\n}\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, MutableDisposable } from '../Lifecycle';\nimport { Buffer } from './Buffer';\nimport { IAttributeData, IBuffer, IBufferSet } from './Types';\nimport { IBufferService, ILogService, IOptionsService } from '../services/Services';\nimport { Emitter } from '../Event';\n\n/**\n * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and\n * provides also utilities for working with them.\n */\nexport class BufferSet extends Disposable implements IBufferSet {\n private _normal!: Buffer;\n private _alt!: Buffer;\n private _activeBuffer!: Buffer;\n private readonly _normalBuffer = this._register(new MutableDisposable());\n private readonly _altBuffer = this._register(new MutableDisposable());\n\n private readonly _onBufferActivate = this._register(new Emitter<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>());\n public readonly onBufferActivate = this._onBufferActivate.event;\n\n /**\n * Create a new BufferSet for the given terminal.\n */\n constructor(\n private readonly _optionsService: IOptionsService,\n private readonly _bufferService: IBufferService,\n private readonly _logService: ILogService\n ) {\n super();\n this.reset();\n this._register(this._optionsService.onSpecificOptionChange('scrollback', () => this.resize(this._bufferService.cols, this._bufferService.rows)));\n this._register(this._optionsService.onSpecificOptionChange('tabStopWidth', () => this.setupTabStops()));\n }\n\n public reset(): void {\n this._normal = new Buffer(true, this._optionsService, this._bufferService, this._logService);\n this._normalBuffer.value = this._normal;\n this._normal.fillViewportRows();\n\n // The alt buffer should never have scrollback.\n // See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer\n this._alt = new Buffer(false, this._optionsService, this._bufferService, this._logService);\n this._altBuffer.value = this._alt;\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n\n this.setupTabStops();\n }\n\n /**\n * Returns the alt Buffer of the BufferSet\n */\n public get alt(): Buffer {\n return this._alt;\n }\n\n /**\n * Returns the currently active Buffer of the BufferSet\n */\n public get active(): Buffer {\n return this._activeBuffer;\n }\n\n /**\n * Returns the normal Buffer of the BufferSet\n */\n public get normal(): Buffer {\n return this._normal;\n }\n\n /**\n * Sets the normal Buffer of the BufferSet as its currently active Buffer\n */\n public activateNormalBuffer(): void {\n if (this._activeBuffer === this._normal) {\n return;\n }\n this._normal.x = this._alt.x;\n this._normal.y = this._alt.y;\n // The alt buffer should always be cleared when we switch to the normal\n // buffer. This frees up memory since the alt buffer should always be new\n // when activated.\n this._alt.clearAllMarkers();\n this._alt.clear();\n this._activeBuffer = this._normal;\n this._onBufferActivate.fire({\n activeBuffer: this._normal,\n inactiveBuffer: this._alt\n });\n }\n\n /**\n * Sets the alt Buffer of the BufferSet as its currently active Buffer\n */\n public activateAltBuffer(fillAttr?: IAttributeData): void {\n if (this._activeBuffer === this._alt) {\n return;\n }\n // Since the alt buffer is always cleared when the normal buffer is\n // activated, we want to fill it when switching to it.\n this._alt.fillViewportRows(fillAttr);\n this._alt.x = this._normal.x;\n this._alt.y = this._normal.y;\n this._activeBuffer = this._alt;\n this._onBufferActivate.fire({\n activeBuffer: this._alt,\n inactiveBuffer: this._normal\n });\n }\n\n /**\n * Resizes both normal and alt buffers, adjusting their data accordingly.\n * @param newCols The new number of columns.\n * @param newRows The new number of rows.\n */\n public resize(newCols: number, newRows: number): void {\n this._normal.resize(newCols, newRows);\n this._alt.resize(newCols, newRows);\n this.setupTabStops(newCols);\n }\n\n /**\n * Setup the tab stops.\n * @param i The index to start setting up tab stops from.\n */\n public setupTabStops(i?: number): void {\n this._normal.setupTabStops(i);\n this._alt.setupTabStops(i);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IAttributeData, IBuffer, IBufferLine, IBufferSet } from '../buffer/Types';\nimport { BufferSet } from '../buffer/BufferSet';\nimport { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from './Services';\nimport { Emitter } from '../Event';\n\nexport const enum BufferServiceConstants {\n MINIMUM_COLS = 2, // Less than 2 can mess with wide chars\n MINIMUM_ROWS = 1\n}\n\nexport class BufferService extends Disposable implements IBufferService {\n public serviceBrand: any;\n\n public cols: number;\n public rows: number;\n public buffers: IBufferSet;\n /** Whether the user is scrolling (locks the scroll position) */\n public isUserScrolling: boolean = false;\n\n private readonly _onResize = this._register(new Emitter());\n public readonly onResize = this._onResize.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n\n public get buffer(): IBuffer { return this.buffers.active; }\n\n /** An IBufferline to clone/copy from for new blank lines */\n private _cachedBlankLine: IBufferLine | undefined;\n\n constructor(\n @IOptionsService optionsService: IOptionsService,\n @ILogService logService: ILogService\n ) {\n super();\n this.cols = Math.max(optionsService.rawOptions.cols || 0, BufferServiceConstants.MINIMUM_COLS);\n this.rows = Math.max(optionsService.rawOptions.rows || 0, BufferServiceConstants.MINIMUM_ROWS);\n this.buffers = this._register(new BufferSet(optionsService, this, logService));\n this._register(this.buffers.onBufferActivate(e => {\n this._onScroll.fire(e.activeBuffer.ydisp);\n }));\n }\n\n public resize(cols: number, rows: number): void {\n const colsChanged = this.cols !== cols;\n const rowsChanged = this.rows !== rows;\n this.cols = cols;\n this.rows = rows;\n this.buffers.resize(cols, rows);\n this._onResize.fire({ cols, rows, colsChanged, rowsChanged });\n }\n\n public reset(): void {\n this.buffers.reset();\n this.isUserScrolling = false;\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n const buffer = this.buffer;\n\n let newLine: IBufferLine | undefined;\n newLine = this._cachedBlankLine;\n if (!newLine || newLine.length !== this.cols || newLine.getFg(0) !== eraseAttr.fg || newLine.getBg(0) !== eraseAttr.bg) {\n newLine = buffer.getBlankLine(eraseAttr, isWrapped);\n this._cachedBlankLine = newLine;\n }\n newLine.isWrapped = isWrapped;\n\n const topRow = buffer.ybase + buffer.scrollTop;\n const bottomRow = buffer.ybase + buffer.scrollBottom;\n\n if (buffer.scrollTop === 0) {\n // Determine whether the buffer is going to be trimmed after insertion.\n const willBufferBeTrimmed = buffer.lines.isFull;\n\n // Insert the line using the fastest method\n if (bottomRow === buffer.lines.length - 1) {\n if (willBufferBeTrimmed) {\n buffer.lines.recycle().copyFrom(newLine, true);\n } else {\n buffer.lines.push(newLine.clone(true));\n }\n } else {\n buffer.lines.splice(bottomRow + 1, 0, newLine.clone(true));\n }\n\n // Only adjust ybase and ydisp when the buffer is not trimmed\n if (!willBufferBeTrimmed) {\n buffer.ybase++;\n // Only scroll the ydisp with ybase if the user has not scrolled up\n if (!this.isUserScrolling) {\n buffer.ydisp++;\n }\n } else {\n // When the buffer is full and the user has scrolled up, keep the text\n // stable unless ydisp is right at the top\n if (this.isUserScrolling) {\n buffer.ydisp = Math.max(buffer.ydisp - 1, 0);\n }\n }\n } else {\n // scrollTop is non-zero which means no line will be going to the\n // scrollback, instead we can just shift them in-place.\n const scrollRegionHeight = bottomRow - topRow + 1 /* as it's zero-based */;\n buffer.lines.shiftElements(topRow + 1, scrollRegionHeight - 1, -1);\n buffer.lines.set(bottomRow, newLine.clone(true));\n }\n\n // Move the viewport to the bottom of the buffer unless the user is\n // scrolling.\n if (!this.isUserScrolling) {\n buffer.ydisp = buffer.ybase;\n }\n\n this._onScroll.fire(buffer.ydisp);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used\n * to avoid unwanted events being handled by the viewport when the event was triggered from the\n * viewport originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n const buffer = this.buffer;\n if (disp < 0) {\n if (buffer.ydisp === 0) {\n return;\n }\n this.isUserScrolling = true;\n } else if (disp + buffer.ydisp >= buffer.ybase) {\n this.isUserScrolling = false;\n }\n\n const oldYdisp = buffer.ydisp;\n buffer.ydisp = Math.max(Math.min(buffer.ydisp + disp, buffer.ybase), 0);\n\n // No change occurred, don't trigger scroll/refresh\n if (oldYdisp === buffer.ydisp) {\n return;\n }\n\n if (!suppressScrollEvent) {\n this._onScroll.fire(buffer.ydisp);\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { isMac } from '../Platform';\nimport { CursorStyle, IDisposable } from '../Types';\nimport { FontWeight, IOptionsService, ITerminalOptions } from './Services';\nimport { Emitter } from '../Event';\n\nexport const DEFAULT_OPTIONS: Readonly> = {\n cols: 80,\n rows: 24,\n showCursorImmediately: false,\n cursorBlink: false,\n blinkIntervalDuration: 0,\n cursorStyle: 'block',\n cursorWidth: 1,\n cursorInactiveStyle: 'outline',\n drawBoldTextInBrightColors: true,\n documentOverride: null,\n fastScrollSensitivity: 5,\n fontFamily: 'monospace',\n fontSize: 15,\n fontWeight: 'normal',\n fontWeightBold: 'bold',\n ignoreBracketedPasteMode: false,\n lineHeight: 1.0,\n letterSpacing: 0,\n linkHandler: null,\n logLevel: 'info',\n logger: null,\n scrollback: 1000,\n scrollbar: { showScrollbar: true },\n scrollOnEraseInDisplay: false,\n scrollOnUserInput: true,\n scrollSensitivity: 1,\n screenReaderMode: false,\n smoothScrollDuration: 0,\n macOptionIsMeta: false,\n macOptionClickForcesSelection: false,\n minimumContrastRatio: 1,\n mouseEventsRequireAlt: false,\n disableStdin: false,\n allowProposedApi: false,\n allowTransparency: false,\n tabStopWidth: 8,\n theme: {},\n reflowCursorLine: false,\n rescaleOverlappingGlyphs: false,\n rightClickSelectsWord: isMac,\n windowOptions: {},\n windowsPty: {},\n wordSeparator: ' ()[]{}\\',\"`',\n altClickMovesCursor: true,\n convertEol: false,\n termName: 'xterm',\n quirks: {},\n vtExtensions: {}\n};\n\nconst FONT_WEIGHT_OPTIONS: Extract[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\n\nexport class OptionsService extends Disposable implements IOptionsService {\n public serviceBrand: any;\n\n public readonly rawOptions: Required;\n public options: Required;\n\n private readonly _onOptionChange = this._register(new Emitter());\n public readonly onOptionChange = this._onOptionChange.event;\n\n constructor(options: Partial) {\n super();\n // set the default value of each option\n const defaultOptions = { ...DEFAULT_OPTIONS };\n for (const key in options) {\n if (key in defaultOptions) {\n try {\n const newValue = options[key];\n defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n // set up getters and setters for each option\n this.rawOptions = defaultOptions;\n this.options = { ... defaultOptions };\n this._setupOptions();\n\n // Clear out options that could link outside xterm.js as they could easily cause an embedder\n // memory leak\n this._register(toDisposable(() => {\n this.rawOptions.linkHandler = null;\n this.rawOptions.documentOverride = null;\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onSpecificOptionChange(key: T, listener: (value: ITerminalOptions[T]) => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (eventKey === key) {\n listener(this.rawOptions[key]);\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable {\n return this.onOptionChange(eventKey => {\n if (keys.indexOf(eventKey) !== -1) {\n listener();\n }\n });\n }\n\n private _setupOptions(): void {\n const getter = (propName: string): any => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n return this.rawOptions[propName];\n };\n\n const setter = (propName: string, value: any): void => {\n if (!(propName in DEFAULT_OPTIONS)) {\n throw new Error(`No option with key \"${propName}\"`);\n }\n\n value = this._sanitizeAndValidateOption(propName, value);\n // Don't fire an option change event if they didn't change\n if (this.rawOptions[propName] !== value) {\n this.rawOptions[propName] = value;\n this._onOptionChange.fire(propName);\n }\n };\n\n for (const propName in this.rawOptions) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this.options, propName, desc);\n }\n }\n\n private _sanitizeAndValidateOption(key: string, value: any): any {\n switch (key) {\n case 'cursorStyle':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n if (!isCursorStyle(value)) {\n throw new Error(`\"${value}\" is not a valid value for ${key}`);\n }\n break;\n case 'wordSeparator':\n if (!value) {\n value = DEFAULT_OPTIONS[key];\n }\n break;\n case 'fontWeight':\n case 'fontWeightBold':\n if (typeof value === 'number' && 1 <= value && value <= 1000) {\n // already valid numeric value\n break;\n }\n value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];\n break;\n case 'blinkIntervalDuration':\n value = Math.floor(value);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'cursorWidth':\n value = Math.floor(value);\n // Fall through for bounds check\n case 'lineHeight':\n case 'tabStopWidth':\n if (value < 1) {\n throw new Error(`${key} cannot be less than 1, value: ${value}`);\n }\n break;\n case 'minimumContrastRatio':\n value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));\n break;\n case 'scrollback':\n value = Math.min(value, 4294967295);\n if (value < 0) {\n throw new Error(`${key} cannot be less than 0, value: ${value}`);\n }\n break;\n case 'fastScrollSensitivity':\n case 'scrollSensitivity':\n if (value <= 0) {\n throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);\n }\n break;\n case 'rows':\n case 'cols':\n if (!value && value !== 0) {\n throw new Error(`${key} must be numeric, value: ${value}`);\n }\n break;\n case 'windowsPty':\n value = value ?? {};\n break;\n }\n return value;\n }\n}\n\nfunction isCursorStyle(value: unknown): value is CursorStyle {\n return value === 'block' || value === 'underline' || value === 'bar';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { Disposable } from '../Lifecycle';\nimport { IDecPrivateModes, IKittyKeyboardState, IModes } from '../Types';\nimport { IBufferService, ICoreService, ILogService, IOptionsService } from './Services';\nimport { Emitter } from '../Event';\n\nconst DEFAULT_MODES: IModes = Object.freeze({\n insertMode: false\n});\n\nconst DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({\n applicationCursorKeys: false,\n applicationKeypad: false,\n bracketedPasteMode: false,\n colorSchemeUpdates: false,\n cursorBlink: undefined,\n cursorStyle: undefined,\n origin: false,\n reverseWraparound: false,\n sendFocus: false,\n synchronizedOutput: false,\n win32InputMode: false,\n wraparound: true // defaults: xterm - true, vt100 - false\n});\n\nconst DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({\n flags: 0,\n mainFlags: 0,\n altFlags: 0,\n mainStack: [],\n altStack: []\n});\n\nexport class CoreService extends Disposable implements ICoreService {\n public serviceBrand: any;\n\n public isCursorInitialized: boolean;\n public isCursorHidden: boolean = false;\n public modes: IModes;\n public decPrivateModes: IDecPrivateModes;\n public kittyKeyboard: IKittyKeyboardState;\n\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n private readonly _onUserInput = this._register(new Emitter());\n public readonly onUserInput = this._onUserInput.event;\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onRequestScrollToBottom = this._register(new Emitter());\n public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService,\n @ILogService private readonly _logService: ILogService,\n @IOptionsService private readonly _optionsService: IOptionsService\n ) {\n super();\n this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public reset(): void {\n this.modes = structuredClone(DEFAULT_MODES);\n this.decPrivateModes = structuredClone(DEFAULT_DEC_PRIVATE_MODES);\n this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();\n }\n\n public triggerDataEvent(data: string, wasUserInput: boolean = false): void {\n // Prevents all events to pty process if stdin is disabled\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n\n // Input is being sent to the terminal, the terminal should focus the prompt.\n const buffer = this._bufferService.buffer;\n if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {\n this._onRequestScrollToBottom.fire();\n }\n\n // Fire onUserInput so listeners can react as well (eg. clear selection)\n if (wasUserInput) {\n this._onUserInput.fire();\n }\n\n // Fire onData API\n this._logService.debug(`sending data \"${data}\"`);\n this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onData.fire(data);\n }\n\n public triggerBinaryEvent(data: string): void {\n if (this._optionsService.rawOptions.disableStdin) {\n return;\n }\n this._logService.debug(`sending binary \"${data}\"`);\n this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));\n this._onBinary.fire(data);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IMouseStateService } from './Services';\nimport { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from '../Types';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\n/**\n * Supported default protocols.\n */\nconst DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {\n /**\n * NONE\n * Events: none\n * Modifiers: none\n */\n NONE: {\n events: CoreMouseEventType.NONE,\n restrict: () => false\n },\n /**\n * X10\n * Events: mousedown\n * Modifiers: none\n */\n X10: {\n events: CoreMouseEventType.DOWN,\n restrict: (e: ICoreMouseEvent) => {\n // no wheel, no move, no up\n if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {\n return false;\n }\n // no modifiers\n e.ctrl = false;\n e.alt = false;\n e.shift = false;\n return true;\n }\n },\n /**\n * VT200\n * Events: mousedown / mouseup / wheel\n * Modifiers: all\n */\n VT200: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,\n restrict: (e: ICoreMouseEvent) => {\n // no move\n if (e.action === CoreMouseAction.MOVE) {\n return false;\n }\n return true;\n }\n },\n /**\n * DRAG\n * Events: mousedown / mouseup / wheel / mousedrag\n * Modifiers: all\n */\n DRAG: {\n events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,\n restrict: (e: ICoreMouseEvent) => {\n // no move without button\n if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {\n return false;\n }\n return true;\n }\n },\n /**\n * ANY\n * Events: all mouse related events\n * Modifiers: all\n */\n ANY: {\n events:\n CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL\n | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,\n restrict: (e: ICoreMouseEvent) => true\n }\n};\n\nconst enum Modifiers {\n SHIFT = 4,\n ALT = 8,\n CTRL = 16\n}\n\n// helper for default encoders to generate the event code.\nfunction eventCode(e: ICoreMouseEvent, isSGR: boolean): number {\n let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);\n if (e.button === CoreMouseButton.WHEEL) {\n code |= 64;\n code |= e.action;\n } else {\n code |= e.button & 3;\n if (e.button & 4) {\n code |= 64;\n }\n if (e.button & 8) {\n code |= 128;\n }\n if (e.action === CoreMouseAction.MOVE) {\n code |= CoreMouseAction.MOVE;\n } else if (e.action === CoreMouseAction.UP && !isSGR) {\n // special case - only SGR can report button on release\n // all others have to go with NONE\n code |= CoreMouseButton.NONE;\n }\n }\n return code;\n}\n\nconst S = String.fromCharCode;\n\n/**\n * Supported default encodings.\n */\nconst DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {\n /**\n * DEFAULT - CSI M Pb Px Py\n * Single byte encoding for coords and event code.\n * Can encode values up to 223 (1-based).\n */\n DEFAULT: (e: ICoreMouseEvent) => {\n const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];\n // supress mouse report if we exceed addressible range\n // Note this is handled differently by emulators\n // - xterm: sends 0;0 coords instead\n // - vte, konsole: no report\n if (params[0] > 255 || params[1] > 255 || params[2] > 255) {\n return '';\n }\n return `\\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;\n },\n /**\n * SGR - CSI < Pb ; Px ; Py M|m\n * No encoding limitation.\n * Can report button on release and works with a well formed sequence.\n */\n SGR: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;\n },\n SGR_PIXELS: (e: ICoreMouseEvent) => {\n const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';\n return `\\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;\n }\n};\n\n/**\n * MouseStateService\n *\n * Provides mouse tracking reports with different protocols and encodings.\n * - protocols: NONE (default), X10, VT200, DRAG, ANY\n * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)\n *\n * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.\n * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.\n * Switching a protocol will send a notification event `onProtocolChange`\n * with a list of needed events to track.\n *\n * The service handles the mouse tracking state and decides whether to send\n * a tracking report to the backend based on protocol and encoding limitations.\n * To send a mouse event call `triggerMouseEvent`.\n */\nexport class MouseStateService extends Disposable implements IMouseStateService {\n public serviceBrand: any;\n\n private _protocols: { [name: string]: ICoreMouseProtocol } = {};\n private _encodings: { [name: string]: CoreMouseEncoding } = {};\n private _activeProtocol: string = '';\n private _activeEncoding: string = '';\n private _customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined;\n\n private readonly _onProtocolChange = this._register(new Emitter());\n public readonly onProtocolChange = this._onProtocolChange.event;\n\n constructor() {\n super();\n\n // register default protocols and encodings\n for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);\n for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);\n // call reset to set defaults\n this.reset();\n }\n\n public addProtocol(name: string, protocol: ICoreMouseProtocol): void {\n this._protocols[name] = protocol;\n }\n\n public addEncoding(name: string, encoding: CoreMouseEncoding): void {\n this._encodings[name] = encoding;\n }\n\n public get activeProtocol(): string {\n return this._activeProtocol;\n }\n\n public get areMouseEventsActive(): boolean {\n return this._protocols[this._activeProtocol].events !== 0;\n }\n\n public set activeProtocol(name: string) {\n if (!this._protocols[name]) {\n throw new Error(`unknown protocol \"${name}\"`);\n }\n this._activeProtocol = name;\n this._onProtocolChange.fire(this._protocols[name].events);\n }\n\n public get activeEncoding(): string {\n return this._activeEncoding;\n }\n\n public set activeEncoding(name: string) {\n if (!this._encodings[name]) {\n throw new Error(`unknown encoding \"${name}\"`);\n }\n this._activeEncoding = name;\n }\n\n public reset(): void {\n this.activeProtocol = 'NONE';\n this.activeEncoding = 'DEFAULT';\n }\n\n public setCustomWheelEventHandler(customWheelEventHandler: ((event: WheelEvent) => boolean) | undefined): void {\n this._customWheelEventHandler = customWheelEventHandler;\n }\n\n public allowCustomWheelEvent(ev: WheelEvent): boolean {\n return this._customWheelEventHandler ? this._customWheelEventHandler(ev) !== false : true;\n }\n\n public restrictMouseEvent(e: ICoreMouseEvent): boolean {\n return this._protocols[this._activeProtocol].restrict(e);\n }\n\n public encodeMouseEvent(e: ICoreMouseEvent): string {\n return this._encodings[this._activeEncoding](e);\n }\n\n public get isDefaultEncoding(): boolean {\n return this._activeEncoding === 'DEFAULT';\n }\n\n public get isPixelEncoding(): boolean {\n return this._activeEncoding === 'SGR_PIXELS';\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from './Services';\nimport { Emitter } from '../Event';\n\nexport class UnicodeService implements IUnicodeService {\n public serviceBrand: any;\n\n private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);\n private _active: string = '';\n private _activeProvider!: IUnicodeVersionProvider;\n\n private readonly _onChange = new Emitter();\n public readonly onChange = this._onChange.event;\n\n public static extractShouldJoin(value: UnicodeCharProperties): boolean {\n return (value & 1) !== 0;\n }\n public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {\n return ((value >> 1) & 0x3) as UnicodeCharWidth;\n }\n public static extractCharKind(value: UnicodeCharProperties): number {\n return value >> 3;\n }\n public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {\n return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);\n }\n\n public dispose(): void {\n this._onChange.dispose();\n }\n\n public get versions(): string[] {\n return Object.keys(this._providers);\n }\n\n public get activeVersion(): string {\n return this._active;\n }\n\n public set activeVersion(version: string) {\n if (!this._providers[version]) {\n throw new Error(`unknown Unicode version \"${version}\"`);\n }\n this._active = version;\n this._activeProvider = this._providers[version];\n this._onChange.fire(version);\n }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._providers[provider.version] = provider;\n if (!this._active) {\n this.activeVersion = provider.version;\n }\n }\n\n /**\n * Unicode version dependent interface.\n */\n public wcwidth(num: number): UnicodeCharWidth {\n return this._activeProvider.wcwidth(num);\n }\n\n public getStringCellWidth(s: string): number {\n let result = 0;\n let precedingInfo = 0;\n const length = s.length;\n for (let i = 0; i < length; ++i) {\n let code = s.charCodeAt(i);\n // surrogate pair first\n if (0xD800 <= code && code <= 0xDBFF) {\n if (++i >= length) {\n // this should not happen with strings retrieved from\n // Buffer.translateToString as it converts from UTF-32\n // and therefore always should contain the second part\n // for any other string we still have to handle it somehow:\n // simply treat the lonely surrogate first as a single char (UCS-2 behavior)\n return result + this.wcwidth(code);\n }\n const second = s.charCodeAt(i);\n // convert surrogate pair to high codepoint only for valid second part (UTF-16)\n // otherwise treat them independently (UCS-2 behavior)\n if (0xDC00 <= second && second <= 0xDFFF) {\n code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n } else {\n result += this.wcwidth(second);\n }\n }\n const currentInfo = this.charProperties(code, precedingInfo);\n let chWidth = UnicodeService.extractWidth(currentInfo);\n if (UnicodeService.extractShouldJoin(currentInfo)) {\n chWidth -= UnicodeService.extractWidth(precedingInfo);\n }\n result += chWidth;\n precedingInfo = currentInfo;\n }\n return result;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n return this._activeProvider.charProperties(codepoint, preceding);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';\nimport { UnicodeService } from '../services/UnicodeService';\n\nconst BMP_COMBINING = [\n [0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],\n [0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],\n [0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],\n [0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],\n [0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],\n [0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],\n [0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],\n [0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],\n [0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],\n [0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],\n [0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],\n [0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],\n [0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],\n [0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],\n [0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],\n [0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],\n [0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],\n [0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],\n [0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],\n [0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],\n [0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],\n [0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],\n [0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],\n [0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],\n [0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],\n [0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],\n [0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],\n [0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],\n [0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],\n [0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],\n [0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],\n [0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],\n [0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],\n [0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],\n [0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],\n [0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],\n [0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],\n [0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],\n [0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],\n [0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],\n [0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],\n [0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],\n [0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]\n];\nconst HIGH_COMBINING = [\n [0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],\n [0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],\n [0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],\n [0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],\n [0xE0100, 0xE01EF]\n];\n\n// BMP lookup table, lazy initialized during first addon loading\nlet table: Uint8Array;\n\nfunction bisearch(ucs: number, data: number[][]): boolean {\n let min = 0;\n let max = data.length - 1;\n let mid;\n if (ucs < data[0][0] || ucs > data[max][1]) {\n return false;\n }\n while (max >= min) {\n mid = (min + max) >> 1;\n if (ucs > data[mid][1]) {\n min = mid + 1;\n } else if (ucs < data[mid][0]) {\n max = mid - 1;\n } else {\n return true;\n }\n }\n return false;\n}\n\nexport class UnicodeV6 implements IUnicodeVersionProvider {\n public readonly version = '6';\n\n constructor() {\n // init lookup table once\n if (!table) {\n table = new Uint8Array(65536);\n table.fill(1);\n table[0] = 0;\n // control chars\n table.fill(0, 1, 32);\n table.fill(0, 0x7f, 0xa0);\n\n // apply wide char rules first\n // wide chars\n table.fill(2, 0x1100, 0x1160);\n table[0x2329] = 2;\n table[0x232a] = 2;\n table.fill(2, 0x2e80, 0xa4d0);\n table[0x303f] = 1; // wrongly in last line\n\n table.fill(2, 0xac00, 0xd7a4);\n table.fill(2, 0xf900, 0xfb00);\n table.fill(2, 0xfe10, 0xfe1a);\n table.fill(2, 0xfe30, 0xfe70);\n table.fill(2, 0xff00, 0xff61);\n table.fill(2, 0xffe0, 0xffe7);\n\n // apply combining last to ensure we overwrite\n // wrongly wide set chars:\n // the original algo evals combining first and falls\n // through to wide check so we simply do here the opposite\n // combining 0\n for (let r = 0; r < BMP_COMBINING.length; ++r) {\n table.fill(0, BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1);\n }\n }\n }\n\n public wcwidth(num: number): UnicodeCharWidth {\n if (num < 32) return 0;\n if (num < 127) return 1;\n if (num < 65536) return table[num] as UnicodeCharWidth;\n if (bisearch(num, HIGH_COMBINING)) return 0;\n if ((num >= 0x20000 && num <= 0x2fffd) || (num >= 0x30000 && num <= 0x3fffd)) return 2;\n return 1;\n }\n\n public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {\n let width = this.wcwidth(codepoint);\n let shouldJoin = width === 0 && preceding !== 0;\n // HACK: Ideally this file would not depend on the service which uses it\n if (shouldJoin) {\n const oldWidth = UnicodeService.extractWidth(preceding);\n if (oldWidth === 0) {\n shouldJoin = false;\n } else if (oldWidth > width) {\n width = oldWidth;\n }\n }\n return UnicodeService.createPropertyValue(0, width, shouldJoin);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICharsetService } from './Services';\nimport { ICharset } from '../Types';\n\nexport class CharsetService implements ICharsetService {\n public serviceBrand: any;\n\n public charset: ICharset | undefined;\n public glevel: number = 0;\n\n private _charsets: (ICharset | undefined)[] = [];\n\n public get charsets(): (ICharset | undefined)[] {\n return this._charsets;\n }\n\n public reset(): void {\n this.charset = undefined;\n this._charsets = [];\n this.glevel = 0;\n }\n\n public setgLevel(g: number): void {\n this.glevel = g;\n this.charset = this._charsets[g];\n }\n\n public setgCharset(g: number, charset: ICharset | undefined): void {\n this._charsets[g] = charset;\n if (this.glevel === g) {\n this.charset = charset;\n }\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CHAR_DATA_CODE_INDEX, NULL_CELL_CODE, WHITESPACE_CELL_CODE } from './buffer/Constants';\nimport { IBufferService } from './services/Services';\n\nexport function updateWindowsModeWrappedState(bufferService: IBufferService): void {\n // Winpty does not support wraparound mode which means that lines will never\n // be marked as wrapped. This causes issues for things like copying a line\n // retaining the wrapped new line characters or if consumers are listening\n // in on the data stream.\n //\n // The workaround for this is to listen to every incoming line feed and mark\n // the line as wrapped if the last character in the previous line is not a\n // space. This is certainly not without its problems, but generally on\n // Windows when text reaches the end of the terminal it's likely going to be\n // wrapped.\n const line = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y - 1);\n const lastChar = line?.get(bufferService.cols - 1);\n\n const nextLine = bufferService.buffer.lines.get(bufferService.buffer.ybase + bufferService.buffer.y);\n if (nextLine && lastChar) {\n nextLine.isWrapped = (lastChar[CHAR_DATA_CODE_INDEX] !== NULL_CELL_CODE && lastChar[CHAR_DATA_CODE_INDEX] !== WHITESPACE_CELL_CODE);\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IParams, ParamsArray } from './Types';\n\nconst enum Constants {\n /**\n * Max value supported for a single param/subparam (clamped to positive int32 range)\n */\n MAX_VALUE = 0x7FFFFFFF,\n /**\n * Max allowed subparams for a single sequence (hardcoded limitation)\n */\n MAX_SUBPARAMS = 256\n}\n\n/**\n * Params storage class.\n * This type is used by the parser to accumulate sequence parameters and sub parameters\n * and transmit them to the input handler actions.\n *\n * NOTES:\n * - params object for action handlers is borrowed, use `.toArray` or `.clone` to get a copy\n * - never read beyond `params.length - 1` (likely to contain arbitrary data)\n * - `.getSubParams` returns a borrowed typed array, use `.getSubParamsAll` for cloned sub params\n * - hardcoded limitations:\n * - max. value for a single (sub) param is 2^31 - 1 (greater values are clamped to that)\n * - max. 256 sub params possible\n * - negative values are not allowed beside -1 (placeholder for default value)\n *\n * About ZDM (Zero Default Mode):\n * ZDM is not orchestrated by this class. If the parser is in ZDM,\n * it should add 0 for empty params, otherwise -1. This does not apply\n * to subparams, empty subparams should always be added with -1.\n */\nexport class Params implements IParams {\n // params store and length\n public params: Int32Array;\n public length: number;\n\n // sub params store and length\n protected _subParams: Int32Array;\n protected _subParamsLength: number;\n\n // sub params offsets from param: param idx --> [start, end] offset\n private _subParamsIdx: Uint16Array;\n private _rejectDigits: boolean;\n private _rejectSubDigits: boolean;\n private _digitIsSub: boolean;\n\n /**\n * Create a `Params` type from JS array representation.\n */\n public static fromArray(values: ParamsArray): Params {\n const params = new Params();\n if (!values.length) {\n return params;\n }\n // skip leading sub params\n for (let i = (Array.isArray(values[0])) ? 1 : 0; i < values.length; ++i) {\n const value = values[i];\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; ++k) {\n params.addSubParam(value[k]);\n }\n } else {\n params.addParam(value);\n }\n }\n return params;\n }\n\n /**\n * @param maxLength max length of storable parameters\n * @param maxSubParamsLength max length of storable sub parameters\n */\n constructor(public maxLength: number = 32, public maxSubParamsLength: number = 32) {\n if (maxSubParamsLength > Constants.MAX_SUBPARAMS) {\n throw new Error('maxSubParamsLength must not be greater than 256');\n }\n this.params = new Int32Array(maxLength);\n this.length = 0;\n this._subParams = new Int32Array(maxSubParamsLength);\n this._subParamsLength = 0;\n this._subParamsIdx = new Uint16Array(maxLength);\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Clone object.\n */\n public clone(): Params {\n const newParams = new Params(this.maxLength, this.maxSubParamsLength);\n newParams.params.set(this.params);\n newParams.length = this.length;\n newParams._subParams.set(this._subParams);\n newParams._subParamsLength = this._subParamsLength;\n newParams._subParamsIdx.set(this._subParamsIdx);\n newParams._rejectDigits = this._rejectDigits;\n newParams._rejectSubDigits = this._rejectSubDigits;\n newParams._digitIsSub = this._digitIsSub;\n return newParams;\n }\n\n /**\n * Get a JS array representation of the current parameters and sub parameters.\n * The array is structured as follows:\n * sequence: \"1;2:3:4;5::6\"\n * array : [1, 2, [3, 4], 5, [-1, 6]]\n */\n public toArray(): ParamsArray {\n const res: ParamsArray = [];\n for (let i = 0; i < this.length; ++i) {\n res.push(this.params[i]);\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n res.push(Array.prototype.slice.call(this._subParams, start, end));\n }\n }\n return res;\n }\n\n /**\n * Reset to initial empty state.\n */\n public reset(): void {\n this.length = 0;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n }\n\n /**\n * Reset and add 0 as first param (ZDM).\n */\n public resetZdm(): void {\n this.length = 1;\n this._subParamsLength = 0;\n this._rejectDigits = false;\n this._rejectSubDigits = false;\n this._digitIsSub = false;\n this._subParamsIdx[0] = 0;\n this.params[0] = 0;\n }\n\n /**\n * Add a parameter value.\n * `Params` only stores up to `maxLength` parameters, any later\n * parameter will be ignored.\n * Note: VT devices only stored up to 16 values, xterm seems to\n * store up to 30.\n */\n public addParam(value: number): void {\n this._digitIsSub = false;\n if (this.length >= this.maxLength) {\n this._rejectDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParamsIdx[this.length] = this._subParamsLength << 8 | this._subParamsLength;\n this.params[this.length++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n }\n\n /**\n * Add a sub parameter value.\n * The sub parameter is automatically associated with the last parameter value.\n * Thus it is not possible to add a subparameter without any parameter added yet.\n * `Params` only stores up to `maxSubParamsLength` sub parameters, any later\n * sub parameter will be ignored.\n */\n public addSubParam(value: number): void {\n this._digitIsSub = true;\n if (!this.length) {\n return;\n }\n if (this._rejectDigits || this._subParamsLength >= this.maxSubParamsLength) {\n this._rejectSubDigits = true;\n return;\n }\n if (value < -1) {\n throw new Error('values less than -1 are not allowed');\n }\n this._subParams[this._subParamsLength++] = value > Constants.MAX_VALUE ? Constants.MAX_VALUE : value;\n this._subParamsIdx[this.length - 1]++;\n }\n\n /**\n * Whether parameter at index `idx` has sub parameters.\n */\n public hasSubParams(idx: number): boolean {\n return ((this._subParamsIdx[idx] & 0xFF) - (this._subParamsIdx[idx] >> 8) > 0);\n }\n\n /**\n * Return sub parameters for parameter at index `idx`.\n * Note: The values are borrowed, thus you need to copy\n * the values if you need to hold them in nonlocal scope.\n */\n public getSubParams(idx: number): Int32Array | null {\n const start = this._subParamsIdx[idx] >> 8;\n const end = this._subParamsIdx[idx] & 0xFF;\n if (end - start > 0) {\n return this._subParams.subarray(start, end);\n }\n return null;\n }\n\n /**\n * Return all sub parameters as {idx: subparams} mapping.\n * Note: The values are not borrowed.\n */\n public getSubParamsAll(): {[idx: number]: Int32Array} {\n const result: {[idx: number]: Int32Array} = {};\n for (let i = 0; i < this.length; ++i) {\n const start = this._subParamsIdx[i] >> 8;\n const end = this._subParamsIdx[i] & 0xFF;\n if (end - start > 0) {\n result[i] = this._subParams.slice(start, end);\n }\n }\n return result;\n }\n\n /**\n * Add a single digit value to current parameter.\n * This is used by the parser to account digits on a char by char basis.\n */\n public addDigit(value: number): void {\n let length;\n if (this._rejectDigits\n || !(length = this._digitIsSub ? this._subParamsLength : this.length)\n || (this._digitIsSub && this._rejectSubDigits)\n ) {\n return;\n }\n\n const store = this._digitIsSub ? this._subParams : this.params;\n const cur = store[length - 1];\n store[length - 1] = ~cur ? Math.min(cur * 10 + value, Constants.MAX_VALUE) : value;\n }\n}\n", "/**\n * Copyright (c) 2026 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * Accumulates string data from multiple chunks without O(n\u00B2) string concatenation.\n */\nexport class StringBuilder {\n private _chunks: string[] = [];\n private _length = 0;\n\n public get length(): number {\n return this._length;\n }\n\n public reset(): void {\n this._chunks.length = 0;\n this._length = 0;\n }\n\n public append(chunk: string): void {\n this._chunks.push(chunk);\n this._length += chunk.length;\n }\n\n public toString(): string {\n return this._chunks.join('');\n }\n}\n\n/**\n * String builder that rejects payloads larger than a fixed limit.\n */\nexport class LimitedStringBuilder {\n private readonly _builder = new StringBuilder();\n\n constructor(private readonly _limit: number) { }\n\n public get length(): number {\n return this._builder.length;\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public reset(): void {\n this._builder.reset();\n }\n\n /**\n * @returns true if the limit was exceeded (buffer is cleared in that case)\n */\n public append(chunk: string): boolean {\n this._builder.append(chunk);\n if (this._builder.length > this._limit) {\n this._builder.reset();\n return true;\n }\n return false;\n }\n\n public toString(): string {\n return this._builder.toString();\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from './Types';\nimport { OscState, ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IOscHandler[] = [];\n\nexport class OscParser implements IOscParser {\n private _state = OscState.START;\n private _active = EMPTY_HANDLERS;\n private _id = -1;\n private _handlers: IHandlerCollection = Object.create(null);\n private _handlerFb: OscFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public registerHandler(ident: number, handler: IOscHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n public setHandlerFallback(handler: OscFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers if payload was already sent\n if (this._state === OscState.PAYLOAD) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n\n private _start(): void {\n this._active = this._handlers[this._id] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._id, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n private _put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._id, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public start(): void {\n // always reset leftover handlers\n this.reset();\n this._state = OscState.ID;\n }\n\n /**\n * Put data to current OSC command.\n * Expects the identifier of the OSC command in the form\n * OSC id ; payload ST/BEL\n * Payload chunks are not further processed and get\n * directly passed to the handlers.\n */\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._state === OscState.ABORT) {\n return;\n }\n if (this._state === OscState.ID) {\n while (start < end) {\n const code = data[start++];\n if (code === 0x3b) {\n this._state = OscState.PAYLOAD;\n this._start();\n break;\n }\n if (code < 0x30 || 0x39 < code) {\n this._state = OscState.ABORT;\n return;\n }\n if (this._id === -1) {\n this._id = 0;\n }\n this._id = this._id * 10 + code - 48;\n }\n }\n if (this._state === OscState.PAYLOAD && end - start > 0) {\n this._put(data, start, end);\n }\n }\n\n /**\n * Indicates end of an OSC command.\n * Whether the OSC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (this._state === OscState.START) {\n return;\n }\n // do nothing if command was faulty\n if (this._state !== OscState.ABORT) {\n // if we are still in ID state and get an early end\n // means that the command has no payload thus we still have\n // to announce START and send END right after\n if (this._state === OscState.ID) {\n this._start();\n }\n\n if (!this._active.length) {\n this._handlerFb(this._id, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers\n // we always have to call .end for proper cleanup,\n // here we use `success` to indicate whether a handler should execute\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n\n }\n this._active = EMPTY_HANDLERS;\n this._id = -1;\n this._state = OscState.START;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as OSC handlers.\n */\nexport class OscHandler implements IOscHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(OscHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '../Types';\nimport { IDcsHandler, IParams, IHandlerCollection, IDcsParser, DcsFallbackHandlerType, ISubParserStackState } from './Types';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { Params } from './Params';\nimport { ParserConstants } from './Constants';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IDcsHandler[] = [];\n\nexport class DcsParser implements IDcsParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active: IDcsHandler[] = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: DcsFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public registerHandler(ident: number, handler: IDcsHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public reset(): void {\n // force cleanup leftover handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].unhook(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public hook(ident: number, params: IParams): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'HOOK', params);\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].hook(params);\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n public unhook(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'UNHOOK', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].unhook(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n// predefine empty params as [0] (ZDM)\nconst EMPTY_PARAMS = new Params();\nEMPTY_PARAMS.addParam(0);\n\n/**\n * Convenient class to create a DCS handler from a single callback function.\n * Note: The payload is currently limited to 50 MB (hardcoded).\n */\nexport class DcsHandler implements IDcsHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(DcsHandler._payloadLimit);\n private _params: IParams = EMPTY_PARAMS;\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string, params: IParams) => boolean | Promise) { }\n\n public hook(params: IParams): void {\n // since we need to preserve params until `unhook`, we have to clone it\n // (only borrowed from parser and spans multiple parser states)\n // perf optimization:\n // clone only, if we have non empty params, otherwise stick with default\n this._params = (params.length > 1 || params.params[0]) ? params.clone() : EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public unhook(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString(), this._params);\n if (ret instanceof Promise) {\n // need to hold data and params until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._params = EMPTY_PARAMS;\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IApcHandler, IHandlerCollection, ApcFallbackHandlerType, IApcParser, ISubParserStackState } from './Types';\nimport { ParserConstants } from './Constants';\nimport { utf32ToString } from '../input/TextDecoder';\nimport { IDisposable } from '../Types';\nimport { LimitedStringBuilder } from '../StringBuilder';\n\nconst EMPTY_HANDLERS: IApcHandler[] = [];\n\n/**\n * APC Parser for handling Application Program Command sequences.\n * APC sequences use the format: ESC _ ESC \\\n *\n * Unlike OSC which uses numeric identifiers (e.g., OSC 1337),\n * APC uses the first character as the identifier (e.g., 'G' for Kitty graphics).\n * The identifier is the character code of the first byte after ESC _.\n */\nexport class ApcParser implements IApcParser {\n private _handlers: IHandlerCollection = Object.create(null);\n private _active = EMPTY_HANDLERS;\n private _ident: number = 0;\n private _handlerFb: ApcFallbackHandlerType = () => { };\n private _stack: ISubParserStackState = {\n paused: false,\n loopPosition: 0,\n fallThrough: false\n };\n\n /**\n * Register an APC handler for a specific identifier.\n * @param ident The character code of the first byte (e.g., 0x47 for 'G')\n * @param handler The handler to register\n */\n public registerHandler(ident: number, handler: IApcHandler): IDisposable {\n this._handlers[ident] ??= [];\n const handlerList = this._handlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n\n public clearHandler(ident: number): void {\n if (this._handlers[ident]) delete this._handlers[ident];\n }\n\n public setHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._handlerFb = handler;\n }\n\n public dispose(): void {\n this._handlers = Object.create(null);\n this._handlerFb = () => { };\n this._active = EMPTY_HANDLERS;\n }\n\n public reset(): void {\n // force cleanup handlers\n if (this._active.length) {\n for (let j = this._stack.paused ? this._stack.loopPosition - 1 : this._active.length - 1; j >= 0; --j) {\n this._active[j].end(false);\n }\n }\n this._stack.paused = false;\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n\n public start(ident: number): void {\n // always reset leftover handlers\n this.reset();\n this._ident = ident;\n this._active = this._handlers[ident] || EMPTY_HANDLERS;\n if (!this._active.length) {\n this._handlerFb(this._ident, 'START');\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].start();\n }\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'PUT', utf32ToString(data, start, end));\n } else {\n for (let j = this._active.length - 1; j >= 0; j--) {\n this._active[j].put(data, start, end);\n }\n }\n }\n\n /**\n * Indicates end of an APC command.\n * Whether the APC got aborted or finished normally\n * is indicated by `success`.\n */\n public end(success: boolean, promiseResult: boolean = true): void | Promise {\n if (!this._active.length) {\n this._handlerFb(this._ident, 'END', success);\n } else {\n let handlerResult: boolean | Promise = false;\n let j = this._active.length - 1;\n let fallThrough = false;\n if (this._stack.paused) {\n j = this._stack.loopPosition - 1;\n handlerResult = promiseResult;\n fallThrough = this._stack.fallThrough;\n this._stack.paused = false;\n }\n if (!fallThrough && handlerResult === false) {\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(success);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = false;\n return handlerResult;\n }\n }\n j--;\n }\n // cleanup left over handlers (fallThrough for async)\n for (; j >= 0; j--) {\n handlerResult = this._active[j].end(false);\n if (handlerResult instanceof Promise) {\n this._stack.paused = true;\n this._stack.loopPosition = j;\n this._stack.fallThrough = true;\n return handlerResult;\n }\n }\n }\n this._active = EMPTY_HANDLERS;\n this._ident = 0;\n }\n}\n\n/**\n * Convenient class to allow attaching string based handler functions\n * as APC handlers.\n */\nexport class ApcHandler implements IApcHandler {\n private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;\n\n private _data = new LimitedStringBuilder(ApcHandler._payloadLimit);\n private _hitLimit: boolean = false;\n\n constructor(private _handler: (data: string) => boolean | Promise) { }\n\n public start(): void {\n this._data.reset();\n this._hitLimit = false;\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._hitLimit) {\n return;\n }\n if (this._data.append(utf32ToString(data, start, end))) {\n this._hitLimit = true;\n }\n }\n\n public end(success: boolean): boolean | Promise {\n let ret: boolean | Promise = false;\n if (this._hitLimit) {\n ret = false;\n } else if (success) {\n ret = this._handler(this._data.toString());\n if (ret instanceof Promise) {\n // need to hold data until `ret` got resolved\n // dont care for errors, data will be freed anyway on next start\n return ret.then(res => {\n this._data.reset();\n this._hitLimit = false;\n return res;\n });\n }\n }\n this._data.reset();\n this._hitLimit = false;\n return ret;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from './Types';\nimport { ParserState, ParserAction } from './Constants';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { IDisposable } from '../Types';\nimport { Params } from './Params';\nimport { OscParser } from './OscParser';\nimport { DcsParser } from './DcsParser';\nimport { ApcParser } from './ApcParser';\n\n/**\n * VT commands done by the parser\n */\n// @vt: #Y ESC CSI \"Control Sequence Introducer\" \"ESC [\" \"Start of a CSI sequence.\"\n// @vt: #Y ESC OSC \"Operating System Command\" \"ESC ]\" \"Start of an OSC sequence.\"\n// @vt: #Y ESC DCS \"Device Control String\" \"ESC P\" \"Start of a DCS sequence.\"\n// @vt: #Y ESC ST \"String Terminator\" \"ESC \\\\\" \"Terminator used for string type sequences.\"\n// @vt: #Y ESC PM \"Privacy Message\" \"ESC ^\" \"Start of a privacy message.\"\n// @vt: #Y ESC APC \"Application Program Command\" \"ESC _\" \"Start of an APC sequence.\"\n// @vt: #Y C1 CSI \"Control Sequence Introducer\" \"\\x9B\" \"Start of a CSI sequence.\"\n// @vt: #Y C1 OSC \"Operating System Command\" \"\\x9D\" \"Start of an OSC sequence.\"\n// @vt: #Y C1 DCS \"Device Control String\" \"\\x90\" \"Start of a DCS sequence.\"\n// @vt: #Y C1 ST \"String Terminator\" \"\\x9C\" \"Terminator used for string type sequences.\"\n// @vt: #Y C1 PM \"Privacy Message\" \"\\x9E\" \"Start of a privacy message.\"\n// @vt: #Y C1 APC \"Application Program Command\" \"\\x9F\" \"Start of an APC sequence.\"\n// @vt: #Y C0 NUL \"Null\" \"\\0, \\x00\" \"NUL is ignored.\"\n// @vt: #Y C0 ESC \"Escape\" \"\\e, \\x1B\" \"Start of a sequence. Cancels any other sequence.\"\n\n/**\n * Table values are generated like this:\n * index: currentState << TableValue.INDEX_STATE_SHIFT | charCode\n * value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState\n */\nconst enum TableAccess {\n TRANSITION_ACTION_SHIFT = 8,\n TRANSITION_STATE_MASK = 255,\n INDEX_STATE_SHIFT = 8\n}\n\n/**\n * Transition table for EscapeSequenceParser.\n */\nexport class TransitionTable {\n public table: Uint16Array;\n\n constructor(length: number) {\n this.table = new Uint16Array(length);\n }\n\n /**\n * Set default transition.\n * @param action default action\n * @param next default next state\n */\n public setDefault(action: ParserAction, next: ParserState): void {\n this.table.fill(action << TableAccess.TRANSITION_ACTION_SHIFT | next);\n }\n\n /**\n * Add a transition to the transition table.\n * @param code input character code\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public add(code: number, state: ParserState, action: ParserAction, next: ParserState): void {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | code] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n\n /**\n * Add transitions for multiple input character codes.\n * @param codes input character code array\n * @param state current parser state\n * @param action parser action to be done\n * @param next next parser state\n */\n public addMany(codes: number[], state: ParserState, action: ParserAction, next: ParserState): void {\n for (let i = 0; i < codes.length; i++) {\n this.table[state << TableAccess.INDEX_STATE_SHIFT | codes[i]] = action << TableAccess.TRANSITION_ACTION_SHIFT | next;\n }\n }\n}\n\n\n// Pseudo-character placeholder for printable non-ascii characters (unicode).\nconst NON_ASCII_PRINTABLE = 0xA0;\n\n\n/**\n * VT500 compatible transition table.\n * Taken from https://vt100.net/emu/dec_ansi_parser.\n */\nexport const VT500_TRANSITION_TABLE = (function (): TransitionTable {\n // table size:\n // (ParserState.STATE_LENGTH - 1) << TableAccess.INDEX_STATE_SHIFT | NON_ASCII_PRINTABLE + 1\n const table: TransitionTable = new TransitionTable(4257);\n\n // range macro for byte\n const BYTE_VALUES = 256;\n const blueprint = Array.apply(null, Array(BYTE_VALUES)).map((unused: any, i: number) => i);\n const r = (start: number, end: number): number[] => blueprint.slice(start, end);\n\n // Default definitions.\n const PRINTABLES = r(0x20, 0x7f); // 0x20 (SP) included, 0x7F (DEL) excluded\n const EXECUTABLES = r(0x00, 0x18);\n EXECUTABLES.push(0x19);\n EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));\n\n const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);\n\n // set default transition\n table.setDefault(ParserAction.ERROR, ParserState.GROUND);\n // printables\n table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n // global anywhere rules\n for (const state of states) {\n table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);\n table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator\n table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC\n table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC\n table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM\n table.add(0x9f, state, ParserAction.CLEAR, ParserState.APC_ENTRY); // APC\n table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI\n table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS\n }\n // rules for executables and 7f\n table.addMany(EXECUTABLES, ParserState.GROUND, ParserAction.EXECUTE, ParserState.GROUND);\n table.addMany(EXECUTABLES, ParserState.ESCAPE, ParserAction.EXECUTE, ParserState.ESCAPE);\n table.add(0x7f, ParserState.ESCAPE, ParserAction.IGNORE, ParserState.ESCAPE);\n table.addMany(EXECUTABLES, ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n table.addMany(EXECUTABLES, ParserState.CSI_ENTRY, ParserAction.EXECUTE, ParserState.CSI_ENTRY);\n table.add(0x7f, ParserState.CSI_ENTRY, ParserAction.IGNORE, ParserState.CSI_ENTRY);\n table.addMany(EXECUTABLES, ParserState.CSI_PARAM, ParserAction.EXECUTE, ParserState.CSI_PARAM);\n table.add(0x7f, ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_PARAM);\n table.addMany(EXECUTABLES, ParserState.CSI_IGNORE, ParserAction.EXECUTE, ParserState.CSI_IGNORE);\n table.addMany(EXECUTABLES, ParserState.CSI_INTERMEDIATE, ParserAction.EXECUTE, ParserState.CSI_INTERMEDIATE);\n table.add(0x7f, ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.ESCAPE_INTERMEDIATE, ParserAction.EXECUTE, ParserState.ESCAPE_INTERMEDIATE);\n table.add(0x7f, ParserState.ESCAPE_INTERMEDIATE, ParserAction.IGNORE, ParserState.ESCAPE_INTERMEDIATE);\n // osc\n table.add(0x5d, ParserState.ESCAPE, ParserAction.OSC_START, ParserState.OSC_STRING);\n table.addMany(PRINTABLES, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);\n table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);\n // sos/pm\n table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);\n table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);\n // apc\n table.add(0x5f, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.APC_ENTRY);\n table.addMany(EXECUTABLES, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.add(0x7f, ParserState.APC_ENTRY, ParserAction.IGNORE, ParserState.APC_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.APC_ENTRY, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.APC_ENTRY, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x30, 0x7f), ParserState.APC_INTERMEDIATE, ParserAction.APC_START, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.APC_INTERMEDIATE, ParserAction.COLLECT, ParserState.APC_INTERMEDIATE);\n table.add(0x7f, ParserState.APC_INTERMEDIATE, ParserAction.IGNORE, ParserState.APC_INTERMEDIATE);\n table.addMany(PRINTABLES, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany(r(0x08, 0x0e), ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n table.add(0x7f, ParserState.APC_PASSTHROUGH, ParserAction.IGNORE, ParserState.APC_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_PASSTHROUGH, ParserAction.APC_END, ParserState.GROUND);\n // csi entries\n table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_ENTRY, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.CSI_PARAM, ParserAction.PARAM, ParserState.CSI_PARAM);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_PARAM, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.CSI_PARAM, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x20, 0x40), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(0x7f, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_ENTRY, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.CSI_INTERMEDIATE, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.CSI_INTERMEDIATE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.CSI_INTERMEDIATE, ParserAction.CSI_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x20, 0x30), ParserState.CSI_PARAM, ParserAction.COLLECT, ParserState.CSI_INTERMEDIATE);\n // esc_intermediate\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.ESCAPE_INTERMEDIATE, ParserAction.COLLECT, ParserState.ESCAPE_INTERMEDIATE);\n table.addMany(r(0x30, 0x7f), ParserState.ESCAPE_INTERMEDIATE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x30, 0x50), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x51, 0x58), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany([0x59, 0x5a, 0x5c], ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n table.addMany(r(0x60, 0x7f), ParserState.ESCAPE, ParserAction.ESC_DISPATCH, ParserState.GROUND);\n // dcs entry\n table.add(0x50, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.DCS_ENTRY);\n table.addMany(EXECUTABLES, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.add(0x7f, ParserState.DCS_ENTRY, ParserAction.IGNORE, ParserState.DCS_ENTRY);\n table.addMany(r(0x20, 0x30), ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_ENTRY, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_ENTRY, ParserAction.COLLECT, ParserState.DCS_PARAM);\n table.addMany(EXECUTABLES, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x80), ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(EXECUTABLES, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.add(0x7f, ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_PARAM);\n table.addMany(r(0x30, 0x3c), ParserState.DCS_PARAM, ParserAction.PARAM, ParserState.DCS_PARAM);\n table.addMany([0x3c, 0x3d, 0x3e, 0x3f], ParserState.DCS_PARAM, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_PARAM, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(EXECUTABLES, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.add(0x7f, ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x20, 0x30), ParserState.DCS_INTERMEDIATE, ParserAction.COLLECT, ParserState.DCS_INTERMEDIATE);\n table.addMany(r(0x30, 0x40), ParserState.DCS_INTERMEDIATE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_INTERMEDIATE, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_PARAM, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(r(0x40, 0x7f), ParserState.DCS_ENTRY, ParserAction.DCS_HOOK, ParserState.DCS_PASSTHROUGH);\n table.addMany(EXECUTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.addMany(PRINTABLES, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(0x7f, ParserState.DCS_PASSTHROUGH, ParserAction.IGNORE, ParserState.DCS_PASSTHROUGH);\n table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.DCS_PASSTHROUGH, ParserAction.DCS_UNHOOK, ParserState.GROUND);\n // special handling of unicode chars\n table.add(NON_ASCII_PRINTABLE, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);\n table.add(NON_ASCII_PRINTABLE, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);\n table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);\n table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);\n table.add(NON_ASCII_PRINTABLE, ParserState.APC_PASSTHROUGH, ParserAction.APC_PUT, ParserState.APC_PASSTHROUGH);\n return table;\n})();\n\n\n/**\n * EscapeSequenceParser.\n * This class implements the ANSI/DEC compatible parser described by\n * Paul Williams (https://vt100.net/emu/dec_ansi_parser).\n *\n * To implement custom ANSI compliant escape sequences it is not needed to\n * alter this parser, instead consider registering a custom handler.\n * For non ANSI compliant sequences change the transition table with\n * the optional `transitions` constructor argument and\n * reimplement the `parse` method.\n *\n * This parser is currently hardcoded to operate in ZDM (Zero Default Mode)\n * as suggested by the original parser, thus empty parameters are set to 0.\n * This is not in line with the latest ECMA-48 specification\n * (ZDM was part of the early specs and got completely removed later on).\n *\n * Other than the original parser from vt100.net this parser supports\n * sub parameters in digital parameters separated by colons. Empty sub parameters\n * are set to -1 (no ZDM for sub parameters).\n *\n * About prefix and intermediate bytes:\n * This parser follows the assumptions of the vt100.net parser with these restrictions:\n * - only one prefix byte is allowed as first parameter byte, byte range 0x3c .. 0x3f\n * - max. two intermediates are respected, byte range 0x20 .. 0x2f\n * Note that this is not in line with ECMA-48 which does not limit either of those.\n * Furthermore ECMA-48 allows the prefix byte range at any param byte position. Currently\n * there are no known sequences that follow the broader definition of the specification.\n *\n * TODO: implement error recovery hook via error handler return values\n */\nexport class EscapeSequenceParser extends Disposable implements IEscapeSequenceParser {\n public initialState: number;\n public currentState: number;\n public precedingJoinState: number; // UnicodeJoinProperties\n\n // buffers over several parse calls\n protected _params: Params;\n protected _collect: number;\n\n // handler lookup containers\n protected _printHandler: PrintHandlerType;\n protected _executeHandlers: { [flag: number]: ExecuteHandlerType };\n // fast path for EXE bytes < 0x18\n protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];\n protected _csiHandlers: IHandlerCollection;\n protected _escHandlers: IHandlerCollection;\n protected readonly _oscParser: IOscParser;\n protected readonly _dcsParser: IDcsParser;\n protected readonly _apcParser: IApcParser;\n protected _errorHandler: (state: IParsingState) => IParsingState;\n\n // fallback handlers\n protected _printHandlerFb: PrintFallbackHandlerType;\n protected _executeHandlerFb: ExecuteFallbackHandlerType;\n protected _csiHandlerFb: CsiFallbackHandlerType;\n protected _escHandlerFb: EscFallbackHandlerType;\n protected _errorHandlerFb: (state: IParsingState) => IParsingState;\n\n // parser stack save for async handler support\n protected _parseStack: IParserStackState = {\n state: ParserStackType.NONE,\n handlers: [],\n handlerPos: 0,\n transition: 0,\n chunkPos: 0\n };\n\n constructor(\n protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE\n ) {\n super();\n\n this.initialState = ParserState.GROUND;\n this.currentState = this.initialState;\n this._params = new Params(); // defaults to 32 storable params/subparams\n this._params.addParam(0); // ZDM\n this._collect = 0;\n this.precedingJoinState = 0;\n\n // set default fallback handlers and handler lookup containers\n this._printHandlerFb = (data, start, end): void => { };\n this._executeHandlerFb = (code: number): void => { };\n this._csiHandlerFb = (ident: number, params: IParams): void => { };\n this._escHandlerFb = (ident: number): void => { };\n this._errorHandlerFb = (state: IParsingState): IParsingState => state;\n this._printHandler = this._printHandlerFb;\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._csiHandlers = Object.create(null);\n this._escHandlers = Object.create(null);\n this._register(toDisposable(() => {\n this._csiHandlers = Object.create(null);\n this._executeHandlers = Object.create(null);\n this._executeHandlersArr = new Array(0x18).fill(undefined);\n this._escHandlers = Object.create(null);\n }));\n this._oscParser = this._register(new OscParser());\n this._dcsParser = this._register(new DcsParser());\n this._apcParser = this._register(new ApcParser());\n this._errorHandler = this._errorHandlerFb;\n\n // swallow 7bit ST (ESC+\\)\n this.registerEscHandler({ final: '\\\\' }, () => true);\n }\n\n protected _identifier(id: IFunctionIdentifier, finalRange: number[] = [0x40, 0x7e]): number {\n let res = 0;\n if (id.prefix) {\n if (id.prefix.length > 1) {\n throw new Error('only one byte as prefix supported');\n }\n res = id.prefix.charCodeAt(0);\n if (res < 0x3c || res > 0x3f) {\n throw new Error('prefix must be in range 0x3c .. 0x3f');\n }\n }\n if (id.intermediates) {\n if (id.intermediates.length > 2) {\n throw new Error('only two bytes as intermediates are supported');\n }\n for (let i = 0; i < id.intermediates.length; ++i) {\n const intermediate = id.intermediates.charCodeAt(i);\n if (0x20 > intermediate || intermediate > 0x2f) {\n throw new Error('intermediate must be in range 0x20 .. 0x2f');\n }\n res <<= 8;\n res |= intermediate;\n }\n }\n if (id.final.length !== 1) {\n throw new Error('final must be a single byte');\n }\n const finalCode = id.final.charCodeAt(0);\n if (finalRange[0] > finalCode || finalCode > finalRange[1]) {\n throw new Error(`final must be in range ${finalRange[0]} .. ${finalRange[1]}`);\n }\n res <<= 8;\n res |= finalCode;\n\n return res;\n }\n\n public identToString(ident: number): string {\n const res: string[] = [];\n while (ident) {\n res.push(String.fromCharCode(ident & 0xFF));\n ident >>= 8;\n }\n return res.reverse().join('');\n }\n\n public setPrintHandler(handler: PrintHandlerType): void {\n this._printHandler = handler;\n }\n public clearPrintHandler(): void {\n this._printHandler = this._printHandlerFb;\n }\n\n public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {\n const ident = this._identifier(id, [0x30, 0x7e]);\n this._escHandlers[ident] ??= [];\n const handlerList = this._escHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearEscHandler(id: IFunctionIdentifier): void {\n if (this._escHandlers[this._identifier(id, [0x30, 0x7e])]) delete this._escHandlers[this._identifier(id, [0x30, 0x7e])];\n }\n public setEscHandlerFallback(handler: EscFallbackHandlerType): void {\n this._escHandlerFb = handler;\n }\n\n public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {\n const code = flag.charCodeAt(0);\n this._executeHandlers[code] = handler;\n if (code < 0x18) this._executeHandlersArr[code] = handler;\n }\n public clearExecuteHandler(flag: string): void {\n const code = flag.charCodeAt(0);\n if (this._executeHandlers[code]) delete this._executeHandlers[code];\n if (code < 0x18) this._executeHandlersArr[code] = undefined;\n }\n public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {\n this._executeHandlerFb = handler;\n }\n\n public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {\n const ident = this._identifier(id);\n this._csiHandlers[ident] ??= [];\n const handlerList = this._csiHandlers[ident];\n handlerList.push(handler);\n return {\n dispose: () => {\n const handlerIndex = handlerList.indexOf(handler);\n if (handlerIndex !== -1) {\n handlerList.splice(handlerIndex, 1);\n }\n }\n };\n }\n public clearCsiHandler(id: IFunctionIdentifier): void {\n if (this._csiHandlers[this._identifier(id)]) delete this._csiHandlers[this._identifier(id)];\n }\n public setCsiHandlerFallback(callback: (ident: number, params: IParams) => void): void {\n this._csiHandlerFb = callback;\n }\n\n public registerDcsHandler(id: IFunctionIdentifier, handler: IDcsHandler): IDisposable {\n return this._dcsParser.registerHandler(this._identifier(id), handler);\n }\n public clearDcsHandler(id: IFunctionIdentifier): void {\n this._dcsParser.clearHandler(this._identifier(id));\n }\n public setDcsHandlerFallback(handler: DcsFallbackHandlerType): void {\n this._dcsParser.setHandlerFallback(handler);\n }\n\n public registerOscHandler(ident: number, handler: IOscHandler): IDisposable {\n return this._oscParser.registerHandler(ident, handler);\n }\n public clearOscHandler(ident: number): void {\n this._oscParser.clearHandler(ident);\n }\n public setOscHandlerFallback(handler: OscFallbackHandlerType): void {\n this._oscParser.setHandlerFallback(handler);\n }\n\n public registerApcHandler(id: IFunctionIdentifier, handler: IApcHandler): IDisposable {\n id.prefix = undefined; // APC does not support prefix byte\n return this._apcParser.registerHandler(this._identifier(id, [0x30, 0x7e]), handler);\n }\n public clearApcHandler(id: IFunctionIdentifier): void {\n id.prefix = undefined; // APC does not support prefix byte\n this._apcParser.clearHandler(this._identifier(id, [0x30, 0x7e]));\n }\n public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {\n this._apcParser.setHandlerFallback(handler);\n }\n\n public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {\n this._errorHandler = callback;\n }\n public clearErrorHandler(): void {\n this._errorHandler = this._errorHandlerFb;\n }\n\n /**\n * Reset parser to initial values.\n *\n * This can also be used to lift the improper continuation error condition\n * when dealing with async handlers. Use this only as a last resort to silence\n * that error when the terminal has no pending data to be processed. Note that\n * the interrupted async handler might continue its work in the future messing\n * up the terminal state even further.\n */\n public reset(): void {\n this.currentState = this.initialState;\n this._oscParser.reset();\n this._dcsParser.reset();\n this._apcParser.reset();\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n // abort pending continuation from async handler\n // Here the RESET type indicates, that the next parse call will\n // ignore any saved stack, instead continues sync with next codepoint from GROUND\n if (this._parseStack.state !== ParserStackType.NONE) {\n this._parseStack.state = ParserStackType.RESET;\n this._parseStack.handlers = []; // also release handlers ref\n }\n }\n\n /**\n * Async parse support.\n */\n protected _preserveStack(\n state: ParserStackType,\n handlers: ResumableHandlersType,\n handlerPos: number,\n transition: number,\n chunkPos: number\n ): void {\n this._parseStack.state = state;\n this._parseStack.handlers = handlers;\n this._parseStack.handlerPos = handlerPos;\n this._parseStack.transition = transition;\n this._parseStack.chunkPos = chunkPos;\n }\n\n /**\n * Parse UTF32 codepoints in `data` up to `length`.\n *\n * Note: For several actions with high data load the parsing is optimized\n * by using local read ahead loops with hardcoded conditions to\n * avoid costly table lookups. Make sure that any change of table values\n * will be reflected in the loop conditions as well and vice versa.\n * Affected states/actions:\n * - GROUND:PRINT\n * - CSI_PARAM:PARAM\n * - DCS_PARAM:PARAM\n * - OSC_STRING:OSC_PUT\n * - DCS_PASSTHROUGH:DCS_PUT\n *\n * Additionally the following fast paths exist before the table lookup:\n * - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)\n * - 7-bit CSI sequences without intermediates (ESC [ params final)\n *\n * Note on asynchronous handler support:\n * Any handler returning a promise will be treated as asynchronous.\n * To keep the in-band blocking working for async handlers, `parse` pauses execution,\n * creates a stack save and returns the promise to the caller.\n * For proper continuation of the paused state it is important\n * to await the promise resolving. On resolve the parse must be repeated\n * with the same chunk of data and the resolved value in `promiseResult`\n * until no promise is returned.\n *\n * Important: With only sync handlers defined, parsing is completely synchronous as well.\n * As soon as an async handler is involved, synchronous parsing is not possible anymore.\n *\n * Boilerplate for proper parsing of multiple chunks with async handlers:\n *\n * ```typescript\n * async function parseMultipleChunks(chunks: Uint32Array[]): Promise {\n * for (const chunk of chunks) {\n * let result: void | Promise;\n * let prev: boolean | undefined;\n * while (result = parser.parse(chunk, chunk.length, prev)) {\n * prev = await result;\n * }\n * }\n * // finished parsing all chunks...\n * }\n * ```\n */\n public parse(data: Uint32Array, length: number, promiseResult?: boolean): void | Promise {\n let code: number;\n let transition: number;\n let start = 0;\n let handlerResult: void | boolean | Promise;\n\n // resume from async handler\n if (this._parseStack.state) {\n // allow sync parser reset even in continuation mode\n // Note: can be used to recover parser from improper continuation error below\n if (this._parseStack.state === ParserStackType.RESET) {\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1; // continue with next codepoint in GROUND\n } else {\n if (promiseResult === undefined || this._parseStack.state === ParserStackType.FAIL) {\n /**\n * Reject further parsing on improper continuation after pausing. This is a really bad\n * condition with screwed up execution order and prolly messed up terminal state,\n * therefore we exit hard with an exception and reject any further parsing.\n *\n * Note: With `Terminal.write` usage this exception should never occur, as the top level\n * calls are guaranteed to handle async conditions properly. If you ever encounter this\n * exception in your terminal integration it indicates, that you injected data chunks to\n * `InputHandler.parse` or `EscapeSequenceParser.parse` synchronously without waiting for\n * continuation of a running async handler.\n *\n * It is possible to get rid of this error by calling `reset`. But dont rely on that, as\n * the pending async handler still might mess up the terminal later. Instead fix the\n * faulty async handling, so this error will not be thrown anymore.\n */\n this._parseStack.state = ParserStackType.FAIL;\n throw new Error('improper continuation due to previous async handler, giving up parsing');\n }\n\n // we have to resume the old handler loop if:\n // - return value of the promise was `false`\n // - handlers are not exhausted yet\n const handlers = this._parseStack.handlers;\n let handlerPos = this._parseStack.handlerPos - 1;\n switch (this._parseStack.state) {\n case ParserStackType.CSI:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as CsiHandlerType[])[handlerPos](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.ESC:\n if (promiseResult === false && handlerPos > -1) {\n for (; handlerPos >= 0; handlerPos--) {\n handlerResult = (handlers as EscHandlerType[])[handlerPos]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._parseStack.handlerPos = handlerPos;\n return handlerResult;\n }\n }\n }\n this._parseStack.handlers = [];\n break;\n case ParserStackType.DCS:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.OSC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserStackType.APC:\n code = data[this._parseStack.chunkPos];\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);\n if (handlerResult) {\n return handlerResult;\n }\n if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n break;\n }\n // cleanup before continuing with the main sync loop\n this._parseStack.state = ParserStackType.NONE;\n start = this._parseStack.chunkPos + 1;\n this.precedingJoinState = 0;\n this.currentState = this._parseStack.transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n\n // continue with main sync loop\n\n // process input string\n for (let i = start; i < length; ++i) {\n code = data[i];\n\n // EXE fast-path: common control bytes (0x00-0x17) in non-payload states\n if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {\n (this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);\n this.precedingJoinState = 0;\n continue;\n }\n\n // CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop\n if (code === 0x1b\n && this.currentState < ParserState.OSC_STRING\n && i + 2 < length && data[i + 1] === 0x5b\n ) {\n this._params.resetZdm();\n this._collect = 0;\n let k = i + 2;\n let ch = data[k];\n if (ch >= 0x3c && ch <= 0x3f) {\n this._collect = ch;\n k++;\n }\n let csiDone = false;\n for (; k < length; k++) {\n ch = data[k];\n if (ch >= 0x30 && ch <= 0x39) {\n this._params.addDigit(ch - 48);\n } else if (ch === 0x3b) {\n this._params.addParam(0);\n } else if (ch === 0x3a) {\n this._params.addSubParam(-1);\n } else if (ch >= 0x40 && ch <= 0x7e) {\n const handlers = this._csiHandlers[this._collect << 8 | ch];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | ch, this._params);\n }\n this.precedingJoinState = 0;\n i = k;\n this.currentState = ParserState.GROUND;\n csiDone = true;\n break;\n } else {\n break;\n }\n }\n if (!csiDone) {\n i = k - 1;\n this.currentState = ParserState.CSI_PARAM;\n }\n continue;\n }\n\n // normal transition & action lookup\n transition = this._transitions.table[\n this.currentState << TableAccess.INDEX_STATE_SHIFT |\n (code < NON_ASCII_PRINTABLE ? code : NON_ASCII_PRINTABLE)\n ];\n switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {\n case ParserAction.PRINT:\n // Note: 0x20 (SP) is included, 0x7F (DEL) is excluded\n let c = i;\n const l4 = length - 4;\n while (c < l4\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n && data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)\n ) {}\n if (c >= l4) {\n while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {\n c++;\n }\n }\n this._printHandler(data, i, c);\n i = c - 1;\n break;\n case ParserAction.EXECUTE:\n if (this._executeHandlers[code]) this._executeHandlers[code]();\n else this._executeHandlerFb(code);\n this.precedingJoinState = 0;\n break;\n case ParserAction.IGNORE:\n break;\n case ParserAction.ERROR:\n const inject: IParsingState = this._errorHandler(\n {\n position: i,\n code,\n currentState: this.currentState,\n collect: this._collect,\n params: this._params,\n abort: false\n });\n if (inject.abort) return;\n // inject values: currently not implemented\n break;\n case ParserAction.CSI_DISPATCH:\n // Trigger CSI Handler\n const handlers = this._csiHandlers[this._collect << 8 | code];\n let j = handlers ? handlers.length - 1 : -1;\n for (; j >= 0; j--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlers[j](this._params);\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.CSI, handlers, j, transition, i);\n return handlerResult;\n }\n }\n if (j < 0) {\n this._csiHandlerFb(this._collect << 8 | code, this._params);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.PARAM:\n // inner loop: digits (0x30 - 0x39) and ; (0x3b) and : (0x3a)\n do {\n switch (code) {\n case 0x3b:\n this._params.addParam(0); // ZDM\n break;\n case 0x3a:\n this._params.addSubParam(-1);\n break;\n default: // 0x30 - 0x39\n this._params.addDigit(code - 48);\n }\n } while (++i < length && (code = data[i]) > 0x2f && code < 0x3c);\n i--;\n break;\n case ParserAction.COLLECT:\n this._collect <<= 8;\n this._collect |= code;\n break;\n case ParserAction.ESC_DISPATCH:\n const handlersEsc = this._escHandlers[this._collect << 8 | code];\n let jj = handlersEsc ? handlersEsc.length - 1 : -1;\n for (; jj >= 0; jj--) {\n // true means success and to stop bubbling\n // a promise indicates an async handler that needs to finish before progressing\n handlerResult = handlersEsc[jj]();\n if (handlerResult === true) {\n break;\n } else if (handlerResult instanceof Promise) {\n this._preserveStack(ParserStackType.ESC, handlersEsc, jj, transition, i);\n return handlerResult;\n }\n }\n if (jj < 0) {\n this._escHandlerFb(this._collect << 8 | code);\n }\n this.precedingJoinState = 0;\n break;\n case ParserAction.CLEAR:\n this._params.resetZdm();\n this._collect = 0;\n break;\n case ParserAction.DCS_HOOK:\n this._dcsParser.hook(this._collect << 8 | code, this._params);\n break;\n case ParserAction.DCS_PUT:\n // inner loop - exit DCS_PUT: 0x18, 0x1a, 0x1b, 0x7f, 0x80 - 0x9f\n // unhook triggered by: 0x1b, 0x9c (success) and 0x18, 0x1a (abort)\n for (let j = i + 1; ; ++j) {\n if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._dcsParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.DCS_UNHOOK:\n handlerResult = this._dcsParser.unhook(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.DCS, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.OSC_START:\n this._oscParser.start();\n break;\n case ParserAction.OSC_PUT:\n // inner loop: 0x20 (SP) included, 0x7F (DEL) included\n for (let j = i + 1; ; j++) {\n if (j >= length || (code = data[j]) < 0x20 || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {\n this._oscParser.put(data, i, j);\n i = j - 1;\n break;\n }\n }\n break;\n case ParserAction.OSC_END:\n handlerResult = this._oscParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.OSC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n case ParserAction.APC_START:\n this._apcParser.start(this._collect << 8 | code);\n break;\n case ParserAction.APC_PUT:\n // inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c\n // allowed: 00/08 .. 00/13, 02/00 .. 07/14 + NON_ASCII_PRINTABLE\n for (let j = i + 1; ; ++j) {\n if (j < length && (\n (data[j] >= 0x20 && data[j] < 0x7f) || (data[j] >= 0x08 && data[j] < 0x0e) || data[j] >= NON_ASCII_PRINTABLE\n )) continue;\n this._apcParser.put(data, i, j);\n i = j - 1;\n break;\n }\n break;\n case ParserAction.APC_END:\n handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);\n if (handlerResult) {\n this._preserveStack(ParserStackType.APC, [], 0, transition, i);\n return handlerResult;\n }\n if (code === 0x1b) transition |= ParserState.ESCAPE;\n this._params.resetZdm();\n this._collect = 0;\n this.precedingJoinState = 0;\n break;\n }\n this.currentState = transition & TableAccess.TRANSITION_STATE_MASK;\n }\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\n// 'rgb:' rule - matching: r/g/b | rr/gg/bb | rrr/ggg/bbb | rrrr/gggg/bbbb (hex digits)\nconst RGB_REX = /^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/;\n// '#...' rule - matching any hex digits\nconst HASH_REX = /^[\\da-f]+$/;\n\n/**\n * Parse color spec to RGB values (8 bit per channel).\n * See `man xparsecolor` for details about certain format specifications.\n *\n * Supported formats:\n * - rgb:// with , , in h | hh | hhh | hhhh\n * - #RGB, #RRGGBB, #RRRGGGBBB, #RRRRGGGGBBBB\n *\n * All other formats like rgbi: or device-independent string specifications\n * with float numbering are not supported.\n */\nexport function parseColor(data: string): [number, number, number] | undefined {\n if (!data) return;\n // also handle uppercases\n let low = data.toLowerCase();\n if (low.startsWith('rgb:')) {\n // 'rgb:' specifier\n low = low.slice(4);\n const m = RGB_REX.exec(low);\n if (m) {\n const base = m[1] ? 15 : m[4] ? 255 : m[7] ? 4095 : 65535;\n return [\n Math.round(parseInt(m[1] || m[4] || m[7] || m[10], 16) / base * 255),\n Math.round(parseInt(m[2] || m[5] || m[8] || m[11], 16) / base * 255),\n Math.round(parseInt(m[3] || m[6] || m[9] || m[12], 16) / base * 255)\n ];\n }\n } else if (low.startsWith('#')) {\n // '#' specifier\n low = low.slice(1);\n if (HASH_REX.exec(low) && [3, 6, 9, 12].includes(low.length)) {\n const adv = low.length / 3;\n const result: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; ++i) {\n const c = parseInt(low.slice(adv * i, adv * i + adv), 16);\n result[i] = adv === 1 ? c << 4 : adv === 2 ? c : adv === 3 ? c >> 4 : c >> 8;\n }\n return result;\n }\n }\n\n // Named colors are currently not supported due to the large addition to the xterm.js bundle size\n // they would add. In order to support named colors, we would need some way of optionally loading\n // additional payloads so startup/download time is not bloated (see #3530).\n}\n\n// pad hex output to requested bit width\nfunction pad(n: number, bits: number): string {\n const s = n.toString(16);\n const s2 = s.length < 2 ? '0' + s : s;\n switch (bits) {\n case 4:\n return s[0];\n case 8:\n return s2;\n case 12:\n return (s2 + s2).slice(0, 3);\n default:\n return s2 + s2;\n }\n}\n\n/**\n * Convert a given color to rgb:../../.. string of `bits` depth.\n */\nexport function toRgbString(color: [number, number, number], bits: number = 16): string {\n const [r, g, b] = color;\n return `rgb:${pad(r, bits)}/${pad(g, bits)}/${pad(b, bits)}`;\n}\n", "/**\n * Copyright (c) 2025 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n/**\n * The xterm.js version. This is updated by the publish script from package.json.\n */\nexport const XTERM_VERSION = '6.1.0-beta.304';\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n */\n\nimport { IInputHandler, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';\nimport { IAttributeData, IBuffer } from './buffer/Types';\nimport { C0, C1 } from './data/EscapeSequences';\nimport { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';\nimport { EscapeSequenceParser } from './parser/EscapeSequenceParser';\nimport { Disposable } from './Lifecycle';\nimport { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';\nimport { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';\nimport { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';\nimport { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';\nimport { CellData } from './buffer/CellData';\nimport { AttributeData } from './buffer/AttributeData';\nimport { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { UnicodeService } from './services/UnicodeService';\nimport { OscHandler } from './parser/OscParser';\nimport { DcsHandler } from './parser/DcsParser';\nimport { ApcHandler } from './parser/ApcParser';\nimport { parseColor } from './input/XParseColor';\nimport { Emitter } from './Event';\nimport { XTERM_VERSION } from './Version';\n\n/**\n * Map collect to glevel. Used in `selectCharset`.\n */\nconst GLEVEL: { [key: string]: number } = { '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2 };\n\n/**\n * Document xterm VT features here that are currently unsupported\n */\n// @vt: #N DCS DECUDK \"User Defined Keys\" \"DCS Ps ; Ps \\| Pt ST\" \"Definitions for user-defined keys.\"\n// @vt: #N DCS XTGETTCAP \"Request Terminfo String\" \"DCS + q Pt ST\" \"Request Terminfo String.\"\n// @vt: #N DCS XTSETTCAP \"Set Terminfo Data\" \"DCS + p Pt ST\" \"Set Terminfo Data.\"\n// @vt: #N OSC 1 \"Set Icon Name\" \"OSC 1 ; Pt BEL\" \"Set icon name.\"\n\n/**\n * Max length of the UTF32 input buffer. Real memory consumption is 4 times higher.\n */\nconst enum Constants {\n MAX_PARSEBUFFER_LENGTH = 131072,\n /** Limit length of title and icon name stacks. */\n STACK_LIMIT = 10,\n // create a warning log if an async handler takes longer than the limit (in ms)\n SLOW_ASYNC_LIMIT = 5000\n}\n\n// map params to window option\nfunction paramToWindowOption(n: number, opts: IWindowOptions): boolean {\n if (n > 24) {\n return opts.setWinLines || false;\n }\n switch (n) {\n case 1: return !!opts.restoreWin;\n case 2: return !!opts.minimizeWin;\n case 3: return !!opts.setWinPosition;\n case 4: return !!opts.setWinSizePixels;\n case 5: return !!opts.raiseWin;\n case 6: return !!opts.lowerWin;\n case 7: return !!opts.refreshWin;\n case 8: return !!opts.setWinSizeChars;\n case 9: return !!opts.maximizeWin;\n case 10: return !!opts.fullscreenWin;\n case 11: return !!opts.getWinState;\n case 13: return !!opts.getWinPosition;\n case 14: return !!opts.getWinSizePixels;\n case 15: return !!opts.getScreenSizePixels;\n case 16: return !!opts.getCellSizePixels;\n case 18: return !!opts.getWinSizeChars;\n case 19: return !!opts.getScreenSizeChars;\n case 20: return !!opts.getIconTitle;\n case 21: return !!opts.getWinTitle;\n case 22: return !!opts.pushTitle;\n case 23: return !!opts.popTitle;\n case 24: return !!opts.setWinLines;\n }\n return false;\n}\n\nexport enum WindowsOptionsReportType {\n GET_WIN_SIZE_PIXELS = 0,\n GET_CELL_SIZE_PIXELS = 1\n}\n\n// Work variables to avoid garbage collection\nlet $temp = 0;\n\n/**\n * The terminal's standard implementation of IInputHandler, this handles all\n * input from the Parser.\n *\n * Refer to http://invisible-island.net/xterm/ctlseqs/ctlseqs.html to understand\n * each function's header comment.\n */\nexport class InputHandler extends Disposable implements IInputHandler {\n private _parseBuffer: Uint32Array = new Uint32Array(4096);\n private _stringDecoder: StringToUtf32 = new StringToUtf32();\n private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32();\n private _windowTitle = '';\n private _iconName = '';\n private _dirtyRowTracker: IDirtyRowTracker;\n protected _windowTitleStack: string[] = [];\n protected _iconNameStack: string[] = [];\n\n private _curAttrData: IAttributeData = DEFAULT_ATTR_DATA.clone();\n public getAttrData(): IAttributeData { return this._curAttrData; }\n private _eraseAttrDataInternal: IAttributeData = DEFAULT_ATTR_DATA.clone();\n\n private _activeBuffer: IBuffer;\n\n private readonly _onRequestBell = this._register(new Emitter());\n public readonly onRequestBell = this._onRequestBell.event;\n private readonly _onRequestRefreshRows = this._register(new Emitter<{ start: number, end: number } | undefined>());\n public readonly onRequestRefreshRows = this._onRequestRefreshRows.event;\n private readonly _onRequestReset = this._register(new Emitter());\n public readonly onRequestReset = this._onRequestReset.event;\n private readonly _onRequestSendFocus = this._register(new Emitter());\n public readonly onRequestSendFocus = this._onRequestSendFocus.event;\n private readonly _onRequestSyncScrollBar = this._register(new Emitter());\n public readonly onRequestSyncScrollBar = this._onRequestSyncScrollBar.event;\n private readonly _onRequestWindowsOptionsReport = this._register(new Emitter());\n public readonly onRequestWindowsOptionsReport = this._onRequestWindowsOptionsReport.event;\n\n private readonly _onA11yChar = this._register(new Emitter());\n public readonly onA11yChar = this._onA11yChar.event;\n private readonly _onA11yTab = this._register(new Emitter());\n public readonly onA11yTab = this._onA11yTab.event;\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n private readonly _onScroll = this._register(new Emitter());\n public readonly onScroll = this._onScroll.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onColor = this._register(new Emitter());\n public readonly onColor = this._onColor.event;\n private readonly _onRequestColorSchemeQuery = this._register(new Emitter());\n public readonly onRequestColorSchemeQuery = this._onRequestColorSchemeQuery.event;\n\n private _parseStack: IParseStack = {\n paused: false,\n cursorStartX: 0,\n cursorStartY: 0,\n decodedLength: 0,\n position: 0\n };\n\n constructor(\n private readonly _bufferService: IBufferService,\n private readonly _charsetService: ICharsetService,\n private readonly _coreService: ICoreService,\n private readonly _logService: ILogService,\n private readonly _optionsService: IOptionsService,\n private readonly _oscLinkService: IOscLinkService,\n private readonly _mouseStateService: IMouseStateService,\n private readonly _unicodeService: IUnicodeService,\n private readonly _parser: IEscapeSequenceParser = new EscapeSequenceParser()\n ) {\n super();\n this._register(this._parser);\n this._dirtyRowTracker = new DirtyRowTracker(this._bufferService);\n\n // Track properties used in performance critical code manually to avoid using slow getters\n this._activeBuffer = this._bufferService.buffer;\n this._register(this._bufferService.buffers.onBufferActivate(e => this._activeBuffer = e.activeBuffer));\n\n /**\n * custom fallback handlers\n */\n this._parser.setCsiHandlerFallback((ident, params) => {\n this._logService.debug('Unknown CSI code: ', { identifier: this._parser.identToString(ident), params: params.toArray() });\n });\n this._parser.setEscHandlerFallback(ident => {\n this._logService.debug('Unknown ESC code: ', { identifier: this._parser.identToString(ident) });\n });\n this._parser.setExecuteHandlerFallback(code => {\n this._logService.debug('Unknown EXECUTE code: ', { code });\n });\n this._parser.setOscHandlerFallback((identifier, action, data) => {\n this._logService.debug('Unknown OSC code: ', { identifier, action, data });\n });\n this._parser.setDcsHandlerFallback((ident, action, payload) => {\n if (action === 'HOOK') {\n payload = payload.toArray();\n }\n this._logService.debug('Unknown DCS code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n this._parser.setApcHandlerFallback((ident, action, payload) => {\n this._logService.debug('Unknown APC code: ', { identifier: this._parser.identToString(ident), action, payload });\n });\n\n /**\n * print handler\n */\n this._parser.setPrintHandler((data, start, end) => this.print(data, start, end));\n\n /**\n * CSI handler\n */\n this._parser.registerCsiHandler({ final: '@' }, params => this.insertChars(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: '@' }, params => this.scrollLeft(params));\n this._parser.registerCsiHandler({ final: 'A' }, params => this.cursorUp(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'A' }, params => this.scrollRight(params));\n this._parser.registerCsiHandler({ final: 'B' }, params => this.cursorDown(params));\n this._parser.registerCsiHandler({ final: 'C' }, params => this.cursorForward(params));\n this._parser.registerCsiHandler({ final: 'D' }, params => this.cursorBackward(params));\n this._parser.registerCsiHandler({ final: 'E' }, params => this.cursorNextLine(params));\n this._parser.registerCsiHandler({ final: 'F' }, params => this.cursorPrecedingLine(params));\n this._parser.registerCsiHandler({ final: 'G' }, params => this.cursorCharAbsolute(params));\n this._parser.registerCsiHandler({ final: 'H' }, params => this.cursorPosition(params));\n this._parser.registerCsiHandler({ final: 'I' }, params => this.cursorForwardTab(params));\n this._parser.registerCsiHandler({ final: 'J' }, params => this.eraseInDisplay(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'J' }, params => this.eraseInDisplay(params, true));\n this._parser.registerCsiHandler({ final: 'K' }, params => this.eraseInLine(params, false));\n this._parser.registerCsiHandler({ prefix: '?', final: 'K' }, params => this.eraseInLine(params, true));\n this._parser.registerCsiHandler({ final: 'L' }, params => this.insertLines(params));\n this._parser.registerCsiHandler({ final: 'M' }, params => this.deleteLines(params));\n this._parser.registerCsiHandler({ final: 'P' }, params => this.deleteChars(params));\n this._parser.registerCsiHandler({ final: 'S' }, params => this.scrollUp(params));\n this._parser.registerCsiHandler({ final: 'T' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: 'X' }, params => this.eraseChars(params));\n this._parser.registerCsiHandler({ final: 'Z' }, params => this.cursorBackwardTab(params));\n this._parser.registerCsiHandler({ final: '^' }, params => this.scrollDown(params));\n this._parser.registerCsiHandler({ final: '`' }, params => this.charPosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'a' }, params => this.hPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'b' }, params => this.repeatPrecedingCharacter(params));\n this._parser.registerCsiHandler({ final: 'c' }, params => this.sendDeviceAttributesPrimary(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'c' }, params => this.sendDeviceAttributesSecondary(params));\n this._parser.registerCsiHandler({ final: 'd' }, params => this.linePosAbsolute(params));\n this._parser.registerCsiHandler({ final: 'e' }, params => this.vPositionRelative(params));\n this._parser.registerCsiHandler({ final: 'f' }, params => this.hVPosition(params));\n this._parser.registerCsiHandler({ final: 'g' }, params => this.tabClear(params));\n this._parser.registerCsiHandler({ final: 'h' }, params => this.setMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this.setModePrivate(params));\n this._parser.registerCsiHandler({ final: 'l' }, params => this.resetMode(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this.resetModePrivate(params));\n this._parser.registerCsiHandler({ final: 'm' }, params => this.charAttributes(params));\n this._parser.registerCsiHandler({ final: 'n' }, params => this.deviceStatus(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'n' }, params => this.deviceStatusPrivate(params));\n this._parser.registerCsiHandler({ intermediates: '!', final: 'p' }, params => this.softReset(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'q' }, params => this.sendXtVersion(params));\n this._parser.registerCsiHandler({ intermediates: ' ', final: 'q' }, params => this.setCursorStyle(params));\n this._parser.registerCsiHandler({ final: 'r' }, params => this.setScrollRegion(params));\n this._parser.registerCsiHandler({ final: 's' }, params => this.saveCursor(params));\n this._parser.registerCsiHandler({ final: 't' }, params => this.windowOptions(params));\n this._parser.registerCsiHandler({ final: 'u' }, params => this.restoreCursor(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '}' }, params => this.insertColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\\'', final: '~' }, params => this.deleteColumns(params));\n this._parser.registerCsiHandler({ intermediates: '\"', final: 'q' }, params => this.selectProtected(params));\n this._parser.registerCsiHandler({ intermediates: '$', final: 'p' }, params => this.requestMode(params, true));\n this._parser.registerCsiHandler({ prefix: '?', intermediates: '$', final: 'p' }, params => this.requestMode(params, false));\n\n // Kitty keyboard protocol handlers\n this._parser.registerCsiHandler({ prefix: '=', final: 'u' }, params => this.kittyKeyboardSet(params));\n this._parser.registerCsiHandler({ prefix: '?', final: 'u' }, params => this.kittyKeyboardQuery(params));\n this._parser.registerCsiHandler({ prefix: '>', final: 'u' }, params => this.kittyKeyboardPush(params));\n this._parser.registerCsiHandler({ prefix: '<', final: 'u' }, params => this.kittyKeyboardPop(params));\n\n /**\n * execute handler\n */\n this._parser.setExecuteHandler(C0.BEL, () => this.bell());\n this._parser.setExecuteHandler(C0.LF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.VT, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.FF, () => this.lineFeed());\n this._parser.setExecuteHandler(C0.CR, () => this.carriageReturn());\n this._parser.setExecuteHandler(C0.BS, () => this.backspace());\n this._parser.setExecuteHandler(C0.HT, () => this.tab());\n this._parser.setExecuteHandler(C0.SO, () => this.shiftOut());\n this._parser.setExecuteHandler(C0.SI, () => this.shiftIn());\n // FIXME: What do to with missing? Old code just added those to print.\n\n this._parser.setExecuteHandler(C1.IND, () => this.index());\n this._parser.setExecuteHandler(C1.NEL, () => this.nextLine());\n this._parser.setExecuteHandler(C1.HTS, () => this.tabSet());\n\n /**\n * OSC handler\n */\n // 0 - icon name + title\n this._parser.registerOscHandler(0, new OscHandler(data => { this.setTitle(data); this.setIconName(data); return true; }));\n // 1 - icon name\n this._parser.registerOscHandler(1, new OscHandler(data => this.setIconName(data)));\n // 2 - title\n this._parser.registerOscHandler(2, new OscHandler(data => this.setTitle(data)));\n // 3 - set property X in the form \"prop=value\"\n // 4 - Change Color Number\n this._parser.registerOscHandler(4, new OscHandler(data => this.setOrReportIndexedColor(data)));\n // 5 - Change Special Color Number\n // 6 - Enable/disable Special Color Number c\n // 7 - current directory? (not in xterm spec, see https://gitlab.com/gnachman/iterm2/issues/3939)\n // 8 - create hyperlink (not in xterm spec, see https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)\n this._parser.registerOscHandler(8, new OscHandler(data => this.setHyperlink(data)));\n // 10 - Change VT100 text foreground color to Pt.\n this._parser.registerOscHandler(10, new OscHandler(data => this.setOrReportFgColor(data)));\n // 11 - Change VT100 text background color to Pt.\n this._parser.registerOscHandler(11, new OscHandler(data => this.setOrReportBgColor(data)));\n // 12 - Change text cursor color to Pt.\n this._parser.registerOscHandler(12, new OscHandler(data => this.setOrReportCursorColor(data)));\n // 13 - Change mouse foreground color to Pt.\n // 14 - Change mouse background color to Pt.\n // 15 - Change Tektronix foreground color to Pt.\n // 16 - Change Tektronix background color to Pt.\n // 17 - Change highlight background color to Pt.\n // 18 - Change Tektronix cursor color to Pt.\n // 19 - Change highlight foreground color to Pt.\n // 46 - Change Log File to Pt.\n // 50 - Set Font to Pt.\n // 51 - reserved for Emacs shell.\n // 52 - Manipulate Selection Data.\n // 104 ; c - Reset Color Number c.\n this._parser.registerOscHandler(104, new OscHandler(data => this.restoreIndexedColor(data)));\n // 105 ; c - Reset Special Color Number c.\n // 106 ; c; f - Enable/disable Special Color Number c.\n // 110 - Reset VT100 text foreground color.\n this._parser.registerOscHandler(110, new OscHandler(data => this.restoreFgColor(data)));\n // 111 - Reset VT100 text background color.\n this._parser.registerOscHandler(111, new OscHandler(data => this.restoreBgColor(data)));\n // 112 - Reset text cursor color.\n this._parser.registerOscHandler(112, new OscHandler(data => this.restoreCursorColor(data)));\n // 113 - Reset mouse foreground color.\n // 114 - Reset mouse background color.\n // 115 - Reset Tektronix foreground color.\n // 116 - Reset Tektronix background color.\n // 117 - Reset highlight color.\n // 118 - Reset Tektronix cursor color.\n // 119 - Reset highlight foreground color.\n\n /**\n * ESC handlers\n */\n this._parser.registerEscHandler({ final: '7' }, () => this.saveCursor());\n this._parser.registerEscHandler({ final: '8' }, () => this.restoreCursor());\n this._parser.registerEscHandler({ final: 'D' }, () => this.index());\n this._parser.registerEscHandler({ final: 'E' }, () => this.nextLine());\n this._parser.registerEscHandler({ final: 'H' }, () => this.tabSet());\n this._parser.registerEscHandler({ final: 'M' }, () => this.reverseIndex());\n this._parser.registerEscHandler({ final: '=' }, () => this.keypadApplicationMode());\n this._parser.registerEscHandler({ final: '>' }, () => this.keypadNumericMode());\n this._parser.registerEscHandler({ final: 'c' }, () => this.fullReset());\n this._parser.registerEscHandler({ final: 'n' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: 'o' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '|' }, () => this.setgLevel(3));\n this._parser.registerEscHandler({ final: '}' }, () => this.setgLevel(2));\n this._parser.registerEscHandler({ final: '~' }, () => this.setgLevel(1));\n this._parser.registerEscHandler({ intermediates: '%', final: '@' }, () => this.selectDefaultCharset());\n this._parser.registerEscHandler({ intermediates: '%', final: 'G' }, () => this.selectDefaultCharset());\n for (const flag in CHARSETS) {\n this._parser.registerEscHandler({ intermediates: '(', final: flag }, () => this.selectCharset('(' + flag));\n this._parser.registerEscHandler({ intermediates: ')', final: flag }, () => this.selectCharset(')' + flag));\n this._parser.registerEscHandler({ intermediates: '*', final: flag }, () => this.selectCharset('*' + flag));\n this._parser.registerEscHandler({ intermediates: '+', final: flag }, () => this.selectCharset('+' + flag));\n this._parser.registerEscHandler({ intermediates: '-', final: flag }, () => this.selectCharset('-' + flag));\n this._parser.registerEscHandler({ intermediates: '.', final: flag }, () => this.selectCharset('.' + flag));\n this._parser.registerEscHandler({ intermediates: '/', final: flag }, () => this.selectCharset('/' + flag)); // TODO: supported?\n }\n this._parser.registerEscHandler({ intermediates: '#', final: '8' }, () => this.screenAlignmentPattern());\n\n /**\n * error handler\n */\n this._parser.setErrorHandler((state: IParsingState) => {\n this._logService.error('Parsing error: ', state);\n return state;\n });\n\n /**\n * DCS handler\n */\n this._parser.registerDcsHandler({ intermediates: '$', final: 'q' }, new DcsHandler((data, params) => this.requestStatusString(data, params)));\n }\n\n /**\n * Async parse support.\n */\n private _preserveStack(cursorStartX: number, cursorStartY: number, decodedLength: number, position: number): void {\n this._parseStack.paused = true;\n this._parseStack.cursorStartX = cursorStartX;\n this._parseStack.cursorStartY = cursorStartY;\n this._parseStack.decodedLength = decodedLength;\n this._parseStack.position = position;\n }\n\n private _logSlowResolvingAsync(p: Promise): void {\n // log a limited warning about an async handler taking too long\n if (this._logService.logLevel <= LogLevelEnum.WARN) {\n let slowTimeout: ReturnType | undefined;\n const slowPromise = new Promise((_res, rej) => {\n slowTimeout = setTimeout(() => rej('#SLOW_TIMEOUT'), Constants.SLOW_ASYNC_LIMIT);\n });\n Promise.race([p, slowPromise])\n .then(() => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n }, err => {\n if (slowTimeout !== undefined) {\n clearTimeout(slowTimeout);\n }\n if (err !== '#SLOW_TIMEOUT') {\n throw err;\n }\n console.warn(`async parser handler taking longer than ${Constants.SLOW_ASYNC_LIMIT} ms`);\n });\n }\n }\n\n private _getCurrentLinkId(): number {\n return this._curAttrData.extended.urlId;\n }\n\n /**\n * Parse call with async handler support.\n *\n * Whether the stack state got preserved for the next call, is indicated by the return value:\n * - undefined (void):\n * all handlers were sync, no stack save, continue normally with next chunk\n * - Promise\\:\n * execution stopped at async handler, stack saved, continue with same chunk and the promise\n * resolve value as `promiseResult` until the method returns `undefined`\n *\n * Note: This method should only be called by `Terminal.write` to ensure correct execution order\n * and proper continuation of async parser handlers.\n */\n public parse(data: string | Uint8Array, promiseResult?: boolean): void | Promise {\n let result: void | Promise;\n let cursorStartX = this._activeBuffer.x;\n let cursorStartY = this._activeBuffer.y;\n let start = 0;\n const wasPaused = this._parseStack.paused;\n\n if (wasPaused) {\n // assumption: _parseBuffer never mutates between async calls\n if (result = this._parser.parse(this._parseBuffer, this._parseStack.decodedLength, promiseResult)) {\n this._logSlowResolvingAsync(result);\n return result;\n }\n cursorStartX = this._parseStack.cursorStartX;\n cursorStartY = this._parseStack.cursorStartY;\n this._parseStack.paused = false;\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n start = this._parseStack.position + Constants.MAX_PARSEBUFFER_LENGTH;\n }\n }\n\n // Log debug data, the log level gate is to prevent extra work in this hot path\n if (this._logService.logLevel <= LogLevelEnum.DEBUG) {\n this._logService.debug(`parsing data ${typeof data === 'string' ? ` \"${data}\"` : ` \"${Array.prototype.map.call(data, e => String.fromCharCode(e)).join('')}\"`}`);\n }\n if (this._logService.logLevel === LogLevelEnum.TRACE) {\n this._logService.trace(`parsing data (codes)`, typeof data === 'string'\n ? data.split('').map(e => e.charCodeAt(0))\n : data\n );\n }\n\n // resize input buffer if needed\n if (this._parseBuffer.length < data.length) {\n if (this._parseBuffer.length < Constants.MAX_PARSEBUFFER_LENGTH) {\n this._parseBuffer = new Uint32Array(Math.min(data.length, Constants.MAX_PARSEBUFFER_LENGTH));\n }\n }\n\n // Clear the dirty row service so we know which lines changed as a result of parsing\n // Important: do not clear between async calls, otherwise we lost pending update information.\n if (!wasPaused) {\n this._dirtyRowTracker.clearRange();\n }\n\n // process big data in smaller chunks\n if (data.length > Constants.MAX_PARSEBUFFER_LENGTH) {\n for (let i = start; i < data.length; i += Constants.MAX_PARSEBUFFER_LENGTH) {\n const end = i + Constants.MAX_PARSEBUFFER_LENGTH < data.length ? i + Constants.MAX_PARSEBUFFER_LENGTH : data.length;\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data.substring(i, end), this._parseBuffer)\n : this._utf8Decoder.decode(data.subarray(i, end), this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, i);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n } else {\n if (!wasPaused) {\n const len = (typeof data === 'string')\n ? this._stringDecoder.decode(data, this._parseBuffer)\n : this._utf8Decoder.decode(data, this._parseBuffer);\n if (result = this._parser.parse(this._parseBuffer, len)) {\n this._preserveStack(cursorStartX, cursorStartY, len, 0);\n this._logSlowResolvingAsync(result);\n return result;\n }\n }\n }\n\n if (this._activeBuffer.x !== cursorStartX || this._activeBuffer.y !== cursorStartY) {\n this._onCursorMove.fire();\n }\n\n // Refresh any dirty rows accumulated as part of parsing, fire only for rows within the\n // _viewport_ which is relative to ydisp, not relative to ybase.\n const viewportEnd = this._dirtyRowTracker.end + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n const viewportStart = this._dirtyRowTracker.start + (this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n if (viewportStart < this._bufferService.rows) {\n this._onRequestRefreshRows.fire({\n start: Math.min(viewportStart, this._bufferService.rows - 1),\n end: Math.min(viewportEnd, this._bufferService.rows - 1)\n });\n }\n }\n\n public print(data: Uint32Array, start: number, end: number): void {\n let code: number;\n let chWidth: number;\n const charset = this._charsetService.charset;\n const screenReaderMode = this._optionsService.rawOptions.screenReaderMode;\n const cols = this._bufferService.cols;\n const wraparoundMode = this._coreService.decPrivateModes.wraparound;\n const insertMode = this._coreService.modes.insertMode;\n const curAttr = this._curAttrData;\n let bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n\n // Defensive check: bufferRow can be undefined if a resize occurred mid-write due to async\n // scheduling gaps in WriteBuffer. See https://github.com/xtermjs/xterm.js/issues/5597\n if (!bufferRow) {\n return;\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n // handle wide chars: reset start_cell-1 if we would overwrite the second cell of a wide char\n if (this._activeBuffer.x && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x - 1) === 2) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x - 1, 0, 1, curAttr);\n }\n\n let precedingJoinState = this._parser.precedingJoinState;\n for (let pos = start; pos < end; ++pos) {\n code = data[pos];\n\n // Soft hyphen's (U+00AD) behavior is ambiguous and differs across terminals. We opt to treat\n // it as a zero-width hint to text layout engines and simply ignore it.\n if (code === 0xAD) {\n continue;\n }\n\n // get charset replacement character\n // charset is only defined for ASCII, therefore we only\n // search for an replacement char if code < 127\n if (code < 127 && charset) {\n const ch = charset[String.fromCharCode(code)];\n if (ch) {\n code = ch.charCodeAt(0);\n }\n }\n\n const currentInfo = this._unicodeService.charProperties(code, precedingJoinState);\n chWidth = UnicodeService.extractWidth(currentInfo);\n const shouldJoin = UnicodeService.extractShouldJoin(currentInfo);\n const oldWidth = shouldJoin ? UnicodeService.extractWidth(precedingJoinState) : 0;\n precedingJoinState = currentInfo;\n\n if (screenReaderMode) {\n this._onA11yChar.fire(stringFromCodePoint(code));\n }\n const linkId = this._getCurrentLinkId();\n if (linkId) {\n this._oscLinkService.addLineToLink(linkId, this._activeBuffer.ybase + this._activeBuffer.y);\n }\n\n // goto next line if ch would overflow\n // NOTE: To avoid costly width checks here,\n // the terminal does not allow a cols < 2.\n if (this._activeBuffer.x + chWidth - oldWidth > cols) {\n // autowrap - DECAWM\n // automatically wraps to the beginning of the next line\n if (wraparoundMode) {\n const oldRow = bufferRow;\n let oldCol = this._activeBuffer.x - oldWidth;\n this._activeBuffer.x = oldWidth;\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData(), true);\n } else {\n if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n // The line already exists (eg. the initial viewport), mark it as a\n // wrapped line\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = true;\n }\n // row changed, get it again\n bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (!bufferRow) {\n return;\n }\n if (oldWidth > 0 && bufferRow instanceof BufferLine) {\n // Combining character widens 1 column to 2.\n // Move old character to next line.\n bufferRow.copyCellsFrom(oldRow as BufferLine,\n oldCol, 0, oldWidth, false);\n }\n // clear left over cells to the right\n while (oldCol < cols) {\n oldRow.setCellFromCodepoint(oldCol++, 0, 1, curAttr);\n }\n } else {\n this._activeBuffer.x = cols - 1;\n if (chWidth === 2) {\n // FIXME: check for xterm behavior\n // What to do here? We got a wide char that does not fit into last cell\n continue;\n }\n }\n }\n\n // insert combining char at last cursor position\n // this._activeBuffer.x should never be 0 for a combining char\n // since they always follow a cell consuming char\n // therefore we can test for this._activeBuffer.x to avoid overflow left\n if (shouldJoin && this._activeBuffer.x) {\n const offset = bufferRow.getWidth(this._activeBuffer.x - 1) ? 1 : 2;\n // if empty cell after fullwidth, need to go 2 cells back\n // it is save to step 2 cells back here\n // since an empty cell is only set by fullwidth chars\n bufferRow.addCodepointToCell(this._activeBuffer.x - offset,\n code, chWidth);\n for (let delta = chWidth - oldWidth; --delta >= 0;) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n continue;\n }\n\n // insert mode: move characters to right\n if (insertMode) {\n // right shift cells according to the width\n bufferRow.insertCells(this._activeBuffer.x, chWidth - oldWidth, this._activeBuffer.getNullCell(curAttr));\n // test last cell - since the last cell has only room for\n // a halfwidth char any fullwidth shifted there is lost\n // and will be set to empty cell\n if (bufferRow.getWidth(cols - 1) === 2) {\n bufferRow.setCellFromCodepoint(cols - 1, NULL_CELL_CODE, NULL_CELL_WIDTH, curAttr);\n }\n }\n\n // write current char to buffer and advance cursor\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, code, chWidth, curAttr);\n\n // fullwidth char - also set next cell to placeholder stub and advance cursor\n // for graphemes bigger than fullwidth we can simply loop to zero\n // we already made sure above, that this._activeBuffer.x + chWidth will not overflow right\n if (chWidth > 0) {\n while (--chWidth) {\n // other than a regular empty cell a cell following a wide char has no width\n bufferRow.setCellFromCodepoint(this._activeBuffer.x++, 0, 0, curAttr);\n }\n }\n }\n\n this._parser.precedingJoinState = precedingJoinState;\n\n // handle wide chars: reset cell to the right if it is second cell of a wide char\n if (this._activeBuffer.x < cols && end - start > 0 && bufferRow.getWidth(this._activeBuffer.x) === 0 && !bufferRow.hasContent(this._activeBuffer.x)) {\n bufferRow.setCellFromCodepoint(this._activeBuffer.x, 0, 1, curAttr);\n }\n\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Forward registerCsiHandler from parser.\n */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n if (id.final === 't' && !id.prefix && !id.intermediates) {\n // security: always check whether window option is allowed\n return this._parser.registerCsiHandler(id, params => {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n return callback(params);\n });\n }\n return this._parser.registerCsiHandler(id, callback);\n }\n\n /**\n * Forward registerDcsHandler from parser.\n */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._parser.registerDcsHandler(id, new DcsHandler(callback));\n }\n\n /**\n * Forward registerEscHandler from parser.\n */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._parser.registerEscHandler(id, callback);\n }\n\n /**\n * Forward registerOscHandler from parser.\n */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerOscHandler(ident, new OscHandler(callback));\n }\n\n /**\n * Forward registerApcHandler from parser.\n */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._parser.registerApcHandler(id, new ApcHandler(callback));\n }\n\n /**\n * BEL\n * Bell (Ctrl-G).\n *\n * @vt: #Y C0 BEL \"Bell\" \"\\a, \\x07\" \"Ring the bell.\"\n * The behavior of the bell is further customizable with `ITerminalOptions.bellStyle`\n * and `ITerminalOptions.bellSound`.\n */\n public bell(): boolean {\n this._onRequestBell.fire();\n return true;\n }\n\n /**\n * LF\n * Line Feed or New Line (NL). (LF is Ctrl-J).\n *\n * @vt: #Y C0 LF \"Line Feed\" \"\\n, \\x0A\" \"Move the cursor one row down, scrolling if needed.\"\n * Scrolling is restricted to scroll margins and will only happen on the bottom line.\n *\n * @vt: #Y C0 VT \"Vertical Tabulation\" \"\\v, \\x0B\" \"Treated as LF.\"\n * @vt: #Y C0 FF \"Form Feed\" \"\\f, \\x0C\" \"Treated as LF.\"\n */\n public lineFeed(): boolean {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._optionsService.rawOptions.convertEol) {\n this._activeBuffer.x = 0;\n }\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n } else {\n // There was an explicit line feed (not just a carriage return), so clear the wrapped state of\n // the line. This is particularly important on conpty/Windows where revisiting lines to\n // reprint is common, especially on resize. Note that the windowsMode wrapped line heuristics\n // can mess with this so windowsMode should be disabled, which is recommended on Windows build\n // 21376 and above.\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n }\n // If the end of the line is hit, prevent this action from wrapping around to the next line.\n if (this._activeBuffer.x >= this._bufferService.cols) {\n this._activeBuffer.x--;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n\n this._onLineFeed.fire();\n return true;\n }\n\n /**\n * CR\n * Carriage Return (Ctrl-M).\n *\n * @vt: #Y C0 CR \"Carriage Return\" \"\\r, \\x0D\" \"Move the cursor to the beginning of the row.\"\n */\n public carriageReturn(): boolean {\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * BS\n * Backspace (Ctrl-H).\n *\n * @vt: #Y C0 BS \"Backspace\" \"\\b, \\x08\" \"Move the cursor one position to the left.\"\n * By default it is not possible to move the cursor past the leftmost position.\n * If `reverse wrap-around` (`CSI ? 45 h`) is set, a previous soft line wrap (DECAWM)\n * can be undone with BS within the scroll margins. In that case the cursor will wrap back\n * to the end of the previous row. Note that it is not possible to peek back into the scrollbuffer\n * with the cursor, thus at the home position (top-leftmost cell) this has no effect.\n */\n public backspace(): boolean {\n // reverse wrap-around is disabled\n if (!this._coreService.decPrivateModes.reverseWraparound) {\n this._restrictCursor();\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n }\n return true;\n }\n\n // reverse wrap-around is enabled\n // other than for normal operation mode, reverse wrap-around allows the cursor\n // to be at x=cols to be able to address the last cell of a row by BS\n this._restrictCursor(this._bufferService.cols);\n\n if (this._activeBuffer.x > 0) {\n this._activeBuffer.x--;\n } else {\n /**\n * reverse wrap-around handling:\n * Our implementation deviates from xterm on purpose. Details:\n * - only previous soft NLs can be reversed (isWrapped=true)\n * - only works within scrollborders (top/bottom, left/right not yet supported)\n * - cannot peek into scrollbuffer\n * - any cursor movement sequence keeps working as expected\n */\n if (this._activeBuffer.x === 0\n && this._activeBuffer.y > this._activeBuffer.scrollTop\n && this._activeBuffer.y <= this._activeBuffer.scrollBottom\n && this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)?.isWrapped) {\n this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!.isWrapped = false;\n this._activeBuffer.y--;\n this._activeBuffer.x = this._bufferService.cols - 1;\n // find last taken cell - last cell can have 3 different states:\n // - hasContent(true) + hasWidth(1): narrow char - we are done\n // - hasWidth(0): second part of wide char - we are done\n // - hasContent(false) + hasWidth(1): empty cell due to early wrapping wide char, go one\n // cell further back\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n if (line.hasWidth(this._activeBuffer.x) && !line.hasContent(this._activeBuffer.x)) {\n this._activeBuffer.x--;\n // We do this only once, since width=1 + hasContent=false currently happens only once\n // before early wrapping of a wide char.\n // This needs to be fixed once we support graphemes taking more than 2 cells.\n }\n }\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * TAB\n * Horizontal Tab (HT) (Ctrl-I).\n *\n * @vt: #Y C0 HT \"Horizontal Tabulation\" \"\\t, \\x09\" \"Move the cursor to the next character tab stop.\"\n */\n public tab(): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n const originalX = this._activeBuffer.x;\n this._activeBuffer.x = this._activeBuffer.nextStop();\n if (this._optionsService.rawOptions.screenReaderMode) {\n this._onA11yTab.fire(this._activeBuffer.x - originalX);\n }\n return true;\n }\n\n /**\n * SO\n * Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This invokes the\n * G1 character set.\n *\n * @vt: #P[Only limited ISO-2022 charset support.] C0 SO \"Shift Out\" \"\\x0E\" \"Switch to an alternative character set.\"\n */\n public shiftOut(): boolean {\n this._charsetService.setgLevel(1);\n return true;\n }\n\n /**\n * SI\n * Shift In (Ctrl-O) -> Switch to Standard Character Set. This invokes the G0\n * character set (the default).\n *\n * @vt: #Y C0 SI \"Shift In\" \"\\x0F\" \"Return to regular character set after Shift Out.\"\n */\n public shiftIn(): boolean {\n this._charsetService.setgLevel(0);\n return true;\n }\n\n /**\n * Restrict cursor to viewport size / scroll margin (origin mode).\n */\n private _restrictCursor(maxCol: number = this._bufferService.cols - 1): void {\n this._activeBuffer.x = Math.min(maxCol, Math.max(0, this._activeBuffer.x));\n this._activeBuffer.y = this._coreService.decPrivateModes.origin\n ? Math.min(this._activeBuffer.scrollBottom, Math.max(this._activeBuffer.scrollTop, this._activeBuffer.y))\n : Math.min(this._bufferService.rows - 1, Math.max(0, this._activeBuffer.y));\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set absolute cursor position.\n */\n private _setCursor(x: number, y: number): void {\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n if (this._coreService.decPrivateModes.origin) {\n this._activeBuffer.x = x;\n this._activeBuffer.y = this._activeBuffer.scrollTop + y;\n } else {\n this._activeBuffer.x = x;\n this._activeBuffer.y = y;\n }\n this._restrictCursor();\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n\n /**\n * Set relative cursor position.\n */\n private _moveCursor(x: number, y: number): void {\n // for relative changes we have to make sure we are within 0 .. cols/rows - 1\n // before calculating the new position\n this._restrictCursor();\n this._setCursor(this._activeBuffer.x + x, this._activeBuffer.y + y);\n }\n\n /**\n * CSI Ps A\n * Cursor Up Ps Times (default = 1) (CUU).\n *\n * @vt: #Y CSI CUU \"Cursor Up\" \"CSI Ps A\" \"Move cursor `Ps` times up (default=1).\"\n * If the cursor would pass the top scroll margin, it will stop there.\n */\n public cursorUp(params: IParams): boolean {\n // stop at scrollTop\n const diffToTop = this._activeBuffer.y - this._activeBuffer.scrollTop;\n if (diffToTop >= 0) {\n this._moveCursor(0, -Math.min(diffToTop, params.params[0] || 1));\n } else {\n this._moveCursor(0, -(params.params[0] || 1));\n }\n return true;\n }\n\n /**\n * CSI Ps B\n * Cursor Down Ps Times (default = 1) (CUD).\n *\n * @vt: #Y CSI CUD \"Cursor Down\" \"CSI Ps B\" \"Move cursor `Ps` times down (default=1).\"\n * If the cursor would pass the bottom scroll margin, it will stop there.\n */\n public cursorDown(params: IParams): boolean {\n // stop at scrollBottom\n const diffToBottom = this._activeBuffer.scrollBottom - this._activeBuffer.y;\n if (diffToBottom >= 0) {\n this._moveCursor(0, Math.min(diffToBottom, params.params[0] || 1));\n } else {\n this._moveCursor(0, params.params[0] || 1);\n }\n return true;\n }\n\n /**\n * CSI Ps C\n * Cursor Forward Ps Times (default = 1) (CUF).\n *\n * @vt: #Y CSI CUF \"Cursor Forward\" \"CSI Ps C\" \"Move cursor `Ps` times forward (default=1).\"\n */\n public cursorForward(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Ps D\n * Cursor Backward Ps Times (default = 1) (CUB).\n *\n * @vt: #Y CSI CUB \"Cursor Backward\" \"CSI Ps D\" \"Move cursor `Ps` times backward (default=1).\"\n */\n public cursorBackward(params: IParams): boolean {\n this._moveCursor(-(params.params[0] || 1), 0);\n return true;\n }\n\n /**\n * CSI Ps E\n * Cursor Next Line Ps Times (default = 1) (CNL).\n * Other than cursorDown (CUD) also set the cursor to first column.\n *\n * @vt: #Y CSI CNL \"Cursor Next Line\" \"CSI Ps E\" \"Move cursor `Ps` times down (default=1) and to the first column.\"\n * Same as CUD, additionally places the cursor at the first column.\n */\n public cursorNextLine(params: IParams): boolean {\n this.cursorDown(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps F\n * Cursor Previous Line Ps Times (default = 1) (CPL).\n * Other than cursorUp (CUU) also set the cursor to first column.\n *\n * @vt: #Y CSI CPL \"Cursor Backward\" \"CSI Ps F\" \"Move cursor `Ps` times up (default=1) and to the first column.\"\n * Same as CUU, additionally places the cursor at the first column.\n */\n public cursorPrecedingLine(params: IParams): boolean {\n this.cursorUp(params);\n this._activeBuffer.x = 0;\n return true;\n }\n\n /**\n * CSI Ps G\n * Cursor Character Absolute [column] (default = [row,1]) (CHA).\n *\n * @vt: #Y CSI CHA \"Cursor Horizontal Absolute\" \"CSI Ps G\" \"Move cursor to `Ps`-th column of the active row (default=1).\"\n */\n public cursorCharAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps ; Ps H\n * Cursor Position [row;column] (default = [1,1]) (CUP).\n *\n * @vt: #Y CSI CUP \"Cursor Position\" \"CSI Ps ; Ps H\" \"Set cursor to position [`Ps`, `Ps`] (default = [1, 1]).\"\n * If ORIGIN mode is set, places the cursor to the absolute position within the scroll margins.\n * If ORIGIN mode is not set, places the cursor to the absolute position within the viewport.\n * Note that the coordinates are 1-based, thus the top left position starts at `1 ; 1`.\n */\n public cursorPosition(params: IParams): boolean {\n this._setCursor(\n // col\n (params.length >= 2) ? (params.params[1] || 1) - 1 : 0,\n // row\n (params.params[0] || 1) - 1\n );\n return true;\n }\n\n /**\n * CSI Pm ` Character Position Absolute\n * [column] (default = [row,1]) (HPA).\n * Currently same functionality as CHA.\n *\n * @vt: #Y CSI HPA \"Horizontal Position Absolute\" \"CSI Ps ` \" \"Same as CHA.\"\n */\n public charPosAbsolute(params: IParams): boolean {\n this._setCursor((params.params[0] || 1) - 1, this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Pm a Character Position Relative\n * [columns] (default = [row,col+1]) (HPR)\n *\n * @vt: #Y CSI HPR \"Horizontal Position Relative\" \"CSI Ps a\" \"Same as CUF.\"\n */\n public hPositionRelative(params: IParams): boolean {\n this._moveCursor(params.params[0] || 1, 0);\n return true;\n }\n\n /**\n * CSI Pm d Vertical Position Absolute (VPA)\n * [row] (default = [1,column])\n *\n * @vt: #Y CSI VPA \"Vertical Position Absolute\" \"CSI Ps d\" \"Move cursor to `Ps`-th row (default=1).\"\n */\n public linePosAbsolute(params: IParams): boolean {\n this._setCursor(this._activeBuffer.x, (params.params[0] || 1) - 1);\n return true;\n }\n\n /**\n * CSI Pm e Vertical Position Relative (VPR)\n * [rows] (default = [row+1,column])\n * reuse CSI Ps B ?\n *\n * @vt: #Y CSI VPR \"Vertical Position Relative\" \"CSI Ps e\" \"Move cursor `Ps` times down (default=1).\"\n */\n public vPositionRelative(params: IParams): boolean {\n this._moveCursor(0, params.params[0] || 1);\n return true;\n }\n\n /**\n * CSI Ps ; Ps f\n * Horizontal and Vertical Position [row;column] (default =\n * [1,1]) (HVP).\n * Same as CUP.\n *\n * @vt: #Y CSI HVP \"Horizontal and Vertical Position\" \"CSI Ps ; Ps f\" \"Same as CUP.\"\n */\n public hVPosition(params: IParams): boolean {\n this.cursorPosition(params);\n return true;\n }\n\n /**\n * CSI Ps g Tab Clear (TBC).\n * Ps = 0 -> Clear Current Column (default).\n * Ps = 3 -> Clear All.\n * Potentially:\n * Ps = 2 -> Clear Stops on Line.\n * http://vt100.net/annarbor/aaa-ug/section6.html\n *\n * @vt: #Y CSI TBC \"Tab Clear\" \"CSI Ps g\" \"Clear tab stops at current position (0) or all (3) (default=0).\"\n * Clearing tabstops off the active row (Ps = 2, VT100) is currently not supported.\n */\n public tabClear(params: IParams): boolean {\n const param = params.params[0];\n if (param === 0) {\n delete this._activeBuffer.tabs[this._activeBuffer.x];\n } else if (param === 3) {\n this._activeBuffer.tabs = {};\n }\n return true;\n }\n\n /**\n * CSI Ps I\n * Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).\n *\n * @vt: #Y CSI CHT \"Cursor Horizontal Tabulation\" \"CSI Ps I\" \"Move cursor `Ps` times tabs forward (default=1).\"\n */\n public cursorForwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.nextStop();\n }\n return true;\n }\n\n /**\n * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).\n *\n * @vt: #Y CSI CBT \"Cursor Backward Tabulation\" \"CSI Ps Z\" \"Move cursor `Ps` tabs backward (default=1).\"\n */\n public cursorBackwardTab(params: IParams): boolean {\n if (this._activeBuffer.x >= this._bufferService.cols) {\n return true;\n }\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.x = this._activeBuffer.prevStop();\n }\n return true;\n }\n\n /**\n * CSI Ps \" q Select Character Protection Attribute (DECSCA).\n *\n * @vt: #Y CSI DECSCA \"Select Character Protection Attribute\" \"CSI Ps \" q\" \"Whether DECSED and DECSEL can erase (0=default, 2) or not (1).\"\n */\n public selectProtected(params: IParams): boolean {\n const p = params.params[0];\n if (p === 1) this._curAttrData.bg |= BgFlags.PROTECTED;\n if (p === 2 || p === 0) this._curAttrData.bg &= ~BgFlags.PROTECTED;\n return true;\n }\n\n\n /**\n * Helper method to erase cells in a terminal row.\n * The cell gets replaced with the eraseChar of the terminal.\n * @param y The row index relative to the viewport.\n * @param start The start x index of the range to be erased.\n * @param end The end x index of the range to be erased (exclusive).\n * @param clearWrap clear the isWrapped flag\n * @param respectProtect Whether to respect the protection attribute (DECSCA).\n */\n private _eraseInBufferLine(y: number, start: number, end: number, clearWrap: boolean = false, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (!line) {\n return;\n }\n line.replaceCells(\n start,\n end,\n this._activeBuffer.getNullCell(this._eraseAttrData()),\n respectProtect\n );\n if (clearWrap) {\n line.isWrapped = false;\n }\n }\n\n /**\n * Helper method to reset cells in a terminal row. The cell gets replaced with the eraseChar of\n * the terminal and the isWrapped property is set to false.\n * @param y row index\n */\n private _resetBufferLine(y: number, respectProtect: boolean = false): void {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y);\n if (line) {\n line.fill(this._activeBuffer.getNullCell(this._eraseAttrData()), respectProtect);\n this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase + y);\n line.isWrapped = false;\n }\n }\n\n /**\n * CSI Ps J Erase in Display (ED).\n * Ps = 0 -> Erase Below (default).\n * Ps = 1 -> Erase Above.\n * Ps = 2 -> Erase All.\n * Ps = 3 -> Erase Saved Lines (xterm).\n * CSI ? Ps J\n * Erase in Display (DECSED).\n * Ps = 0 -> Selective Erase Below (default).\n * Ps = 1 -> Selective Erase Above.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI ED \"Erase In Display\" \"CSI Ps J\" \"Erase various parts of the viewport.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | ------------------------------------------------------------ |\n * | 0 | Erase from the cursor through the end of the viewport. |\n * | 1 | Erase from the beginning of the viewport through the cursor. |\n * | 2 | Erase complete viewport. |\n * | 3 | Erase scrollback. |\n *\n * @vt: #Y CSI DECSED \"Selective Erase In Display\" \"CSI ? Ps J\" \"Same as ED with respecting protection flag.\"\n */\n public eraseInDisplay(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n let j;\n switch (params.params[0]) {\n case 0:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n this._eraseInBufferLine(j++, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n for (; j < this._bufferService.rows; j++) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(j);\n break;\n case 1:\n j = this._activeBuffer.y;\n this._dirtyRowTracker.markDirty(j);\n // Deleted front part of line and everything before. This line will no longer be wrapped.\n this._eraseInBufferLine(j, 0, this._activeBuffer.x + 1, true, respectProtect);\n if (this._activeBuffer.x + 1 >= this._bufferService.cols) {\n // Deleted entire previous line. This next line can no longer be wrapped.\n const nextLine = this._activeBuffer.lines.get(j + 1);\n if (nextLine) {\n nextLine.isWrapped = false;\n }\n }\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n break;\n case 2:\n if (this._optionsService.rawOptions.scrollOnEraseInDisplay) {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markRangeDirty(0, j - 1);\n while (j--) {\n const currentLine = this._activeBuffer.lines.get(this._activeBuffer.ybase + j);\n if (currentLine?.getTrimmedLength()) {\n break;\n }\n }\n for (; j >= 0; j--) {\n this._bufferService.scroll(this._eraseAttrData());\n }\n }\n else {\n j = this._bufferService.rows;\n this._dirtyRowTracker.markDirty(j - 1);\n while (j--) {\n this._resetBufferLine(j, respectProtect);\n }\n this._dirtyRowTracker.markDirty(0);\n }\n break;\n case 3:\n // Clear scrollback (everything not in viewport)\n const scrollBackSize = this._activeBuffer.lines.length - this._bufferService.rows;\n if (scrollBackSize > 0) {\n this._activeBuffer.lines.trimStart(scrollBackSize);\n this._activeBuffer.ybase = Math.max(this._activeBuffer.ybase - scrollBackSize, 0);\n this._activeBuffer.ydisp = Math.max(this._activeBuffer.ydisp - scrollBackSize, 0);\n // isUserScrolling tracks the normal buffer's viewport, so ED3 on the alt\n // screen must not touch it\n if (this._activeBuffer === this._bufferService.buffers.normal) {\n this._bufferService.isUserScrolling = false;\n }\n // Force a scroll event to refresh viewport\n this._onScroll.fire(0);\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI Ps K Erase in Line (EL).\n * Ps = 0 -> Erase to Right (default).\n * Ps = 1 -> Erase to Left.\n * Ps = 2 -> Erase All.\n * CSI ? Ps K\n * Erase in Line (DECSEL).\n * Ps = 0 -> Selective Erase to Right (default).\n * Ps = 1 -> Selective Erase to Left.\n * Ps = 2 -> Selective Erase All.\n *\n * @vt: #Y CSI EL \"Erase In Line\" \"CSI Ps K\" \"Erase various parts of the active row.\"\n * Supported param values:\n *\n * | Ps | Effect |\n * | -- | -------------------------------------------------------- |\n * | 0 | Erase from the cursor through the end of the row. |\n * | 1 | Erase from the beginning of the line through the cursor. |\n * | 2 | Erase complete line. |\n *\n * @vt: #Y CSI DECSEL \"Selective Erase In Line\" \"CSI ? Ps K\" \"Same as EL with respecting protecting flag.\"\n */\n public eraseInLine(params: IParams, respectProtect: boolean = false): boolean {\n this._restrictCursor(this._bufferService.cols);\n switch (params.params[0]) {\n case 0:\n this._eraseInBufferLine(this._activeBuffer.y, this._activeBuffer.x, this._bufferService.cols, this._activeBuffer.x === 0, respectProtect);\n break;\n case 1:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._activeBuffer.x + 1, false, respectProtect);\n break;\n case 2:\n this._eraseInBufferLine(this._activeBuffer.y, 0, this._bufferService.cols, true, respectProtect);\n break;\n }\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n return true;\n }\n\n /**\n * CSI Ps L\n * Insert Ps Line(s) (default = 1) (IL).\n *\n * @vt: #Y CSI IL \"Insert Line\" \"CSI Ps L\" \"Insert `Ps` blank lines at active row (default=1).\"\n * For every inserted line at the scroll top one line at the scroll bottom gets removed.\n * The cursor is set to the first column.\n * IL has no effect if the cursor is outside the scroll margins.\n */\n public insertLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n const scrollBottomRowsOffset = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n const scrollBottomAbsolute = this._bufferService.rows - 1 + this._activeBuffer.ybase - scrollBottomRowsOffset + 1;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1L\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(scrollBottomAbsolute - 1, 1);\n this._activeBuffer.lines.splice(row, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps M\n * Delete Ps Line(s) (default = 1) (DL).\n *\n * @vt: #Y CSI DL \"Delete Line\" \"CSI Ps M\" \"Delete `Ps` lines at active row (default=1).\"\n * For every deleted line at the scroll top one blank line at the scroll bottom gets appended.\n * The cursor is set to the first column.\n * DL has no effect if the cursor is outside the scroll margins.\n */\n public deleteLines(params: IParams): boolean {\n this._restrictCursor();\n let param = params.params[0] || 1;\n\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n\n const row: number = this._activeBuffer.ybase + this._activeBuffer.y;\n\n let j: number;\n j = this._bufferService.rows - 1 - this._activeBuffer.scrollBottom;\n j = this._bufferService.rows - 1 + this._activeBuffer.ybase - j;\n while (param--) {\n // test: echo -e '\\e[44m\\e[1M\\e[0m'\n // blankLine(true) - xterm/linux behavior\n this._activeBuffer.lines.splice(row, 1);\n this._activeBuffer.lines.splice(j, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y, this._activeBuffer.scrollBottom);\n this._activeBuffer.x = 0; // see https://vt100.net/docs/vt220-rm/chapter4.html - vt220 only?\n return true;\n }\n\n /**\n * CSI Ps @\n * Insert Ps (Blank) Character(s) (default = 1) (ICH).\n *\n * @vt: #Y CSI ICH \"Insert Characters\" \"CSI Ps @\" \"Insert `Ps` (blank) characters (default = 1).\"\n * The ICH sequence inserts `Ps` blank characters. The cursor remains at the beginning of the\n * blank characters. Text between the cursor and right margin moves to the right. Characters moved\n * past the right margin are lost.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public insertChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.insertCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps P\n * Delete Ps Character(s) (default = 1) (DCH).\n *\n * @vt: #Y CSI DCH \"Delete Character\" \"CSI Ps P\" \"Delete `Ps` characters (default=1).\"\n * As characters are deleted, the remaining characters between the cursor and right margin move to\n * the left. Character attributes move with the characters. The terminal adds blank characters at\n * the right margin.\n *\n *\n * FIXME: check against xterm - should not work outside of scroll margins (see VT520 manual)\n */\n public deleteChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.deleteCells(\n this._activeBuffer.x,\n params.params[0] || 1,\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps S Scroll up Ps lines (default = 1) (SU).\n *\n * @vt: #Y CSI SU \"Scroll Up\" \"CSI Ps S\" \"Scroll `Ps` lines up (default=1).\"\n *\n *\n * FIXME: scrolled out lines at top = 1 should add to scrollback (xterm)\n */\n public scrollUp(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 0, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps T Scroll down Ps lines (default = 1) (SD).\n *\n * @vt: #Y CSI SD \"Scroll Down\" \"CSI Ps T\" \"Scroll `Ps` lines down (default=1).\"\n */\n public scrollDown(params: IParams): boolean {\n let param = params.params[0] || 1;\n\n while (param--) {\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollBottom, 1);\n this._activeBuffer.lines.splice(this._activeBuffer.ybase + this._activeBuffer.scrollTop, 0, this._activeBuffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP @ Scroll left Ps columns (default = 1) (SL) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/00\n * Parameter default value: Pn = 1\n * SL causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the left; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always left shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SL \"Scroll Left\" \"CSI Ps SP @\" \"Scroll viewport `Ps` times to the left.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the left.\n * SL has no effect outside of the scroll margins.\n */\n public scrollLeft(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps SP A Scroll right Ps columns (default = 1) (SR) ECMA-48\n *\n * Notation: (Pn)\n * Representation: CSI Pn 02/00 04/01\n * Parameter default value: Pn = 1\n * SR causes the data in the presentation component to be moved by n character positions\n * if the line orientation is horizontal, or by n line positions if the line orientation\n * is vertical, such that the data appear to move to the right; where n equals the value of Pn.\n * The active presentation position is not affected by this control function.\n *\n * Supported:\n * - always right shift (no line orientation setting respected)\n *\n * @vt: #Y CSI SR \"Scroll Right\" \"CSI Ps SP A\" \"Scroll viewport `Ps` times to the right.\"\n * SL moves the content of all lines within the scroll margins `Ps` times to the right.\n * Content at the right margin is lost.\n * SL has no effect outside of the scroll margins.\n */\n public scrollRight(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(0, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' }\n * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.\n *\n * @vt: #Y CSI DECIC \"Insert Columns\" \"CSI Ps ' }\" \"Insert `Ps` columns at cursor position.\"\n * DECIC inserts `Ps` times blank columns at the cursor position for all lines with the scroll\n * margins, moving content to the right. Content at the right margin is lost. DECIC has no effect\n * outside the scrolling margins.\n */\n public insertColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.insertCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Pm ' ~\n * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.\n *\n * @vt: #Y CSI DECDC \"Delete Columns\" \"CSI Ps ' ~\" \"Delete `Ps` columns at cursor position.\"\n * DECDC deletes `Ps` times columns at the cursor position for all lines with the scroll margins,\n * moving content to the left. Blank columns are added at the right margin.\n * DECDC has no effect outside the scrolling margins.\n */\n public deleteColumns(params: IParams): boolean {\n if (this._activeBuffer.y > this._activeBuffer.scrollBottom || this._activeBuffer.y < this._activeBuffer.scrollTop) {\n return true;\n }\n const param = params.params[0] || 1;\n for (let y = this._activeBuffer.scrollTop; y <= this._activeBuffer.scrollBottom; ++y) {\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + y)!;\n line.deleteCells(this._activeBuffer.x, param, this._activeBuffer.getNullCell(this._eraseAttrData()));\n line.isWrapped = false;\n }\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n return true;\n }\n\n /**\n * CSI Ps X\n * Erase Ps Character(s) (default = 1) (ECH).\n *\n * @vt: #Y CSI ECH \"Erase Character\" \"CSI Ps X\" \"Erase `Ps` characters from current cursor position to the right (default=1).\"\n * ED erases `Ps` characters from current cursor position to the right.\n * ED works inside or outside the scrolling margins.\n */\n public eraseChars(params: IParams): boolean {\n this._restrictCursor();\n const line = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y);\n if (line) {\n line.replaceCells(\n this._activeBuffer.x,\n this._activeBuffer.x + (params.params[0] || 1),\n this._activeBuffer.getNullCell(this._eraseAttrData())\n );\n this._dirtyRowTracker.markDirty(this._activeBuffer.y);\n }\n return true;\n }\n\n /**\n * CSI Ps b Repeat the preceding graphic character Ps times (REP).\n * From ECMA 48 (@see http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf)\n * Notation: (Pn)\n * Representation: CSI Pn 06/02\n * Parameter default value: Pn = 1\n * REP is used to indicate that the preceding character in the data stream,\n * if it is a graphic character (represented by one or more bit combinations) including SPACE,\n * is to be repeated n times, where n equals the value of Pn.\n * If the character preceding REP is a control function or part of a control function,\n * the effect of REP is not defined by this Standard.\n *\n * We extend xterm's behavior to allow repeating entire grapheme clusters.\n * This isn't 100% xterm-compatible, but it seems saner and more useful.\n * - text attrs are applied normally\n * - wrap around is respected\n * - any valid sequence resets the carried forward char\n *\n * Note: To get reset on a valid sequence working correctly without much runtime penalty, the\n * preceding codepoint is stored on the parser in `this.print` and reset during `parser.parse`.\n *\n * @vt: #Y CSI REP \"Repeat Preceding Character\" \"CSI Ps b\" \"Repeat preceding character `Ps` times (default=1).\"\n * REP repeats the previous character `Ps` times advancing the cursor, also wrapping if DECAWM is\n * set. REP has no effect if the sequence does not follow a printable ASCII character\n * (NOOP for any other sequence in between or NON ASCII characters).\n */\n public repeatPrecedingCharacter(params: IParams): boolean {\n const joinState = this._parser.precedingJoinState;\n if (!joinState) {\n return true;\n }\n // call print to insert the chars and handle correct wrapping\n const length = params.params[0] || 1;\n const chWidth = UnicodeService.extractWidth(joinState);\n const x = this._activeBuffer.x - chWidth;\n const bufferRow = this._activeBuffer.lines.get(this._activeBuffer.ybase + this._activeBuffer.y)!;\n const text = bufferRow.getString(x);\n const data = new Uint32Array(text.length * length);\n let idata = 0;\n for (let itext = 0; itext < text.length;) {\n const ch = text.codePointAt(itext) || 0;\n data[idata++] = ch;\n itext += ch > 0xffff ? 2 : 1;\n }\n let tlength = idata;\n for (let i = 1; i < length; ++i) {\n data.copyWithin(tlength, 0, idata);\n tlength += idata;\n }\n this.print(data, 0, tlength);\n return true;\n }\n\n /**\n * CSI Ps c Send Device Attributes (Primary DA).\n * Ps = 0 or omitted -> request attributes from terminal. The\n * response depends on the decTerminalID resource setting.\n * -> CSI ? 1 ; 2 c (``VT100 with Advanced Video Option'')\n * -> CSI ? 1 ; 0 c (``VT101 with No Options'')\n * -> CSI ? 6 c (``VT102'')\n * -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c (``VT220'')\n * The VT100-style response parameters do not mean anything by\n * themselves. VT220 parameters do, telling the host what fea-\n * tures the terminal supports:\n * Ps = 1 -> 132-columns.\n * Ps = 2 -> Printer.\n * Ps = 6 -> Selective erase.\n * Ps = 8 -> User-defined keys.\n * Ps = 9 -> National replacement character sets.\n * Ps = 1 5 -> Technical characters.\n * Ps = 2 2 -> ANSI color, e.g., VT525.\n * Ps = 2 9 -> ANSI text locator (i.e., DEC Locator mode).\n *\n * @vt: #Y CSI DA1 \"Primary Device Attributes\" \"CSI c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesPrimary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n if (this._is('xterm') || this._is('rxvt-unicode') || this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?1;2c');\n } else if (this._is('linux')) {\n this._coreService.triggerDataEvent(C0.ESC + '[?6c');\n }\n return true;\n }\n\n /**\n * CSI > Ps c\n * Send Device Attributes (Secondary DA).\n * Ps = 0 or omitted -> request the terminal's identification\n * code. The response depends on the decTerminalID resource set-\n * ting. It should apply only to VT220 and up, but xterm extends\n * this to VT100.\n * -> CSI > Pp ; Pv ; Pc c\n * where Pp denotes the terminal type\n * Pp = 0 -> ``VT100''.\n * Pp = 1 -> ``VT220''.\n * and Pv is the firmware version (for xterm, this was originally\n * the XFree86 patch number, starting with 95). In a DEC termi-\n * nal, Pc indicates the ROM cartridge registration number and is\n * always zero.\n * More information:\n * xterm/charproc.c - line 2012, for more information.\n * vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)\n *\n * @vt: #Y CSI DA2 \"Secondary Device Attributes\" \"CSI > c\" \"Send primary device attributes.\"\n *\n *\n * TODO: fix and cleanup response\n */\n public sendDeviceAttributesSecondary(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n // xterm and urxvt\n // seem to spit this\n // out around ~370 times (?).\n if (this._is('xterm')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>0;276;0c');\n } else if (this._is('rxvt-unicode')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>85;95;0c');\n } else if (this._is('linux')) {\n // not supported by linux console.\n // linux console echoes parameters.\n this._coreService.triggerDataEvent(params.params[0] + 'c');\n } else if (this._is('screen')) {\n this._coreService.triggerDataEvent(C0.ESC + '[>83;40003;0c');\n }\n return true;\n }\n\n /**\n * CSI > Ps q\n * Ps = 0 => Report xterm name and version (XTVERSION).\n *\n * The response is a DCS sequence identifying the version: DCS > | text ST\n *\n * @vt: #Y CSI XTVERSION \"Report Xterm Version\" \"CSI > q\" \"Report the terminal name and version.\"\n */\n public sendXtVersion(params: IParams): boolean {\n if (params.params[0] > 0) {\n return true;\n }\n this._coreService.triggerDataEvent(`${C0.ESC}P>|xterm.js(${XTERM_VERSION})${C0.ESC}\\\\`);\n return true;\n }\n\n /**\n * Evaluate if the current terminal is the given argument.\n * @param term The terminal name to evaluate\n */\n private _is(term: string): boolean {\n return (this._optionsService.rawOptions.termName + '').startsWith(term);\n }\n\n /**\n * CSI Pm h Set Mode (SM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Insert Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Automatic Newline (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI SM \"Set Mode\" \"CSI Pm h\" \"Set various terminal modes.\"\n * Supported param values by SM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Insert Mode (IRM). | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Automatic Newline (LNM). | #Y |\n */\n public setMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = true;\n break;\n case 20:\n this._optionsService.options.convertEol = true;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm h\n * DEC Private Mode Set (DECSET).\n * Ps = 1 -> Application Cursor Keys (DECCKM).\n * Ps = 2 -> Designate USASCII for character sets G0-G3\n * (DECANM), and set VT100 mode.\n * Ps = 3 -> 132 Column Mode (DECCOLM).\n * Ps = 4 -> Smooth (Slow) Scroll (DECSCLM).\n * Ps = 5 -> Reverse Video (DECSCNM).\n * Ps = 6 -> Origin Mode (DECOM).\n * Ps = 7 -> Wraparound Mode (DECAWM).\n * Ps = 8 -> Auto-repeat Keys (DECARM).\n * Ps = 9 -> Send Mouse X & Y on button press. See the sec-\n * tion Mouse Tracking.\n * Ps = 1 0 -> Show toolbar (rxvt).\n * Ps = 1 2 -> Start Blinking Cursor (att610).\n * Ps = 1 8 -> Print form feed (DECPFF).\n * Ps = 1 9 -> Set print extent to full screen (DECPEX).\n * Ps = 2 5 -> Show Cursor (DECTCEM).\n * Ps = 3 0 -> Show scrollbar (rxvt).\n * Ps = 3 5 -> Enable font-shifting functions (rxvt).\n * Ps = 3 8 -> Enter Tektronix Mode (DECTEK).\n * Ps = 4 0 -> Allow 80 -> 132 Mode.\n * Ps = 4 1 -> more(1) fix (see curses resource).\n * Ps = 4 2 -> Enable Nation Replacement Character sets (DECN-\n * RCM).\n * Ps = 4 4 -> Turn On Margin Bell.\n * Ps = 4 5 -> Reverse-wraparound Mode.\n * Ps = 4 6 -> Start Logging. This is normally disabled by a\n * compile-time option.\n * Ps = 4 7 -> Use Alternate Screen Buffer. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 6 6 -> Application keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends backspace (DECBKM).\n * Ps = 1 0 0 0 -> Send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Enable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Scroll to bottom on tty output (rxvt).\n * Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Interpret \"meta\" key, sets eighth bit.\n * (enables the eightBitInput resource).\n * Ps = 1 0 3 5 -> Enable special modifiers for Alt and Num-\n * Lock keys. (This enables the numLock resource).\n * Ps = 1 0 3 6 -> Send ESC when Meta modifies a key. (This\n * enables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send DEL from the editing-keypad Delete\n * key.\n * Ps = 1 0 3 9 -> Send ESC when Alt modifies a key. (This\n * enables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Keep selection even if not highlighted.\n * (This enables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the CLIPBOARD selection. (This enables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Enable Urgency window manager hint when\n * Control-G is received. (This enables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Enable raising of the window when Control-G\n * is received. (enables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Alternate Screen Buffer. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 8 -> Save cursor as in DECSC. (This may be dis-\n * abled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Save cursor as in DECSC and use Alternate\n * Screen Buffer, clearing it first. (This may be disabled by\n * the titeInhibit resource). This combines the effects of the 1\n * 0 4 7 and 1 0 4 8 modes. Use this with terminfo-based\n * applications rather than the 4 7 mode.\n * Ps = 1 0 5 0 -> Set terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Set Sun function-key mode.\n * Ps = 1 0 5 2 -> Set HP function-key mode.\n * Ps = 1 0 5 3 -> Set SCO function-key mode.\n * Ps = 1 0 6 0 -> Set legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Set VT220 keyboard emulation.\n * Ps = 2 0 0 4 -> Set bracketed paste mode.\n * Modes:\n * http: *vt100.net/docs/vt220-rm/chapter4.html\n *\n * @vt: #P[See below for supported modes.] CSI DECSET \"DEC Private Set Mode\" \"CSI ? Pm h\" \"Set various terminal attributes.\"\n * Supported param values by DECSET:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | --------|\n * | 1 | Application Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate US-ASCII for character sets G0-G3 (DECANM). | #Y |\n * | 3 | 132 Column Mode (DECCOLM). | #Y |\n * | 6 | Origin Mode (DECOM). | #Y |\n * | 7 | Auto-wrap Mode (DECAWM). | #Y |\n * | 8 | Auto-repeat Keys (DECARM). Always on. | #N |\n * | 9 | X10 xterm mouse protocol. | #Y |\n * | 12 | Start Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Show Cursor (DECTCEM). | #Y |\n * | 45 | Reverse wrap-around. | #Y |\n * | 47 | Use Alternate Screen Buffer. | #Y |\n * | 66 | Application keypad (DECNKM). | #Y |\n * | 1000 | X11 xterm mouse protocol. | #Y |\n * | 1002 | Use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Use All Motion Mouse Tracking. | #Y |\n * | 1004 | Send FocusIn/FocusOut events | #Y |\n * | 1005 | Enable UTF-8 Mouse Mode. | #N |\n * | 1006 | Enable SGR Mouse Mode. | #Y |\n * | 1015 | Enable urxvt Mouse Mode. | #N |\n * | 1016 | Enable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Alternate Screen Buffer. | #Y |\n * | 1048 | Save cursor as in DECSC. | #Y |\n * | 1049 | Save cursor and switch to alternate buffer clearing it. | #P[Does not clear the alternate buffer.] |\n * | 2004 | Set bracketed paste mode. | #Y |\n *\n *\n * FIXME: implement DECSCNM, 1049 should clear altbuffer\n */\n public setModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = true;\n break;\n case 2:\n this._charsetService.setgCharset(0, DEFAULT_CHARSET);\n this._charsetService.setgCharset(1, DEFAULT_CHARSET);\n this._charsetService.setgCharset(2, DEFAULT_CHARSET);\n this._charsetService.setgCharset(3, DEFAULT_CHARSET);\n // set VT100 mode here\n break;\n case 3:\n /**\n * DECCOLM - 132 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(132, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = true;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = true;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = true;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = true;\n break;\n case 66:\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n // no release, no motion, no wheel, no modifiers.\n this._mouseStateService.activeProtocol = 'X10';\n break;\n case 1000: // vt200 mouse\n // no motion.\n this._mouseStateService.activeProtocol = 'VT200';\n break;\n case 1002: // button event mouse\n this._mouseStateService.activeProtocol = 'DRAG';\n break;\n case 1003: // any event mouse\n // any event - sends motion events,\n // even if there is no button held down.\n this._mouseStateService.activeProtocol = 'ANY';\n break;\n case 1004: // send focusin/focusout events\n // focusin: ^[[I\n // focusout: ^[[O\n this._coreService.decPrivateModes.sendFocus = true;\n this._onRequestSendFocus.fire();\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'SGR';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECSET 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'SGR_PIXELS';\n break;\n case 25: // show cursor\n this._coreService.isCursorHidden = false;\n break;\n case 1048: // alt screen cursor\n this.saveCursor();\n break;\n case 1049: // alt screen buffer cursor\n this.saveCursor();\n // FALL-THROUGH\n case 47: // alt screen buffer\n case 1047: // alt screen buffer\n // Swap kitty keyboard flags: save main, restore alt\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.mainFlags = state.flags;\n state.flags = state.altFlags;\n }\n this._bufferService.buffers.activateAltBuffer(this._eraseAttrData());\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = true;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = true;\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = true;\n }\n break;\n case 9001: // win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md)\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = true;\n }\n break;\n }\n }\n return true;\n }\n\n\n /**\n * CSI Pm l Reset Mode (RM).\n * Ps = 2 -> Keyboard Action Mode (AM).\n * Ps = 4 -> Replace Mode (IRM).\n * Ps = 1 2 -> Send/receive (SRM).\n * Ps = 2 0 -> Normal Linefeed (LNM).\n *\n * @vt: #P[Only IRM is supported.] CSI RM \"Reset Mode\" \"CSI Pm l\" \"Set various terminal attributes.\"\n * Supported param values by RM:\n *\n * | Param | Action | Support |\n * | ----- | -------------------------------------- | ------- |\n * | 2 | Keyboard Action Mode (KAM). Always on. | #N |\n * | 4 | Replace Mode (IRM). (default) | #Y |\n * | 12 | Send/receive (SRM). Always off. | #N |\n * | 20 | Normal Linefeed (LNM). | #Y |\n *\n *\n * FIXME: why is LNM commented out?\n */\n public resetMode(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 4:\n this._coreService.modes.insertMode = false;\n break;\n case 20:\n this._optionsService.options.convertEol = false;\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI ? Pm l\n * DEC Private Mode Reset (DECRST).\n * Ps = 1 -> Normal Cursor Keys (DECCKM).\n * Ps = 2 -> Designate VT52 mode (DECANM).\n * Ps = 3 -> 80 Column Mode (DECCOLM).\n * Ps = 4 -> Jump (Fast) Scroll (DECSCLM).\n * Ps = 5 -> Normal Video (DECSCNM).\n * Ps = 6 -> Normal Cursor Mode (DECOM).\n * Ps = 7 -> No Wraparound Mode (DECAWM).\n * Ps = 8 -> No Auto-repeat Keys (DECARM).\n * Ps = 9 -> Don't send Mouse X & Y on button press.\n * Ps = 1 0 -> Hide toolbar (rxvt).\n * Ps = 1 2 -> Stop Blinking Cursor (att610).\n * Ps = 1 8 -> Don't print form feed (DECPFF).\n * Ps = 1 9 -> Limit print to scrolling region (DECPEX).\n * Ps = 2 5 -> Hide Cursor (DECTCEM).\n * Ps = 3 0 -> Don't show scrollbar (rxvt).\n * Ps = 3 5 -> Disable font-shifting functions (rxvt).\n * Ps = 4 0 -> Disallow 80 -> 132 Mode.\n * Ps = 4 1 -> No more(1) fix (see curses resource).\n * Ps = 4 2 -> Disable Nation Replacement Character sets (DEC-\n * NRCM).\n * Ps = 4 4 -> Turn Off Margin Bell.\n * Ps = 4 5 -> No Reverse-wraparound Mode.\n * Ps = 4 6 -> Stop Logging. (This is normally disabled by a\n * compile-time option).\n * Ps = 4 7 -> Use Normal Screen Buffer.\n * Ps = 6 6 -> Numeric keypad (DECNKM).\n * Ps = 6 7 -> Backarrow key sends delete (DECBKM).\n * Ps = 1 0 0 0 -> Don't send Mouse X & Y on button press and\n * release. See the section Mouse Tracking.\n * Ps = 1 0 0 1 -> Don't use Hilite Mouse Tracking.\n * Ps = 1 0 0 2 -> Don't use Cell Motion Mouse Tracking.\n * Ps = 1 0 0 3 -> Don't use All Motion Mouse Tracking.\n * Ps = 1 0 0 4 -> Don't send FocusIn/FocusOut events.\n * Ps = 1 0 0 5 -> Disable Extended Mouse Mode.\n * Ps = 1 0 1 0 -> Don't scroll to bottom on tty output\n * (rxvt).\n * Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).\n * Ps = 1 0 3 4 -> Don't interpret \"meta\" key. (This disables\n * the eightBitInput resource).\n * Ps = 1 0 3 5 -> Disable special modifiers for Alt and Num-\n * Lock keys. (This disables the numLock resource).\n * Ps = 1 0 3 6 -> Don't send ESC when Meta modifies a key.\n * (This disables the metaSendsEscape resource).\n * Ps = 1 0 3 7 -> Send VT220 Remove from the editing-keypad\n * Delete key.\n * Ps = 1 0 3 9 -> Don't send ESC when Alt modifies a key.\n * (This disables the altSendsEscape resource).\n * Ps = 1 0 4 0 -> Do not keep selection when not highlighted.\n * (This disables the keepSelection resource).\n * Ps = 1 0 4 1 -> Use the PRIMARY selection. (This disables\n * the selectToClipboard resource).\n * Ps = 1 0 4 2 -> Disable Urgency window manager hint when\n * Control-G is received. (This disables the bellIsUrgent\n * resource).\n * Ps = 1 0 4 3 -> Disable raising of the window when Control-\n * G is received. (This disables the popOnBell resource).\n * Ps = 1 0 4 7 -> Use Normal Screen Buffer, clearing screen\n * first if in the Alternate Screen. (This may be disabled by\n * the titeInhibit resource).\n * Ps = 1 0 4 8 -> Restore cursor as in DECRC. (This may be\n * disabled by the titeInhibit resource).\n * Ps = 1 0 4 9 -> Use Normal Screen Buffer and restore cursor\n * as in DECRC. (This may be disabled by the titeInhibit\n * resource). This combines the effects of the 1 0 4 7 and 1 0\n * 4 8 modes. Use this with terminfo-based applications rather\n * than the 4 7 mode.\n * Ps = 1 0 5 0 -> Reset terminfo/termcap function-key mode.\n * Ps = 1 0 5 1 -> Reset Sun function-key mode.\n * Ps = 1 0 5 2 -> Reset HP function-key mode.\n * Ps = 1 0 5 3 -> Reset SCO function-key mode.\n * Ps = 1 0 6 0 -> Reset legacy keyboard emulation (X11R6).\n * Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style.\n * Ps = 2 0 0 4 -> Reset bracketed paste mode.\n *\n * @vt: #P[See below for supported modes.] CSI DECRST \"DEC Private Reset Mode\" \"CSI ? Pm l\" \"Reset various terminal attributes.\"\n * Supported param values by DECRST:\n *\n * | param | Action | Support |\n * | ----- | ------------------------------------------------------- | ------- |\n * | 1 | Normal Cursor Keys (DECCKM). | #Y |\n * | 2 | Designate VT52 mode (DECANM). | #N |\n * | 3 | 80 Column Mode (DECCOLM). | #B[Switches to old column width instead of 80.] |\n * | 6 | Normal Cursor Mode (DECOM). | #Y |\n * | 7 | No Wraparound Mode (DECAWM). | #Y |\n * | 8 | No Auto-repeat Keys (DECARM). | #N |\n * | 9 | Don't send Mouse X & Y on button press. | #Y |\n * | 12 | Stop Blinking Cursor. | #P[Requires the allowSetCursorBlink quirk option enabled.] |\n * | 25 | Hide Cursor (DECTCEM). | #Y |\n * | 45 | No reverse wrap-around. | #Y |\n * | 47 | Use Normal Screen Buffer. | #Y |\n * | 66 | Numeric keypad (DECNKM). | #Y |\n * | 1000 | Don't send Mouse reports. | #Y |\n * | 1002 | Don't use Cell Motion Mouse Tracking. | #Y |\n * | 1003 | Don't use All Motion Mouse Tracking. | #Y |\n * | 1004 | Don't send FocusIn/FocusOut events. | #Y |\n * | 1005 | Disable UTF-8 Mouse Mode. | #N |\n * | 1006 | Disable SGR Mouse Mode. | #Y |\n * | 1015 | Disable urxvt Mouse Mode. | #N |\n * | 1016 | Disable SGR-Pixels Mouse Mode. | #Y |\n * | 1047 | Use Normal Screen Buffer (clearing screen if in alt). | #Y |\n * | 1048 | Restore cursor as in DECRC. | #Y |\n * | 1049 | Use Normal Screen Buffer and restore cursor. | #Y |\n * | 2004 | Reset bracketed paste mode. | #Y |\n *\n *\n * FIXME: DECCOLM is currently broken (already fixed in window options PR)\n */\n public resetModePrivate(params: IParams): boolean {\n for (let i = 0; i < params.length; i++) {\n switch (params.params[i]) {\n case 1:\n this._coreService.decPrivateModes.applicationCursorKeys = false;\n break;\n case 3:\n /**\n * DECCOLM - 80 column mode.\n * This is only active if 'SetWinLines' (24) is enabled\n * through `options.windowsOptions`.\n */\n if (this._optionsService.rawOptions.windowOptions.setWinLines) {\n this._bufferService.resize(80, this._bufferService.rows);\n this._onRequestReset.fire();\n }\n break;\n case 6:\n this._coreService.decPrivateModes.origin = false;\n this._setCursor(0, 0);\n break;\n case 7:\n this._coreService.decPrivateModes.wraparound = false;\n break;\n case 12:\n if (this._optionsService.rawOptions.quirks?.allowSetCursorBlink) {\n this._optionsService.options.cursorBlink = false;\n }\n break;\n case 45:\n this._coreService.decPrivateModes.reverseWraparound = false;\n break;\n case 66:\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n break;\n case 9: // X10 Mouse\n case 1000: // vt200 mouse\n case 1002: // button event mouse\n case 1003: // any event mouse\n this._mouseStateService.activeProtocol = 'NONE';\n break;\n case 1004: // send focusin/focusout events\n this._coreService.decPrivateModes.sendFocus = false;\n break;\n case 1005: // utf8 ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1005 not supported (see #2507)');\n break;\n case 1006: // sgr ext mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 1015: // urxvt ext mode mouse - removed in #2507\n this._logService.debug('DECRST 1015 not supported (see #2507)');\n break;\n case 1016: // sgr pixels mode mouse\n this._mouseStateService.activeEncoding = 'DEFAULT';\n break;\n case 25: // hide cursor\n this._coreService.isCursorHidden = true;\n break;\n case 1048: // alt screen cursor\n this.restoreCursor();\n break;\n case 1049: // alt screen buffer cursor\n // FALL-THROUGH\n case 47: // normal screen buffer\n case 1047: // normal screen buffer - clearing it first\n // Swap kitty keyboard flags: save alt, restore main\n if (this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n const state = this._coreService.kittyKeyboard;\n state.altFlags = state.flags;\n state.flags = state.mainFlags;\n }\n // Ensure the selection manager has the correct buffer\n this._bufferService.buffers.activateNormalBuffer();\n if (params.params[i] === 1049) {\n this.restoreCursor();\n }\n this._coreService.isCursorInitialized = true;\n this._onRequestRefreshRows.fire(undefined);\n this._onRequestSyncScrollBar.fire();\n break;\n case 2004: // bracketed paste mode (https://cirw.in/blog/bracketed-paste)\n this._coreService.decPrivateModes.bracketedPasteMode = false;\n break;\n case 2026: // synchronized output (https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md)\n this._coreService.decPrivateModes.synchronizedOutput = false;\n this._onRequestRefreshRows.fire(undefined);\n break;\n case 2031: // color scheme updates (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._coreService.decPrivateModes.colorSchemeUpdates = false;\n }\n break;\n case 9001: // win32-input-mode\n if (this._optionsService.rawOptions.vtExtensions?.win32InputMode) {\n this._coreService.decPrivateModes.win32InputMode = false;\n }\n break;\n }\n }\n return true;\n }\n\n /**\n * CSI Ps $ p Request ANSI Mode (DECRQM).\n *\n * Reports CSI Ps; Pm $ y (DECRPM), where Ps is the mode number as in SM/RM,\n * and Pm is the mode value:\n * 0 - not recognized\n * 1 - set\n * 2 - reset\n * 3 - permanently set\n * 4 - permanently reset\n *\n * @vt: #Y CSI DECRQM \"Request Mode\" \"CSI Ps $p\" \"Request mode state.\"\n * Returns a report as `CSI Ps; Pm $ y` (DECRPM), where `Ps` is the mode number as in SM/RM\n * or DECSET/DECRST, and `Pm` is the mode value:\n * - 0: not recognized\n * - 1: set\n * - 2: reset\n * - 3: permanently set\n * - 4: permanently reset\n *\n * For modes not understood xterm.js always returns `notRecognized`. In general this means,\n * that a certain operation mode is not implemented and cannot be used.\n *\n * Modes changing the active terminal buffer (47, 1047, 1049) are not subqueried\n * and only report, whether the alternate buffer is set.\n *\n * Mouse encodings and mouse protocols are handled mutual exclusive,\n * thus only one of each of those can be set at a given time.\n *\n * There is a chance, that some mode reports are not fully in line with xterm.js' behavior,\n * e.g. if the default implementation already exposes a certain behavior. If you find\n * discrepancies in the mode reports, please file a bug.\n */\n public requestMode(params: IParams, ansi: boolean): boolean {\n // return value as in DECRPM\n const enum V {\n NOT_RECOGNIZED = 0,\n SET = 1,\n RESET = 2,\n PERMANENTLY_SET = 3,\n PERMANENTLY_RESET = 4\n }\n\n // access helpers\n const dm = this._coreService.decPrivateModes;\n const { activeProtocol: mouseProtocol, activeEncoding: mouseEncoding } = this._mouseStateService;\n const cs = this._coreService;\n const { buffers, cols } = this._bufferService;\n const { active, alt } = buffers;\n const opts = this._optionsService.rawOptions;\n\n const f = (m: number, v: V): boolean => {\n cs.triggerDataEvent(`${C0.ESC}[${ansi ? '' : '?'}${m};${v}$y`);\n return true;\n };\n const b2v = (value: boolean): V => value ? V.SET : V.RESET;\n\n const p = params.params[0];\n\n if (ansi) {\n if (p === 2) return f(p, V.PERMANENTLY_RESET);\n if (p === 4) return f(p, b2v(cs.modes.insertMode));\n if (p === 12) return f(p, V.PERMANENTLY_SET);\n if (p === 20) return f(p, b2v(opts.convertEol));\n return f(p, V.NOT_RECOGNIZED);\n }\n\n if (p === 1) return f(p, b2v(dm.applicationCursorKeys));\n if (p === 3) return f(p, opts.windowOptions.setWinLines ? (cols === 80 ? V.RESET : cols === 132 ? V.SET : V.NOT_RECOGNIZED) : V.NOT_RECOGNIZED);\n if (p === 6) return f(p, b2v(dm.origin));\n if (p === 7) return f(p, b2v(dm.wraparound));\n if (p === 8) return f(p, V.PERMANENTLY_SET);\n if (p === 9) return f(p, b2v(mouseProtocol === 'X10'));\n if (p === 12) return f(p, b2v(opts.cursorBlink));\n if (p === 25) return f(p, b2v(!cs.isCursorHidden));\n if (p === 45) return f(p, b2v(dm.reverseWraparound));\n if (p === 66) return f(p, b2v(dm.applicationKeypad));\n if (p === 67) return f(p, V.PERMANENTLY_RESET);\n if (p === 1000) return f(p, b2v(mouseProtocol === 'VT200'));\n if (p === 1002) return f(p, b2v(mouseProtocol === 'DRAG'));\n if (p === 1003) return f(p, b2v(mouseProtocol === 'ANY'));\n if (p === 1004) return f(p, b2v(dm.sendFocus));\n if (p === 1005) return f(p, V.PERMANENTLY_RESET);\n if (p === 1006) return f(p, b2v(mouseEncoding === 'SGR'));\n if (p === 1015) return f(p, V.PERMANENTLY_RESET);\n if (p === 1016) return f(p, b2v(mouseEncoding === 'SGR_PIXELS'));\n if (p === 1048) return f(p, V.SET); // xterm always returns SET here\n if (p === 47 || p === 1047 || p === 1049) return f(p, b2v(active === alt));\n if (p === 2004) return f(p, b2v(dm.bracketedPasteMode));\n if (p === 2026) return f(p, b2v(dm.synchronizedOutput));\n if (p === 9001) return this._optionsService.rawOptions.vtExtensions?.win32InputMode ? f(p, b2v(dm.win32InputMode)) : f(p, V.NOT_RECOGNIZED);\n return f(p, V.NOT_RECOGNIZED);\n }\n\n /**\n * Helper to write color information packed with color mode.\n */\n private _updateAttrColor(color: number, mode: number, c1: number, c2: number, c3: number): number {\n if (mode === 2) {\n color |= Attributes.CM_RGB;\n color &= ~Attributes.RGB_MASK;\n color |= AttributeData.fromColorRGB([c1, c2, c3]);\n } else if (mode === 5) {\n color &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n color |= Attributes.CM_P256 | (c1 & 0xff);\n }\n return color;\n }\n\n /**\n * Helper to extract and apply color params/subparams.\n * Returns advance for params index.\n */\n private _extractColor(params: IParams, pos: number, attr: IAttributeData): number {\n // normalize params\n // meaning: [target, CM, ign, val, val, val]\n // RGB : [ 38/48, 2, ign, r, g, b]\n // P256 : [ 38/48, 5, ign, v, ign, ign]\n const accu = [0, 0, -1, 0, 0, 0];\n\n // alignment placeholder for non color space sequences\n let cSpace = 0;\n\n // return advance we took in params\n let advance = 0;\n\n do {\n accu[advance + cSpace] = params.params[pos + advance];\n if (params.hasSubParams(pos + advance)) {\n const subparams = params.getSubParams(pos + advance)!;\n let i = 0;\n do {\n if (accu[1] === 5) {\n cSpace = 1;\n }\n accu[advance + i + 1 + cSpace] = subparams[i];\n } while (++i < subparams.length && i + advance + 1 + cSpace < accu.length);\n break;\n }\n // exit early if can decide color mode with semicolons\n if ((accu[1] === 5 && advance + cSpace >= 2)\n || (accu[1] === 2 && advance + cSpace >= 5)) {\n break;\n }\n // offset colorSpace slot for semicolon mode\n if (accu[1]) {\n cSpace = 1;\n }\n } while (++advance + pos < params.length && advance + cSpace < accu.length);\n\n // set default values to 0\n for (let i = 2; i < accu.length; ++i) {\n if (accu[i] === -1) {\n accu[i] = 0;\n }\n }\n\n // apply colors\n switch (accu[0]) {\n case 38:\n attr.fg = this._updateAttrColor(attr.fg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 48:\n attr.bg = this._updateAttrColor(attr.bg, accu[1], accu[3], accu[4], accu[5]);\n break;\n case 58:\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = this._updateAttrColor(attr.extended.underlineColor, accu[1], accu[3], accu[4], accu[5]);\n }\n\n return advance;\n }\n\n /**\n * SGR 4 subparams:\n * 4:0 - equal to SGR 24 (turn off all underline)\n * 4:1 - equal to SGR 4 (single underline)\n * 4:2 - equal to SGR 21 (double underline)\n * 4:3 - curly underline\n * 4:4 - dotted underline\n * 4:5 - dashed underline\n */\n private _processUnderline(style: number, attr: IAttributeData): void {\n // treat extended attrs as immutable, thus always clone from old one\n // this is needed since the buffer only holds references to it\n attr.extended = attr.extended.clone();\n\n // default to 1 == single underline\n if (!~style || style > 5) {\n style = 1;\n }\n attr.extended.underlineStyle = style;\n attr.fg |= FgFlags.UNDERLINE;\n\n // 0 deactivates underline\n if (style === 0) {\n attr.fg &= ~FgFlags.UNDERLINE;\n }\n\n // update HAS_EXTENDED in BG\n attr.updateExtended();\n }\n\n private _processSGR0(attr: IAttributeData): void {\n attr.fg = DEFAULT_ATTR_DATA.fg;\n attr.bg = DEFAULT_ATTR_DATA.bg;\n attr.extended = attr.extended.clone();\n // Reset underline style and color. Note that we don't want to reset other\n // fields such as the url id.\n attr.extended.underlineStyle = UnderlineStyle.NONE;\n attr.extended.underlineColor &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.updateExtended();\n }\n\n /**\n * CSI Pm m Character Attributes (SGR).\n *\n * @vt: #P[See below for supported attributes.] CSI SGR \"Select Graphic Rendition\" \"CSI Pm m\" \"Set/Reset various text attributes.\"\n * SGR selects one or more character attributes at the same time. Multiple params (up to 32)\n * are applied in order from left to right. The changed attributes are applied to all new\n * characters received. If you move characters in the viewport by scrolling or any other means,\n * then the attributes move with the characters.\n *\n * Supported param values by SGR:\n *\n * | Param | Meaning | Support |\n * | --------- | -------------------------------------------------------- | ------- |\n * | 0 | Normal (default). Resets any other preceding SGR. | #Y |\n * | 1 | Bold. (also see `options.drawBoldTextInBrightColors`) | #Y |\n * | 2 | Faint, decreased intensity. | #Y |\n * | 3 | Italic. | #Y |\n * | 4 | Underlined (see below for style support). | #Y |\n * | 5 | Slowly blinking. | #N |\n * | 6 | Rapidly blinking. | #N |\n * | 7 | Inverse. Flips foreground and background color. | #Y |\n * | 8 | Invisible (hidden). | #Y |\n * | 9 | Crossed-out characters (strikethrough). | #Y |\n * | 21 | Doubly underlined. | #Y |\n * | 22 | Normal (neither bold nor faint). | #Y |\n * | 23 | No italic. | #Y |\n * | 24 | Not underlined. | #Y |\n * | 25 | Steady (not blinking). | #Y |\n * | 27 | Positive (not inverse). | #Y |\n * | 28 | Visible (not hidden). | #Y |\n * | 29 | Not Crossed-out (strikethrough). | #Y |\n * | 30 | Foreground color: Black. | #Y |\n * | 31 | Foreground color: Red. | #Y |\n * | 32 | Foreground color: Green. | #Y |\n * | 33 | Foreground color: Yellow. | #Y |\n * | 34 | Foreground color: Blue. | #Y |\n * | 35 | Foreground color: Magenta. | #Y |\n * | 36 | Foreground color: Cyan. | #Y |\n * | 37 | Foreground color: White. | #Y |\n * | 38 | Foreground color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 39 | Foreground color: Default (original). | #Y |\n * | 40 | Background color: Black. | #Y |\n * | 41 | Background color: Red. | #Y |\n * | 42 | Background color: Green. | #Y |\n * | 43 | Background color: Yellow. | #Y |\n * | 44 | Background color: Blue. | #Y |\n * | 45 | Background color: Magenta. | #Y |\n * | 46 | Background color: Cyan. | #Y |\n * | 47 | Background color: White. | #Y |\n * | 48 | Background color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 49 | Background color: Default (original). | #Y |\n * | 53 | Overlined. | #Y |\n * | 55 | Not Overlined. | #Y |\n * | 58 | Underline color: Extended color. | #P[Support for RGB and indexed colors, see below.] |\n * | 221 | Not bold (kitty extension). | #Y |\n * | 222 | Not faint (kitty extension). | #Y |\n * | 90 - 97 | Bright foreground color (analogous to 30 - 37). | #Y |\n * | 100 - 107 | Bright background color (analogous to 40 - 47). | #Y |\n *\n * Underline supports subparams to denote the style in the form `4 : x`:\n *\n * | x | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | No underline. Same as `SGR 24 m`. | #Y |\n * | 1 | Single underline. Same as `SGR 4 m`. | #Y |\n * | 2 | Double underline. | #Y |\n * | 3 | Curly underline. | #Y |\n * | 4 | Dotted underline. | #Y |\n * | 5 | Dashed underline. | #Y |\n * | other | Single underline. Same as `SGR 4 m`. | #Y |\n *\n * Extended colors are supported for foreground (Ps=38), background (Ps=48) and underline (Ps=58)\n * as follows:\n *\n * | Ps + 1 | Meaning | Support |\n * | ------ | ------------------------------------------------------------- | ------- |\n * | 0 | Implementation defined. | #N |\n * | 1 | Transparent. | #N |\n * | 2 | RGB color as `Ps ; 2 ; R ; G ; B` or `Ps : 2 : : R : G : B`. | #Y |\n * | 3 | CMY color. | #N |\n * | 4 | CMYK color. | #N |\n * | 5 | Indexed (256 colors) as `Ps ; 5 ; INDEX` or `Ps : 5 : INDEX`. | #Y |\n */\n public charAttributes(params: IParams): boolean {\n // Optimize a single SGR0.\n if (params.length === 1 && params.params[0] === 0) {\n this._processSGR0(this._curAttrData);\n return true;\n }\n\n const l = params.length;\n let p;\n const attr = this._curAttrData;\n\n for (let i = 0; i < l; i++) {\n p = params.params[i];\n if (p >= 30 && p <= 37) {\n // fg color 8\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 30);\n } else if (p >= 40 && p <= 47) {\n // bg color 8\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 40);\n } else if (p >= 90 && p <= 97) {\n // fg color 16\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= Attributes.CM_P16 | (p - 90) | 8;\n } else if (p >= 100 && p <= 107) {\n // bg color 16\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= Attributes.CM_P16 | (p - 100) | 8;\n } else if (p === 0) {\n // default\n this._processSGR0(attr);\n } else if (p === 1) {\n // bold text\n attr.fg |= FgFlags.BOLD;\n } else if (p === 3) {\n // italic text\n attr.bg |= BgFlags.ITALIC;\n } else if (p === 4) {\n // underlined text\n attr.fg |= FgFlags.UNDERLINE;\n this._processUnderline(params.hasSubParams(i) ? params.getSubParams(i)![0] : UnderlineStyle.SINGLE, attr);\n } else if (p === 5) {\n // blink\n attr.fg |= FgFlags.BLINK;\n } else if (p === 7) {\n // inverse and positive\n // test with: echo -e '\\e[31m\\e[42mhello\\e[7mworld\\e[27mhi\\e[m'\n attr.fg |= FgFlags.INVERSE;\n } else if (p === 8) {\n // invisible\n attr.fg |= FgFlags.INVISIBLE;\n } else if (p === 9) {\n // strikethrough\n attr.fg |= FgFlags.STRIKETHROUGH;\n } else if (p === 2) {\n // dimmed text\n attr.bg |= BgFlags.DIM;\n } else if (p === 21) {\n // double underline\n this._processUnderline(UnderlineStyle.DOUBLE, attr);\n } else if (p === 22) {\n // not bold nor faint\n attr.fg &= ~FgFlags.BOLD;\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 23) {\n // not italic\n attr.bg &= ~BgFlags.ITALIC;\n } else if (p === 24) {\n // not underlined\n attr.fg &= ~FgFlags.UNDERLINE;\n this._processUnderline(UnderlineStyle.NONE, attr);\n } else if (p === 25) {\n // not blink\n attr.fg &= ~FgFlags.BLINK;\n } else if (p === 27) {\n // not inverse\n attr.fg &= ~FgFlags.INVERSE;\n } else if (p === 28) {\n // not invisible\n attr.fg &= ~FgFlags.INVISIBLE;\n } else if (p === 29) {\n // not strikethrough\n attr.fg &= ~FgFlags.STRIKETHROUGH;\n } else if (p === 39) {\n // reset fg\n attr.fg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.fg |= DEFAULT_ATTR_DATA.fg & Attributes.RGB_MASK;\n } else if (p === 49) {\n // reset bg\n attr.bg &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n attr.bg |= DEFAULT_ATTR_DATA.bg & Attributes.RGB_MASK;\n } else if (p === 38 || p === 48 || p === 58) {\n // fg color 256 and RGB\n i += this._extractColor(params, i, attr);\n } else if (p === 53) {\n // overline\n attr.bg |= BgFlags.OVERLINE;\n } else if (p === 55) {\n // not overline\n attr.bg &= ~BgFlags.OVERLINE;\n } else if (p === 221 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not bold (kitty extension)\n attr.fg &= ~FgFlags.BOLD;\n } else if (p === 222 && (this._optionsService.rawOptions.vtExtensions?.kittySgrBoldFaintControl ?? true)) {\n // not faint (kitty extension)\n attr.bg &= ~BgFlags.DIM;\n } else if (p === 59) {\n attr.extended = attr.extended.clone();\n attr.extended.underlineColor = -1;\n attr.updateExtended();\n } else {\n this._logService.debug('Unknown SGR attribute: %d.', p);\n }\n }\n return true;\n }\n\n /**\n * CSI Ps n Device Status Report (DSR).\n * Ps = 5 -> Status Report. Result (``OK'') is\n * CSI 0 n\n * Ps = 6 -> Report Cursor Position (CPR) [row;column].\n * Result is\n * CSI r ; c R\n * CSI ? Ps n\n * Device Status Report (DSR, DEC-specific).\n * Ps = 6 -> Report Cursor Position (CPR) [row;column] as CSI\n * ? r ; c R (assumes page is zero).\n * Ps = 1 5 -> Report Printer status as CSI ? 1 0 n (ready).\n * or CSI ? 1 1 n (not ready).\n * Ps = 2 5 -> Report UDK status as CSI ? 2 0 n (unlocked)\n * or CSI ? 2 1 n (locked).\n * Ps = 2 6 -> Report Keyboard status as\n * CSI ? 2 7 ; 1 ; 0 ; 0 n (North American).\n * The last two parameters apply to VT400 & up, and denote key-\n * board ready and LK01 respectively.\n * Ps = 5 3 -> Report Locator status as\n * CSI ? 5 3 n Locator available, if compiled-in, or\n * CSI ? 5 0 n No Locator, if not.\n *\n * @vt: #Y CSI DSR \"Device Status Report\" \"CSI Ps n\" \"Request cursor position (CPR) with `Ps` = 6.\"\n */\n public deviceStatus(params: IParams): boolean {\n switch (params.params[0]) {\n case 5:\n // status report\n this._coreService.triggerDataEvent(`${C0.ESC}[0n`);\n break;\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[${y};${x}R`);\n break;\n }\n return true;\n }\n\n // @vt: #P[Only CPR is supported.] CSI DECDSR \"DEC Device Status Report\" \"CSI ? Ps n\" \"Only CPR is supported (same as DSR).\"\n public deviceStatusPrivate(params: IParams): boolean {\n // modern xterm doesnt seem to\n // respond to any of these except ?6, 6, and 5\n switch (params.params[0]) {\n case 6:\n // cursor position\n const y = this._activeBuffer.y + 1;\n const x = this._activeBuffer.x + 1;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${y};${x}R`);\n break;\n case 15:\n // no printer\n // this.handler(C0.ESC + '[?11n');\n break;\n case 25:\n // dont support user defined keys\n // this.handler(C0.ESC + '[?21n');\n break;\n case 26:\n // north american keyboard\n // this.handler(C0.ESC + '[?27;1;0;0n');\n break;\n case 53:\n // no dec locator/mouse\n // this.handler(C0.ESC + '[?50n');\n break;\n case 996:\n // color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n if (this._optionsService.rawOptions.vtExtensions?.colorSchemeQuery ?? true) {\n this._onRequestColorSchemeQuery.fire();\n }\n break;\n }\n return true;\n }\n\n /**\n * CSI ! p Soft terminal reset (DECSTR).\n * http://vt100.net/docs/vt220-rm/table4-10.html\n *\n * @vt: #Y CSI DECSTR \"Soft Terminal Reset\" \"CSI ! p\" \"Reset several terminal attributes to initial state.\"\n * There are two terminal reset sequences - RIS and DECSTR. While RIS performs almost a full\n * terminal bootstrap, DECSTR only resets certain attributes. For most needs DECSTR should be\n * sufficient.\n *\n * The following terminal attributes are reset to default values:\n * - IRM is reset (dafault = false)\n * - scroll margins are reset (default = viewport size)\n * - erase attributes are reset to default\n * - charsets are reset\n * - DECSC data is reset to initial values\n * - DECOM is reset to absolute mode\n *\n *\n * FIXME: there are several more attributes missing (see VT520 manual)\n */\n public softReset(params: IParams): boolean {\n this._coreService.isCursorHidden = false;\n this._onRequestSyncScrollBar.fire();\n this._activeBuffer.scrollTop = 0;\n this._activeBuffer.scrollBottom = this._bufferService.rows - 1;\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._coreService.reset();\n this._charsetService.reset();\n\n // reset DECSC data\n this._activeBuffer.savedX = 0;\n this._activeBuffer.savedY = this._activeBuffer.ybase;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n\n // reset DECOM\n this._coreService.decPrivateModes.origin = false;\n return true;\n }\n\n /**\n * CSI Ps SP q Set cursor style (DECSCUSR, VT520).\n * Ps = 0 -> reset to option.\n * Ps = 1 -> blinking block (default).\n * Ps = 2 -> steady block.\n * Ps = 3 -> blinking underline.\n * Ps = 4 -> steady underline.\n * Ps = 5 -> blinking bar (xterm).\n * Ps = 6 -> steady bar (xterm).\n *\n * @vt: #Y CSI DECSCUSR \"Set Cursor Style\" \"CSI Ps SP q\" \"Set cursor style.\"\n * Supported cursor styles:\n * - 0: reset to option\n * - empty, 1: blinking block\n * - 2: steady block\n * - 3: blinking underline\n * - 4: steady underline\n * - 5: blinking bar\n * - 6: steady bar\n */\n public setCursorStyle(params: IParams): boolean {\n const param = params.length === 0 ? 1 : params.params[0];\n if (param === 0) {\n this._coreService.decPrivateModes.cursorStyle = undefined;\n this._coreService.decPrivateModes.cursorBlink = undefined;\n } else {\n switch (param) {\n case 1:\n case 2:\n this._coreService.decPrivateModes.cursorStyle = 'block';\n break;\n case 3:\n case 4:\n this._coreService.decPrivateModes.cursorStyle = 'underline';\n break;\n case 5:\n case 6:\n this._coreService.decPrivateModes.cursorStyle = 'bar';\n break;\n }\n const isBlinking = param % 2 === 1;\n this._coreService.decPrivateModes.cursorBlink = isBlinking;\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps r\n * Set Scrolling Region [top;bottom] (default = full size of win-\n * dow) (DECSTBM).\n *\n * @vt: #Y CSI DECSTBM \"Set Top and Bottom Margin\" \"CSI Ps ; Ps r\" \"Set top and bottom margins of the viewport [top;bottom] (default = viewport size).\"\n */\n public setScrollRegion(params: IParams): boolean {\n const top = params.params[0] || 1;\n let bottom: number;\n\n if (params.length < 2 || (bottom = params.params[1]) > this._bufferService.rows || bottom === 0) {\n bottom = this._bufferService.rows;\n }\n\n if (bottom > top) {\n this._activeBuffer.scrollTop = top - 1;\n this._activeBuffer.scrollBottom = bottom - 1;\n this._setCursor(0, 0);\n }\n return true;\n }\n\n /**\n * CSI Ps ; Ps ; Ps t - Various window manipulations and reports (xterm)\n *\n * Note: Only those listed below are supported. All others are left to integrators and\n * need special treatment based on the embedding environment.\n *\n * Ps = 1 4 supported\n * Report xterm text area size in pixels.\n * Result is CSI 4 ; height ; width t\n * Ps = 14 ; 2 not implemented\n * Ps = 16 supported\n * Report xterm character cell size in pixels.\n * Result is CSI 6 ; height ; width t\n * Ps = 18 supported\n * Report the size of the text area in characters.\n * Result is CSI 8 ; height ; width t\n * Ps = 20 supported\n * Report xterm window's icon label.\n * Result is OSC L label ST\n * Ps = 21 supported\n * Report xterm window's title.\n * Result is OSC l label ST\n * Ps = 22 ; 0 -> Save xterm icon and window title on stack. supported\n * Ps = 22 ; 1 -> Save xterm icon title on stack. supported\n * Ps = 22 ; 2 -> Save xterm window title on stack. supported\n * Ps = 23 ; 0 -> Restore xterm icon and window title from stack. supported\n * Ps = 23 ; 1 -> Restore xterm icon title from stack. supported\n * Ps = 23 ; 2 -> Restore xterm window title from stack. supported\n * Ps >= 24 not implemented\n */\n public windowOptions(params: IParams): boolean {\n if (!paramToWindowOption(params.params[0], this._optionsService.rawOptions.windowOptions)) {\n return true;\n }\n const second = (params.length > 1) ? params.params[1] : 0;\n switch (params.params[0]) {\n case 14: // GetWinSizePixels, returns CSI 4 ; height ; width t\n if (second !== 2) {\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_WIN_SIZE_PIXELS);\n }\n break;\n case 16: // GetCellSizePixels, returns CSI 6 ; height ; width t\n this._onRequestWindowsOptionsReport.fire(WindowsOptionsReportType.GET_CELL_SIZE_PIXELS);\n break;\n case 18: // GetWinSizeChars, returns CSI 8 ; height ; width t\n if (this._bufferService) {\n this._coreService.triggerDataEvent(`${C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);\n }\n break;\n case 22: // PushTitle\n if (second === 0 || second === 2) {\n this._windowTitleStack.push(this._windowTitle);\n if (this._windowTitleStack.length > Constants.STACK_LIMIT) {\n this._windowTitleStack.shift();\n }\n }\n if (second === 0 || second === 1) {\n this._iconNameStack.push(this._iconName);\n if (this._iconNameStack.length > Constants.STACK_LIMIT) {\n this._iconNameStack.shift();\n }\n }\n break;\n case 23: // PopTitle\n if (second === 0 || second === 2) {\n if (this._windowTitleStack.length) {\n this.setTitle(this._windowTitleStack.pop()!);\n }\n }\n if (second === 0 || second === 1) {\n if (this._iconNameStack.length) {\n this.setIconName(this._iconNameStack.pop()!);\n }\n }\n break;\n }\n return true;\n }\n\n\n /**\n * CSI s\n * ESC 7\n * Save cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCOSC \"Save Cursor\" \"CSI s\" \"Save cursor position, charmap and text attributes.\"\n * @vt: #Y ESC SC \"Save Cursor\" \"ESC 7\" \"Save cursor position, charmap and text attributes.\"\n */\n public saveCursor(params?: IParams): boolean {\n this._activeBuffer.savedX = this._activeBuffer.x;\n this._activeBuffer.savedY = this._activeBuffer.ybase + this._activeBuffer.y;\n this._activeBuffer.savedCurAttrData.fg = this._curAttrData.fg;\n this._activeBuffer.savedCurAttrData.bg = this._curAttrData.bg;\n this._activeBuffer.savedCharset = this._charsetService.charset;\n this._activeBuffer.savedCharsets = this._charsetService.charsets.slice();\n this._activeBuffer.savedGlevel = this._charsetService.glevel;\n this._activeBuffer.savedOriginMode = this._coreService.decPrivateModes.origin;\n this._activeBuffer.savedWraparoundMode = this._coreService.decPrivateModes.wraparound;\n return true;\n }\n\n\n /**\n * CSI u\n * ESC 8\n * Restore cursor (ANSI.SYS).\n *\n * @vt: #P[TODO...] CSI SCORC \"Restore Cursor\" \"CSI u\" \"Restore cursor position, charmap and text attributes.\"\n * @vt: #Y ESC RC \"Restore Cursor\" \"ESC 8\" \"Restore cursor position, charmap and text attributes.\"\n */\n public restoreCursor(params?: IParams): boolean {\n this._activeBuffer.x = this._activeBuffer.savedX || 0;\n this._activeBuffer.y = Math.max(this._activeBuffer.savedY - this._activeBuffer.ybase, 0);\n this._curAttrData.fg = this._activeBuffer.savedCurAttrData.fg;\n this._curAttrData.bg = this._activeBuffer.savedCurAttrData.bg;\n for (let i = 0; i < this._activeBuffer.savedCharsets.length; i++) {\n this._charsetService.setgCharset(i, this._activeBuffer.savedCharsets[i]);\n }\n this._charsetService.setgLevel(this._activeBuffer.savedGlevel);\n this._coreService.decPrivateModes.origin = this._activeBuffer.savedOriginMode;\n this._coreService.decPrivateModes.wraparound = this._activeBuffer.savedWraparoundMode;\n this._restrictCursor();\n return true;\n }\n\n /**\n * OSC 2; ST (set window title)\n * Proxy to set window title.\n *\n * @vt: #P[Icon name is not exposed.] OSC 0 \"Set Windows Title and Icon Name\" \"OSC 0 ; Pt BEL\" \"Set window title and icon name.\"\n * Icon name is not supported. For Window Title see below.\n *\n * @vt: #Y OSC 2 \"Set Windows Title\" \"OSC 2 ; Pt BEL\" \"Set window title.\"\n * xterm.js does not manipulate the title directly, instead exposes changes via the event\n * `Terminal.onTitleChange`.\n */\n public setTitle(data: string): boolean {\n this._windowTitle = data;\n this._onTitleChange.fire(data);\n return true;\n }\n\n /**\n * OSC 1; ST\n * Note: Icon name is not exposed.\n */\n public setIconName(data: string): boolean {\n this._iconName = data;\n return true;\n }\n\n /**\n * OSC 4; ; ST (set ANSI color to )\n *\n * @vt: #Y OSC 4 \"Set ANSI color\" \"OSC 4 ; c ; spec BEL\" \"Change color number `c` to the color specified by `spec`.\"\n * `c` is the color index between 0 and 255. The color format of `spec` is derived from\n * `XParseColor` (see OSC 10 for supported formats). There may be multipe `c ; spec` pairs present\n * in the same instruction. If `spec` contains `?` the terminal returns a sequence with the\n * currently set color.\n */\n public setOrReportIndexedColor(data: string): boolean {\n const event: IColorEvent = [];\n const slots = data.split(';');\n while (slots.length > 1) {\n const idx = slots.shift() as string;\n const spec = slots.shift() as string;\n if (/^\\d+$/.exec(idx)) {\n const index = parseInt(idx, 10);\n if (isValidColorIndex(index)) {\n if (spec === '?') {\n event.push({ type: ColorRequestType.REPORT, index });\n } else {\n const color = parseColor(spec);\n if (color) {\n event.push({ type: ColorRequestType.SET, index, color });\n }\n }\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 8 ; ; ST - create hyperlink\n * OSC 8 ; ; ST - finish hyperlink\n *\n * Test case:\n *\n * ```sh\n * printf '\\e]8;;http://example.com\\e\\\\This is a link\\e]8;;\\e\\\\\\n'\n * ```\n *\n * @vt: #Y OSC 8 \"Create hyperlink\" \"OSC 8 ; params ; uri BEL\" \"Create a hyperlink to `uri` using `params`.\"\n * `uri` is a hyperlink starting with `http://`, `https://`, `ftp://`, `file://` or `mailto://`. `params` is an\n * optional list of key=value assignments, separated by the : character.\n * Example: `id=xyz123:foo=bar:baz=quux`.\n * Currently only the id key is defined. Cells that share the same ID and URI share hover\n * feedback. Use `OSC 8 ; ; BEL` to finish the current hyperlink.\n */\n public setHyperlink(data: string): boolean {\n // Arg parsing is special cases to support unencoded semi-colons in the URIs (#4944)\n const idx = data.indexOf(';');\n if (idx === -1) {\n // malformed sequence, just return as handled\n return true;\n }\n const id = data.slice(0, idx).trim();\n const uri = data.slice(idx + 1);\n if (uri) {\n return this._createHyperlink(id, uri);\n }\n if (id.trim()) {\n return false;\n }\n return this._finishHyperlink();\n }\n\n private _createHyperlink(params: string, uri: string): boolean {\n // It's legal to open a new hyperlink without explicitly finishing the previous one\n if (this._getCurrentLinkId()) {\n this._finishHyperlink();\n }\n const parsedParams = params.split(':');\n let id: string | undefined;\n const idParamIndex = parsedParams.findIndex(e => e.startsWith('id='));\n if (idParamIndex !== -1) {\n id = parsedParams[idParamIndex].slice(3) || undefined;\n }\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = this._oscLinkService.registerLink({ id, uri });\n this._curAttrData.updateExtended();\n return true;\n }\n\n private _finishHyperlink(): boolean {\n this._curAttrData.extended = this._curAttrData.extended.clone();\n this._curAttrData.extended.urlId = 0;\n this._curAttrData.updateExtended();\n return true;\n }\n\n // special colors - OSC 10 | 11 | 12\n private _specialColors = [SpecialColorIndex.FOREGROUND, SpecialColorIndex.BACKGROUND, SpecialColorIndex.CURSOR];\n\n /**\n * Apply colors requests for special colors in OSC 10 | 11 | 12.\n * Since these commands are stacking from multiple parameters,\n * we handle them in a loop with an entry offset to `_specialColors`.\n */\n private _setOrReportSpecialColor(data: string, offset: number): boolean {\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i, ++offset) {\n if (offset >= this._specialColors.length) break;\n if (slots[i] === '?') {\n this._onColor.fire([{ type: ColorRequestType.REPORT, index: this._specialColors[offset] }]);\n } else {\n const color = parseColor(slots[i]);\n if (color) {\n this._onColor.fire([{ type: ColorRequestType.SET, index: this._specialColors[offset], color }]);\n }\n }\n }\n return true;\n }\n\n /**\n * OSC 10 ; | ST - set or query default foreground color\n *\n * @vt: #Y OSC 10 \"Set or query default foreground color\" \"OSC 10 ; Pt BEL\" \"Set or query default foreground color.\"\n * To set the color, the following color specification formats are supported:\n * - `rgb://` for `, , ` in `h | hh | hhh | hhhh`, where\n * `h` is a single hexadecimal digit (case insignificant). The different widths scale\n * from 4 bit (`h`) to 16 bit (`hhhh`) and get converted to 8 bit (`hh`).\n * - `#RGB` - 4 bits per channel, expanded to `#R0G0B0`\n * - `#RRGGBB` - 8 bits per channel\n * - `#RRRGGGBBB` - 12 bits per channel, truncated to `#RRGGBB`\n * - `#RRRRGGGGBBBB` - 16 bits per channel, truncated to `#RRGGBB`\n *\n * **Note:** X11 named colors are currently unsupported.\n *\n * If `Pt` contains `?` instead of a color specification, the terminal\n * returns a sequence with the current default foreground color\n * (use that sequence to restore the color after changes).\n *\n * **Note:** Other than xterm, xterm.js does not support OSC 12 - 19.\n * Therefore stacking multiple `Pt` separated by `;` only works for the first two entries.\n */\n public setOrReportFgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 0);\n }\n\n /**\n * OSC 11 ; | ST - set or query default background color\n *\n * @vt: #Y OSC 11 \"Set or query default background color\" \"OSC 11 ; Pt BEL\" \"Same as OSC 10, but for default background.\"\n */\n public setOrReportBgColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 1);\n }\n\n /**\n * OSC 12 ; | ST - set or query default cursor color\n *\n * @vt: #Y OSC 12 \"Set or query default cursor color\" \"OSC 12 ; Pt BEL\" \"Same as OSC 10, but for default cursor color.\"\n */\n public setOrReportCursorColor(data: string): boolean {\n return this._setOrReportSpecialColor(data, 2);\n }\n\n /**\n * OSC 104 ; ST - restore ANSI color \n *\n * @vt: #Y OSC 104 \"Reset ANSI color\" \"OSC 104 ; c BEL\" \"Reset color number `c` to themed color.\"\n * `c` is the color index between 0 and 255. This function restores the default color for `c` as\n * specified by the loaded theme. Any number of `c` parameters may be given.\n * If no parameters are given, the entire indexed color table will be reset.\n */\n public restoreIndexedColor(data: string): boolean {\n if (!data) {\n this._onColor.fire([{ type: ColorRequestType.RESTORE }]);\n return true;\n }\n const event: IColorEvent = [];\n const slots = data.split(';');\n for (let i = 0; i < slots.length; ++i) {\n if (/^\\d+$/.exec(slots[i])) {\n const index = parseInt(slots[i], 10);\n if (isValidColorIndex(index)) {\n event.push({ type: ColorRequestType.RESTORE, index });\n }\n }\n }\n if (event.length) {\n this._onColor.fire(event);\n }\n return true;\n }\n\n /**\n * OSC 110 ST - restore default foreground color\n *\n * @vt: #Y OSC 110 \"Restore default foreground color\" \"OSC 110 BEL\" \"Restore default foreground to themed color.\"\n */\n public restoreFgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.FOREGROUND }]);\n return true;\n }\n\n /**\n * OSC 111 ST - restore default background color\n *\n * @vt: #Y OSC 111 \"Restore default background color\" \"OSC 111 BEL\" \"Restore default background to themed color.\"\n */\n public restoreBgColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.BACKGROUND }]);\n return true;\n }\n\n /**\n * OSC 112 ST - restore default cursor color\n *\n * @vt: #Y OSC 112 \"Restore default cursor color\" \"OSC 112 BEL\" \"Restore default cursor to themed color.\"\n */\n public restoreCursorColor(data: string): boolean {\n this._onColor.fire([{ type: ColorRequestType.RESTORE, index: SpecialColorIndex.CURSOR }]);\n return true;\n }\n\n /**\n * ESC E\n * C1.NEL\n * DEC mnemonic: NEL (https://vt100.net/docs/vt510-rm/NEL)\n * Moves cursor to first position on next line.\n *\n * @vt: #Y C1 NEL \"Next Line\" \"\\x85\" \"Move the cursor to the beginning of the next row.\"\n * @vt: #Y ESC NEL \"Next Line\" \"ESC E\" \"Move the cursor to the beginning of the next row.\"\n */\n public nextLine(): boolean {\n this._activeBuffer.x = 0;\n this.index();\n return true;\n }\n\n /**\n * ESC =\n * DEC mnemonic: DECKPAM (https://vt100.net/docs/vt510-rm/DECKPAM.html)\n * Enables the numeric keypad to send application sequences to the host.\n */\n public keypadApplicationMode(): boolean {\n this._logService.debug('Serial port requested application keypad.');\n this._coreService.decPrivateModes.applicationKeypad = true;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC >\n * DEC mnemonic: DECKPNM (https://vt100.net/docs/vt510-rm/DECKPNM.html)\n * Enables the keypad to send numeric characters to the host.\n */\n public keypadNumericMode(): boolean {\n this._logService.debug('Switching back to normal keypad.');\n this._coreService.decPrivateModes.applicationKeypad = false;\n this._onRequestSyncScrollBar.fire();\n return true;\n }\n\n /**\n * ESC % @\n * ESC % G\n * Select default character set. UTF-8 is not supported (string are unicode anyways)\n * therefore ESC % G does the same.\n */\n public selectDefaultCharset(): boolean {\n this._charsetService.setgLevel(0);\n this._charsetService.setgCharset(0, DEFAULT_CHARSET); // US (default)\n return true;\n }\n\n /**\n * ESC ( C\n * Designate G0 Character Set, VT100, ISO 2022.\n * ESC ) C\n * Designate G1 Character Set (ISO 2022, VT100).\n * ESC * C\n * Designate G2 Character Set (ISO 2022, VT220).\n * ESC + C\n * Designate G3 Character Set (ISO 2022, VT220).\n * ESC - C\n * Designate G1 Character Set (VT300).\n * ESC . C\n * Designate G2 Character Set (VT300).\n * ESC / C\n * Designate G3 Character Set (VT300). C = A -> ISO Latin-1 Supplemental. - Supported?\n */\n public selectCharset(collectAndFlag: string): boolean {\n if (collectAndFlag.length !== 2) {\n this.selectDefaultCharset();\n return true;\n }\n if (collectAndFlag[0] === '/') {\n return true; // TODO: Is this supported?\n }\n this._charsetService.setgCharset(GLEVEL[collectAndFlag[0]], CHARSETS[collectAndFlag[1]] ?? DEFAULT_CHARSET);\n return true;\n }\n\n /**\n * ESC D\n * C1.IND\n * DEC mnemonic: IND (https://vt100.net/docs/vt510-rm/IND.html)\n * Moves the cursor down one line in the same column.\n *\n * @vt: #Y C1 IND \"Index\" \"\\x84\" \"Move the cursor one line down scrolling if needed.\"\n * @vt: #Y ESC IND \"Index\" \"ESC D\" \"Move the cursor one line down scrolling if needed.\"\n */\n public index(): boolean {\n this._restrictCursor();\n this._activeBuffer.y++;\n if (this._activeBuffer.y === this._activeBuffer.scrollBottom + 1) {\n this._activeBuffer.y--;\n this._bufferService.scroll(this._eraseAttrData());\n } else if (this._activeBuffer.y >= this._bufferService.rows) {\n this._activeBuffer.y = this._bufferService.rows - 1;\n }\n this._restrictCursor();\n return true;\n }\n\n /**\n * ESC H\n * C1.HTS\n * DEC mnemonic: HTS (https://vt100.net/docs/vt510-rm/HTS.html)\n * Sets a horizontal tab stop at the column position indicated by\n * the value of the active column when the terminal receives an HTS.\n *\n * @vt: #Y C1 HTS \"Horizontal Tabulation Set\" \"\\x88\" \"Places a tab stop at the current cursor position.\"\n * @vt: #Y ESC HTS \"Horizontal Tabulation Set\" \"ESC H\" \"Places a tab stop at the current cursor position.\"\n */\n public tabSet(): boolean {\n this._activeBuffer.tabs[this._activeBuffer.x] = true;\n return true;\n }\n\n /**\n * ESC M\n * C1.RI\n * DEC mnemonic: HTS\n * Moves the cursor up one line in the same column. If the cursor is at the top margin,\n * the page scrolls down.\n *\n * @vt: #Y ESC IR \"Reverse Index\" \"ESC M\" \"Move the cursor one line up scrolling if needed.\"\n */\n public reverseIndex(): boolean {\n this._restrictCursor();\n if (this._activeBuffer.y === this._activeBuffer.scrollTop) {\n // possibly move the code below to term.reverseScroll();\n // test: echo -ne '\\e[1;1H\\e[44m\\eM\\e[0m'\n // blankLine(true) is xterm/linux behavior\n const scrollRegionHeight = this._activeBuffer.scrollBottom - this._activeBuffer.scrollTop;\n this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase + this._activeBuffer.y, scrollRegionHeight, 1);\n this._activeBuffer.lines.set(this._activeBuffer.ybase + this._activeBuffer.y, this._activeBuffer.getBlankLine(this._eraseAttrData()));\n this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop, this._activeBuffer.scrollBottom);\n } else {\n this._activeBuffer.y--;\n this._restrictCursor(); // quickfix to not run out of bounds\n }\n return true;\n }\n\n /**\n * ESC c\n * DEC mnemonic: RIS (https://vt100.net/docs/vt510-rm/RIS.html)\n * Reset to initial state.\n *\n * @vt: #Y ESC RIS \"Full Reset\" \"ESC c\" \"Reset to initial state.\"\n */\n public fullReset(): boolean {\n this._parser.reset();\n this._onRequestReset.fire();\n return true;\n }\n\n public reset(): void {\n this._curAttrData = DEFAULT_ATTR_DATA.clone();\n this._eraseAttrDataInternal = DEFAULT_ATTR_DATA.clone();\n }\n\n /**\n * back_color_erase feature for xterm.\n */\n private _eraseAttrData(): IAttributeData {\n this._eraseAttrDataInternal.bg &= ~(Attributes.CM_MASK | 0xFFFFFF);\n this._eraseAttrDataInternal.bg |= this._curAttrData.bg & ~0xFC000000;\n return this._eraseAttrDataInternal;\n }\n\n /**\n * ESC n\n * ESC o\n * ESC |\n * ESC }\n * ESC ~\n * DEC mnemonic: LS (https://vt100.net/docs/vt510-rm/LS.html)\n * When you use a locking shift, the character set remains in GL or GR until\n * you use another locking shift. (partly supported)\n */\n public setgLevel(level: number): boolean {\n this._charsetService.setgLevel(level);\n return true;\n }\n\n /**\n * ESC # 8\n * DEC mnemonic: DECALN (https://vt100.net/docs/vt510-rm/DECALN.html)\n * This control function fills the complete screen area with\n * a test pattern (E) used for adjusting screen alignment.\n *\n * @vt: #Y ESC DECALN \"Screen Alignment Pattern\" \"ESC # 8\" \"Fill viewport with a test pattern (E).\"\n */\n public screenAlignmentPattern(): boolean {\n // prepare cell data\n const cell = new CellData();\n cell.content = 1 << Content.WIDTH_SHIFT | 'E'.charCodeAt(0);\n cell.fg = this._curAttrData.fg;\n cell.bg = this._curAttrData.bg;\n\n\n this._setCursor(0, 0);\n for (let yOffset = 0; yOffset < this._bufferService.rows; ++yOffset) {\n const row = this._activeBuffer.ybase + this._activeBuffer.y + yOffset;\n const line = this._activeBuffer.lines.get(row);\n if (line) {\n line.fill(cell);\n line.isWrapped = false;\n }\n }\n this._dirtyRowTracker.markAllDirty();\n this._setCursor(0, 0);\n return true;\n }\n\n\n /**\n * DCS $ q Pt ST\n * DECRQSS (https://vt100.net/docs/vt510-rm/DECRQSS.html)\n * Request Status String (DECRQSS), VT420 and up.\n * Response: DECRPSS (https://vt100.net/docs/vt510-rm/DECRPSS.html)\n *\n * @vt: #P[Limited support, see below.] DCS DECRQSS \"Request Selection or Setting\" \"DCS $ q Pt ST\" \"Request several terminal settings.\"\n * Response is in the form `ESC P 1 $ r Pt ST` for valid requests, where `Pt` contains the\n * corresponding CSI string, `ESC P 0 ST` for invalid requests.\n *\n * Supported requests and responses:\n *\n * | Type | Request | Response (`Pt`) |\n * | -------------------------------- | ----------------- | ----------------------------------------------------- |\n * | Graphic Rendition (SGR) | `DCS $ q m ST` | always reporting `0m` (currently broken) |\n * | Top and Bottom Margins (DECSTBM) | `DCS $ q r ST` | `Ps ; Ps r` |\n * | Cursor Style (DECSCUSR) | `DCS $ q SP q ST` | `Ps SP q` |\n * | Protection Attribute (DECSCA) | `DCS $ q \" q ST` | `Ps \" q` (DECSCA 2 is reported as Ps = 0) |\n * | Conformance Level (DECSCL) | `DCS $ q \" p ST` | always reporting `61 ; 1 \" p` (DECSCL is unsupported) |\n *\n *\n * TODO:\n * - fix SGR report\n * - either check which conformance is better suited or remove the report completely\n * --> we are currently a mixture of all up to VT400 but dont follow anyone strictly\n */\n public requestStatusString(data: string, params: IParams): boolean {\n const f = (s: string): boolean => {\n this._coreService.triggerDataEvent(`${C0.ESC}${s}${C0.ESC}\\\\`);\n return true;\n };\n\n // access helpers\n const b = this._bufferService.buffer;\n const opts = this._optionsService.rawOptions;\n const STYLES: { [key: string]: number } = { 'block': 2, 'underline': 4, 'bar': 6 };\n\n if (data === '\"q') return f(`P1$r${this._curAttrData.isProtected() ? 1 : 0}\"q`);\n if (data === '\"p') return f(`P1$r61;1\"p`);\n if (data === 'r') return f(`P1$r${b.scrollTop + 1};${b.scrollBottom + 1}r`);\n // FIXME: report real SGR settings instead of 0m\n if (data === 'm') return f(`P1$r0m`);\n if (data === ' q') return f(`P1$r${STYLES[opts.cursorStyle] - (opts.cursorBlink ? 1 : 0)} q`);\n return f(`P0$r`);\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n this._dirtyRowTracker.markRangeDirty(y1, y2);\n }\n\n // #region Kitty keyboard\n\n /**\n * CSI = flags ; mode u\n * Set Kitty keyboard protocol flags.\n * mode: 1=set, 2=set-only-specified, 3=reset-only-specified\n *\n * @vt: #Y CSI KKBDSET \"Kitty Keyboard Set\" \"CSI = Ps ; Pm u\" \"Set Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardSet(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const mode = params.length > 1 ? (params.params[1] || 1) : 1;\n const state = this._coreService.kittyKeyboard;\n\n switch (mode) {\n case 1: // Set all flags\n state.flags = flags;\n break;\n case 2: // Set only specified flags (OR)\n state.flags |= flags;\n break;\n case 3: // Reset only specified flags (AND NOT)\n state.flags &= ~flags;\n break;\n }\n return true;\n }\n\n /**\n * CSI ? u\n * Query Kitty keyboard protocol flags.\n * Terminal responds with CSI ? flags u\n *\n * @vt: #Y CSI KKBDQUERY \"Kitty Keyboard Query\" \"CSI ? u\" \"Query Kitty keyboard protocol flags.\"\n */\n public kittyKeyboardQuery(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = this._coreService.kittyKeyboard.flags;\n this._coreService.triggerDataEvent(`${C0.ESC}[?${flags}u`);\n return true;\n }\n\n /**\n * CSI > flags u\n * Push Kitty keyboard flags onto stack and set new flags.\n *\n * @vt: #Y CSI KKBDPUSH \"Kitty Keyboard Push\" \"CSI > Ps u\" \"Push keyboard flags to stack and set new flags.\"\n */\n public kittyKeyboardPush(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const flags = params.params[0] || 0;\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Evict oldest entry if stack is full (DoS protection, limit of 16)\n if (stack.length >= 16) {\n stack.shift();\n }\n\n // Push current flags onto stack and set new flags\n stack.push(state.flags);\n state.flags = flags;\n return true;\n }\n\n /**\n * CSI < count u\n * Pop Kitty keyboard flags from stack.\n *\n * @vt: #Y CSI KKBDPOP \"Kitty Keyboard Pop\" \"CSI < Ps u\" \"Pop keyboard flags from stack.\"\n */\n public kittyKeyboardPop(params: IParams): boolean {\n if (!this._optionsService.rawOptions.vtExtensions?.kittyKeyboard) {\n return true;\n }\n const count = Math.max(1, params.params[0] || 1);\n const state = this._coreService.kittyKeyboard;\n const isAlt = this._bufferService.buffer === this._bufferService.buffers.alt;\n const stack = isAlt ? state.altStack : state.mainStack;\n\n // Pop specified number of entries from stack\n for (let i = 0; i < count && stack.length > 0; i++) {\n state.flags = stack.pop()!;\n }\n // If stack is empty after popping, reset to 0\n if (stack.length === 0 && count > 0) {\n state.flags = 0;\n }\n return true;\n }\n\n // #endregion\n}\n\nexport interface IDirtyRowTracker {\n readonly start: number;\n readonly end: number;\n\n clearRange(): void;\n markDirty(y: number): void;\n markRangeDirty(y1: number, y2: number): void;\n markAllDirty(): void;\n}\n\nclass DirtyRowTracker implements IDirtyRowTracker {\n public start!: number;\n public end!: number;\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n this.clearRange();\n }\n\n public clearRange(): void {\n this.start = this._bufferService.buffer.y;\n this.end = this._bufferService.buffer.y;\n }\n\n public markDirty(y: number): void {\n if (y < this.start) {\n this.start = y;\n } else if (y > this.end) {\n this.end = y;\n }\n }\n\n public markRangeDirty(y1: number, y2: number): void {\n if (y1 > y2) {\n $temp = y1;\n y1 = y2;\n y2 = $temp;\n }\n if (y1 < this.start) {\n this.start = y1;\n }\n if (y2 > this.end) {\n this.end = y2;\n }\n }\n\n public markAllDirty(): void {\n this.markRangeDirty(0, this._bufferService.rows - 1);\n }\n}\n\nexport function isValidColorIndex(value: number): value is ColorIndex {\n return 0 <= value && value < 256;\n}\n", "\n/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { TimeoutTimer } from '../Async';\nimport { Disposable, toDisposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nconst enum Constants {\n /**\n * Safety watermark to avoid memory exhaustion and browser engine crash on fast data input.\n * Enable flow control to avoid this limit and make sure that your backend correctly\n * propagates this to the underlying pty. (see docs for further instructions)\n * Since this limit is meant as a safety parachute to prevent browser crashs,\n * it is set to a very high number. Typically xterm.js gets unresponsive with\n * a 100 times lower number (>500 kB).\n */\n DISCARD_WATERMARK = 50000000, // ~50 MB\n /**\n * The max number of ms to spend on writes before allowing the renderer to\n * catch up with a 0ms setTimeout. A value of < 33 to keep us close to\n * 30fps, and a value of < 16 to try to run at 60fps. Of course, the real FPS\n * depends on the time it takes for the renderer to draw the frame.\n */\n WRITE_TIMEOUT_MS = 12,\n /**\n * Threshold of max held chunks in the write buffer, that were already processed.\n * This is a tradeoff between extensive write buffer shifts (bad runtime) and high\n * memory consumption by data thats not used anymore.\n */\n WRITE_BUFFER_LENGTH_THRESHOLD = 50\n}\n\nexport class WriteBuffer extends Disposable {\n private _writeBuffer: (string | Uint8Array)[] = [];\n private _callbacks: ((() => void) | undefined)[] = [];\n private _pendingData = 0;\n private _bufferOffset = 0;\n private _isSyncWriting = false;\n private _syncCalls = 0;\n private _didUserInput = false;\n\n private readonly _innerWriteTimer = this._register(new TimeoutTimer());\n private readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n constructor(private _action: (data: string | Uint8Array, promiseResult?: boolean) => void | Promise) {\n super();\n this._register(toDisposable(() => {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }));\n }\n\n public handleUserInput(): void {\n this._didUserInput = true;\n }\n\n /**\n * Flushes all pending writes synchronously. This is useful when you need to\n * ensure all queued data is processed before performing an operation that\n * depends upon everything being parsed like resize.\n *\n * Note: This is unreliable with async parser handlers as it does not wait for\n * promises to resolve.\n */\n public flushSync(): void {\n if (this._store.isDisposed) {\n return;\n }\n // exit early if another sync write loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // Process all pending chunks synchronously\n let chunk: string | Uint8Array | undefined;\n let didProcess = false;\n while (chunk = this._writeBuffer.shift()) {\n didProcess = true;\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n\n // Reset buffer state\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n\n this._isSyncWriting = false;\n if (didProcess) {\n this._onWriteParsed.fire();\n }\n }\n\n /**\n * @deprecated Unreliable, to be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._store.isDisposed) {\n return;\n }\n // stop writeSync recursions with maxSubsequentCalls argument\n // This is dangerous to use as it will lose the current data chunk\n // and return immediately.\n if (maxSubsequentCalls !== undefined && this._syncCalls > maxSubsequentCalls) {\n // comment next line if a whole loop block should only contain x `writeSync` calls\n // (total flat vs. deep nested limit)\n this._syncCalls = 0;\n return;\n }\n // append chunk to buffer\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(undefined);\n\n // increase recursion counter\n this._syncCalls++;\n // exit early if another writeSync loop is active\n if (this._isSyncWriting) {\n return;\n }\n this._isSyncWriting = true;\n\n // force sync processing on pending data chunks to avoid in-band data scrambling\n // does the same as innerWrite but without event loop\n // we have to do it here as single loop steps to not corrupt loop subject\n // by another writeSync call triggered from _action\n let chunk: string | Uint8Array | undefined;\n while (chunk = this._writeBuffer.shift()) {\n this._action(chunk);\n const cb = this._callbacks.shift();\n if (cb) cb();\n }\n // reset to avoid reprocessing of chunks with scheduled innerWrite call\n // stopping scheduled innerWrite by offset > length condition\n this._pendingData = 0;\n this._bufferOffset = 0x7FFFFFFF;\n\n // allow another writeSync to loop\n this._isSyncWriting = false;\n this._syncCalls = 0;\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n if (this._store.isDisposed) {\n return;\n }\n if (this._pendingData > Constants.DISCARD_WATERMARK) {\n throw new Error('write data discarded, use flow control to avoid losing data');\n }\n\n // schedule chunk processing for next event loop run\n if (!this._writeBuffer.length) {\n this._bufferOffset = 0;\n\n // If this is the first write call after the user has done some input,\n // parse it immediately to minimize input latency,\n // otherwise schedule for the next event\n if (this._didUserInput) {\n this._didUserInput = false;\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n this._innerWrite();\n return;\n }\n\n this._scheduleInnerWrite();\n }\n\n this._pendingData += data.length;\n this._writeBuffer.push(data);\n this._callbacks.push(callback);\n }\n\n /**\n * Inner write call, that enters the sliced chunk processing by timing.\n *\n * `lastTime` indicates, when the last _innerWrite call had started.\n * It is used to aggregate async handler execution under a timeout constraint\n * effectively lowering the redrawing needs, schematically:\n *\n * macroTask _innerWrite:\n * if (performance.now() - (lastTime | 0) < Constants.WRITE_TIMEOUT_MS):\n * schedule microTask _innerWrite(lastTime)\n * else:\n * schedule macroTask _innerWrite(0)\n *\n * overall execution order on task queues:\n *\n * macrotasks: [...] --> _innerWrite(0) --> [...] --> screenUpdate --> [...]\n * m t: |\n * i a: [...]\n * c s: |\n * r k: while < timeout:\n * o s: _innerWrite(timeout)\n *\n * `promiseResult` depicts the promise resolve value of an async handler.\n * This value gets carried forward through all saved stack states of the\n * paused parser for proper continuation.\n *\n * Note, for pure sync code `lastTime` and `promiseResult` have no meaning.\n */\n private _scheduleInnerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n this._innerWriteTimer.cancelAndSet(() => this._innerWrite(lastTime, promiseResult), 0);\n }\n\n protected _innerWrite(lastTime: number = 0, promiseResult: boolean = true): void {\n if (this._store.isDisposed) {\n return;\n }\n const startTime = lastTime || performance.now();\n while (this._writeBuffer.length > this._bufferOffset) {\n const data = this._writeBuffer[this._bufferOffset];\n const result = this._action(data, promiseResult);\n if (result) {\n /**\n * If we get a promise as return value, we re-schedule the continuation\n * as thenable on the promise and exit right away.\n *\n * The exit here means, that we block input processing at the current active chunk,\n * the exact execution position within the chunk is preserved by the saved\n * stack content in InputHandler and EscapeSequenceParser.\n *\n * Resuming happens automatically from that saved stack state.\n * Also the resolved promise value is passed along the callstack to\n * `EscapeSequenceParser.parse` to correctly resume the stopped handler loop.\n *\n * Exceptions on async handlers will be logged to console async, but do not interrupt\n * the input processing (continues with next handler at the current input position).\n */\n\n /**\n * If a promise takes long to resolve, we should schedule continuation behind setTimeout.\n * This might already be too late, if our .then enters really late (executor + prev thens\n * took very long). This cannot be solved here for the handler itself (it is the handlers\n * responsibility to slice hard work), but we can at least schedule a screen update as we\n * gain control.\n */\n const continuation: (r: boolean) => void = (r: boolean) => {\n if (this._store.isDisposed) {\n return;\n }\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n this._scheduleInnerWrite(0, r);\n } else {\n this._innerWrite(startTime, r);\n }\n };\n\n /**\n * Optimization considerations:\n * The continuation above favors FPS over throughput by eval'ing `startTime` on resolve.\n * This might schedule too many screen updates with bad throughput drops (in case a slow\n * resolving handler sliced its work properly behind setTimeout calls). We cannot spot\n * this condition here, also the renderer has no way to spot nonsense updates either.\n * FIXME: A proper fix for this would track the FPS at the renderer entry level separately.\n *\n * If favoring of FPS shows bad throughput impact, use the following instead. It favors\n * throughput by eval'ing `startTime` upfront pulling at least one more chunk into the\n * current microtask queue (executed before setTimeout).\n */\n // const continuation: (r: boolean) => void = performance.now() - startTime >=\n // Constants.WRITE_TIMEOUT_MS\n // ? r => setTimeout(() => this._innerWrite(0, r))\n // : r => this._innerWrite(startTime, r);\n\n // Handle exceptions synchronously to current band position, idea:\n // 1. spawn a single microtask which we allow to throw hard\n // 2. spawn a promise immediately resolving to `true`\n // (executed on the same queue, thus properly aligned before continuation happens)\n result.catch(err => {\n queueMicrotask(() => {throw err;});\n return Promise.resolve(false);\n }).then(continuation);\n return;\n }\n\n const cb = this._callbacks[this._bufferOffset];\n if (cb) cb();\n this._bufferOffset++;\n this._pendingData -= data.length;\n\n if (performance.now() - startTime >= Constants.WRITE_TIMEOUT_MS) {\n break;\n }\n }\n if (this._writeBuffer.length > this._bufferOffset) {\n // Allow renderer to catch up before processing the next batch\n // trim already processed chunks if we are above threshold\n if (this._bufferOffset > Constants.WRITE_BUFFER_LENGTH_THRESHOLD) {\n this._writeBuffer = this._writeBuffer.slice(this._bufferOffset);\n this._callbacks = this._callbacks.slice(this._bufferOffset);\n this._bufferOffset = 0;\n }\n this._scheduleInnerWrite();\n } else {\n this._writeBuffer.length = 0;\n this._callbacks.length = 0;\n this._pendingData = 0;\n this._bufferOffset = 0;\n }\n this._onWriteParsed.fire();\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IBufferService, IOscLinkService } from './Services';\nimport { IOscLinkData } from '../Types';\nimport { IMarker } from '../buffer/Types';\n\nexport class OscLinkService implements IOscLinkService {\n public serviceBrand: any;\n\n private _nextId = 1;\n\n /**\n * A map of the link key to link entry. This is used to add additional lines to links with ids.\n */\n private _entriesWithId: Map = new Map();\n\n /**\n * A map of the link id to the link entry. The \"link id\" (number) which is the numberic\n * representation of a unique link should not be confused with \"id\" (string) which comes in with\n * `id=` in the OSC link's properties.\n */\n private _dataByLinkId: Map = new Map();\n\n constructor(\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n }\n\n public registerLink(data: IOscLinkData): number {\n const buffer = this._bufferService.buffer;\n\n // Links with no id will only ever be registered a single time\n if (data.id === undefined) {\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryNoId = {\n data,\n id: this._nextId++,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n // Add the line to the link if it already exists\n const castData = data as Required;\n const key = this._getEntryIdKey(castData);\n const match = this._entriesWithId.get(key);\n if (match) {\n this.addLineToLink(match.id, buffer.ybase + buffer.y);\n return match.id;\n }\n\n // Create the link\n const marker = buffer.addMarker(buffer.ybase + buffer.y);\n const entry: IOscLinkEntryWithId = {\n id: this._nextId++,\n key: this._getEntryIdKey(castData),\n data: castData,\n lines: [marker]\n };\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n this._entriesWithId.set(entry.key, entry);\n this._dataByLinkId.set(entry.id, entry);\n return entry.id;\n }\n\n public addLineToLink(linkId: number, y: number): void {\n const entry = this._dataByLinkId.get(linkId);\n if (!entry) {\n return;\n }\n if (entry.lines.every(e => e.line !== y)) {\n const marker = this._bufferService.buffer.addMarker(y);\n entry.lines.push(marker);\n marker.onDispose(() => this._removeMarkerFromLink(entry, marker));\n }\n }\n\n public getLinkData(linkId: number): IOscLinkData | undefined {\n return this._dataByLinkId.get(linkId)?.data;\n }\n\n private _getEntryIdKey(linkData: Required): string {\n return `${linkData.id};;${linkData.uri}`;\n }\n\n private _removeMarkerFromLink(entry: IOscLinkEntryNoId | IOscLinkEntryWithId, marker: IMarker): void {\n const index = entry.lines.indexOf(marker);\n if (index === -1) {\n return;\n }\n entry.lines.splice(index, 1);\n if (entry.lines.length === 0) {\n if (entry.data.id !== undefined) {\n this._entriesWithId.delete((entry as IOscLinkEntryWithId).key);\n }\n this._dataByLinkId.delete(entry.id);\n }\n }\n}\n\ninterface IOscLinkEntry {\n data: T;\n id: number;\n lines: IMarker[];\n}\n\ninterface IOscLinkEntryNoId extends IOscLinkEntry {\n}\n\ninterface IOscLinkEntryWithId extends IOscLinkEntry> {\n key: string;\n}\n", "/**\n * Copyright (c) 2014-2020 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';\nimport { InstantiationService } from './services/InstantiationService';\nimport { LogService } from './services/LogService';\nimport { BufferService, BufferServiceConstants } from './services/BufferService';\nimport { OptionsService } from './services/OptionsService';\nimport { IDisposable, IScrollEvent, ITerminalOptions, IParams } from './Types';\nimport { IAttributeData, IBufferSet } from './buffer/Types';\nimport { CoreService } from './services/CoreService';\nimport { MouseStateService } from './services/MouseStateService';\nimport { UnicodeV6 } from './input/UnicodeV6';\nimport { UnicodeService } from './services/UnicodeService';\nimport { CharsetService } from './services/CharsetService';\nimport { updateWindowsModeWrappedState } from './WindowsMode';\nimport { IFunctionIdentifier } from './parser/Types';\nimport { InputHandler } from './InputHandler';\nimport { WriteBuffer } from './input/WriteBuffer';\nimport { OscLinkService } from './services/OscLinkService';\nimport { Emitter, EventUtils, type IEvent } from './Event';\nimport { Disposable, MutableDisposable, toDisposable } from './Lifecycle';\n\n// Only trigger this warning a single time per session\nlet hasWriteSyncWarnHappened = false;\n\nexport interface ICoreTerminal {\n mouseStateService: IMouseStateService;\n coreService: ICoreService;\n optionsService: IOptionsService;\n unicodeService: IUnicodeService;\n buffers: IBufferSet;\n options: Required;\n registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable;\n registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable;\n registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable;\n registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable;\n registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable;\n}\n\nexport abstract class CoreTerminal extends Disposable implements ICoreTerminal {\n protected readonly _instantiationService: IInstantiationService;\n protected readonly _bufferService: IBufferService;\n protected readonly _logService: ILogService;\n protected readonly _charsetService: ICharsetService;\n protected readonly _oscLinkService: IOscLinkService;\n\n public readonly mouseStateService: IMouseStateService;\n public readonly coreService: ICoreService;\n public readonly unicodeService: IUnicodeService;\n public readonly optionsService: IOptionsService;\n\n protected _inputHandler: InputHandler;\n private _writeBuffer: WriteBuffer;\n private _windowsWrappingHeuristics = this._register(new MutableDisposable());\n\n private readonly _onBinary = this._register(new Emitter());\n public readonly onBinary = this._onBinary.event;\n private readonly _onData = this._register(new Emitter());\n public readonly onData = this._onData.event;\n protected _onLineFeed = this._register(new Emitter());\n public readonly onLineFeed = this._onLineFeed.event;\n protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());\n public readonly onRender = this._onRender.event;\n private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());\n public readonly onResize = this._onResize.event;\n protected readonly _onWriteParsed = this._register(new Emitter());\n public readonly onWriteParsed = this._onWriteParsed.event;\n\n /**\n * Internally we track the source of the scroll but this is meaningless outside the library so\n * it's filtered out.\n */\n protected _onScrollApi?: Emitter;\n protected _onScroll = this._register(new Emitter());\n public get onScroll(): IEvent {\n if (!this._onScrollApi) {\n this._onScrollApi = this._register(new Emitter());\n this._onScroll.event(ev => {\n this._onScrollApi?.fire(ev.position);\n });\n }\n return this._onScrollApi.event;\n }\n\n public get cols(): number { return this._bufferService.cols; }\n public get rows(): number { return this._bufferService.rows; }\n public get buffers(): IBufferSet { return this._bufferService.buffers; }\n public get options(): Required { return this.optionsService.options; }\n public set options(options: ITerminalOptions) {\n for (const key in options) {\n this.optionsService.options[key] = options[key];\n }\n }\n\n constructor(\n options: Partial\n ) {\n super();\n\n // Setup and initialize services\n this._instantiationService = new InstantiationService();\n this.optionsService = this._register(new OptionsService(options));\n this._instantiationService.setService(IOptionsService, this.optionsService);\n this._logService = this._register(this._instantiationService.createInstance(LogService));\n this._instantiationService.setService(ILogService, this._logService);\n this._bufferService = this._register(this._instantiationService.createInstance(BufferService));\n this._instantiationService.setService(IBufferService, this._bufferService);\n this.coreService = this._register(this._instantiationService.createInstance(CoreService));\n this._instantiationService.setService(ICoreService, this.coreService);\n this.mouseStateService = this._register(this._instantiationService.createInstance(MouseStateService));\n this._instantiationService.setService(IMouseStateService, this.mouseStateService);\n this.unicodeService = this._register(this._instantiationService.createInstance(UnicodeService));\n this.unicodeService.register(new UnicodeV6());\n this._instantiationService.setService(IUnicodeService, this.unicodeService);\n this._charsetService = this._instantiationService.createInstance(CharsetService);\n this._instantiationService.setService(ICharsetService, this._charsetService);\n this._oscLinkService = this._instantiationService.createInstance(OscLinkService);\n this._instantiationService.setService(IOscLinkService, this._oscLinkService);\n\n\n // Register input handler and handle/forward events\n this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.mouseStateService, this.unicodeService));\n this._register(EventUtils.forward(this._inputHandler.onLineFeed, this._onLineFeed));\n\n // Setup listeners\n this._register(EventUtils.forward(this._bufferService.onResize, this._onResize));\n this._register(EventUtils.forward(this.coreService.onData, this._onData));\n this._register(EventUtils.forward(this.coreService.onBinary, this._onBinary));\n this._register(this.coreService.onRequestScrollToBottom(() => this.scrollToBottom(true)));\n this._register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput()));\n this._register(this.optionsService.onMultipleOptionChange(['windowsPty'], () => this._handleWindowsPtyOptionChange()));\n this._register(this._bufferService.onScroll(() => {\n this._onScroll.fire({ position: this._bufferService.buffer.ydisp });\n this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom);\n }));\n // Setup WriteBuffer\n this._writeBuffer = this._register(new WriteBuffer((data, promiseResult) => this._inputHandler.parse(data, promiseResult)));\n this._register(EventUtils.forward(this._writeBuffer.onWriteParsed, this._onWriteParsed));\n }\n\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._writeBuffer.write(data, callback);\n }\n\n /**\n * Write data to terminal synchonously.\n *\n * This method is unreliable with async parser handlers, thus should not\n * be used anymore. If you need blocking semantics on data input consider\n * `write` with a callback instead.\n *\n * @deprecated Unreliable, will be removed soon.\n */\n public writeSync(data: string | Uint8Array, maxSubsequentCalls?: number): void {\n if (this._logService.logLevel <= LogLevelEnum.WARN && !hasWriteSyncWarnHappened) {\n this._logService.warn('writeSync is unreliable and will be removed soon.');\n hasWriteSyncWarnHappened = true;\n }\n this._writeBuffer.writeSync(data, maxSubsequentCalls);\n }\n\n public input(data: string, wasUserInput: boolean = true): void {\n this.coreService.triggerDataEvent(data, wasUserInput);\n }\n\n public resize(x: number, y: number): void {\n if (isNaN(x) || isNaN(y)) {\n return;\n }\n\n x = Math.max(x, BufferServiceConstants.MINIMUM_COLS);\n y = Math.max(y, BufferServiceConstants.MINIMUM_ROWS);\n\n // Flush pending writes before resize to avoid race conditions where async\n // writes are processed with incorrect dimensions\n this._writeBuffer.flushSync();\n\n this._bufferService.resize(x, y);\n }\n\n /**\n * Scroll the terminal down 1 row, creating a blank line.\n * @param eraseAttr The attribute data to use the for blank line.\n * @param isWrapped Whether the new line is wrapped from the previous line.\n */\n public scroll(eraseAttr: IAttributeData, isWrapped: boolean = false): void {\n this._bufferService.scroll(eraseAttr, isWrapped);\n }\n\n /**\n * Scroll the display of the terminal\n * @param disp The number of lines to scroll down (negative scroll up).\n * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid\n * unwanted events being handled by the viewport when the event was triggered from the viewport\n * originally.\n */\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n this._bufferService.scrollLines(disp, suppressScrollEvent);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n /** Add handler for ESC escape sequence. See xterm.d.ts for details. */\n public registerEscHandler(id: IFunctionIdentifier, callback: () => boolean | Promise): IDisposable {\n return this._inputHandler.registerEscHandler(id, callback);\n }\n\n /** Add handler for DCS escape sequence. See xterm.d.ts for details. */\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerDcsHandler(id, callback);\n }\n\n /** Add handler for CSI escape sequence. See xterm.d.ts for details. */\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean | Promise): IDisposable {\n return this._inputHandler.registerCsiHandler(id, callback);\n }\n\n /** Add handler for OSC escape sequence. See xterm.d.ts for details. */\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerOscHandler(ident, callback);\n }\n\n /** Add handler for APC escape sequence. See xterm.d.ts for details. */\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._inputHandler.registerApcHandler(id, callback);\n }\n\n protected _setup(): void {\n this._handleWindowsPtyOptionChange();\n }\n\n public reset(): void {\n this._inputHandler.reset();\n this._bufferService.reset();\n this._charsetService.reset();\n this.coreService.reset();\n this.mouseStateService.reset();\n }\n\n\n private _handleWindowsPtyOptionChange(): void {\n let value = false;\n const windowsPty = this.optionsService.rawOptions.windowsPty;\n if (windowsPty && windowsPty.backend !== undefined && windowsPty.buildNumber !== undefined) {\n value = !!(windowsPty.backend === 'conpty' && windowsPty.buildNumber < 21376);\n }\n if (value) {\n this._enableWindowsWrappingHeuristics();\n } else {\n this._windowsWrappingHeuristics.clear();\n }\n }\n\n protected _enableWindowsWrappingHeuristics(): void {\n if (!this._windowsWrappingHeuristics.value) {\n const disposables: IDisposable[] = [];\n disposables.push(this.onLineFeed(updateWindowsModeWrappedState.bind(null, this._bufferService)));\n disposables.push(this.registerCsiHandler({ final: 'H' }, () => {\n updateWindowsModeWrappedState(this._bufferService);\n return false;\n }));\n this._windowsWrappingHeuristics.value = toDisposable(() => {\n for (const d of disposables) {\n d.dispose();\n }\n });\n }\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IdleTaskQueue } from './TaskQueue';\nimport type { ILogService } from './services/Services';\n\n// Work variables to avoid garbage collection.\nlet i = 0;\n\n/**\n * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred\n * batch insertion and deletion is used to significantly reduce the time it takes to insert and\n * delete a large amount of items in succession. This list is based on binary search and as such\n * locating a key will take O(log n) amortized, this includes the by key iterator.\n */\nexport class SortedList {\n private _array: T[] = [];\n\n private readonly _insertedValues: T[] = [];\n private readonly _flushInsertedTask: InstanceType;\n private _isFlushingInserted = false;\n\n private readonly _deletedIndices = new Set();\n private readonly _indicesByValue = new Map();\n private readonly _flushDeletedTask: InstanceType;\n private _isFlushingDeleted = false;\n\n constructor(\n private readonly _getKey: (value: T) => number,\n logService: ILogService\n ) {\n this._flushInsertedTask = new IdleTaskQueue(logService);\n this._flushDeletedTask = new IdleTaskQueue(logService);\n }\n\n public clear(): void {\n this._array.length = 0;\n this._indicesByValue.clear();\n this._insertedValues.length = 0;\n this._flushInsertedTask.clear();\n this._isFlushingInserted = false;\n this._deletedIndices.clear();\n this._flushDeletedTask.clear();\n this._isFlushingDeleted = false;\n }\n\n public insert(value: T): void {\n this._flushCleanupDeleted();\n if (this._insertedValues.length === 0) {\n this._flushInsertedTask.enqueue(() => this._flushInserted());\n }\n this._insertedValues.push(value);\n }\n\n private _flushInserted(): void {\n const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));\n let sortedAddedValuesIndex = 0;\n let arrayIndex = 0;\n\n const newArray = new Array(this._array.length + this._insertedValues.length);\n\n for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {\n if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {\n newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];\n sortedAddedValuesIndex++;\n } else {\n newArray[newArrayIndex] = this._array[arrayIndex++];\n }\n }\n\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._insertedValues.length = 0;\n }\n\n private _flushCleanupInserted(): void {\n if (!this._isFlushingInserted && this._insertedValues.length > 0) {\n this._flushInsertedTask.flush();\n }\n }\n\n private _rebuildIdentityIndex(): void {\n this._indicesByValue.clear();\n // Reverse indices let duplicate identities remove their first occurrence in O(1).\n for (let index = this._array.length - 1; index >= 0; index--) {\n const value = this._array[index];\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n this._indicesByValue.set(value, index);\n } else if (typeof indices === 'number') {\n this._indicesByValue.set(value, [indices, index]);\n } else {\n indices.push(index);\n }\n }\n }\n\n public delete(value: T): boolean {\n this._flushCleanupInserted();\n // Marker disposal mutates the sort key before removal; identity stays stable.\n const indices = this._indicesByValue.get(value);\n if (indices === undefined) {\n return false;\n }\n const index = typeof indices === 'number' ? indices : indices.pop();\n if (index === undefined) {\n return false;\n }\n if (typeof indices === 'number' || indices.length === 0) {\n this._indicesByValue.delete(value);\n }\n if (this._deletedIndices.size === 0) {\n this._flushDeletedTask.enqueue(() => this._flushDeleted());\n }\n this._deletedIndices.add(index);\n return true;\n }\n\n private _flushDeleted(): void {\n this._isFlushingDeleted = true;\n const newArray = new Array(this._array.length - this._deletedIndices.size);\n let newArrayIndex = 0;\n for (let i = 0; i < this._array.length; i++) {\n if (!this._deletedIndices.has(i)) {\n newArray[newArrayIndex++] = this._array[i];\n }\n }\n this._array = newArray;\n this._rebuildIdentityIndex();\n this._deletedIndices.clear();\n this._isFlushingDeleted = false;\n }\n\n private _flushCleanupDeleted(): void {\n if (!this._isFlushingDeleted && this._deletedIndices.size > 0) {\n this._flushDeletedTask.flush();\n }\n }\n\n public *getKeyIterator(key: number): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n yield this._array[i];\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public forEachByKey(key: number, callback: (value: T) => void): void {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n if (this._array.length === 0) {\n return;\n }\n i = this._search(key);\n if (i < 0 || i >= this._array.length) {\n return;\n }\n if (this._getKey(this._array[i]) !== key) {\n return;\n }\n do {\n callback(this._array[i]);\n } while (++i < this._array.length && this._getKey(this._array[i]) === key);\n }\n\n public values(): IterableIterator {\n this._flushCleanupInserted();\n this._flushCleanupDeleted();\n // Duplicate the array to avoid issues when _array changes while iterating\n return [...this._array].values();\n }\n\n private _search(key: number): number {\n let min = 0;\n let max = this._array.length - 1;\n while (max >= min) {\n let mid = (min + max) >> 1;\n const midKey = this._getKey(this._array[mid]);\n if (midKey > key) {\n max = mid - 1;\n } else if (midKey < key) {\n min = mid + 1;\n } else {\n // key in list, walk to lowest duplicate\n while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {\n mid--;\n }\n return mid;\n }\n }\n // key not in list\n // still return closest min (also used as insert position)\n return min;\n }\n}\n", "/**\n * Copyright (c) 2022 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ICircularList, IDeleteEvent, IInsertEvent } from '../CircularList';\nimport { MicrotaskTimer } from '../Async';\nimport { css } from '../Color';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../Lifecycle';\nimport { IBufferService, IDecorationService, IInternalDecoration, ILogService } from './Services';\nimport { SortedList } from '../SortedList';\nimport { IColor } from '../Types';\nimport { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';\nimport { Emitter } from '../Event';\n\n// Work variables to avoid garbage collection\nlet $xmin = 0;\nlet $xmax = 0;\n\nexport class DecorationService extends Disposable implements IDecorationService {\n public serviceBrand: any;\n\n /**\n * A list of all decorations, sorted by the marker's line value. This relies on the fact that\n * while marker line values do change, they should all change by the same amount so this should\n * never become out of order.\n */\n private readonly _decorations: SortedList;\n\n private readonly _lineCache = this._register(new DecorationLineCache());\n\n private readonly _onDecorationRegistered = this._register(new Emitter());\n public readonly onDecorationRegistered = this._onDecorationRegistered.event;\n private readonly _onDecorationRemoved = this._register(new Emitter());\n public readonly onDecorationRemoved = this._onDecorationRemoved.event;\n\n public get decorations(): IterableIterator { return this._decorations.values(); }\n\n constructor(\n @ILogService private readonly _logService: ILogService,\n @IBufferService private readonly _bufferService: IBufferService\n ) {\n super();\n\n this._decorations = new SortedList(e => e?.marker.line, this._logService);\n\n this._register(toDisposable(() => this.reset()));\n this._register(this._bufferService.buffers.onBufferActivate(() => {\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }));\n this._lineCache.attachToBufferLines(this._bufferService.buffer.lines);\n }\n\n public registerDecoration(options: IDecorationOptions): IDecoration | undefined {\n if (options.marker.isDisposed) {\n return undefined;\n }\n const decoration = new Decoration(options);\n if (decoration) {\n const markerDispose = decoration.marker.onDispose(() => decoration.dispose());\n const listener = decoration.onDispose(() => {\n listener.dispose();\n if (decoration) {\n if (this._decorations.delete(decoration)) {\n this._lineCache.remove(decoration);\n this._onDecorationRemoved.fire(decoration);\n }\n markerDispose.dispose();\n }\n });\n this._decorations.insert(decoration);\n this._lineCache.add(decoration);\n this._onDecorationRegistered.fire(decoration);\n }\n return decoration;\n }\n\n public reset(): void {\n for (const d of this._decorations.values()) {\n d.dispose();\n }\n this._decorations.clear();\n this._lineCache.clear();\n }\n\n public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n yield d;\n }\n }\n }\n\n public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {\n const bucket = this._lineCache.getDecorationsOnLine(line);\n if (!bucket) {\n return;\n }\n for (const d of bucket) {\n $xmin = d.options.x ?? 0;\n $xmax = $xmin + (d.options.width ?? 1);\n if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {\n callback(d);\n }\n }\n }\n}\n\n/**\n * Per-logical-line index of decorations for fast cell lookup.\n *\n * Keys are marker.line coordinates (logical buffer lines), not CircularList ring slots.\n * Multi-line decorations appear in every line bucket they span. The index is kept aligned\n * with marker.line updates via buffer line trim/insert/delete events.\n */\nexport class DecorationLineCache extends Disposable {\n private readonly _decorationsByLine: Map = new Map();\n private readonly _decorations = new Set();\n private readonly _bufferLineListeners = this._register(new MutableDisposable());\n private readonly _lineIndexSyncTimer = this._register(new MicrotaskTimer());\n private _lineIndexSyncCallbacks: (() => void)[] = [];\n\n public clear(): void {\n this._lineIndexSyncCallbacks.length = 0;\n this._lineIndexSyncTimer.cancel();\n this._decorationsByLine.clear();\n this._decorations.clear();\n }\n\n public add(decoration: IInternalDecoration): void {\n this._decorations.add(decoration);\n this._addToLineBuckets(decoration);\n }\n\n public remove(decoration: IInternalDecoration): void {\n this._decorations.delete(decoration);\n this._removeFromLineBuckets(decoration);\n }\n\n public getDecorationsOnLine(line: number): ReadonlyArray | undefined {\n return this._decorationsByLine.get(line);\n }\n\n public attachToBufferLines(lines: ICircularList): void {\n const store = new DisposableStore();\n this._bufferLineListeners.value = store;\n store.add(lines.onTrim(amount => this._handleBufferLinesTrim(amount)));\n store.add(lines.onInsert(event => this._handleBufferLinesInsert(event)));\n store.add(lines.onDelete(event => this._handleBufferLinesDelete(event)));\n }\n\n private _getDecorationHeight(decoration: IInternalDecoration): number {\n return decoration.options.height ?? 1;\n }\n\n private _addToLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration.marker.line;\n if (start < 0) {\n return;\n }\n decoration._indexedStartLine = start;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n let bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n bucket = [];\n this._decorationsByLine.set(line, bucket);\n }\n bucket.push(decoration);\n }\n }\n\n private _removeFromLineBuckets(decoration: IInternalDecoration): void {\n const start = decoration._indexedStartLine;\n const height = this._getDecorationHeight(decoration);\n for (let line = start; line < start + height; line++) {\n const bucket = this._decorationsByLine.get(line);\n if (!bucket) {\n continue;\n }\n const index = bucket.indexOf(decoration);\n if (index !== -1) {\n bucket.splice(index, 1);\n }\n if (bucket.length === 0) {\n this._decorationsByLine.delete(line);\n }\n }\n }\n\n private _reindexDecoration(decoration: IInternalDecoration): void {\n this._removeFromLineBuckets(decoration);\n if (!decoration.marker.isDisposed && decoration.marker.line >= 0) {\n this._addToLineBuckets(decoration);\n }\n }\n\n /** Re-index after marker line updates (buffer listeners may run before markers). */\n private _scheduleLineIndexSync(callback: () => void): void {\n this._lineIndexSyncCallbacks.push(callback);\n this._lineIndexSyncTimer.set(() => {\n const callbacks = this._lineIndexSyncCallbacks;\n this._lineIndexSyncCallbacks = [];\n for (const cb of callbacks) {\n cb();\n }\n });\n }\n\n private _handleBufferLinesTrim(amount: number): void {\n if (amount <= 0 || !this._decorationsByLine.size) {\n return;\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line - amount;\n if (newLine < 0) {\n continue;\n }\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (!d.marker.isDisposed) {\n d._indexedStartLine -= amount;\n }\n }\n }\n\n private _handleBufferLinesInsert(event: IInsertEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesInsert(event));\n }\n\n private _handleBufferLinesDelete(event: IDeleteEvent): void {\n this._scheduleLineIndexSync(() => this._applyBufferLinesDelete(event));\n }\n\n private _mergeLineBucket(newMap: Map, line: number, bucket: IInternalDecoration[]): void {\n const existing = newMap.get(line);\n if (existing) {\n for (let i = 0, len = bucket.length; i < len; i++) {\n existing.push(bucket[i]);\n }\n } else {\n newMap.set(line, bucket.slice());\n }\n }\n\n /**\n * Shift indexed line keys and sync start lines. O(unique indexed lines), not O(decoration count).\n * Decorations that span the insert point are re-indexed individually (rare vs single-line hits).\n */\n private _applyBufferLinesInsert(event: IInsertEvent): void {\n const { index, amount } = event;\n const spanCrossers: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n if (start < index && start + this._getDecorationHeight(d) > index) {\n spanCrossers.push(d);\n this._removeFromLineBuckets(d);\n }\n }\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n const newLine = line >= index ? line + amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n if (d._indexedStartLine >= index) {\n d._indexedStartLine = d.marker.line;\n }\n }\n for (const d of spanCrossers) {\n this._addToLineBuckets(d);\n }\n }\n\n /**\n * Drop deleted line keys, shift keys below, sync start lines. Full re-index only when a\n * multi-line decoration spans across the deleted range but survives.\n */\n private _applyBufferLinesDelete(event: IDeleteEvent): void {\n const deleteEnd = event.index + event.amount;\n const newMap = new Map();\n for (const [line, bucket] of this._decorationsByLine) {\n if (line >= event.index && line < deleteEnd) {\n continue;\n }\n const newLine = line >= deleteEnd ? line - event.amount : line;\n this._mergeLineBucket(newMap, newLine, bucket);\n }\n this._decorationsByLine.clear();\n for (const [line, bucket] of newMap) {\n this._decorationsByLine.set(line, bucket);\n }\n const toReindex: IInternalDecoration[] = [];\n for (const d of this._decorations) {\n if (d.marker.isDisposed) {\n continue;\n }\n const start = d._indexedStartLine;\n const height = this._getDecorationHeight(d);\n if (start >= deleteEnd) {\n d._indexedStartLine = d.marker.line;\n } else if (start < event.index && start + height > deleteEnd) {\n toReindex.push(d);\n }\n }\n for (const d of toReindex) {\n this._reindexDecoration(d);\n }\n }\n}\n\nclass Decoration extends DisposableStore implements IInternalDecoration {\n public readonly marker: IMarker;\n public element: HTMLElement | undefined;\n\n /** Start line used for line-index removal when marker.line is cleared on dispose. */\n public _indexedStartLine: number;\n\n public readonly onRenderEmitter = this.add(new Emitter());\n public readonly onRender = this.onRenderEmitter.event;\n private readonly _onDispose = this.add(new Emitter());\n public readonly onDispose = this._onDispose.event;\n\n private _cachedBg: IColor | undefined | null = null;\n public get backgroundColorRGB(): IColor | undefined {\n if (this._cachedBg === null) {\n if (this.options.backgroundColor) {\n this._cachedBg = css.toColor(this.options.backgroundColor);\n } else {\n this._cachedBg = undefined;\n }\n }\n return this._cachedBg;\n }\n\n private _cachedFg: IColor | undefined | null = null;\n public get foregroundColorRGB(): IColor | undefined {\n if (this._cachedFg === null) {\n if (this.options.foregroundColor) {\n this._cachedFg = css.toColor(this.options.foregroundColor);\n } else {\n this._cachedFg = undefined;\n }\n }\n return this._cachedFg;\n }\n\n constructor(\n public readonly options: IDecorationOptions\n ) {\n super();\n this.marker = options.marker;\n this._indexedStartLine = options.marker.line;\n if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {\n this.options.overviewRulerOptions.position = 'full';\n }\n }\n\n public override dispose(): void {\n this._onDispose.fire();\n super.dispose();\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IRenderDebouncer } from './Types';\n\nconst RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second\n\n/**\n * Debounces calls to update screen readers to update at most once configurable interval of time.\n */\nexport class TimeBasedDebouncer implements IRenderDebouncer {\n private _rowStart: number | undefined;\n private _rowEnd: number | undefined;\n private _rowCount: number | undefined;\n\n // The last moment that the Terminal was refreshed at\n private _lastRefreshMs = 0;\n // Whether a trailing refresh should be triggered due to a refresh request that was throttled\n private _additionalRefreshRequested = false;\n\n private _refreshTimeoutID: number | undefined;\n\n constructor(\n private _renderCallback: (start: number, end: number) => void,\n private readonly _debounceThresholdMS = RENDER_DEBOUNCE_THRESHOLD_MS\n ) {\n }\n\n public dispose(): void {\n if (this._refreshTimeoutID) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n }\n this._additionalRefreshRequested = false;\n }\n\n public refresh(rowStart: number | undefined, rowEnd: number | undefined, rowCount: number): void {\n this._rowCount = rowCount;\n // Get the min/max row start/end for the arg values\n rowStart = rowStart ?? 0;\n rowEnd = rowEnd ?? this._rowCount - 1;\n // Set the properties to the updated values\n this._rowStart = this._rowStart !== undefined ? Math.min(this._rowStart, rowStart) : rowStart;\n this._rowEnd = this._rowEnd !== undefined ? Math.max(this._rowEnd, rowEnd) : rowEnd;\n\n // Only refresh if the time since last refresh is above a threshold, otherwise wait for\n // enough time to pass before refreshing again.\n const refreshRequestTime: number = performance.now();\n if (refreshRequestTime - this._lastRefreshMs >= this._debounceThresholdMS) {\n // Enough time has elapsed since the last refresh; refresh immediately\n if (this._refreshTimeoutID !== undefined) {\n clearTimeout(this._refreshTimeoutID);\n this._refreshTimeoutID = undefined;\n this._additionalRefreshRequested = false;\n }\n this._lastRefreshMs = refreshRequestTime;\n this._innerRefresh();\n } else if (!this._additionalRefreshRequested) {\n // This is the first additional request throttled; set up trailing refresh\n const elapsed = refreshRequestTime - this._lastRefreshMs;\n const waitPeriodBeforeTrailingRefresh = this._debounceThresholdMS - elapsed;\n this._additionalRefreshRequested = true;\n\n this._refreshTimeoutID = window.setTimeout(() => {\n this._lastRefreshMs = performance.now();\n this._innerRefresh();\n this._additionalRefreshRequested = false;\n this._refreshTimeoutID = undefined; // No longer need to clear the timeout\n }, waitPeriodBeforeTrailingRefresh);\n }\n }\n\n private _innerRefresh(): void {\n // Make sure values are set\n if (this._rowStart === undefined || this._rowEnd === undefined || this._rowCount === undefined) {\n return;\n }\n\n // Clamp values\n const start = Math.max(this._rowStart, 0);\n const end = Math.min(this._rowEnd, this._rowCount - 1);\n\n // Reset debouncer (this happens before render callback as the render could trigger it again)\n this._rowStart = undefined;\n this._rowEnd = undefined;\n\n // Run render callback\n this._renderCallback(start, end);\n }\n}\n\n", "/**\n * Copyright (c) 2017 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from './LocalizableStrings';\nimport { ITerminal, IRenderDebouncer } from './Types';\nimport { TimeBasedDebouncer } from './TimeBasedDebouncer';\nimport { Disposable, toDisposable } from '../common/Lifecycle';\nimport { ICoreBrowserService, IRenderService } from './services/Services';\nimport { IBuffer } from '../common/buffer/Types';\nimport { IInstantiationService } from '../common/services/Services';\nimport { addDisposableListener } from './Dom';\n\nconst enum Constants {\n MAX_ROWS_TO_READ = 20\n}\n\nconst enum BoundaryPosition {\n TOP,\n BOTTOM\n}\n\n// Turn this on to unhide the accessibility tree and display it under\n// (instead of overlapping with) the terminal.\nconst DEBUG = false;\n\nexport class AccessibilityManager extends Disposable {\n private _debugRootContainer: HTMLElement | undefined;\n private _accessibilityContainer: HTMLElement;\n\n private _rowContainer: HTMLElement;\n private _rowElements: HTMLElement[];\n private _rowColumns: WeakMap = new WeakMap();\n\n private _liveRegion: HTMLElement;\n private _liveRegionLineCount: number = 0;\n private _liveRegionDebouncer: IRenderDebouncer;\n\n private _topBoundaryFocusListener: (e: FocusEvent) => void;\n private _bottomBoundaryFocusListener: (e: FocusEvent) => void;\n\n /**\n * This queue has a character pushed to it for keys that are pressed, if the\n * next character added to the terminal is equal to the key char then it is\n * not announced (added to live region) because it has already been announced\n * by the textarea event (which cannot be canceled). There are some race\n * condition cases if there is typing while data is streaming, but this covers\n * the main case of typing into the prompt and inputting the answer to a\n * question (Y/N, etc.).\n */\n private _charsToConsume: string[] = [];\n\n private _charsToAnnounce: string = '';\n\n constructor(\n private readonly _terminal: ITerminal,\n @IInstantiationService instantiationService: IInstantiationService,\n @ICoreBrowserService private readonly _coreBrowserService: ICoreBrowserService,\n @IRenderService private readonly _renderService: IRenderService\n ) {\n super();\n const doc = this._coreBrowserService.mainDocument;\n this._accessibilityContainer = doc.createElement('div');\n this._accessibilityContainer.classList.add('xterm-accessibility');\n\n this._rowContainer = doc.createElement('div');\n this._rowContainer.setAttribute('role', 'list');\n this._rowContainer.classList.add('xterm-accessibility-tree');\n this._rowElements = [];\n for (let i = 0; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n\n this._topBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.TOP);\n this._bottomBoundaryFocusListener = e => this._handleBoundaryFocus(e, BoundaryPosition.BOTTOM);\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._accessibilityContainer.appendChild(this._rowContainer);\n\n this._liveRegion = doc.createElement('div');\n this._liveRegion.classList.add('live-region');\n this._liveRegion.setAttribute('aria-live', 'assertive');\n this._accessibilityContainer.appendChild(this._liveRegion);\n this._liveRegionDebouncer = this._register(new TimeBasedDebouncer(this._renderRows.bind(this)));\n\n if (!this._terminal.element) {\n throw new Error('Cannot enable accessibility before Terminal.open');\n }\n\n if (DEBUG) {\n this._accessibilityContainer.classList.add('debug');\n this._rowContainer.classList.add('debug');\n\n // Use a `
` container so that the css will still apply.\n this._debugRootContainer = doc.createElement('div');\n this._debugRootContainer.classList.add('xterm');\n\n this._debugRootContainer.appendChild(doc.createTextNode('------start a11y------'));\n this._debugRootContainer.appendChild(this._accessibilityContainer);\n this._debugRootContainer.appendChild(doc.createTextNode('------end a11y------'));\n\n this._terminal.element.insertAdjacentElement('afterend', this._debugRootContainer);\n } else {\n this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityContainer);\n }\n\n this._register(this._terminal.onResize(e => this._handleResize(e.rows)));\n this._register(this._terminal.onRender(e => this._refreshRows(e.start, e.end)));\n this._register(this._terminal.onScroll(() => this._refreshRows()));\n // Line feed is an issue as the prompt won't be read out after a command is run\n this._register(this._terminal.onA11yChar(char => this._handleChar(char)));\n this._register(this._terminal.onLineFeed(() => this._handleChar('\\n')));\n this._register(this._terminal.onA11yTab(spaceCount => this._handleTab(spaceCount)));\n this._register(this._terminal.onKey(e => this._handleKey(e.key)));\n this._register(this._terminal.onBlur(() => this._clearLiveRegion()));\n this._register(this._renderService.onDimensionsChange(() => this._refreshRowsDimensions()));\n this._register(addDisposableListener(doc, 'selectionchange', () => this._handleSelectionChange()));\n this._register(this._coreBrowserService.onDprChange(() => this._refreshRowsDimensions()));\n\n this._refreshRowsDimensions();\n this._refreshRows();\n this._register(toDisposable(() => {\n if (DEBUG) {\n this._debugRootContainer!.remove();\n } else {\n this._accessibilityContainer.remove();\n }\n this._rowElements.length = 0;\n }));\n }\n\n private _handleTab(spaceCount: number): void {\n for (let i = 0; i < spaceCount; i++) {\n this._handleChar(' ');\n }\n }\n\n private _handleChar(char: string): void {\n if (this._liveRegionLineCount < Constants.MAX_ROWS_TO_READ + 1) {\n if (this._charsToConsume.length > 0) {\n // Have the screen reader ignore the char if it was just input\n const shiftedChar = this._charsToConsume.shift();\n if (shiftedChar !== char) {\n this._charsToAnnounce += char;\n }\n } else {\n this._charsToAnnounce += char;\n }\n\n if (char === '\\n') {\n this._liveRegionLineCount++;\n if (this._liveRegionLineCount === Constants.MAX_ROWS_TO_READ + 1) {\n this._liveRegion.textContent = Strings.tooMuchOutput.get();\n }\n }\n }\n }\n\n private _clearLiveRegion(): void {\n this._liveRegion.textContent = '';\n this._liveRegionLineCount = 0;\n }\n\n private _handleKey(keyChar: string): void {\n this._clearLiveRegion();\n // Only add the char if there is no control character.\n if (!/\\p{Control}/u.test(keyChar)) {\n this._charsToConsume.push(keyChar);\n }\n }\n\n private _refreshRows(start?: number, end?: number): void {\n this._liveRegionDebouncer.refresh(start, end, this._terminal.rows);\n }\n\n private _renderRows(start: number, end: number): void {\n const buffer: IBuffer = this._terminal.buffer;\n const setSize = buffer.lines.length.toString();\n for (let i = start; i <= end; i++) {\n const line = buffer.lines.get(buffer.ydisp + i);\n const columns: number[] = [];\n const lineData = line?.translateToString(true, undefined, undefined, columns) || '';\n const posInSet = (buffer.ydisp + i + 1).toString();\n const element = this._rowElements[i];\n if (element) {\n if (lineData.length === 0) {\n element.textContent = '\\u00a0';\n this._rowColumns.set(element, [0, 1]);\n } else {\n element.textContent = lineData;\n this._rowColumns.set(element, columns);\n }\n element.setAttribute('aria-posinset', posInSet);\n element.setAttribute('aria-setsize', setSize);\n this._alignRowWidth(element);\n }\n }\n this._announceCharacters();\n }\n\n private _announceCharacters(): void {\n if (this._charsToAnnounce.length === 0) {\n return;\n }\n if (this._liveRegion.textContent === Strings.tooMuchOutput.get()) {\n this._clearLiveRegion();\n }\n this._liveRegion.textContent += this._charsToAnnounce;\n this._charsToAnnounce = '';\n }\n\n private _handleBoundaryFocus(e: FocusEvent, position: BoundaryPosition): void {\n const boundaryElement = e.target as HTMLElement;\n const beforeBoundaryElement = this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2];\n\n // Don't scroll if the buffer top has reached the end in that direction\n const posInSet = boundaryElement.getAttribute('aria-posinset');\n const lastRowPos = position === BoundaryPosition.TOP ? '1' : `${this._terminal.buffer.lines.length}`;\n if (posInSet === lastRowPos) {\n return;\n }\n\n // Don't scroll when the last focused item was not the second row (focus is going the other\n // direction)\n if (e.relatedTarget !== beforeBoundaryElement) {\n return;\n }\n\n // Remove old boundary element from array\n let topBoundaryElement: HTMLElement;\n let bottomBoundaryElement: HTMLElement;\n if (position === BoundaryPosition.TOP) {\n topBoundaryElement = boundaryElement;\n bottomBoundaryElement = this._rowElements.pop()!;\n this._rowContainer.removeChild(bottomBoundaryElement);\n } else {\n topBoundaryElement = this._rowElements.shift()!;\n bottomBoundaryElement = boundaryElement;\n this._rowContainer.removeChild(topBoundaryElement);\n }\n\n // Remove listeners from old boundary elements\n topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);\n bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Add new element to array/DOM\n if (position === BoundaryPosition.TOP) {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.unshift(newElement);\n this._rowContainer.insertAdjacentElement('afterbegin', newElement);\n } else {\n const newElement = this._createAccessibilityTreeNode();\n this._rowElements.push(newElement);\n this._rowContainer.appendChild(newElement);\n }\n\n // Add listeners to new boundary elements\n this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Scroll up\n this._terminal.scrollLines(position === BoundaryPosition.TOP ? -1 : 1);\n\n // Focus new boundary before element\n this._rowElements[position === BoundaryPosition.TOP ? 1 : this._rowElements.length - 2].focus();\n\n // Prevent the standard behavior\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n private _handleSelectionChange(): void {\n if (this._rowElements.length === 0) {\n return;\n }\n\n const selection = this._coreBrowserService.mainDocument.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.isCollapsed) {\n // Only do something when the anchorNode is inside the row container. This\n // behavior mirrors what we do with mouse --- if the mouse clicks\n // somewhere outside of the terminal, we don't clear the selection.\n if (this._rowContainer.contains(selection.anchorNode)) {\n this._terminal.clearSelection();\n }\n return;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n console.error('anchorNode and/or focusNode are null');\n return;\n }\n\n // Sort the two selection points in document order.\n let begin = { node: selection.anchorNode, offset: selection.anchorOffset };\n let end = { node: selection.focusNode, offset: selection.focusOffset };\n if ((begin.node.compareDocumentPosition(end.node) & Node.DOCUMENT_POSITION_PRECEDING) || (begin.node === end.node && begin.offset > end.offset) ) {\n [begin, end] = [end, begin];\n }\n\n // Clamp begin/end to the inside of the row container.\n if (begin.node.compareDocumentPosition(this._rowElements[0]) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING)) {\n begin = { node: this._rowElements[0].childNodes[0], offset: 0 };\n }\n if (!this._rowContainer.contains(begin.node)) {\n // This happens when `begin` is below the last row.\n return;\n }\n const lastRowElement = this._rowElements.slice(-1)[0];\n if (end.node.compareDocumentPosition(lastRowElement) & (Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_PRECEDING)) {\n end = {\n node: lastRowElement,\n offset: lastRowElement.textContent?.length ?? 0\n };\n }\n if (!this._rowContainer.contains(end.node)) {\n // This happens when `end` is above the first row.\n return;\n }\n\n const toRowColumn = ({ node, offset }: typeof begin): {row: number, column: number} | null => {\n // `node` is either the row element or the Text node inside it.\n const rowElement: any = node instanceof Text ? node.parentNode : node;\n let row = parseInt(rowElement?.getAttribute('aria-posinset'), 10) - 1;\n if (isNaN(row)) {\n console.warn('row is invalid. Race condition?');\n return null;\n }\n\n const columns = this._rowColumns.get(rowElement);\n if (!columns) {\n console.warn('columns is null. Race condition?');\n return null;\n }\n\n let column = offset < columns.length ? columns[offset] : columns.slice(-1)[0] + 1;\n if (column >= this._terminal.cols) {\n ++row;\n column = 0;\n }\n return {\n row,\n column\n };\n };\n\n const beginRowColumn = toRowColumn(begin);\n const endRowColumn = toRowColumn(end);\n\n if (!beginRowColumn || !endRowColumn) {\n return;\n }\n\n if (beginRowColumn.row > endRowColumn.row || (beginRowColumn.row === endRowColumn.row && beginRowColumn.column >= endRowColumn.column)) {\n // This should not happen unless we have some bugs.\n throw new Error('invalid range');\n }\n\n this._terminal.select(\n beginRowColumn.column,\n beginRowColumn.row,\n (endRowColumn.row - beginRowColumn.row) * this._terminal.cols - beginRowColumn.column + endRowColumn.column\n );\n }\n\n private _handleResize(rows: number): void {\n // Remove bottom boundary listener\n this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);\n\n // Grow rows as required\n for (let i = this._rowContainer.children.length; i < this._terminal.rows; i++) {\n this._rowElements[i] = this._createAccessibilityTreeNode();\n this._rowContainer.appendChild(this._rowElements[i]);\n }\n // Shrink rows as required\n while (this._rowElements.length > rows) {\n this._rowContainer.removeChild(this._rowElements.pop()!);\n }\n\n // Add bottom boundary listener\n this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);\n\n this._refreshRowsDimensions();\n }\n\n private _createAccessibilityTreeNode(): HTMLElement {\n const element = this._coreBrowserService.mainDocument.createElement('div');\n element.setAttribute('role', 'listitem');\n element.tabIndex = -1;\n this._refreshRowDimensions(element);\n return element;\n }\n\n private _refreshRowsDimensions(): void {\n if (!this._renderService.dimensions.css.cell.height) {\n return;\n }\n Object.assign(this._accessibilityContainer.style, {\n width: `${this._renderService.dimensions.css.canvas.width}px`,\n fontSize: `${this._terminal.options.fontSize}px`\n });\n if (this._rowElements.length !== this._terminal.rows) {\n this._handleResize(this._terminal.rows);\n }\n for (let i = 0; i < this._terminal.rows; i++) {\n this._refreshRowDimensions(this._rowElements[i]);\n this._alignRowWidth(this._rowElements[i]);\n }\n }\n\n private _refreshRowDimensions(element: HTMLElement): void {\n element.style.height = `${this._renderService.dimensions.css.cell.height}px`;\n }\n\n /**\n * Scale the width of a row so that each of the character is (mostly) aligned\n * with the actual rendering. This will allow the screen reader to draw\n * selection outline at the correct position.\n *\n * On top of using the \"monospace\" font and correct font size, the scaling\n * here is necessary to handle characters that are not covered by the font\n * (e.g. CJK).\n */\n private _alignRowWidth(element: HTMLElement): void {\n element.style.transform = '';\n const width = element.getBoundingClientRect().width;\n const lastColumn = this._rowColumns.get(element)?.slice(-1)?.[0];\n if (!lastColumn) {\n return;\n }\n const targetWidth = lastColumn * this._renderService.dimensions.css.cell.width;\n element.style.transform = `scaleX(${targetWidth / width})`;\n }\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';\nimport { Disposable, dispose, toDisposable } from '../common/Lifecycle';\nimport { IDisposable } from '../common/Types';\nimport { IBufferService } from '../common/services/Services';\nimport { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';\nimport { Emitter } from '../common/Event';\nimport { addDisposableListener } from './Dom';\n\nexport class Linkifier extends Disposable implements ILinkifier2 {\n public get currentLink(): ILinkWithState | undefined { return this._currentLink; }\n protected _currentLink: ILinkWithState | undefined;\n private _mouseDownLink: ILinkWithState | undefined;\n private _lastMouseEvent: MouseEvent | undefined;\n private _linkCacheDisposables: IDisposable[] = [];\n private _lastBufferCell: IBufferCellPosition | undefined;\n private _isMouseOut: boolean = true;\n private _wasResized: boolean = false;\n private _activeProviderReplies: Map | undefined;\n private _activeLine: number = -1;\n\n private readonly _onShowLinkUnderline = this._register(new Emitter());\n public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;\n private readonly _onHideLinkUnderline = this._register(new Emitter());\n public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;\n\n constructor(\n private readonly _element: HTMLElement,\n @IMouseCoordsService private readonly _mouseCoordsService: IMouseCoordsService,\n @IRenderService private readonly _renderService: IRenderService,\n @IBufferService private readonly _bufferService: IBufferService,\n @ILinkProviderService private readonly _linkProviderService: ILinkProviderService\n ) {\n super();\n this._register(toDisposable(() => {\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n this._lastMouseEvent = undefined;\n // Clear out link providers as they could easily cause an embedder memory leak\n this._activeProviderReplies?.clear();\n }));\n // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.\n this._register(this._bufferService.onResize(() => {\n this._clearCurrentLink();\n this._wasResized = true;\n }));\n this._register(addDisposableListener(this._element, 'mouseleave', () => {\n this._isMouseOut = true;\n this._clearCurrentLink();\n }));\n this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));\n this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));\n this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));\n }\n\n private _handleMouseMove(event: MouseEvent): void {\n this._lastMouseEvent = event;\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n this._isMouseOut = false;\n\n // Ignore the event if it's an embedder created hover widget\n const composedPath = event.composedPath() as HTMLElement[];\n for (let i = 0; i < composedPath.length; i++) {\n const target = composedPath[i];\n // Hit Terminal.element, break and continue\n if (target.classList.contains('xterm')) {\n break;\n }\n // It's a hover, don't respect hover event\n if (target.classList.contains('xterm-hover')) {\n return;\n }\n }\n\n if (!this._lastBufferCell || (position.x !== this._lastBufferCell.x || position.y !== this._lastBufferCell.y)) {\n this._handleHover(position);\n this._lastBufferCell = position;\n }\n }\n\n private _handleHover(position: IBufferCellPosition): void {\n // TODO: This currently does not cache link provider results across wrapped lines, activeLine\n // should be something like `activeRange: {startY, endY}`\n // Check if we need to clear the link\n if (this._activeLine !== position.y || this._wasResized) {\n this._clearCurrentLink();\n this._askForLink(position, false);\n this._wasResized = false;\n return;\n }\n\n // Check the if the link is in the mouse position\n const isCurrentLinkInPosition = this._currentLink && this._linkAtPosition(this._currentLink.link, position);\n if (!isCurrentLinkInPosition) {\n this._clearCurrentLink();\n this._askForLink(position, true);\n }\n }\n\n private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {\n if (!this._activeProviderReplies || !useLineCache) {\n this._activeProviderReplies?.forEach(reply => {\n reply?.forEach(linkWithState => {\n if (linkWithState.link.dispose) {\n linkWithState.link.dispose();\n }\n });\n });\n this._activeProviderReplies = new Map();\n this._activeLine = position.y;\n }\n let linkProvided = false;\n\n // There is no link cached, so ask for one\n for (const [i, linkProvider] of this._linkProviderService.linkProviders.entries()) {\n if (useLineCache) {\n const existingReply = this._activeProviderReplies?.get(i);\n // If there isn't a reply, the provider hasn't responded yet.\n\n // TODO: If there isn't a reply yet it means that the provider is still resolving. Ensuring\n // provideLinks isn't triggered again saves ILink.hover firing twice though. This probably\n // needs promises to get fixed\n if (existingReply) {\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n }\n } else {\n linkProvider.provideLinks(position.y, (links: ILink[] | undefined) => {\n if (this._isMouseOut) {\n return;\n }\n const linksWithState: ILinkWithState[] | undefined = links?.map(link => ({ link }));\n this._activeProviderReplies?.set(i, linksWithState);\n linkProvided = this._checkLinkProviderResult(i, position, linkProvided);\n\n // If all providers have responded, remove lower priority links that intersect ranges of\n // higher priority links\n if (this._activeProviderReplies?.size === this._linkProviderService.linkProviders.length) {\n this._removeIntersectingLinks(position.y, this._activeProviderReplies);\n }\n });\n }\n }\n }\n\n private _removeIntersectingLinks(y: number, replies: Map): void {\n const occupiedCells = new Set();\n for (let i = 0; i < replies.size; i++) {\n const providerReply = replies.get(i);\n if (!providerReply) {\n continue;\n }\n for (let i = 0; i < providerReply.length; i++) {\n const linkWithState = providerReply[i];\n const startX = linkWithState.link.range.start.y < y ? 0 : linkWithState.link.range.start.x;\n const endX = linkWithState.link.range.end.y > y ? this._bufferService.cols : linkWithState.link.range.end.x;\n for (let x = startX; x <= endX; x++) {\n if (occupiedCells.has(x)) {\n providerReply.splice(i--, 1);\n break;\n }\n occupiedCells.add(x);\n }\n }\n }\n }\n\n private _checkLinkProviderResult(index: number, position: IBufferCellPosition, linkProvided: boolean): boolean {\n if (!this._activeProviderReplies) {\n return linkProvided;\n }\n\n const links = this._activeProviderReplies.get(index);\n\n // Check if every provider before this one has come back undefined\n let hasLinkBefore = false;\n for (let j = 0; j < index; j++) {\n if (!this._activeProviderReplies.has(j) || this._activeProviderReplies.get(j)) {\n hasLinkBefore = true;\n }\n }\n\n // If all providers with higher priority came back undefined, then this provider's link for\n // the position should be used\n if (!hasLinkBefore && links) {\n const linkAtPosition = links.find(link => this._linkAtPosition(link.link, position));\n if (linkAtPosition) {\n linkProvided = true;\n this._handleNewLink(linkAtPosition);\n }\n }\n\n // Check if all the providers have responded\n if (this._activeProviderReplies.size === this._linkProviderService.linkProviders.length && !linkProvided) {\n // Respect the order of the link providers\n for (let j = 0; j < this._activeProviderReplies.size; j++) {\n const currentLink = this._activeProviderReplies.get(j)?.find(link => this._linkAtPosition(link.link, position));\n if (currentLink) {\n linkProvided = true;\n this._handleNewLink(currentLink);\n break;\n }\n }\n }\n\n return linkProvided;\n }\n\n private _handleMouseDown(): void {\n this._mouseDownLink = this._currentLink;\n }\n\n private _handleMouseUp(event: MouseEvent): void {\n if (!this._currentLink) {\n return;\n }\n\n const position = this._positionFromMouseEvent(event, this._element);\n if (!position) {\n return;\n }\n\n if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {\n this._currentLink.link.activate(event, this._currentLink.link.text);\n }\n }\n\n private _clearCurrentLink(startRow?: number, endRow?: number): void {\n if (!this._currentLink || !this._lastMouseEvent) {\n return;\n }\n\n // If we have a start and end row, check that the link is within it\n if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {\n this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);\n this._currentLink = undefined;\n dispose(this._linkCacheDisposables);\n this._linkCacheDisposables.length = 0;\n }\n }\n\n private _handleNewLink(linkWithState: ILinkWithState): void {\n if (!this._lastMouseEvent) {\n return;\n }\n\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n\n if (!position) {\n return;\n }\n\n // Trigger hover if the we have a link at the position\n if (this._linkAtPosition(linkWithState.link, position)) {\n this._currentLink = linkWithState;\n this._currentLink.state = {\n decorations: {\n underline: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.underline,\n pointerCursor: linkWithState.link.decorations === undefined ? true : linkWithState.link.decorations.pointerCursor\n },\n isHovered: true\n };\n this._linkHover(this._element, linkWithState.link, this._lastMouseEvent);\n\n // Add listener for tracking decorations changes\n linkWithState.link.decorations = {} as ILinkDecorations;\n Object.defineProperties(linkWithState.link.decorations, {\n pointerCursor: {\n get: () => this._currentLink?.state?.decorations.pointerCursor,\n set: v => {\n if (this._currentLink?.state && this._currentLink.state.decorations.pointerCursor !== v) {\n this._currentLink.state.decorations.pointerCursor = v;\n if (this._currentLink.state.isHovered) {\n this._element.classList.toggle('xterm-cursor-pointer', v);\n }\n }\n }\n },\n underline: {\n get: () => this._currentLink?.state?.decorations.underline,\n set: v => {\n if (this._currentLink?.state && this._currentLink?.state?.decorations.underline !== v) {\n this._currentLink.state.decorations.underline = v;\n if (this._currentLink.state.isHovered) {\n this._fireUnderlineEvent(linkWithState.link, v);\n }\n }\n }\n }\n });\n\n // Listen to viewport changes to re-render the link under the cursor (only when the line the\n // link is on changes)\n this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e => {\n // Sanity check, this shouldn't happen in practice as this listener would be disposed\n if (!this._currentLink) {\n return;\n }\n // When start is 0 a scroll most likely occurred, make sure links above the fold also get\n // cleared.\n const start = e.start === 0 ? 0 : e.start + 1 + this._bufferService.buffer.ydisp;\n const end = this._bufferService.buffer.ydisp + 1 + e.end;\n // Only clear the link if the viewport change happened on this line\n if (this._currentLink.link.range.start.y >= start && this._currentLink.link.range.end.y <= end) {\n this._clearCurrentLink(start, end);\n if (this._lastMouseEvent) {\n // re-eval previously active link after changes\n const position = this._positionFromMouseEvent(this._lastMouseEvent, this._element);\n if (position) {\n this._askForLink(position, false);\n }\n }\n }\n }));\n }\n }\n\n protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = true;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, true);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.add('xterm-cursor-pointer');\n }\n }\n\n if (link.hover) {\n link.hover(event, link.text);\n }\n }\n\n private _fireUnderlineEvent(link: ILink, showEvent: boolean): void {\n const range = link.range;\n const scrollOffset = this._bufferService.buffer.ydisp;\n const event = this._createLinkUnderlineEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined);\n const emitter = showEvent ? this._onShowLinkUnderline : this._onHideLinkUnderline;\n emitter.fire(event);\n }\n\n protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {\n if (this._currentLink?.state) {\n this._currentLink.state.isHovered = false;\n if (this._currentLink.state.decorations.underline) {\n this._fireUnderlineEvent(link, false);\n }\n if (this._currentLink.state.decorations.pointerCursor) {\n element.classList.remove('xterm-cursor-pointer');\n }\n }\n\n if (link.leave) {\n link.leave(event, link.text);\n }\n }\n\n /**\n * Check if the buffer position is within the link\n * @param link\n * @param position\n */\n private _linkAtPosition(link: ILink, position: IBufferCellPosition): boolean {\n const lower = link.range.start.y * this._bufferService.cols + link.range.start.x;\n const upper = link.range.end.y * this._bufferService.cols + link.range.end.x;\n const current = position.y * this._bufferService.cols + position.x;\n return (lower <= current && current <= upper);\n }\n\n /**\n * Get the buffer position from a mouse event\n * @param event\n */\n private _positionFromMouseEvent(event: MouseEvent, element: HTMLElement): IBufferCellPosition | undefined {\n const coords = this._mouseCoordsService.getCoords(event, element, this._bufferService.cols, this._bufferService.rows);\n if (!coords) {\n return;\n }\n\n return { x: coords[0], y: coords[1] + this._bufferService.buffer.ydisp };\n }\n\n private _createLinkUnderlineEvent(x1: number, y1: number, x2: number, y2: number, fg: number | undefined): ILinkifierEvent {\n return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };\n }\n}\n\nfunction linkEquals(a: ILink, b: ILink): boolean {\n return (\n a.text === b.text &&\n a.range.start.x === b.range.start.x &&\n a.range.start.y === b.range.start.y &&\n a.range.end.x === b.range.end.x &&\n a.range.end.y === b.range.end.y\n );\n}\n", "/**\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\n * @license MIT\n *\n * Originally forked from (with the author's permission):\n * Fabrice Bellard's javascript vt100 for jslinux:\n * http://bellard.org/jslinux/\n * Copyright (c) 2011 Fabrice Bellard\n * The original design remains. The terminal itself\n * has been extended to include xterm CSI codes, among\n * other features.\n *\n * Terminal Emulation References:\n * http://vt100.net/\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.txt\n * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n * http://invisible-island.net/vttest/\n * http://www.inwap.com/pdp10/ansicode.txt\n * http://linux.die.net/man/4/console_codes\n * http://linux.die.net/man/7/urxvt\n */\n\nimport { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';\nimport { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';\nimport * as Strings from './LocalizableStrings';\nimport { OscLinkProvider } from './OscLinkProvider';\nimport { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';\nimport { Viewport } from './Viewport';\nimport { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';\nimport { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';\nimport { CompositionHelper } from './input/CompositionHelper';\nimport { DomRenderer } from './renderer/dom/DomRenderer';\nimport { IRenderer } from './renderer/shared/Types';\nimport { CharSizeService } from './services/CharSizeService';\nimport { CharacterJoinerService } from './services/CharacterJoinerService';\nimport { CoreBrowserService } from './services/CoreBrowserService';\nimport { LinkProviderService } from './services/LinkProviderService';\nimport { MouseCoordsService } from './services/MouseCoordsService';\nimport { MouseEventCssClasses, MouseService } from './services/MouseService';\nimport { RenderService } from './services/RenderService';\nimport { SelectionService } from './services/SelectionService';\nimport { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';\nimport { ThemeService } from './services/ThemeService';\nimport { KeyboardService } from './services/KeyboardService';\nimport { channels, color, rgb } from '../common/Color';\nimport { CoreTerminal } from '../common/CoreTerminal';\nimport * as Browser from '../common/Platform';\nimport { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';\nimport { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';\nimport { IBuffer } from '../common/buffer/Types';\nimport { C0, C1ESCAPED } from '../common/data/EscapeSequences';\nimport { toRgbString } from '../common/input/XParseColor';\nimport { DecorationService } from '../common/services/DecorationService';\nimport { IDecorationService } from '../common/services/Services';\nimport { WindowsOptionsReportType } from '../common/InputHandler';\nimport { AccessibilityManager } from './AccessibilityManager';\nimport { Linkifier } from './Linkifier';\nimport { Emitter, EventUtils, type IEvent } from '../common/Event';\nimport { addDisposableListener } from './Dom';\nimport { MutableDisposable, toDisposable } from '../common/Lifecycle';\n\nexport class CoreBrowserTerminal extends CoreTerminal implements ITerminal {\n public textarea: HTMLTextAreaElement | undefined;\n public element: HTMLElement | undefined;\n public screenElement: HTMLElement | undefined;\n\n private _document: Document | undefined;\n private _viewportElement: HTMLElement | undefined;\n private _helperContainer: HTMLElement | undefined;\n private _compositionView: HTMLElement | undefined;\n\n private readonly _linkifier: MutableDisposable = this._register(new MutableDisposable());\n public get linkifier(): ILinkifier2 | undefined { return this._linkifier.value; }\n private _overviewRulerRenderer: OverviewRulerRenderer | undefined;\n private _viewport: Viewport | undefined;\n\n public browser: IBrowser = Browser as any;\n\n private _customKeyEventHandler: CustomKeyEventHandler | undefined;\n\n // Browser services\n private readonly _decorationService: DecorationService;\n private readonly _keyboardService: IKeyboardService;\n private readonly _linkProviderService: ILinkProviderService;\n\n // Optional browser services\n private _charSizeService: ICharSizeService | undefined;\n private _coreBrowserService: ICoreBrowserService | undefined;\n private _mouseCoordsService: IMouseCoordsService | undefined;\n private _mouseService: IMouseService | undefined;\n private _renderService: IRenderService | undefined;\n private _themeService: IThemeService | undefined;\n private _characterJoinerService: ICharacterJoinerService | undefined;\n private _selectionService: ISelectionService | undefined;\n\n /**\n * Records whether the keydown event has already been handled and triggered a data event, if so\n * the keypress event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyDownHandled: boolean = false;\n\n /**\n * Records whether a keydown event has occurred since the last keyup event, i.e. whether a key\n * is currently \"pressed\".\n */\n private _keyDownSeen: boolean = false;\n\n /**\n * Records whether the keypress event has already been handled and triggered a data event, if so\n * the input event should not trigger a data event but should still print to the textarea so\n * screen readers will announce it.\n */\n private _keyPressHandled: boolean = false;\n\n /**\n * Records whether there has been a keydown event for a dead key without a corresponding keydown\n * event for the composed/alternative character. If we cancel the keydown event for the dead key,\n * no events will be emitted for the final character.\n */\n private _unprocessedDeadKey: boolean = false;\n\n private _compositionHelper: ICompositionHelper | undefined;\n private _accessibilityManager: MutableDisposable = this._register(new MutableDisposable());\n\n private readonly _onCursorMove = this._register(new Emitter());\n public readonly onCursorMove = this._onCursorMove.event;\n private readonly _onKey = this._register(new Emitter<{ key: string, domEvent: KeyboardEvent }>());\n public readonly onKey = this._onKey.event;\n private readonly _onSelectionChange = this._register(new Emitter());\n public readonly onSelectionChange = this._onSelectionChange.event;\n private readonly _onTitleChange = this._register(new Emitter());\n public readonly onTitleChange = this._onTitleChange.event;\n private readonly _onBell = this._register(new Emitter());\n public readonly onBell = this._onBell.event;\n\n private _onFocus = this._register(new Emitter());\n public get onFocus(): IEvent { return this._onFocus.event; }\n private _onBlur = this._register(new Emitter());\n public get onBlur(): IEvent { return this._onBlur.event; }\n private _onA11yCharEmitter = this._register(new Emitter());\n public get onA11yChar(): IEvent { return this._onA11yCharEmitter.event; }\n private _onA11yTabEmitter = this._register(new Emitter());\n public get onA11yTab(): IEvent { return this._onA11yTabEmitter.event; }\n private _onWillOpen = this._register(new Emitter());\n public get onWillOpen(): IEvent { return this._onWillOpen.event; }\n private readonly _onDimensionsChange = this._register(new Emitter());\n public readonly onDimensionsChange = this._onDimensionsChange.event;\n\n public get dimensions(): IRenderDimensionsApi | undefined {\n if (!this._renderService) {\n return undefined;\n }\n const dimensions = this._renderService.dimensions;\n return {\n css: {\n canvas: { ...dimensions.css.canvas },\n cell: { ...dimensions.css.cell }\n },\n device: {\n canvas: { ...dimensions.device.canvas },\n cell: { ...dimensions.device.cell },\n char: { ...dimensions.device.char }\n }\n };\n }\n\n constructor(\n options: Partial = {}\n ) {\n super(options);\n\n this._setup();\n\n this._decorationService = this._instantiationService.createInstance(DecorationService);\n this._instantiationService.setService(IDecorationService, this._decorationService);\n this._keyboardService = this._instantiationService.createInstance(KeyboardService);\n this._instantiationService.setService(IKeyboardService, this._keyboardService);\n this._linkProviderService = this._instantiationService.createInstance(LinkProviderService);\n this._instantiationService.setService(ILinkProviderService, this._linkProviderService);\n this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(OscLinkProvider));\n\n // Setup InputHandler listeners\n this._register(this._inputHandler.onRequestBell(() => this._onBell.fire()));\n this._register(this._inputHandler.onRequestRefreshRows((e) => this.refresh(e?.start ?? 0, e?.end ?? (this.rows - 1))));\n this._register(this._inputHandler.onRequestSendFocus(() => this._reportFocus()));\n this._register(this._inputHandler.onRequestReset(() => this.reset()));\n this._register(this._inputHandler.onRequestWindowsOptionsReport(type => this._reportWindowsOptions(type)));\n this._register(this._inputHandler.onColor((event) => this._handleColorEvent(event)));\n this._register(EventUtils.forward(this._inputHandler.onCursorMove, this._onCursorMove));\n this._register(EventUtils.forward(this._inputHandler.onTitleChange, this._onTitleChange));\n this._register(EventUtils.forward(this._inputHandler.onA11yChar, this._onA11yCharEmitter));\n this._register(EventUtils.forward(this._inputHandler.onA11yTab, this._onA11yTabEmitter));\n\n // Setup listeners\n this._register(this._bufferService.onResize(e => this._afterResize(e.cols, e.rows)));\n\n this._register(toDisposable(() => {\n this._customKeyEventHandler = undefined;\n this.element?.parentNode?.removeChild(this.element);\n }));\n }\n\n /**\n * Handle color event from inputhandler for OSC 4|104 | 10|110 | 11|111 | 12|112.\n * An event from OSC 4|104 may contain multiple set or report requests, and multiple\n * or none restore requests (resetting all),\n * while an event from OSC 10|110 | 11|111 | 12|112 always contains a single request.\n */\n private _handleColorEvent(event: IColorEvent): void {\n if (!this._themeService) return;\n for (const req of event) {\n let acc: 'foreground' | 'background' | 'cursor' | 'ansi';\n let ident: string;\n switch (req.index) {\n case SpecialColorIndex.FOREGROUND: // OSC 10 | 110\n acc = 'foreground';\n ident = '10';\n break;\n case SpecialColorIndex.BACKGROUND: // OSC 11 | 111\n acc = 'background';\n ident = '11';\n break;\n case SpecialColorIndex.CURSOR: // OSC 12 | 112\n acc = 'cursor';\n ident = '12';\n break;\n default: // OSC 4 | 104\n // we can skip the [0..255] range check here (already done in inputhandler)\n acc = 'ansi';\n ident = '4;' + req.index;\n }\n switch (req.type) {\n case ColorRequestType.REPORT:\n const colorRgb = color.toColorRGB(acc === 'ansi'\n ? this._themeService.colors.ansi[req.index]\n : this._themeService.colors[acc]);\n this.coreService.triggerDataEvent(`${C0.ESC}]${ident};${toRgbString(colorRgb)}${C1ESCAPED.ST}`);\n break;\n case ColorRequestType.SET:\n if (acc === 'ansi') {\n this._themeService.modifyColors(colors => colors.ansi[req.index] = channels.toColor(...req.color));\n } else {\n const narrowedAcc = acc;\n this._themeService.modifyColors(colors => colors[narrowedAcc] = channels.toColor(...req.color));\n }\n break;\n case ColorRequestType.RESTORE:\n this._themeService.restoreColor(req.index);\n break;\n }\n }\n }\n\n /**\n * Reports the current color scheme (dark or light) based on the relative luminance\n * of the background and foreground theme colors.\n * Sends CSI ? 997 ; 1 n for dark mode or CSI ? 997 ; 2 n for light mode.\n */\n private _reportColorScheme(): void {\n if (!this._themeService) return;\n const bgLuminance = rgb.relativeLuminance(this._themeService.colors.background.rgba >> 8);\n const fgLuminance = rgb.relativeLuminance(this._themeService.colors.foreground.rgba >> 8);\n // Dark mode = background is darker than foreground (lower luminance)\n const colorSchemeMode = bgLuminance < fgLuminance ? 1 : 2;\n this.coreService.triggerDataEvent(`${C0.ESC}[?997;${colorSchemeMode}n`);\n }\n\n protected _setup(): void {\n super._setup();\n\n this._customKeyEventHandler = undefined;\n }\n\n /**\n * Convenience property to active buffer.\n */\n public get buffer(): IBuffer {\n return this.buffers.active;\n }\n\n /**\n * Focus the terminal. Delegates focus handling to the terminal's DOM element.\n */\n public focus(): void {\n if (this.textarea) {\n this.textarea.focus({ preventScroll: true });\n }\n }\n\n private _handleScreenReaderModeOptionChange(value: boolean): void {\n if (value) {\n if (!this._accessibilityManager.value && this._renderService) {\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n } else {\n this._accessibilityManager.clear();\n }\n }\n\n /**\n * Binds the desired focus behavior on a given terminal object.\n */\n private _handleTextAreaFocus(ev: FocusEvent): void {\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n }\n this.element!.classList.add('focus');\n this._showCursor();\n this._onFocus.fire();\n }\n\n /**\n * Blur the terminal, calling the blur function on the terminal's underlying\n * textarea.\n */\n public blur(): void {\n return this.textarea?.blur();\n }\n\n /**\n * Binds the desired blur behavior on a given terminal object.\n */\n private _handleTextAreaBlur(): void {\n // Text can safely be removed on blur. Doing it earlier could interfere with\n // screen readers reading it out.\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.blur();\n }\n this.textarea!.value = '';\n this.refresh(this.buffer.y, this.buffer.y);\n if (this.coreService.decPrivateModes.sendFocus) {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n this.element!.classList.remove('focus');\n this._onBlur.fire();\n }\n\n private _syncTextArea(): void {\n if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing || !this._renderService) {\n return;\n }\n const cursorY = this.buffer.ybase + this.buffer.y;\n const bufferLine = this.buffer.lines.get(cursorY);\n if (!bufferLine) {\n return;\n }\n const cursorX = Math.min(this.buffer.x, this.cols - 1);\n const cellHeight = this._renderService.dimensions.css.cell.height;\n const width = bufferLine.getWidth(cursorX);\n const cellWidth = this._renderService.dimensions.css.cell.width * width;\n const cursorTop = this.buffer.y * this._renderService.dimensions.css.cell.height;\n const cursorLeft = cursorX * this._renderService.dimensions.css.cell.width;\n\n // Sync the textarea to the exact position of the composition view so the IME knows where the\n // text is.\n this.textarea.style.left = cursorLeft + 'px';\n this.textarea.style.top = cursorTop + 'px';\n this.textarea.style.width = cellWidth + 'px';\n this.textarea.style.height = cellHeight + 'px';\n this.textarea.style.lineHeight = cellHeight + 'px';\n this.textarea.style.zIndex = '-5';\n }\n\n /**\n * Initialize default behavior\n */\n private _initGlobal(): void {\n this._bindKeys();\n\n // Bind clipboard functionality\n this._register(addDisposableListener(this.element!, 'copy', (event: ClipboardEvent) => {\n // If mouse events are active it means the selection manager is disabled and\n // copy should be handled by the host program.\n if (!this.hasSelection()) {\n return;\n }\n copyHandler(event, this._selectionService!);\n }));\n const pasteHandlerWrapper = (event: ClipboardEvent): void => handlePasteEvent(event, this.textarea!, this.coreService, this.optionsService);\n this._register(addDisposableListener(this.textarea!, 'paste', pasteHandlerWrapper));\n this._register(addDisposableListener(this.element!, 'paste', pasteHandlerWrapper));\n\n // Handle right click context menus\n if (Browser.isFirefox) {\n // Firefox doesn't appear to fire the contextmenu event on right click\n this._register(addDisposableListener(this.element!, 'mousedown', (event: MouseEvent) => {\n if (event.button === 2) {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }\n }));\n } else {\n this._register(addDisposableListener(this.element!, 'contextmenu', (event: MouseEvent) => {\n rightClickHandler(event, this.textarea!, this.screenElement!, this._selectionService!, this.options.rightClickSelectsWord);\n }));\n }\n\n // Move the textarea under the cursor when middle clicking on Linux to ensure\n // middle click to paste selection works. This only appears to work in Chrome\n // at the time is writing.\n if (Browser.isLinux) {\n // Use auxclick event over mousedown the latter doesn't seem to work. Note\n // that the regular click event doesn't fire for the middle mouse button.\n this._register(addDisposableListener(this.element!, 'auxclick', (event: MouseEvent) => {\n if (event.button === 1) {\n moveTextAreaUnderMouseCursor(event, this.textarea!, this.screenElement!);\n }\n }));\n }\n }\n\n /**\n * Apply key handling to the terminal\n */\n private _bindKeys(): void {\n this._register(addDisposableListener(this.textarea!, 'keyup', (ev: KeyboardEvent) => this._keyUp(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keydown', (ev: KeyboardEvent) => this._keyDown(ev), true));\n this._register(addDisposableListener(this.textarea!, 'keypress', (ev: KeyboardEvent) => this._keyPress(ev), true));\n this._register(addDisposableListener(this.textarea!, 'compositionstart', () => {\n // Ensure the textarea is synced to the latest cursor location before composition begins. This\n // is to workaround a problem where highly dynamic TUIs like agentic CLIs reprint agressively\n // would cause the IME to appear in the wrong position. The theory is that when the IME is\n // triggered during a partial render the textarea position becomes locked and will not move\n // until it is hidden and a custom move occurs.\n this._syncTextArea();\n this._compositionHelper!.compositionstart();\n this._compositionHelper!.updateCompositionElements();\n }));\n this._register(addDisposableListener(this.textarea!, 'compositionupdate', (e: CompositionEvent) => this._compositionHelper!.compositionupdate(e)));\n this._register(addDisposableListener(this.textarea!, 'compositionend', (e: CompositionEvent) => {\n if (this._compositionHelper instanceof CompositionHelper) {\n if (this._compositionHelper.compositionend(e)) {\n this.textarea!.dispatchEvent(new CustomEvent(\n 'xterm-composition-transaction-accepted',\n { bubbles: true }\n ));\n }\n } else {\n this._compositionHelper!.compositionend();\n }\n }));\n this._register(addDisposableListener(this.textarea!, 'input', (ev: InputEvent) => this._inputEvent(ev), true));\n this._register(this.onRender(() => this._compositionHelper!.updateCompositionElements()));\n }\n\n /**\n * Opens the terminal within an element.\n *\n * @param parent The element to create the terminal within.\n */\n public open(parent: HTMLElement): void {\n if (!parent) {\n throw new Error('Terminal requires a parent element.');\n }\n\n if (!parent.isConnected) {\n this._logService.debug('Terminal.open was called on an element that was not attached to the DOM');\n }\n\n // If the terminal is already opened\n if (this.element?.ownerDocument.defaultView && this._coreBrowserService) {\n // Adjust the window if needed\n if (this.element.ownerDocument.defaultView !== this._coreBrowserService.window) {\n this._coreBrowserService.window = this.element.ownerDocument.defaultView;\n }\n return;\n }\n\n this._document = parent.ownerDocument;\n if (this.options.documentOverride && this.options.documentOverride instanceof Document) {\n this._document = this.optionsService.rawOptions.documentOverride as Document;\n }\n\n // Create main element container\n this.element = this._document.createElement('div');\n this.element.dir = 'ltr'; // xterm.css assumes LTR\n this.element.classList.add('terminal');\n this.element.classList.add('xterm');\n this.element.classList.toggle('allow-transparency', this.options.allowTransparency);\n this._register(this.optionsService.onSpecificOptionChange('allowTransparency', value => this.element!.classList.toggle('allow-transparency', value)));\n parent.appendChild(this.element);\n\n // Performance: Use a document fragment to build the terminal\n // viewport and helper elements detached from the DOM\n const fragment = this._document.createDocumentFragment();\n this._viewportElement = this._document.createElement('div');\n this._viewportElement.classList.add('xterm-viewport');\n fragment.appendChild(this._viewportElement);\n\n this.screenElement = this._document.createElement('div');\n this.screenElement.classList.add('xterm-screen');\n this._register(addDisposableListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));\n // Create the container that will hold helpers like the textarea for\n // capturing DOM Events. Then produce the helpers.\n this._helperContainer = this._document.createElement('div');\n this._helperContainer.classList.add('xterm-helpers');\n this.screenElement.appendChild(this._helperContainer);\n fragment.appendChild(this.screenElement);\n\n const textarea = this.textarea = this._document.createElement('textarea');\n this.textarea.classList.add('xterm-helper-textarea');\n this.textarea.setAttribute('aria-label', Strings.promptLabel.get());\n if (!Browser.isChromeOS) {\n // ChromeVox on ChromeOS does not like this. See\n // https://issuetracker.google.com/issues/260170397\n this.textarea.setAttribute('aria-multiline', 'false');\n }\n this.textarea.setAttribute('autocomplete', 'off');\n this.textarea.setAttribute('autocorrect', 'off');\n this.textarea.setAttribute('autocapitalize', 'off');\n this.textarea.setAttribute('spellcheck', 'false');\n this.textarea.tabIndex = 0;\n this._register(this.optionsService.onSpecificOptionChange('disableStdin', () => textarea.readOnly = this.optionsService.rawOptions.disableStdin));\n this.textarea.readOnly = this.optionsService.rawOptions.disableStdin;\n\n // Register the core browser service before the generic textarea handlers are registered so it\n // handles them first. Otherwise the renderers may use the wrong focus state.\n this._coreBrowserService = this._register(this._instantiationService.createInstance(CoreBrowserService,\n this.textarea,\n parent.ownerDocument.defaultView ?? window,\n // Force unsafe null in node.js environment for tests\n this._document ?? ((typeof window !== 'undefined') ? window.document : null as any)\n ));\n this._instantiationService.setService(ICoreBrowserService, this._coreBrowserService);\n\n this._register(addDisposableListener(this.textarea, 'focus', (ev: FocusEvent) => this._handleTextAreaFocus(ev)));\n this._register(addDisposableListener(this.textarea, 'blur', () => this._handleTextAreaBlur()));\n this._helperContainer.appendChild(this.textarea);\n\n this._charSizeService = this._instantiationService.createInstance(CharSizeService, this._document, this._helperContainer);\n this._instantiationService.setService(ICharSizeService, this._charSizeService);\n\n this._themeService = this._instantiationService.createInstance(ThemeService);\n this._instantiationService.setService(IThemeService, this._themeService);\n\n // CSI ? 996 n - color scheme query (https://contour-terminal.org/vt-extensions/color-palette-update-notifications/)\n this._register(this._inputHandler.onRequestColorSchemeQuery(() => this._reportColorScheme()));\n\n // Emit unsolicited color scheme notification on theme change when DECSET 2031 is enabled\n this._register(this._themeService.onChangeColors(() => {\n if (this.coreService.decPrivateModes.colorSchemeUpdates) {\n this._reportColorScheme();\n }\n }));\n\n this._characterJoinerService = this._instantiationService.createInstance(CharacterJoinerService);\n this._instantiationService.setService(ICharacterJoinerService, this._characterJoinerService);\n\n this._renderService = this._register(this._instantiationService.createInstance(RenderService, this.rows, this.screenElement));\n this._instantiationService.setService(IRenderService, this._renderService);\n this._register(this._renderService.onRenderedViewportChange(e => this._onRender.fire(e)));\n this._register(this._renderService.onDimensionsChange(e => this._onDimensionsChange.fire({\n css: {\n canvas: { ...e.css.canvas },\n cell: { ...e.css.cell }\n },\n device: {\n canvas: { ...e.device.canvas },\n cell: { ...e.device.cell },\n char: { ...e.device.char }\n }\n })));\n this.onResize(e => this._renderService!.resize(e.cols, e.rows));\n\n this._compositionView = this._document.createElement('div');\n this._compositionView.classList.add('composition-view');\n this._compositionHelper = this._instantiationService.createInstance(CompositionHelper, this.textarea, this._compositionView);\n this._register(toDisposable(() => {\n if (this._compositionHelper instanceof CompositionHelper) {\n this._compositionHelper.dispose();\n }\n }));\n this._helperContainer.appendChild(this._compositionView);\n\n this._mouseCoordsService = this._instantiationService.createInstance(MouseCoordsService);\n this._instantiationService.setService(IMouseCoordsService, this._mouseCoordsService);\n\n const linkifier = this._linkifier.value = this._register(this._instantiationService.createInstance(Linkifier, this.screenElement));\n\n // Performance: Add viewport and helper elements from the fragment\n this.element.appendChild(fragment);\n\n try {\n this._onWillOpen.fire(this.element);\n } catch (e) {\n this._logService.error('onWillOpen handler threw an exception', e);\n }\n if (!this._renderService.hasRenderer()) {\n this._renderService.setRenderer(this._createRenderer());\n }\n\n this._register(this.onCursorMove(() => {\n this._renderService!.handleCursorMove();\n this._syncTextArea();\n }));\n this._register(this.onResize(() => {\n this._renderService!.handleResize(this.cols, this.rows);\n this._syncTextArea();\n }));\n this._register(this.onBlur(() => this._renderService!.handleBlur()));\n this._register(this.onFocus(() => this._renderService!.handleFocus()));\n\n this._viewport = this._register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));\n this._register(this._viewport.onRequestScrollLines(e => {\n super.scrollLines(e, false);\n this.refresh(0, this.rows - 1);\n }));\n\n this._selectionService = this._register(this._instantiationService.createInstance(SelectionService,\n this.element,\n this.screenElement,\n linkifier\n ));\n this._instantiationService.setService(ISelectionService, this._selectionService);\n this._mouseService = this._instantiationService.createInstance(MouseService);\n this._instantiationService.setService(IMouseService, this._mouseService);\n this._register(this._selectionService.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent)));\n this._register(this._selectionService.onSelectionChange(() => this._onSelectionChange.fire()));\n this._register(this._selectionService.onRequestRedraw(e => this._renderService!.handleSelectionChanged(e.start, e.end, e.columnSelectMode)));\n this._register(this._selectionService.onLinuxMouseSelection(text => {\n // If there's a new selection, put it into the textarea, focus and select it\n // in order to register it as a selection on the OS. This event is fired\n // only on Linux to enable middle click to paste selection.\n this.textarea!.value = text;\n this.textarea!.focus();\n this.textarea!.select();\n }));\n this._register(EventUtils.any(\n this._onScroll.event,\n this._inputHandler.onScroll\n )(() => {\n this._selectionService!.refresh();\n this._viewport?.queueSync();\n }));\n\n this._register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));\n this._register(addDisposableListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));\n\n // apply mouse event classes set by escape codes before terminal was attached\n if (this.mouseStateService.areMouseEventsActive && !this.options.mouseEventsRequireAlt) {\n this._selectionService.disable();\n this.element.classList.add(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n } else {\n this._selectionService.enable();\n this.element.classList.remove(MouseEventCssClasses.ENABLE_MOUSE_EVENTS);\n }\n\n if (this.options.screenReaderMode) {\n // Note that this must be done *after* the renderer is created in order to\n // ensure the correct order of the dprchange event\n this._accessibilityManager.value = this._instantiationService.createInstance(AccessibilityManager, this);\n }\n this._register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e)));\n\n const showScrollbar = this.options.scrollbar?.showScrollbar ?? true;\n const overviewRulerWidth = this.options.scrollbar?.width;\n if (showScrollbar && overviewRulerWidth) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n this.optionsService.onSpecificOptionChange('scrollbar', value => {\n const shouldShow = (value?.showScrollbar ?? true) && !!value?.width;\n if (!this._overviewRulerRenderer && shouldShow && this._viewportElement && this.screenElement) {\n this._overviewRulerRenderer = this._register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement));\n }\n });\n // Measure the character size\n this._charSizeService.measure();\n\n // Setup loop that draws to screen\n this.refresh(0, this.rows - 1);\n\n // Initialize global actions that need to be taken on the document.\n this._initGlobal();\n\n // Listen for mouse events and translate\n // them into terminal mouse protocols.\n this._mouseService.bindMouse({\n element: this.element!,\n screenElement: this.screenElement!,\n document: this._document!,\n handleTouchScroll: amount => this._viewport?.handleTouchScroll(amount)\n }, disposable => this._register(disposable), () => this.focus());\n }\n\n private _createRenderer(): IRenderer {\n return this._instantiationService.createInstance(DomRenderer, this, this._document!, this.element!, this.screenElement!, this._viewportElement!, this._helperContainer!, this.linkifier!);\n }\n\n /**\n * Tells the renderer to refresh terminal content between two rows (inclusive) at the next\n * opportunity.\n * @param start The row to start from (between 0 and this.rows - 1).\n * @param end The row to end at (between start and this.rows - 1).\n */\n public refresh(start: number, end: number, sync: boolean = false): void {\n this._renderService?.refreshRows(start, end, sync);\n }\n\n /**\n * Change the cursor style for different selection modes\n */\n public updateCursorStyle(ev: KeyboardEvent | MouseEvent): void {\n if (this._selectionService?.shouldColumnSelect(ev)) {\n this.element!.classList.add('column-select');\n } else {\n this.element!.classList.remove('column-select');\n }\n }\n\n /**\n * Display the cursor element\n */\n private _showCursor(): void {\n if (!this.coreService.isCursorInitialized) {\n this.coreService.isCursorInitialized = true;\n this.refresh(this.buffer.y, this.buffer.y);\n }\n }\n\n public scrollLines(disp: number, suppressScrollEvent?: boolean): void {\n // All scrollLines methods need to go via the viewport in order to support smooth scroll\n if (this._viewport) {\n this._viewport.scrollLines(disp);\n } else {\n super.scrollLines(disp, suppressScrollEvent);\n }\n this.refresh(0, this.rows - 1);\n }\n\n public scrollPages(pageCount: number): void {\n this.scrollLines(pageCount * (this.rows - 1));\n }\n\n public scrollToTop(): void {\n this.scrollLines(-this._bufferService.buffer.ydisp);\n }\n\n public scrollToBottom(disableSmoothScroll?: boolean): void {\n if (disableSmoothScroll && this._viewport) {\n this._viewport.scrollToLine(this.buffer.ybase, true);\n } else {\n this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);\n }\n }\n\n public scrollToLine(line: number): void {\n const scrollAmount = line - this._bufferService.buffer.ydisp;\n if (scrollAmount !== 0) {\n this.scrollLines(scrollAmount);\n }\n }\n\n public paste(data: string): void {\n paste(data, this.textarea!, this.coreService, this.optionsService);\n }\n\n public attachCustomKeyEventHandler(customKeyEventHandler: CustomKeyEventHandler): void {\n this._customKeyEventHandler = customKeyEventHandler;\n }\n\n public attachCustomWheelEventHandler(customWheelEventHandler: CustomWheelEventHandler): void {\n this.mouseStateService.setCustomWheelEventHandler(customWheelEventHandler);\n }\n\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._linkProviderService.registerLinkProvider(linkProvider);\n }\n\n public registerCharacterJoiner(handler: CharacterJoinerHandler): number {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n const joinerId = this._characterJoinerService.register(handler);\n this.refresh(0, this.rows - 1);\n return joinerId;\n }\n\n public deregisterCharacterJoiner(joinerId: number): void {\n if (!this._characterJoinerService) {\n throw new Error('Terminal must be opened first');\n }\n if (this._characterJoinerService.deregister(joinerId)) {\n this.refresh(0, this.rows - 1);\n }\n }\n\n public get markers(): IMarker[] {\n return this.buffer.markers;\n }\n\n public registerMarker(cursorYOffset: number): IMarker {\n return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);\n }\n\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n return this._decorationService.registerDecoration(decorationOptions);\n }\n\n /**\n * Gets whether the terminal has an active selection.\n */\n public hasSelection(): boolean {\n return this._selectionService ? this._selectionService.hasSelection : false;\n }\n\n /**\n * Selects text within the terminal.\n * @param column The column the selection starts at..\n * @param row The row the selection starts at.\n * @param length The length of the selection.\n */\n public select(column: number, row: number, length: number): void {\n this._selectionService!.setSelection(column, row, length);\n }\n\n /**\n * Gets the terminal's current selection, this is useful for implementing copy\n * behavior outside of xterm.js.\n */\n public getSelection(): string {\n return this._selectionService ? this._selectionService.selectionText : '';\n }\n\n public getSelectionPosition(): IBufferRange | undefined {\n if (!this._selectionService || !this._selectionService.hasSelection) {\n return undefined;\n }\n\n return {\n start: {\n x: this._selectionService.selectionStart![0],\n y: this._selectionService.selectionStart![1]\n },\n end: {\n x: this._selectionService.selectionEnd![0],\n y: this._selectionService.selectionEnd![1]\n }\n };\n }\n\n /**\n * Clears the current terminal selection.\n */\n public clearSelection(): void {\n this._selectionService?.clearSelection();\n }\n\n /**\n * Selects all text within the terminal.\n */\n public selectAll(): void {\n this._selectionService?.selectAll();\n }\n\n public selectLines(start: number, end: number): void {\n this._selectionService?.selectLines(start, end);\n }\n\n /**\n * Handle a keydown [KeyboardEvent].\n *\n * [KeyboardEvent]: https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n */\n protected _keyDown(event: KeyboardEvent): boolean | undefined {\n this._keyDownHandled = false;\n this._keyDownSeen = true;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {\n return false;\n }\n\n // Ignore composing with Alt key on Mac when macOptionIsMeta is enabled\n const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;\n\n if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {\n if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {\n this.scrollToBottom(true);\n }\n return false;\n }\n\n if (!shouldIgnoreComposition && (event.key === 'Dead' || event.key === 'AltGraph')) {\n this._unprocessedDeadKey = true;\n }\n\n const result = this._keyboardService.evaluateKeyDown(event);\n\n this.updateCursorStyle(event);\n\n if (result.type === KeyboardResultType.PAGE_DOWN || result.type === KeyboardResultType.PAGE_UP) {\n const scrollCount = this.rows - 1;\n this.scrollLines(result.type === KeyboardResultType.PAGE_UP ? -scrollCount : scrollCount);\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n if (result.type === KeyboardResultType.SELECT_ALL) {\n this.selectAll();\n }\n\n if (this._isThirdLevelShift(this.browser, event)) {\n return true;\n }\n\n if (result.cancel) {\n // The event is canceled at the end already, is this necessary?\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!result.key) {\n return true;\n }\n\n // HACK: Process A-Z in the keypress event to fix an issue with macOS IMEs where lower case\n // letters cannot be input while caps lock is on. Skip this hack when using kitty protocol\n // or Win32 input mode as they need to send proper sequences for all key events.\n if (!this._keyboardService.useKitty && !this._keyboardService.useWin32InputMode && event.key && !event.ctrlKey && !event.altKey && !event.metaKey && event.key.length === 1) {\n if (event.key.charCodeAt(0) >= 65 && event.key.charCodeAt(0) <= 90) {\n return true;\n }\n }\n\n if (this._unprocessedDeadKey) {\n this._unprocessedDeadKey = false;\n return true;\n }\n\n // If ctrl+c or enter is being sent, clear out the textarea. This is done so that screen readers\n // will announce deleted characters. This will not work 100% of the time but it should cover\n // most scenarios.\n if (result.key === C0.ETX || result.key === C0.CR) {\n this.textarea!.value = '';\n }\n\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(event);\n this._onKey.fire({ key: result.key, domEvent: event });\n this._showCursor();\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n\n // Cancel events when not in screen reader mode so events don't get bubbled up and handled by\n // other listeners. When screen reader mode is enabled, we don't cancel them (unless ctrl or alt\n // is also depressed) so that the cursor textarea can be updated, which triggers the screen\n // reader to read it.\n if (!this.optionsService.rawOptions.screenReaderMode || event.altKey || event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n\n this._keyDownHandled = true;\n }\n\n private _isThirdLevelShift(browser: IBrowser, ev: KeyboardEvent): boolean {\n const thirdLevelKey =\n (browser.isMac && !this.options.macOptionIsMeta && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.altKey && ev.ctrlKey && !ev.metaKey) ||\n (browser.isWindows && ev.getModifierState('AltGraph'));\n\n if (ev.type === 'keypress') {\n return thirdLevelKey;\n }\n\n // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)\n return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);\n }\n\n protected _keyUp(ev: KeyboardEvent): void {\n this._keyDownSeen = false;\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return;\n }\n\n if (!wasModifierKeyOnlyEvent(ev)) {\n this.focus();\n }\n\n // Handle key release for Kitty keyboard protocol\n const result = this._keyboardService.evaluateKeyUp(ev);\n if (result?.key) {\n const wasModifierOnly = this._keyboardService.useWin32InputMode && wasModifierKeyOnlyEvent(ev);\n this.coreService.triggerDataEvent(result.key, !wasModifierOnly);\n }\n\n this.updateCursorStyle(ev);\n this._keyPressHandled = false;\n }\n\n /**\n * Handle a keypress event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent\n * @param ev The keypress event to be handled.\n */\n protected _keyPress(ev: KeyboardEvent): boolean {\n let key;\n\n this._keyPressHandled = false;\n\n if (this._keyDownHandled) {\n return false;\n }\n\n if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {\n return false;\n }\n\n if (ev.charCode) {\n key = ev.charCode;\n } else if (ev.which === null || ev.which === undefined) {\n key = ev.keyCode;\n } else if (ev.which !== 0 && ev.charCode !== 0) {\n key = ev.which;\n } else {\n return false;\n }\n\n if (!key || (\n (ev.altKey || ev.ctrlKey || ev.metaKey) && !this._isThirdLevelShift(this.browser, ev)\n )) {\n return false;\n }\n\n key = String.fromCharCode(key);\n\n this._onKey.fire({ key, domEvent: ev });\n this._showCursor();\n if (!this._compositionHelper!.keypress?.(key)) {\n this.coreService.triggerDataEvent(key, true);\n }\n\n this._keyPressHandled = true;\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n return true;\n }\n\n /**\n * Handle an input event.\n * Key Resources:\n * - https://developer.mozilla.org/en-US/docs/Web/API/InputEvent\n * @param ev The input event to be handled.\n */\n protected _inputEvent(ev: InputEvent): boolean {\n if (\n ev.data &&\n ev.inputType === 'insertText' &&\n !this.optionsService.rawOptions.screenReaderMode &&\n this._compositionHelper instanceof CompositionHelper &&\n this._compositionHelper.input(ev.data)\n ) {\n return true;\n }\n // Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to\n // support reading out character input which can doubling up input characters\n // Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679\n if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {\n if (this._keyPressHandled) {\n return false;\n }\n\n // The key was handled so clear the dead key state, otherwise certain keystrokes like arrow\n // keys could be ignored\n this._unprocessedDeadKey = false;\n\n const text = ev.data;\n this.coreService.triggerDataEvent(text, true);\n return true;\n }\n\n return false;\n }\n\n /**\n * Resizes the terminal.\n *\n * @param x The number of columns to resize to.\n * @param y The number of rows to resize to.\n */\n public resize(x: number, y: number): void {\n if (x === this.cols && y === this.rows) {\n // Check if we still need to measure the char size (fixes #785).\n if (this._charSizeService && !this._charSizeService.hasValidSize) {\n this._charSizeService.measure();\n }\n return;\n }\n\n super.resize(x, y);\n }\n\n private _afterResize(x: number, y: number): void {\n this._charSizeService?.measure();\n }\n\n /**\n * Clear the entire buffer, making the prompt line the new first line.\n */\n public clear(): void {\n this.buffer.clearAllMarkers();\n this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);\n this.buffer.lines.length = 1;\n this.buffer.ydisp = 0;\n this.buffer.ybase = 0;\n this.buffer.y = 0;\n for (let i = 1; i < this.rows; i++) {\n this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA));\n }\n // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear\n // scroll event and that the viewport's state will be valid for immediate writes.\n this._onScroll.fire({ position: this.buffer.ydisp });\n this.refresh(0, this.rows - 1);\n }\n\n /**\n * Reset terminal.\n * Note: Calling this directly from JS is synchronous but does not clear\n * input buffers and does not reset the parser, thus the terminal will\n * continue to apply pending input data.\n * If you need in band reset (synchronous with input data) consider\n * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).\n */\n public reset(): void {\n /**\n * Since _setup handles a full terminal creation, we have to carry forward\n * a few things that should not reset.\n */\n this.options.rows = this.rows;\n this.options.cols = this.cols;\n const customKeyEventHandler = this._customKeyEventHandler;\n\n this._setup();\n super.reset();\n this._mouseService?.reset();\n this._selectionService?.reset();\n this._decorationService.reset();\n\n // reattach\n this._customKeyEventHandler = customKeyEventHandler;\n\n // do a full screen refresh\n this.refresh(0, this.rows - 1, true);\n }\n\n public clearTextureAtlas(): void {\n this._renderService?.clearTextureAtlas();\n }\n\n private _reportFocus(): void {\n if (this.element?.classList.contains('focus')) {\n this.coreService.triggerDataEvent(C0.ESC + '[I');\n } else {\n this.coreService.triggerDataEvent(C0.ESC + '[O');\n }\n }\n\n private _reportWindowsOptions(type: WindowsOptionsReportType): void {\n if (!this._renderService) {\n return;\n }\n\n switch (type) {\n case WindowsOptionsReportType.GET_WIN_SIZE_PIXELS:\n const canvasWidth = this._renderService.dimensions.css.canvas.width.toFixed(0);\n const canvasHeight = this._renderService.dimensions.css.canvas.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[4;${canvasHeight};${canvasWidth}t`);\n break;\n case WindowsOptionsReportType.GET_CELL_SIZE_PIXELS:\n const cellWidth = this._renderService.dimensions.css.cell.width.toFixed(0);\n const cellHeight = this._renderService.dimensions.css.cell.height.toFixed(0);\n this.coreService.triggerDataEvent(`${C0.ESC}[6;${cellHeight};${cellWidth}t`);\n break;\n }\n }\n\n}\n\n/**\n * Helpers\n */\n\nfunction wasModifierKeyOnlyEvent(ev: KeyboardEvent): boolean {\n return ev.keyCode === 16 || // Shift\n ev.keyCode === 17 || // Ctrl\n ev.keyCode === 18 || // Alt\n ev.keyCode === 91 || // Meta (Left)\n ev.keyCode === 92 || // Meta (Right)\n ev.keyCode === 93 || // Meta (Menu)\n ev.keyCode === 224 || // Meta (Firefox)\n ev.key === 'Meta';\n}\n", "/**\n * Copyright (c) 2019 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ITerminalAddon, IDisposable, Terminal } from '@xterm/xterm';\n\nexport interface ILoadedAddon {\n instance: ITerminalAddon;\n dispose: () => void;\n isDisposed: boolean;\n}\n\nexport class AddonManager implements IDisposable {\n protected _addons: ILoadedAddon[] = [];\n\n public dispose(): void {\n for (let i = this._addons.length - 1; i >= 0; i--) {\n this._addons[i].instance.dispose();\n }\n }\n\n public loadAddon(terminal: Terminal, instance: ITerminalAddon): void {\n const loadedAddon: ILoadedAddon = {\n instance,\n dispose: instance.dispose,\n isDisposed: false\n };\n this._addons.push(loadedAddon);\n instance.dispose = () => this._wrappedAddonDispose(loadedAddon);\n instance.activate(terminal as any);\n }\n\n private _wrappedAddonDispose(loadedAddon: ILoadedAddon): void {\n if (loadedAddon.isDisposed) {\n // Do nothing if already disposed\n return;\n }\n let index = -1;\n for (let i = 0; i < this._addons.length; i++) {\n if (this._addons[i] === loadedAddon) {\n index = i;\n break;\n }\n }\n if (index === -1) {\n throw new Error('Could not dispose an addon that has not been loaded');\n }\n loadedAddon.isDisposed = true;\n loadedAddon.dispose.apply(loadedAddon.instance);\n this._addons.splice(index, 1);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { CellData } from '../buffer/CellData';\nimport { IBufferLine, ICellData } from '../buffer/Types';\nimport { IBufferCell as IBufferCellApi, IBufferLine as IBufferLineApi } from '@xterm/xterm';\n\nexport class BufferLineApiView implements IBufferLineApi {\n constructor(private _line: IBufferLine) { }\n\n public get isWrapped(): boolean { return this._line.isWrapped; }\n public get length(): number { return this._line.length; }\n public getCell(x: number, cell?: IBufferCellApi): IBufferCellApi | undefined {\n if (x < 0 || x >= this._line.length) {\n return undefined;\n }\n\n if (cell) {\n this._line.loadCell(x, cell as unknown as ICellData);\n return cell;\n }\n return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;\n }\n public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {\n return this._line.translateToString(trimRight, startColumn, endColumn);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi } from '@xterm/xterm';\nimport { IBuffer } from '../buffer/Types';\nimport { BufferLineApiView } from './BufferLineApiView';\nimport { CellData } from '../buffer/CellData';\n\nexport class BufferApiView implements IBufferApi {\n constructor(\n private _buffer: IBuffer,\n public readonly type: 'normal' | 'alternate'\n ) { }\n\n public init(buffer: IBuffer): BufferApiView {\n this._buffer = buffer;\n return this;\n }\n\n public get cursorY(): number { return this._buffer.y; }\n public get cursorX(): number { return this._buffer.x; }\n public get viewportY(): number { return this._buffer.ydisp; }\n public get baseY(): number { return this._buffer.ybase; }\n public get length(): number { return this._buffer.lines.length; }\n public getLine(y: number): IBufferLineApi | undefined {\n const line = this._buffer.lines.get(y);\n if (!line) {\n return undefined;\n }\n return new BufferLineApiView(line);\n }\n public getNullCell(): IBufferCellApi { return new CellData(); }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';\nimport { BufferApiView } from './BufferApiView';\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { Disposable } from '../Lifecycle';\nimport { Emitter } from '../Event';\n\nexport class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {\n private _normal: BufferApiView;\n private _alternate: BufferApiView;\n\n private readonly _onBufferChange = this._register(new Emitter());\n public readonly onBufferChange = this._onBufferChange.event;\n\n constructor(private _core: ICoreTerminal) {\n super();\n this._normal = new BufferApiView(this._core.buffers.normal, 'normal');\n this._alternate = new BufferApiView(this._core.buffers.alt, 'alternate');\n this._register(this._core.buffers.onBufferActivate(() => this._onBufferChange.fire(this.active)));\n }\n public get active(): IBufferApi {\n if (this._core.buffers.active === this._core.buffers.normal) { return this.normal; }\n if (this._core.buffers.active === this._core.buffers.alt) { return this.alternate; }\n throw new Error('Active buffer is neither normal nor alternate');\n }\n public get normal(): IBufferApi {\n return this._normal.init(this._core.buffers.normal);\n }\n public get alternate(): IBufferApi {\n return this._alternate.init(this._core.buffers.alt);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IParams } from '../parser/Types';\nimport { IDisposable, IFunctionIdentifier, IParser } from '@xterm/xterm';\nimport { ICoreTerminal } from '../CoreTerminal';\n\nexport class ParserApi implements IParser {\n constructor(private _core: ICoreTerminal) { }\n\n public registerCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerCsiHandler(id, (params: IParams) => callback(params.toArray()));\n }\n public addCsiHandler(id: IFunctionIdentifier, callback: (params: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerCsiHandler(id, callback);\n }\n public registerDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this._core.registerDcsHandler(id, (data: string, params: IParams) => callback(data, params.toArray()));\n }\n public addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: (number | number[])[]) => boolean | Promise): IDisposable {\n return this.registerDcsHandler(id, callback);\n }\n public registerEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this._core.registerEscHandler(id, handler);\n }\n public addEscHandler(id: IFunctionIdentifier, handler: () => boolean | Promise): IDisposable {\n return this.registerEscHandler(id, handler);\n }\n public registerOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerOscHandler(ident, callback);\n }\n public addOscHandler(ident: number, callback: (data: string) => boolean | Promise): IDisposable {\n return this.registerOscHandler(ident, callback);\n }\n public registerApcHandler(id: IFunctionIdentifier, callback: (data: string) => boolean | Promise): IDisposable {\n return this._core.registerApcHandler(id, callback);\n }\n}\n", "/**\n * Copyright (c) 2021 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ICoreTerminal } from '../CoreTerminal';\nimport { IUnicodeHandling, IUnicodeVersionProvider } from '@xterm/xterm';\n\nexport class UnicodeApi implements IUnicodeHandling {\n constructor(private _core: ICoreTerminal) { }\n\n public register(provider: IUnicodeVersionProvider): void {\n this._core.unicodeService.register(provider);\n }\n\n public get versions(): string[] {\n return this._core.unicodeService.versions;\n }\n\n public get activeVersion(): string {\n return this._core.unicodeService.activeVersion;\n }\n\n public set activeVersion(version: string) {\n this._core.unicodeService.activeVersion = version;\n }\n}\n", "/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport * as Strings from '../LocalizableStrings';\nimport { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';\nimport { IBufferRange, ITerminal } from '../Types';\nimport { Disposable } from '../../common/Lifecycle';\nimport { ITerminalOptions } from '../../common/Types';\nimport { AddonManager } from '../../common/public/AddonManager';\nimport { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';\nimport { ParserApi } from '../../common/public/ParserApi';\nimport { UnicodeApi } from '../../common/public/UnicodeApi';\nimport { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';\nimport type { IEvent } from '../../common/Event';\n\n/**\n * The set of options that only have an effect when set in the Terminal constructor.\n */\nconst CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows'];\n\nlet $value = 0;\n\nexport class Terminal extends Disposable implements ITerminalApi {\n private _core: ITerminal;\n private _addonManager: AddonManager;\n private _parser: IParser | undefined;\n private _buffer: BufferNamespaceApi | undefined;\n private _publicOptions: Required;\n\n constructor(options?: ITerminalOptions & ITerminalInitOnlyOptions) {\n super();\n\n this._core = this._register(new TerminalCore(options));\n this._addonManager = this._register(new AddonManager());\n\n this._publicOptions = { ... this._core.options };\n const getter = (propName: string): any => {\n return this._core.options[propName];\n };\n const setter = (propName: string, value: any): void => {\n this._checkReadonlyOptions(propName);\n this._core.options[propName] = value;\n };\n\n for (const propName in this._core.options) {\n const desc = {\n get: getter.bind(this, propName),\n set: setter.bind(this, propName)\n };\n Object.defineProperty(this._publicOptions, propName, desc);\n }\n }\n\n private _checkReadonlyOptions(propName: string): void {\n // Throw an error if any constructor only option is modified\n // from terminal.options\n // Modifications from anywhere else are allowed\n if (CONSTRUCTOR_ONLY_OPTIONS.includes(propName)) {\n throw new Error(`Option \"${propName}\" can only be set in the constructor`);\n }\n }\n\n private _checkProposedApi(): void {\n if (!this._core.optionsService.rawOptions.allowProposedApi) {\n throw new Error('You must set the allowProposedApi option to true to use proposed API');\n }\n }\n\n public get onBell(): IEvent { return this._core.onBell; }\n public get onBinary(): IEvent { return this._core.onBinary; }\n public get onCursorMove(): IEvent { return this._core.onCursorMove; }\n public get onData(): IEvent { return this._core.onData; }\n public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }\n public get onLineFeed(): IEvent { return this._core.onLineFeed; }\n public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }\n public get onResize(): IEvent<{ cols: number, rows: number }> { return this._core.onResize; }\n public get onScroll(): IEvent { return this._core.onScroll; }\n public get onSelectionChange(): IEvent { return this._core.onSelectionChange; }\n public get onTitleChange(): IEvent { return this._core.onTitleChange; }\n public get onWriteParsed(): IEvent { return this._core.onWriteParsed; }\n public get onDimensionsChange(): IEvent { return this._core.onDimensionsChange; }\n\n public get element(): HTMLElement | undefined { return this._core.element; }\n public get screenElement(): HTMLElement | undefined { return this._core.screenElement; }\n public get parser(): IParser {\n return this._parser ??= new ParserApi(this._core);\n }\n public get unicode(): IUnicodeHandling {\n this._checkProposedApi();\n return new UnicodeApi(this._core);\n }\n public get textarea(): HTMLTextAreaElement | undefined { return this._core.textarea; }\n public get rows(): number { return this._core.rows; }\n public get cols(): number { return this._core.cols; }\n public get buffer(): IBufferNamespaceApi {\n return this._buffer ??= this._register(new BufferNamespaceApi(this._core));\n }\n public get markers(): ReadonlyArray {\n return this._core.markers;\n }\n public get modes(): IModes {\n const m = this._core.coreService.decPrivateModes;\n let mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any' = 'none';\n switch (this._core.mouseStateService.activeProtocol) {\n case 'X10': mouseTrackingMode = 'x10'; break;\n case 'VT200': mouseTrackingMode = 'vt200'; break;\n case 'DRAG': mouseTrackingMode = 'drag'; break;\n case 'ANY': mouseTrackingMode = 'any'; break;\n }\n return {\n applicationCursorKeysMode: m.applicationCursorKeys,\n applicationKeypadMode: m.applicationKeypad,\n bracketedPasteMode: m.bracketedPasteMode,\n insertMode: this._core.coreService.modes.insertMode,\n mouseTrackingMode: mouseTrackingMode,\n originMode: m.origin,\n reverseWraparoundMode: m.reverseWraparound,\n sendFocusMode: m.sendFocus,\n showCursor: !this._core.coreService.isCursorHidden,\n synchronizedOutputMode: m.synchronizedOutput,\n win32InputMode: m.win32InputMode,\n wraparoundMode: m.wraparound\n };\n }\n public get dimensions(): IRenderDimensions | undefined {\n return this._core.dimensions;\n }\n public get options(): Required {\n return this._publicOptions;\n }\n public set options(options: ITerminalOptions) {\n for (const propName in options) {\n this._publicOptions[propName] = options[propName];\n }\n }\n public blur(): void {\n this._core.blur();\n }\n public focus(): void {\n this._core.focus();\n }\n public input(data: string, wasUserInput: boolean = true): void {\n this._core.input(data, wasUserInput);\n }\n public resize(columns: number, rows: number): void {\n this._verifyIntegers(columns, rows);\n this._core.resize(columns, rows);\n }\n public open(parent: HTMLElement): void {\n this._core.open(parent);\n }\n public attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {\n this._core.attachCustomKeyEventHandler(customKeyEventHandler);\n }\n public attachCustomWheelEventHandler(customWheelEventHandler: (event: WheelEvent) => boolean): void {\n this._core.attachCustomWheelEventHandler(customWheelEventHandler);\n }\n public registerLinkProvider(linkProvider: ILinkProvider): IDisposable {\n return this._core.registerLinkProvider(linkProvider);\n }\n public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {\n return this._core.registerCharacterJoiner(handler);\n }\n public deregisterCharacterJoiner(joinerId: number): void {\n this._core.deregisterCharacterJoiner(joinerId);\n }\n public registerMarker(cursorYOffset: number = 0): IMarker {\n this._verifyIntegers(cursorYOffset);\n return this._core.registerMarker(cursorYOffset);\n }\n public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined {\n this._verifyPositiveIntegers(decorationOptions.x ?? 0, decorationOptions.width ?? 0, decorationOptions.height ?? 0);\n return this._core.registerDecoration(decorationOptions);\n }\n public hasSelection(): boolean {\n return this._core.hasSelection();\n }\n public select(column: number, row: number, length: number): void {\n this._verifyIntegers(column, row, length);\n this._core.select(column, row, length);\n }\n public getSelection(): string {\n return this._core.getSelection();\n }\n public getSelectionPosition(): IBufferRange | undefined {\n return this._core.getSelectionPosition();\n }\n public clearSelection(): void {\n this._core.clearSelection();\n }\n public selectAll(): void {\n this._core.selectAll();\n }\n public selectLines(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.selectLines(start, end);\n }\n public dispose(): void {\n super.dispose();\n }\n public scrollLines(amount: number): void {\n this._verifyIntegers(amount);\n this._core.scrollLines(amount);\n }\n public scrollPages(pageCount: number): void {\n this._verifyIntegers(pageCount);\n this._core.scrollPages(pageCount);\n }\n public scrollToTop(): void {\n this._core.scrollToTop();\n }\n public scrollToBottom(): void {\n this._core.scrollToBottom();\n }\n public scrollToLine(line: number): void {\n this._verifyIntegers(line);\n this._core.scrollToLine(line);\n }\n public clear(): void {\n this._core.clear();\n }\n public write(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data, callback);\n }\n public writeln(data: string | Uint8Array, callback?: () => void): void {\n this._core.write(data);\n this._core.write('\\r\\n', callback);\n }\n public paste(data: string): void {\n this._core.paste(data);\n }\n public refresh(start: number, end: number): void {\n this._verifyIntegers(start, end);\n this._core.refresh(start, end);\n }\n public reset(): void {\n this._core.reset();\n }\n public clearTextureAtlas(): void {\n this._core.clearTextureAtlas();\n }\n public loadAddon(addon: ITerminalAddon): void {\n this._addonManager.loadAddon(this, addon);\n }\n public static get strings(): ILocalizableStrings {\n // A wrapper is required here because esbuild prevents setting an `export let`\n return {\n get promptLabel(): string { return Strings.promptLabel.get(); },\n set promptLabel(value: string) { Strings.promptLabel.set(value); },\n get tooMuchOutput(): string { return Strings.tooMuchOutput.get(); },\n set tooMuchOutput(value: string) { Strings.tooMuchOutput.set(value); }\n };\n }\n\n private _verifyIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value === Infinity || isNaN($value) || $value % 1 !== 0) {\n throw new Error('This API only accepts integers');\n }\n }\n }\n\n private _verifyPositiveIntegers(...values: number[]): void {\n for ($value of values) {\n if ($value && ($value === Infinity || isNaN($value) || $value % 1 !== 0 || $value < 0)) {\n throw new Error('This API only accepts positive integers');\n }\n }\n }\n}\n"], ++ "mappings": "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IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EACnD,CAAC,KAAQ,IAAM,EAAG,CAAC,KAAQ,IAAM,EAAG,CAAC,MAAQ,KAAM,EACnD,CAAC,MAAQ,KAAM,EAAG,CAAC,MAAQ,KAAM,EAAG,CAAC,MAAQ,KAAM,EACnD,CAAC,MAAQ,KAAM,EAAG,CAAC,MAAQ,KAAM,EAAG,CAAC,MAAQ,KAAM,EACnD,CAAC,MAAQ,KAAM,EAAG,CAAC,MAAQ,K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", + "names": ["promptLabelInternal", "promptLabel", "value", "tooMuchOutputInternal", "tooMuchOutput", "prepareTextForTerminal", "text", "bracketTextForPaste", "bracketedPasteMode", "copyHandler", "ev", "selectionService", "handlePasteEvent", "textarea", "coreService", "optionsService", "paste", "moveTextAreaUnderMouseCursor", "screenElement", "pos", "left", "top", "rightClickHandler", "shouldSelectWord", "stringFromCodePoint", "codePoint", "utf32ToString", "data", "start", "end", "result", "i", "codepoint", "StringToUtf32", "input", "target", "length", "size", "startPos", "second", "code", "Utf8ToUtf32", "byte1", "byte2", "byte3", "byte4", "discardInterim", "cp", "pos", "tmp", "type", "missing", "fourStop", "AttributeData", "_AttributeData", "ExtendedAttrs", "value", "newObj", "_ExtendedAttrs", "ext", "urlId", "val", "CellData", "_CellData", "AttributeData", "ExtendedAttrs", "value", "obj", "stringFromCodePoint", "combined", "code", "second", "other", "thisDefault", "otherDefault", "serviceRegistry", "getServiceDependencies", "ctor", "createDecorator", "id", "decorator", "target", "key", "index", "storeServiceDependency", "IBufferService", "createDecorator", "IMouseStateService", "ICoreService", "ICharsetService", "IInstantiationService", "ILogService", "createDecorator", "IOptionsService", "IOscLinkService", "IUnicodeService", "IDecorationService", "OscLinkProvider", "_bufferService", "_optionsService", "_oscLinkService", "CellData", "y", "callback", "line", "result", "linkHandler", "cell", "lineLength", "currentLinkId", "currentStart", "finishLink", "x", "text", "endX", "range", "ignoreLink", "parsed", "e", "defaultActivate", "startX", "linkId", "startY", "finalStartX", "endY", "finalEndX", "previousLine", "previousLineLength", "previousStartX", "currentLine", "currentLineLength", "nextLine", "nextLineLength", "nextEndX", "__decorateClass", "__decorateParam", "IBufferService", "IOptionsService", "IOscLinkService", "uri", "newWindow", "ICharSizeService", "createDecorator", "ICoreBrowserService", "IMouseCoordsService", "IMouseService", "IRenderService", "ISelectionService", "ICharacterJoinerService", "IThemeService", "ILinkProviderService", "IKeyboardService", "toDisposable", "fn", "dispose", "arg", "d", "DisposableStore", "o", "d", "Disposable", "MutableDisposable", "value", "TimeoutTimer", "runner", "timeout", "MicrotaskTimer", "IntervalTimer", "interval", "context", "handle", "getWindow", "e", "candidateNode", "candidateEvent", "DomListener", "node", "type", "handler", "options", "addDisposableListener", "useCaptureOrOptions", "addStandardDisposableListener", "useCapture", "eventType", "getDomNodePagePosition", "domNode", "bb", "win", "AnimationFrameQueueItem", "_runner", "priority", "a", "b", "animationFrameState", "getAnimationFrameState", "targetWindow", "state", "animationFrameRunner", "scheduleAtNextAnimationFrame", "runner", "item", "WindowIntervalTimer", "IntervalTimer", "interval", "FastDomNode", "domNode", "_width", "width", "numberAsPixels", "_height", "height", "_top", "top", "_left", "left", "_bottom", "bottom", "_right", "right", "className", "shouldHaveIt", "position", "layerHint", "contain", "name", "value", "Platform_exports", "__export", "getSafariVersion", "getZoomFactor", "isChrome", "isChromeOS", "isFirefox", "isLegacyEdge", "isLinux", "isMac", "isNode", "isSafari", "isWindows", "userAgent", "platform", "_targetWindow", "majorVersion", "sameOriginWindowChainCache", "getParentWindowIfSameOrigin", "w", "location", "parentLocation", "IframeUtils", "targetWindow", "windowChainCache", "parent", "childWindow", "ancestorWindow", "top", "left", "windowChain", "windowChainEl", "windowInChain", "boundingRect", "StandardMouseEvent", "iframeOffsets", "StandardWheelEvent", "e", "deltaX", "deltaY", "shouldFactorDPR", "isChrome", "chromeVersionMatch", "e1", "e2", "devicePixelRatio", "ev", "isFirefox", "isMac", "isSafari", "isWindows", "GlobalPointerMoveMonitor", "DisposableStore", "invokeStopCallback", "onStopCallback", "initialElement", "pointerId", "initialButtons", "pointerMoveCallback", "eventSource", "toDisposable", "getWindow", "addDisposableListener", "eventType", "e", "Widget", "Disposable", "domNode", "listener", "addDisposableListener", "eventType", "e", "StandardMouseEvent", "getWindow", "ScrollbarArrow", "Widget", "opts", "arrowSize", "GlobalPointerMoveMonitor", "addStandardDisposableListener", "eventType", "e", "WindowIntervalTimer", "TimeoutTimer", "scheduleRepeater", "getWindow", "pointerMoveData", "Emitter", "listener", "thisArgs", "disposables", "toDisposable", "entry", "result", "idx", "event", "listeners", "i", "len", "EventUtils", "forward", "from", "to", "e", "map", "any", "events", "store", "DisposableStore", "runAndSubscribe", "handler", "initial", "ScrollState", "_ScrollState", "_forceIntegerValues", "width", "scrollWidth", "scrollLeft", "height", "scrollHeight", "scrollTop", "other", "update", "useRawScrollPositions", "previous", "inSmoothScrolling", "widthChanged", "scrollWidthChanged", "scrollLeftChanged", "heightChanged", "scrollHeightChanged", "scrollTopChanged", "Scrollable", "Disposable", "options", "Emitter", "smoothScrollDuration", "scrollPosition", "dimensions", "newState", "reuseAnimation", "validTarget", "newSmoothScrolling", "SmoothScrollingOperation", "oldState", "SmoothScrollingUpdate", "isDone", "createEaseOutCubic", "from", "to", "delta", "completion", "easeOutCubic", "createComposed", "a", "b", "cut", "_SmoothScrollingOperation", "startTime", "duration", "viewportSize", "stop1", "stop2", "state", "now", "newScrollLeft", "newScrollTop", "easeInCubic", "t", "ScrollbarVisibilityController", "Disposable", "visibility", "visibleClassName", "invisibleClassName", "TimeoutTimer", "rawShouldBeVisible", "shouldBeVisible", "isNeeded", "domNode", "withFadeAway", "POINTER_DRAG_RESET_DISTANCE", "AbstractScrollbar", "Widget", "opts", "ScrollbarVisibilityController", "GlobalPointerMoveMonitor", "FastDomNode", "addDisposableListener", "eventType", "arrow", "ScrollbarArrow", "top", "left", "width", "height", "e", "visibleSize", "elementScrollSize", "elementScrollPosition", "domTop", "sliderStart", "sliderStop", "pointerPos", "offsetX", "offsetY", "domNodePosition", "getDomNodePagePosition", "offset", "initialPointerPosition", "initialPointerOrthogonalPosition", "initialScrollbarState", "pointerMoveData", "pointerOrthogonalPosition", "pointerOrthogonalDelta", "isWindows", "pointerDelta", "_desiredScrollPosition", "desiredScrollPosition", "scrollbarSize", "ScrollbarState", "_ScrollbarState", "arrowSize", "scrollbarSize", "oppositeScrollbarSize", "visibleSize", "scrollSize", "scrollPosition", "iVisibleSize", "iScrollSize", "iScrollPosition", "iArrowSize", "computedAvailableSize", "computedRepresentableSize", "computedIsNeeded", "computedSliderSize", "computedSliderRatio", "computedSliderPosition", "r", "offset", "desiredSliderPosition", "correctedOffset", "desiredScrollPosition", "delta", "HorizontalScrollbar", "AbstractScrollbar", "scrollable", "options", "host", "scrollDimensions", "scrollPosition", "ScrollbarState", "sliderSize", "sliderPosition", "largeSize", "smallSize", "e", "offsetX", "offsetY", "size", "target", "VerticalScrollbar", "AbstractScrollbar", "scrollable", "options", "host", "scrollDimensions", "scrollPosition", "hasArrows", "ScrollbarState", "sliderSize", "sliderPosition", "largeSize", "smallSize", "offsetX", "offsetY", "size", "target", "delta", "currentPosition", "showArrows", "display", "arrow", "arrowSize", "MouseWheelClassifierItem", "timestamp", "deltaX", "deltaY", "_MouseWheelClassifier", "remainingInfluence", "score", "iteration", "index", "influence", "e", "isChrome", "targetWindow", "getWindow", "pageZoomFactor", "getZoomFactor", "previousItem", "item", "absDeltaX", "absDeltaY", "absPreviousDeltaX", "absPreviousDeltaY", "minDeltaX", "minDeltaY", "maxDeltaX", "maxDeltaY", "value", "MouseWheelClassifier", "SmoothScrollableElement", "Widget", "element", "options", "scrollable", "Emitter", "resolvedScrollable", "ownsScrollable", "Scrollable", "callback", "scheduleAtNextAnimationFrame", "resolveOptions", "scrollbarHost", "mouseWheelEvent", "VerticalScrollbar", "HorizontalScrollbar", "FastDomNode", "TimeoutTimer", "dispose", "dimensions", "update", "newClassName", "isMac", "newOptions", "browserEvent", "StandardWheelEvent", "shouldListen", "onMouseWheel", "addDisposableListener", "eventType", "classifier", "didScroll", "shiftConvert", "futureScrollPosition", "desiredScrollPosition", "deltaScrollTop", "desiredScrollTop", "deltaScrollLeft", "desiredScrollLeft", "consumeMouseWheel", "scrollState", "enableTop", "enableLeft", "leftClassName", "topClassName", "topLeftClassName", "opts", "result", "Viewport", "Disposable", "element", "screenElement", "_bufferService", "coreBrowserService", "_coreService", "mouseStateService", "themeService", "_optionsService", "_renderService", "Emitter", "scrollable", "Scrollable", "cb", "scheduleAtNextAnimationFrame", "SmoothScrollableElement", "type", "EventUtils", "toDisposable", "e", "disp", "pos", "line", "disableSmoothScroll", "showScrollbar", "showArrows", "verticalScrollbarSize", "ydisp", "newRow", "diff", "translationY", "__decorateClass", "__decorateParam", "IBufferService", "ICoreBrowserService", "ICoreService", "IMouseStateService", "IThemeService", "IOptionsService", "IRenderService", "BufferDecorationRenderer", "Disposable", "_screenElement", "_bufferService", "_coreBrowserService", "_decorationService", "_renderService", "decoration", "toDisposable", "element", "x", "line", "__decorateClass", "__decorateParam", "IBufferService", "ICoreBrowserService", "IDecorationService", "IRenderService", "ColorZoneStore", "decoration", "z", "padding", "zone", "line", "position", "drawHeight", "drawWidth", "drawX", "OverviewRulerRenderer", "Disposable", "_viewportElement", "_screenElement", "_bufferService", "_decorationService", "_renderService", "_optionsService", "_themeService", "_coreBrowserService", "ColorZoneStore", "toDisposable", "ctx", "scrollbar", "outerWidth", "innerWidth", "pixelsPerLine", "nonFullHeight", "cssCanvasHeight", "deviceCanvasHeight", "decoration", "zones", "zone", "updateCanvasDimensions", "updateAnchor", "__decorateClass", "__decorateParam", "IBufferService", "IDecorationService", "IRenderService", "IOptionsService", "IThemeService", "ICoreBrowserService", "throwIfFalsy", "value", "isPowerlineGlyph", "codepoint", "isBoxOrBlockGlyph", "codepoint", "treatGlyphAsBackgroundColor", "codepoint", "isPowerlineGlyph", "isBoxOrBlockGlyph", "createRenderDimensions", "createDimension", "WidthCache", "canvasFactory", "WidthCacheFontVariantCanvas", "font", "fontSize", "weight", "weightBold", "c", "bold", "italic", "cp", "width", "key", "variant", "throwIfFalsy", "fontFamily", "fontWeight", "fontStyle", "$r", "$g", "$b", "$a", "NULL_COLOR", "channels", "toCss", "g", "b", "toPaddedHex", "toRgba", "toColor", "color", "blend", "bg", "fg", "fgR", "fgG", "fgB", "bgR", "bgG", "bgB", "css", "rgba", "isOpaque", "ensureContrastRatio", "ratio", "result", "opaque", "rgbaColor", "opacity", "multiplyOpacity", "factor", "toColorRGB", "$ctx", "$litmusColor", "canvas", "ctx", "rgbaMatch", "rgb", "relativeLuminance", "relativeLuminance2", "r", "rs", "gs", "bs", "rr", "rg", "rb", "bgRgba", "fgRgba", "bgL", "fgL", "contrastRatio", "resultA", "reduceLuminance", "resultARatio", "resultB", "increaseLuminance", "resultBRatio", "cr", "toChannels", "value", "c", "s", "l1", "l2", "XTERM_COMPOSITION_SESSION_START_EVENT", "XTERM_COMPOSITION_SESSION_END_EVENT", "XTERM_COMPOSITION_TRANSACTION_ACCEPTED_EVENT", "CompositionHelper", "_textarea", "_compositionView", "_bufferService", "_optionsService", "_coreService", "_renderService", "_themeService", "_unicodeService", "start", "end", "ev", "transactionId", "pending", "endData", "timer", "text", "repeatsPendingTextareaInput", "waitForPropagation", "wasComposing", "input", "includeFollowingInput", "textareaInput", "observedInput", "candidate", "observed", "findShortestOrder", "candidateFirstOverlap", "observedFirstOverlap", "overlap", "value", "suffixEnd", "compositionLength", "observedEnd", "suffix", "valueEnd", "dataAlreadySent", "settlesPending", "dispatchSessionEnd", "prevented", "event", "hadPreedit", "callback", "oldValue", "newValue", "diff", "data", "doc", "preedit", "caret", "remainder", "buffer", "line", "width", "cellHeight", "colors", "cursor", "color", "background", "dontRecurse", "rowRemainder", "cursorX", "cursorTop", "cursorLeft", "CompositionPreeditRenderer", "maxWidth", "anchorBounds", "anchorLeft", "showsRemainder", "__decorateClass", "__decorateParam", "IBufferService", "IOptionsService", "ICoreService", "IRenderService", "IThemeService", "IUnicodeService", "CJK", "NATIVE", "MAX_PREEDIT_LAYOUT_WORK", "Disposable", "refresh", "addDisposableListener", "style", "font", "widths", "nodes", "spacing", "work", "emit", "span", "segment", "index", "nextSpacing", "columns", "WidthCacheFontVariantCanvas", "JoinedCellData", "AttributeData", "firstCell", "chars", "width", "value", "CharacterJoinerService", "_bufferService", "CellData", "handler", "joiner", "joinerId", "i", "row", "line", "ranges", "lineStr", "trimmedLength", "rangeStartColumn", "currentStringIndex", "rangeStartStringIndex", "rangeAttrFG", "rangeAttrBG", "x", "joinedRanges", "startIndex", "endIndex", "lineData", "startCol", "text", "allJoinedRanges", "error", "joinerRanges", "j", "currentRangeIndex", "currentRangeStarted", "currentRange", "length", "newRange", "inRange", "range", "__decorateClass", "__decorateParam", "IBufferService", "DomRendererRowFactory", "_document", "_characterJoinerService", "_optionsService", "_coreBrowserService", "_coreService", "_decorationService", "_themeService", "CellData", "start", "end", "columnSelectMode", "lineData", "row", "isCursorRow", "cursorStyle", "cursorInactiveStyle", "cursorX", "cursorBlink", "blinkOn", "cellWidth", "widthCache", "linkStart", "linkEnd", "rowInfo", "elements", "joinedRanges", "colors", "lineLength", "charElement", "cellAmount", "text", "i", "oldBg", "oldFg", "oldExt", "oldLinkHover", "oldSpacing", "oldIsInSelection", "spacing", "skipJoinedCheckUntilX", "classes", "hasHover", "x", "width", "isJoined", "isValidJoinRange", "lastCharX", "cell", "range", "firstSelectionState", "JoinedCellData", "isInSelection", "isCursorCell", "isLinkHover", "isDecorated", "d", "chars", "AttributeData", "fg", "fgColorMode", "bg", "bgColorMode", "isInverse", "temp", "temp2", "bgOverride", "fgOverride", "isTop", "resolvedBg", "channels", "color", "element", "treatGlyphAsBackgroundColor", "cache", "adjustedColor", "ratio", "style", "y", "__decorateClass", "__decorateParam", "ICharacterJoinerService", "IOptionsService", "ICoreBrowserService", "ICoreService", "IDecorationService", "IThemeService", "SelectionRenderModel", "terminal", "start", "end", "columnSelectMode", "viewportY", "viewportStartRow", "viewportEndRow", "viewportCappedStartRow", "viewportCappedEndRow", "x", "y", "createSelectionRenderModel", "TextBlinkStateManager", "Disposable", "_renderCallback", "_coreBrowserService", "_optionsService", "duration", "toDisposable", "needsBlinkInViewport", "isVisible", "wasBlinkOn", "nextTerminalId", "DomRenderer", "Disposable", "_terminal", "_document", "_element", "_screenElement", "_viewportElement", "_helperContainer", "_linkifier2", "instantiationService", "_charSizeService", "_optionsService", "_bufferService", "_coreService", "_coreBrowserService", "_themeService", "createSelectionRenderModel", "Emitter", "createRenderDimensions", "e", "DomRendererRowFactory", "CursorBlinkStateManager", "addDisposableListener", "toDisposable", "TextBlinkStateManager", "WidthCache", "dpr", "element", "styles", "colors", "color", "blinkAnimationUnderlineId", "blinkAnimationBarId", "blinkAnimationBlockId", "i", "c", "spacing", "cols", "rows", "row", "isVisible", "start", "end", "columnSelectMode", "oldViewportStart", "oldViewportEnd", "newViewportStart", "newViewportEnd", "viewportStartRow", "viewportEndRow", "viewportCappedStartRow", "viewportCappedEndRow", "documentFragment", "isXFlipped", "startCol", "endCol", "middleRowsCount", "finalEndCol", "renderStartRow", "renderEndRow", "cursorViewportRow", "colStart", "colEnd", "rowCount", "left", "width", "buffer", "cursorAbsoluteY", "cursorX", "cursorBlink", "cursorStyle", "cursorInactiveStyle", "rowInfo", "y", "rowElement", "lineData", "x", "x2", "y2", "enabled", "maxY", "bufferline", "hasBlinkingCells", "__decorateClass", "__decorateParam", "IInstantiationService", "ICharSizeService", "IOptionsService", "IBufferService", "ICoreService", "ICoreBrowserService", "IThemeService", "_rowContainer", "CharSizeService", "Disposable", "document", "parentElement", "_optionsService", "Emitter", "TextMetricsMeasureStrategy", "DomMeasureStrategy", "result", "__decorateClass", "__decorateParam", "IOptionsService", "BaseMeasureStategy", "Disposable", "width", "height", "DomMeasureStrategy", "_document", "_parentElement", "_optionsService", "TextMetricsMeasureStrategy", "a", "metrics", "CoreBrowserService", "Disposable", "_textarea", "_window", "mainDocument", "Emitter", "ScreenDprMonitor", "w", "EventUtils", "addDisposableListener", "value", "_parentWindow", "MutableDisposable", "toDisposable", "parentWindow", "LinkProviderService", "Disposable", "toDisposable", "linkProvider", "providerIndex", "getCoordsRelativeToElement", "window", "event", "element", "rect", "elementStyle", "leftPadding", "topPadding", "getCoords", "colCount", "rowCount", "hasValidCharSize", "cssCellWidth", "cssCellHeight", "isSelection", "coords", "MouseCoordsService", "_charSizeService", "_renderService", "event", "element", "colCount", "rowCount", "isSelection", "getCoords", "getWindow", "coords", "getCoordsRelativeToElement", "__decorateClass", "__decorateParam", "ICharSizeService", "IRenderService", "mainWindow", "tail", "array", "n", "memoize", "_target", "key", "descriptor", "fnKey", "fn", "memoizeKey", "descriptorAny", "args", "_LinkedListNode", "element", "LinkedListNode", "LinkedList", "atTheEnd", "newNode", "oldLast", "oldFirst", "didRemove", "node", "anchor", "EventType", "_Gesture", "Disposable", "targetWindow", "addDisposableListener", "e", "remove", "toDisposable", "timestamp", "i", "len", "touch", "evt", "activeTouchCount", "data", "holdTime", "finalX", "finalY", "deltaT", "deltaX", "deltaY", "dispatchTo", "t", "type", "initialTarget", "event", "currentTime", "setTapCount", "ignoreTarget", "targets", "target", "depth", "now", "a", "b", "t1", "vX", "dirX", "x", "vY", "dirY", "y", "scheduleAtNextAnimationFrame", "deltaPosX", "deltaPosY", "stopped", "d", "__decorateClass", "Gesture", "MouseService", "_renderService", "_mouseCoordsService", "_mouseStateService", "_coreService", "_bufferService", "_optionsService", "_selectionService", "_logService", "_coreBrowserService", "target", "register", "focus", "element", "document", "requestedEvents", "mouseupListener", "MutableDisposable", "mousedragListener", "ctx", "eventListeners", "ev", "AltMouseCursorController", "events", "addDisposableListener", "Gesture", "EventType", "e", "pos", "but", "action", "deltaY", "stripAltFromReport", "targetDocument", "listenerDocument", "sequence", "cellHeight", "lines", "i", "amount", "dpr", "targetWheelEventPixels", "report", "e1", "e2", "pixels", "__decorateClass", "__decorateParam", "IRenderService", "IMouseCoordsService", "IMouseStateService", "ICoreService", "IBufferService", "IOptionsService", "ISelectionService", "ILogService", "ICoreBrowserService", "_element", "_document", "_isActive", "store", "DisposableStore", "syncFromModifier", "targetWindow", "altHeld", "RenderDebouncer", "_renderCallback", "_coreBrowserService", "callback", "rowStart", "rowEnd", "rowCount", "start", "end", "TaskQueue", "logService", "task", "deadline", "taskDuration", "longestTask", "lastDeadlineRemaining", "deadlineRemaining", "PriorityTaskQueue", "callback", "identifier", "duration", "end", "IdleTaskQueueInternal", "IdleTaskQueue", "DebouncedIdleTask", "RenderService", "Disposable", "_rowCount", "screenElement", "_optionsService", "_logService", "_charSizeService", "_coreService", "decorationService", "bufferService", "_coreBrowserService", "themeService", "MutableDisposable", "Emitter", "DebouncedIdleTask", "RenderDebouncer", "start", "end", "SynchronizedOutputHandler", "toDisposable", "w", "observer", "e", "entry", "sync", "isRedrawOnly", "buffered", "cols", "rows", "renderer", "callback", "columnSelectMode", "__decorateClass", "__decorateParam", "IOptionsService", "ILogService", "ICharSizeService", "ICoreService", "IDecorationService", "IBufferService", "ICoreBrowserService", "IThemeService", "_onTimeout", "result", "moveToCellSequence", "targetX", "targetY", "bufferService", "applicationCursor", "startX", "startY", "resetStartingRow", "moveToRequestedRow", "moveToRequestedCol", "direction", "repeat", "sequence", "rowDifference", "cellsToMove", "colsFromRowEnd", "colsFromRowBeginning", "currX", "bufferLine", "wrappedRowsForRow", "startRow", "endRow", "rowsToMove", "wrappedRowsCount", "verticalDirection", "horizontalDirection", "wrappedRows", "i", "currentRow", "rowCount", "line", "lineWraps", "startCol", "endCol", "forward", "currentCol", "bufferStr", "mod", "count", "str", "rpt", "SelectionModel", "_bufferService", "startPlusLength", "start", "end", "amount", "getRangeLength", "range", "bufferCols", "NON_BREAKING_SPACE_CHAR", "ALL_NON_BREAKING_SPACE_REGEX", "SelectionService", "Disposable", "_element", "_screenElement", "_linkifier", "_bufferService", "_coreService", "_mouseCoordsService", "_optionsService", "_mouseStateService", "_renderService", "_coreBrowserService", "MutableDisposable", "CellData", "Emitter", "event", "amount", "e", "SelectionModel", "toDisposable", "start", "end", "buffer", "result", "startCol", "endCol", "i", "lineText", "startRowEndCol", "bufferLine", "line", "ALL_NON_BREAKING_SPACE_REGEX", "isWindows", "isLinuxMouseSelection", "isLinux", "coords", "x", "y", "allowWhitespaceOnlySelection", "range", "getRangeLength", "offset", "getCoordsRelativeToElement", "terminalHeight", "isMac", "hadSelection", "previousSelectionEnd", "timeElapsed", "coordinates", "sequence", "moveToCellSequence", "hasSelection", "charIndex", "length", "col", "row", "ev", "followWrappedLinesAbove", "followWrappedLinesBelow", "startIndex", "endIndex", "charOffset", "leftWideCharCount", "rightWideCharCount", "leftLongCharOffset", "rightLongCharOffset", "previousBufferLine", "previousLineWordPosition", "nextBufferLine", "nextLineWordPosition", "wordPosition", "endRow", "cell", "wrappedRange", "__decorateClass", "__decorateParam", "IBufferService", "ICoreService", "IMouseCoordsService", "IOptionsService", "IMouseStateService", "IRenderService", "ICoreBrowserService", "TwoKeyMap", "first", "second", "value", "ColorContrastCache", "TwoKeyMap", "bg", "fg", "value", "DEFAULT_ANSI_COLORS", "colors", "css", "v", "i", "r", "g", "b", "channels", "c", "DEFAULT_FOREGROUND", "css", "DEFAULT_BACKGROUND", "DEFAULT_CURSOR", "DEFAULT_CURSOR_ACCENT", "DEFAULT_SELECTION", "DEFAULT_OVERVIEW_RULER_BORDER", "ThemeService", "Disposable", "_optionsService", "ColorContrastCache", "Emitter", "color", "DEFAULT_ANSI_COLORS", "theme", "colors", "parseColor", "NULL_COLOR", "colorCount", "i", "slot", "callback", "__decorateClass", "__decorateParam", "IOptionsService", "cssString", "fallback", "KEYCODE_KEY_MAPPINGS", "evaluateKeyboardEvent", "ev", "applicationCursorMode", "isMac", "macOptionIsMeta", "result", "modifiers", "key", "keyCode", "keyString", "KittyKeyboard", "ev", "suffix", "mods", "macOptionAsAlt", "numpadCode", "modifierCode", "funcCode", "digit", "code", "letter", "modifiers", "eventType", "reportEventTypes", "needsEventType", "seq", "number", "keyCode", "flags", "isFunc", "isMod", "reportAlternateKeys", "shiftedKey", "textCode", "result", "csiLetter", "ss3Letter", "tildeCode", "specialKey", "legacyByte", "Win32InputMode", "ev", "vk", "controlChar", "codePoint", "state", "isKeyDown", "sc", "uc", "kd", "cs", "KeyboardService", "_coreService", "_optionsService", "Win32InputMode", "KittyKeyboard", "event", "kittyFlags", "isMac", "evaluateKeyboardEvent", "__decorateClass", "__decorateParam", "ICoreService", "IOptionsService", "ServiceCollection", "entries", "id", "service", "instance", "result", "callback", "key", "value", "InstantiationService", "IInstantiationService", "ctor", "args", "serviceDependencies", "getServiceDependencies", "a", "b", "serviceArgs", "dependency", "firstServiceArgPos", "optionsKeyToLogLevel", "LOG_PREFIX", "LogService", "Disposable", "_optionsService", "optionalParams", "i", "type", "message", "__decorateClass", "__decorateParam", "IOptionsService", "CircularList", "Disposable", "_maxLength", "Emitter", "newMaxLength", "newArray", "i", "newLength", "index", "value", "start", "deleteCount", "items", "countToTrim", "count", "offset", "expandListBy", "DEFAULT_ATTR_DATA", "AttributeData", "$startIndex", "$workCell", "CellData", "$extended", "BufferLine", "_BufferLine", "cols", "fillCellData", "isWrapped", "cell", "i", "index", "content", "cp", "stringFromCodePoint", "value", "codePoint", "width", "attrs", "$idx", "pos", "n", "start", "end", "respectProtect", "uint32Cells", "data", "keys", "key", "extKeys", "line", "blank", "newLine", "src", "srcCol", "destCol", "length", "applyInReverse", "srcData", "trimRight", "startCol", "endCol", "outColumns", "isCanonical", "cellContents", "chars", "result", "srcStart", "reflowLargerGetLinesToRemove", "lines", "oldCols", "newCols", "bufferAbsoluteY", "nullCell", "reflowCursorLine", "toRemove", "y", "i", "nextLine", "wrappedLines", "destLineIndex", "destCol", "getWrappedLineTrimmedLength", "srcLineIndex", "srcCol", "srcTrimmedTineLength", "srcRemainingCells", "destRemainingCells", "cellsToCopy", "countToRemove", "reflowLargerCreateNewLayout", "layout", "nextToRemoveIndex", "nextToRemoveStart", "countRemovedSoFar", "reflowLargerApplyNewLayout", "newLayout", "newLayoutLines", "reflowSmallerGetNewLineLengths", "newLineLengths", "cellsNeeded", "srcLine", "cellsAvailable", "oldTrimmedLength", "endsWithWide", "lineLength", "cols", "endsInNull", "followingLineStartsWithWide", "_Marker", "line", "Emitter", "dispose", "disposable", "Marker", "CHARSETS", "DEFAULT_CHARSET", "MAX_BUFFER_SIZE", "Buffer", "Disposable", "_hasScrollback", "_optionsService", "_bufferService", "_logService", "DEFAULT_ATTR_DATA", "DEFAULT_CHARSET", "CellData", "CircularList", "IdleTaskQueue", "toDisposable", "attr", "ExtendedAttrs", "isWrapped", "BufferLine", "relativeY", "rows", "correctBufferLength", "fillAttr", "i", "newCols", "newRows", "nullCell", "dirtyMemoryLines", "newMaxLength", "addToY", "y", "amountToTrim", "maxY", "normalRun", "counted", "windowsPty", "reflowCursorLine", "toRemove", "reflowLargerGetLinesToRemove", "newLayoutResult", "reflowLargerCreateNewLayout", "reflowLargerApplyNewLayout", "countRemoved", "viewportAdjustments", "toInsert", "countToInsert", "nextLine", "wrappedLines", "absoluteY", "lastLineLength", "destLineLengths", "reflowSmallerGetNewLineLengths", "linesToAdd", "trimmedLines", "newLines", "newLine", "destLineIndex", "destCol", "srcLineIndex", "srcCol", "cellsToCopy", "wrappedLinesIndex", "getWrappedLineTrimmedLength", "insertEvents", "originalLines", "originalLinesLength", "originalLineIndex", "nextToInsertIndex", "nextToInsert", "countInsertedSoFar", "nextI", "insertCountEmitted", "lineIndex", "trimRight", "startCol", "endCol", "line", "first", "last", "x", "marker", "Marker", "amount", "event", "BufferSet", "Disposable", "_optionsService", "_bufferService", "_logService", "MutableDisposable", "Emitter", "Buffer", "fillAttr", "newCols", "newRows", "i", "BufferService", "Disposable", "optionsService", "logService", "Emitter", "BufferSet", "e", "cols", "rows", "colsChanged", "rowsChanged", "eraseAttr", "isWrapped", "buffer", "newLine", "topRow", "bottomRow", "willBufferBeTrimmed", "scrollRegionHeight", "disp", "suppressScrollEvent", "oldYdisp", "__decorateClass", "__decorateParam", "IOptionsService", "ILogService", "DEFAULT_OPTIONS", "isMac", "FONT_WEIGHT_OPTIONS", "OptionsService", "Disposable", "options", "Emitter", "defaultOptions", "key", "newValue", "e", "toDisposable", "listener", "eventKey", "keys", "getter", "propName", "setter", "value", "desc", "isCursorStyle", "DEFAULT_MODES", "DEFAULT_DEC_PRIVATE_MODES", "DEFAULT_KITTY_KEYBOARD_STATE", "CoreService", "Disposable", "_bufferService", "_logService", "_optionsService", "Emitter", "data", "wasUserInput", "buffer", "e", "__decorateClass", "__decorateParam", "IBufferService", "ILogService", "IOptionsService", "DEFAULT_PROTOCOLS", "e", "eventCode", "e", "isSGR", "code", "S", "DEFAULT_ENCODINGS", "params", "final", "MouseStateService", "Disposable", "Emitter", "name", "DEFAULT_PROTOCOLS", "protocol", "encoding", "customWheelEventHandler", "ev", "UnicodeService", "_UnicodeService", "Emitter", "value", "state", "width", "shouldJoin", "version", "provider", "num", "s", "result", "precedingInfo", "length", "i", "code", "second", "currentInfo", "chWidth", "codepoint", "preceding", "BMP_COMBINING", "HIGH_COMBINING", "table", "bisearch", "ucs", "data", "min", "max", "mid", "UnicodeV6", "r", "num", "codepoint", "preceding", "width", "shouldJoin", "oldWidth", "UnicodeService", "CharsetService", "g", "charset", "updateWindowsModeWrappedState", "bufferService", "lastChar", "nextLine", "Params", "_Params", "maxLength", "maxSubParamsLength", "values", "params", "i", "value", "k", "newParams", "res", "start", "end", "idx", "result", "length", "store", "cur", "StringBuilder", "chunk", "LimitedStringBuilder", "_limit", "EMPTY_HANDLERS", "OscParser", "ident", "handler", "handlerList", "handlerIndex", "j", "data", "start", "end", "utf32ToString", "code", "success", "promiseResult", "handlerResult", "fallThrough", "_OscHandler", "_handler", "LimitedStringBuilder", "ret", "res", "OscHandler", "EMPTY_HANDLERS", "DcsParser", "ident", "handler", "handlerList", "handlerIndex", "j", "params", "data", "start", "end", "utf32ToString", "success", "promiseResult", "handlerResult", "fallThrough", "EMPTY_PARAMS", "Params", "_DcsHandler", "_handler", "LimitedStringBuilder", "ret", "res", "DcsHandler", "EMPTY_HANDLERS", "ApcParser", "ident", "handler", "handlerList", "handlerIndex", "j", "data", "start", "end", "utf32ToString", "success", "promiseResult", "handlerResult", "fallThrough", "_ApcHandler", "_handler", "LimitedStringBuilder", "ret", "res", "ApcHandler", "TransitionTable", "length", "action", "next", "code", "state", "codes", "i", "NON_ASCII_PRINTABLE", "VT500_TRANSITION_TABLE", "table", "blueprint", "unused", "r", "start", "end", "PRINTABLES", "EXECUTABLES", "states", "EscapeSequenceParser", "Disposable", "_transitions", "Params", "data", "ident", "params", "toDisposable", "OscParser", "DcsParser", "ApcParser", "id", "finalRange", "res", "intermediate", "finalCode", "handler", "handlerList", "handlerIndex", "flag", "callback", "handlers", "handlerPos", "transition", "chunkPos", "promiseResult", "handlerResult", "k", "ch", "csiDone", "j", "c", "l4", "handlersEsc", "jj", "RGB_REX", "HASH_REX", "parseColor", "data", "low", "m", "base", "adv", "result", "i", "c", "pad", "bits", "s", "s2", "toRgbString", "color", "r", "g", "b", "XTERM_VERSION", "GLEVEL", "paramToWindowOption", "opts", "$temp", "InputHandler", "Disposable", "_bufferService", "_charsetService", "_coreService", "_logService", "_optionsService", "_oscLinkService", "_mouseStateService", "_unicodeService", "_parser", "EscapeSequenceParser", "StringToUtf32", "Utf8ToUtf32", "DEFAULT_ATTR_DATA", "Emitter", "DirtyRowTracker", "e", "ident", "params", "code", "identifier", "action", "data", "payload", "start", "end", "OscHandler", "flag", "CHARSETS", "state", "DcsHandler", "cursorStartX", "cursorStartY", "decodedLength", "position", "p", "slowTimeout", "slowPromise", "_res", "rej", "err", "promiseResult", "result", "wasPaused", "i", "len", "viewportEnd", "viewportStart", "chWidth", "charset", "screenReaderMode", "cols", "wraparoundMode", "insertMode", "curAttr", "bufferRow", "precedingJoinState", "pos", "ch", "currentInfo", "UnicodeService", "shouldJoin", "oldWidth", "stringFromCodePoint", "linkId", "oldRow", "oldCol", "BufferLine", "offset", "delta", "id", "callback", "paramToWindowOption", "ApcHandler", "line", "originalX", "maxCol", "x", "y", "diffToTop", "diffToBottom", "param", "clearWrap", "respectProtect", "j", "nextLine", "scrollBackSize", "row", "scrollBottomRowsOffset", "scrollBottomAbsolute", "joinState", "length", "text", "idata", "itext", "tlength", "XTERM_VERSION", "term", "DEFAULT_CHARSET", "ansi", "V", "dm", "mouseProtocol", "mouseEncoding", "cs", "buffers", "active", "alt", "opts", "f", "m", "v", "b2v", "value", "color", "mode", "c1", "c2", "c3", "AttributeData", "attr", "accu", "cSpace", "advance", "subparams", "style", "l", "isBlinking", "top", "bottom", "second", "event", "slots", "idx", "spec", "index", "isValidColorIndex", "parseColor", "uri", "parsedParams", "idParamIndex", "collectAndFlag", "GLEVEL", "scrollRegionHeight", "level", "cell", "CellData", "yOffset", "s", "b", "STYLES", "y1", "y2", "flags", "stack", "count", "__decorateClass", "__decorateParam", "IBufferService", "WriteBuffer", "Disposable", "_action", "TimeoutTimer", "Emitter", "toDisposable", "chunk", "didProcess", "cb", "data", "maxSubsequentCalls", "callback", "lastTime", "promiseResult", "startTime", "result", "continuation", "r", "err", "OscLinkService", "_bufferService", "data", "buffer", "marker", "entry", "castData", "key", "match", "linkId", "y", "e", "linkData", "index", "__decorateClass", "__decorateParam", "IBufferService", "hasWriteSyncWarnHappened", "CoreTerminal", "Disposable", "options", "MutableDisposable", "Emitter", "InstantiationService", "OptionsService", "IOptionsService", "LogService", "ILogService", "BufferService", "IBufferService", "CoreService", "ICoreService", "MouseStateService", "IMouseStateService", "UnicodeService", "UnicodeV6", "IUnicodeService", "CharsetService", "ICharsetService", "OscLinkService", "IOscLinkService", "InputHandler", "EventUtils", "WriteBuffer", "data", "promiseResult", "ev", "key", "callback", "maxSubsequentCalls", "wasUserInput", "x", "y", "eraseAttr", "isWrapped", "disp", "suppressScrollEvent", "pageCount", "disableSmoothScroll", "line", "scrollAmount", "id", "ident", "value", "windowsPty", "disposables", "updateWindowsModeWrappedState", "toDisposable", "d", "i", "SortedList", "_getKey", "logService", "IdleTaskQueue", "value", "sortedAddedValues", "a", "b", "sortedAddedValuesIndex", "arrayIndex", "newArray", "newArrayIndex", "index", "indices", "key", "callback", "min", "max", "mid", "midKey", "$xmin", "$xmax", "DecorationService", "Disposable", "_logService", "_bufferService", "DecorationLineCache", "Emitter", "SortedList", "e", "toDisposable", "options", "decoration", "Decoration", "markerDispose", "listener", "d", "x", "line", "layer", "bucket", "callback", "__decorateClass", "__decorateParam", "ILogService", "IBufferService", "MutableDisposable", "MicrotaskTimer", "lines", "store", "DisposableStore", "amount", "event", "start", "height", "index", "callbacks", "cb", "newMap", "newLine", "existing", "i", "len", "spanCrossers", "deleteEnd", "toReindex", "css", "RENDER_DEBOUNCE_THRESHOLD_MS", "TimeBasedDebouncer", "_renderCallback", "_debounceThresholdMS", "rowStart", "rowEnd", "rowCount", "refreshRequestTime", "elapsed", "waitPeriodBeforeTrailingRefresh", "start", "end", "DEBUG", "AccessibilityManager", "Disposable", "_terminal", "instantiationService", "_coreBrowserService", "_renderService", "doc", "i", "e", "TimeBasedDebouncer", "char", "spaceCount", "addDisposableListener", "toDisposable", "tooMuchOutput", "keyChar", "start", "end", "buffer", "setSize", "line", "columns", "lineData", "posInSet", "element", "position", "boundaryElement", "beforeBoundaryElement", "lastRowPos", "topBoundaryElement", "bottomBoundaryElement", "newElement", "selection", "begin", "lastRowElement", "toRowColumn", "node", "offset", "rowElement", "row", "column", "beginRowColumn", "endRowColumn", "rows", "width", "lastColumn", "targetWidth", "__decorateClass", "__decorateParam", "IInstantiationService", "ICoreBrowserService", "IRenderService", "Linkifier", "Disposable", "_element", "_mouseCoordsService", "_renderService", "_bufferService", "_linkProviderService", "Emitter", "toDisposable", "dispose", "addDisposableListener", "event", "position", "composedPath", "i", "target", "useLineCache", "reply", "linkWithState", "linkProvided", "linkProvider", "links", "linksWithState", "link", "y", "replies", "occupiedCells", "providerReply", "startX", "endX", "x", "index", "hasLinkBefore", "j", "linkAtPosition", "currentLink", "linkEquals", "startRow", "endRow", "v", "e", "start", "end", "element", "showEvent", "range", "scrollOffset", "lower", "upper", "current", "coords", "x1", "y1", "x2", "y2", "fg", "__decorateClass", "__decorateParam", "IMouseCoordsService", "IRenderService", "IBufferService", "ILinkProviderService", "a", "b", "CoreBrowserTerminal", "CoreTerminal", "options", "MutableDisposable", "Platform_exports", "Emitter", "DecorationService", "IDecorationService", "KeyboardService", "IKeyboardService", "LinkProviderService", "ILinkProviderService", "OscLinkProvider", "e", "type", "event", "EventUtils", "toDisposable", "dimensions", "req", "acc", "ident", "colorRgb", "color", "toRgbString", "colors", "channels", "narrowedAcc", "bgLuminance", "rgb", "fgLuminance", "colorSchemeMode", "value", "AccessibilityManager", "ev", "CompositionHelper", "cursorY", "bufferLine", "cursorX", "cellHeight", "width", "cellWidth", "cursorTop", "cursorLeft", "addDisposableListener", "copyHandler", "pasteHandlerWrapper", "handlePasteEvent", "isFirefox", "rightClickHandler", "isLinux", "moveTextAreaUnderMouseCursor", "parent", "fragment", "textarea", "promptLabel", "isChromeOS", "CoreBrowserService", "ICoreBrowserService", "CharSizeService", "ICharSizeService", "ThemeService", "IThemeService", "CharacterJoinerService", "ICharacterJoinerService", "RenderService", "IRenderService", "MouseCoordsService", "IMouseCoordsService", "linkifier", "Linkifier", "Viewport", "SelectionService", "ISelectionService", "MouseService", "IMouseService", "text", "BufferDecorationRenderer", "showScrollbar", "overviewRulerWidth", "OverviewRulerRenderer", "shouldShow", "amount", "disposable", "DomRenderer", "start", "end", "sync", "disp", "suppressScrollEvent", "pageCount", "disableSmoothScroll", "line", "scrollAmount", "data", "paste", "customKeyEventHandler", "customWheelEventHandler", "linkProvider", "handler", "joinerId", "cursorYOffset", "decorationOptions", "column", "row", "length", "shouldIgnoreComposition", "result", "scrollCount", "wasModifierOnly", "wasModifierKeyOnlyEvent", "browser", "thirdLevelKey", "key", "x", "y", "i", "DEFAULT_ATTR_DATA", "canvasWidth", "canvasHeight", "AddonManager", "terminal", "instance", "loadedAddon", "index", "i", "BufferLineApiView", "_line", "x", "cell", "CellData", "trimRight", "startColumn", "endColumn", "BufferApiView", "_buffer", "type", "buffer", "y", "line", "BufferLineApiView", "CellData", "BufferNamespaceApi", "Disposable", "_core", "Emitter", "BufferApiView", "ParserApi", "_core", "id", "callback", "params", "data", "handler", "ident", "UnicodeApi", "_core", "provider", "version", "CONSTRUCTOR_ONLY_OPTIONS", "$value", "Terminal", "Disposable", "options", "CoreBrowserTerminal", "AddonManager", "getter", "propName", "setter", "value", "desc", "ParserApi", "UnicodeApi", "BufferNamespaceApi", "m", "mouseTrackingMode", "data", "wasUserInput", "columns", "rows", "parent", "customKeyEventHandler", "customWheelEventHandler", "linkProvider", "handler", "joinerId", "cursorYOffset", "decorationOptions", "column", "row", "length", "start", "end", "amount", "pageCount", "line", "callback", "addon", "promptLabel", "tooMuchOutput", "values"] } diff --git a/src/browser/CoreBrowserTerminal.ts b/src/browser/CoreBrowserTerminal.ts diff --git a/config/patches/monaco-editor@0.55.1.patch b/config/patches/monaco-editor@0.55.1.patch new file mode 100644 index 00000000000..844a80405f0 --- /dev/null +++ b/config/patches/monaco-editor@0.55.1.patch @@ -0,0 +1,20 @@ +diff --git a/esm/vs/editor/browser/widget/diffEditor/utils/editorGutter.js b/esm/vs/editor/browser/widget/diffEditor/utils/editorGutter.js +index cbe9bb8e8bb97ca69e1026d2335857ec7ae32a16..86c4f393b76a4d433be297833188058c99a168e8 100644 +--- a/esm/vs/editor/browser/widget/diffEditor/utils/editorGutter.js ++++ b/esm/vs/editor/browser/widget/diffEditor/utils/editorGutter.js +@@ -27,6 +27,15 @@ class EditorGutter extends Disposable { + this.editorOnDidContentSizeChange = observableSignalFromEvent('onDidContentSizeChange', this._editor.onDidContentSizeChange); + this.domNodeSizeChanged = observableSignal('domNodeSizeChanged'); + this.views = new Map(); ++ // Orca patch (backport of monaco-editor 0.56.0): dispose the views still on screen, or each ++ // view's toolbar menu stays registered on the global MenuRegistry and retains the whole editor. ++ this._register(toDisposable(() => { ++ for (const view of this.views.values()) { ++ view.gutterItemView.dispose(); ++ view.domNode.remove(); ++ } ++ this.views.clear(); ++ })); + this._domNode.className = 'gutter monaco-editor'; + const scrollDecoration = this._domNode.appendChild(h('div.scroll-decoration', { role: 'presentation', ariaHidden: 'true', style: { width: '100%' } }) + .root); diff --git a/config/patches/node-pty@1.1.0.patch b/config/patches/node-pty@1.1.0.patch index 40b240f3296..a649927052d 100644 --- a/config/patches/node-pty@1.1.0.patch +++ b/config/patches/node-pty@1.1.0.patch @@ -710,15 +710,16 @@ diff --git a/src/win/conpty.cc b/src/win/conpty.cc index 7b286d3d64..5239ba4e40 100644 --- a/src/win/conpty.cc +++ b/src/win/conpty.cc -@@ -18,6 +18,7 @@ +@@ -18,6 +18,8 @@ #include #include #include +#include ++#include #include #include #include -@@ -44,15 +45,37 @@ struct pty_baton { +@@ -44,15 +46,39 @@ struct pty_baton { HANDLE hOut; HPCON hpc; @@ -751,6 +752,8 @@ index 7b286d3d64..5239ba4e40 100644 static std::vector> ptyHandles; +// Orca: every table access shares the exit watcher's lock; handles can be recycled. +static std::mutex ptyJobMutex; ++// Orca: 0 = no per-terminal ceiling (the default); set once at daemon start. ++static std::atomic ptyActiveProcessLimit{0}; static volatile LONG ptyCounter; -static pty_baton* get_pty_baton(int id) { @@ -758,7 +761,7 @@ index 7b286d3d64..5239ba4e40 100644 auto it = std::find_if(ptyHandles.begin(), ptyHandles.end(), [id](const auto& ptyHandle) { return ptyHandle->id == id; }); -@@ -62,7 +85,7 @@ static pty_baton* get_pty_baton(int id) { +@@ -62,7 +88,7 @@ static pty_baton* get_pty_baton(int id) { return nullptr; } @@ -767,7 +770,7 @@ index 7b286d3d64..5239ba4e40 100644 auto it = std::remove_if(ptyHandles.begin(), ptyHandles.end(), [id](const auto& ptyHandle) { return ptyHandle->id == id; }); -@@ -102,8 +125,31 @@ void SetupExitCallback(Napi::Env env, Napi::Function cb, pty_baton* baton) { +@@ -102,8 +128,31 @@ void SetupExitCallback(Napi::Env env, Napi::Function cb, pty_baton* baton) { // Get process exit code. GetExitCodeProcess(baton->hShell, (LPDWORD)(&exit_event->exit_code)); // Clean up handles @@ -801,7 +804,7 @@ index 7b286d3d64..5239ba4e40 100644 auto status = tsfn.BlockingCall(exit_event, callback); // In main thread switch (status) { -@@ -242,6 +288,20 @@ HRESULT CreateNamedPipesAndPseudoConsole(const Napi::CallbackInfo& info, +@@ -242,6 +291,20 @@ HRESULT CreateNamedPipesAndPseudoConsole(const Napi::CallbackInfo& info, return HRESULT_FROM_WIN32(GetLastError()); } @@ -822,7 +825,7 @@ index 7b286d3d64..5239ba4e40 100644 static Napi::Value PtyStartProcess(const Napi::CallbackInfo& info) { Napi::Env env(info.Env()); Napi::HandleScope scope(env); -@@ -301,8 +361,10 @@ static Napi::Value PtyStartProcess(const Napi::CallbackInfo& info) { +@@ -301,8 +364,10 @@ static Napi::Value PtyStartProcess(const Napi::CallbackInfo& info) { // We were able to instantiate a conpty const int ptyId = InterlockedIncrement(&ptyCounter); marshal.Set("pty", Napi::Number::New(env, ptyId)); @@ -835,7 +838,7 @@ index 7b286d3d64..5239ba4e40 100644 } else { throw Napi::Error::New(env, "Cannot launch conpty"); } -@@ -350,11 +412,15 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { +@@ -350,11 +415,15 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { const bool useConptyDll = info[4].As().Value(); Napi::Function exitCallback = info[5].As(); @@ -855,7 +858,7 @@ index 7b286d3d64..5239ba4e40 100644 // Prepare command line std::unique_ptr mutableCommandline = std::make_unique(cmdline.length() + 1); -@@ -409,6 +475,15 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { +@@ -409,6 +478,15 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { throw errorWithCode(info, "UpdateProcThreadAttribute failed"); } @@ -871,7 +874,7 @@ index 7b286d3d64..5239ba4e40 100644 PROCESS_INFORMATION piClient{}; fSuccess = !!CreateProcessW( nullptr, -@@ -416,7 +491,10 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { +@@ -416,7 +494,10 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { nullptr, // lpProcessAttributes nullptr, // lpThreadAttributes false, // bInheritHandles VERY IMPORTANT that this is false @@ -883,7 +886,7 @@ index 7b286d3d64..5239ba4e40 100644 envArg, // lpEnvironment mutableCwd.get(), // lpCurrentDirectory &siEx.StartupInfo, // lpStartupInfo -@@ -426,8 +504,48 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { +@@ -426,8 +507,54 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { throw errorWithCode(info, "Cannot create process"); } @@ -909,6 +912,12 @@ index 7b286d3d64..5239ba4e40 100644 + JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobLimits{}; + jobLimits.BasicLimitInformation.LimitFlags = + handle->allowJobBreakaway ? JOB_OBJECT_LIMIT_BREAKAWAY_OK : 0; ++ // Orca: an opt-in ceiling; forks past it fail inside this terminal's tree only. ++ const uint32_t activeProcessLimit = ptyActiveProcessLimit.load(); ++ if (activeProcessLimit > 0) { ++ jobLimits.BasicLimitInformation.LimitFlags |= JOB_OBJECT_LIMIT_ACTIVE_PROCESS; ++ jobLimits.BasicLimitInformation.ActiveProcessLimit = activeProcessLimit; ++ } + if (!SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &jobLimits, sizeof(jobLimits)) || + !AssignProcessToJobObject(hJob, piClient.hProcess)) { + // Why tolerate failure: an outer job without JOB_OBJECT_LIMIT_BREAKAWAY_OK @@ -934,7 +943,7 @@ index 7b286d3d64..5239ba4e40 100644 if (useConptyDll && fLoadedDll) { PFNRELEASEPSEUDOCONSOLE const pfnReleasePseudoConsole = (PFNRELEASEPSEUDOCONSOLE)GetProcAddress( -@@ -438,8 +556,12 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { +@@ -438,8 +565,12 @@ static Napi::Value PtyConnect(const Napi::CallbackInfo& info) { } } @@ -949,7 +958,7 @@ index 7b286d3d64..5239ba4e40 100644 // Close the thread handle to avoid resource leak CloseHandle(piClient.hThread); -@@ -472,9 +594,10 @@ static Napi::Value PtyResize(const Napi::CallbackInfo& info) { +@@ -472,9 +603,10 @@ static Napi::Value PtyResize(const Napi::CallbackInfo& info) { SHORT rows = static_cast(info[2].As().Uint32Value()); const bool useConptyDll = info[3].As().Value(); @@ -962,7 +971,7 @@ index 7b286d3d64..5239ba4e40 100644 HANDLE hLibrary = LoadConptyDll(info, useConptyDll); bool fLoadedDll = hLibrary != nullptr; if (fLoadedDll) -@@ -513,9 +636,10 @@ static Napi::Value PtyClear(const Napi::CallbackInfo& info) { +@@ -513,9 +645,10 @@ static Napi::Value PtyClear(const Napi::CallbackInfo& info) { return env.Undefined(); } @@ -975,7 +984,7 @@ index 7b286d3d64..5239ba4e40 100644 HANDLE hLibrary = LoadConptyDll(info, useConptyDll); bool fLoadedDll = hLibrary != nullptr; if (fLoadedDll) -@@ -544,29 +668,215 @@ static Napi::Value PtyKill(const Napi::CallbackInfo& info) { +@@ -544,29 +677,229 @@ static Napi::Value PtyKill(const Napi::CallbackInfo& info) { int id = info[0].As().Int32Value(); const bool useConptyDll = info[1].As().Value(); @@ -1201,17 +1210,32 @@ index 7b286d3d64..5239ba4e40 100644 + hHostJob = job; + return Napi::Boolean::New(env, true); +} ++ ++/** ++ * Orca: setActiveProcessLimit(limit) applies JOB_OBJECT_LIMIT_ACTIVE_PROCESS to ++ * every ConPTY job created afterwards. 0 turns it off. Existing jobs keep theirs. ++ */ ++static Napi::Value PtySetActiveProcessLimit(const Napi::CallbackInfo& info) { ++ Napi::Env env(info.Env()); ++ Napi::HandleScope scope(env); ++ if (info.Length() != 1 || !info[0].IsNumber()) { ++ throw Napi::Error::New(env, "Usage: pty.setActiveProcessLimit(limit)"); ++ } ++ ptyActiveProcessLimit.store(info[0].As().Uint32Value()); ++ return Napi::Boolean::New(env, true); ++} + /** * Init */ -@@ -577,6 +887,9 @@ Napi::Object init(Napi::Env env, Napi::Object exports) { +@@ -577,6 +910,10 @@ Napi::Object init(Napi::Env env, Napi::Object exports) { exports.Set("resize", Napi::Function::New(env, PtyResize)); exports.Set("clear", Napi::Function::New(env, PtyClear)); exports.Set("kill", Napi::Function::New(env, PtyKill)); + exports.Set("terminateJob", Napi::Function::New(env, PtyTerminateJob)); + exports.Set("listJobProcessIds", Napi::Function::New(env, PtyListJobProcessIds)); + exports.Set("assignCurrentProcessToJob", Napi::Function::New(env, PtyAssignCurrentProcessToJob)); ++ exports.Set("setActiveProcessLimit", Napi::Function::New(env, PtySetActiveProcessLimit)); return exports; }; diff --git a/config/patches/oxlint-plugin-anti-slop@0.1.2.patch b/config/patches/oxlint-plugin-anti-slop@0.1.2.patch index 1e7349f8fac..435207f935a 100644 --- a/config/patches/oxlint-plugin-anti-slop@0.1.2.patch +++ b/config/patches/oxlint-plugin-anti-slop@0.1.2.patch @@ -30,3 +30,49 @@ index af5f08a5002fb26f94414be13f1ad848ae73d522..eb95ebc44fcb4b4760b2afe097a114cb environment = createTypeAliasEnvironment( node, context.sourceCode.visitorKeys, +diff --git a/src/rules/no-widen-then-assert.ts b/src/rules/no-widen-then-assert.ts +--- a/src/rules/no-widen-then-assert.ts ++++ b/src/rules/no-widen-then-assert.ts +@@ -325,11 +325,12 @@ + }, + }, + createOnce(context) { +- let scopes: Parameters[0] = []; ++ let scopes: Parameters[0] | null = null; + + const checkAssertion = (node: ESTree.TSAsExpression | ESTree.TSTypeAssertion) => { + const expression = assertedExpression(node); + if (expression.type !== "Identifier") return; ++ scopes ??= context.sourceCode.scopeManager.scopes; + + const variable = resolvedVariableForIdentifier(scopes, expression); + if (variable === null) return; +@@ -357,7 +358,7 @@ + + return { + Program() { +- scopes = context.sourceCode.scopeManager.scopes; ++ scopes = null; + }, + TSAsExpression: checkAssertion, + TSTypeAssertion: checkAssertion, +diff --git a/src/rules/no-module-mocking.ts b/src/rules/no-module-mocking.ts +--- a/src/rules/no-module-mocking.ts ++++ b/src/rules/no-module-mocking.ts +@@ -39,7 +39,6 @@ + + function moduleMockCall(sourceCode: SourceCode, callee: ESTree.Expression): boolean { + if (!("property" in callee) || !("object" in callee) || !("computed" in callee)) return false; +- if (!isTestFrameworkObject(sourceCode, callee.object)) return false; + const property = callee.property; + const method = callee.computed + ? property.type === "Literal" && +@@ -51,7 +50,7 @@ + : property.type === "Identifier" + ? property.name + : null; +- return method !== null && moduleMockMethods.has(method); ++ return method !== null && moduleMockMethods.has(method) && isTestFrameworkObject(sourceCode, callee.object); + } + + /** Ban test framework module mocking in favor of real dependency seams. */ diff --git a/config/patches/xterm-src/@xterm__addon-image@0.10.0-beta.300.src.patch b/config/patches/xterm-src/@xterm__addon-image@0.10.0-beta.301.src.patch similarity index 100% rename from config/patches/xterm-src/@xterm__addon-image@0.10.0-beta.300.src.patch rename to config/patches/xterm-src/@xterm__addon-image@0.10.0-beta.301.src.patch diff --git a/config/patches/xterm-src/@xterm__addon-search@0.17.0-beta.300.src.patch b/config/patches/xterm-src/@xterm__addon-search@0.17.0-beta.301.src.patch similarity index 100% rename from config/patches/xterm-src/@xterm__addon-search@0.17.0-beta.300.src.patch rename to config/patches/xterm-src/@xterm__addon-search@0.17.0-beta.301.src.patch diff --git a/config/patches/xterm-src/@xterm__addon-serialize@0.15.0-beta.300.src.patch b/config/patches/xterm-src/@xterm__addon-serialize@0.15.0-beta.301.src.patch similarity index 100% rename from config/patches/xterm-src/@xterm__addon-serialize@0.15.0-beta.300.src.patch rename to config/patches/xterm-src/@xterm__addon-serialize@0.15.0-beta.301.src.patch diff --git a/config/patches/xterm-src/@xterm__addon-webgl@0.20.0-beta.299.src.patch b/config/patches/xterm-src/@xterm__addon-webgl@0.20.0-beta.300.src.patch similarity index 100% rename from config/patches/xterm-src/@xterm__addon-webgl@0.20.0-beta.299.src.patch rename to config/patches/xterm-src/@xterm__addon-webgl@0.20.0-beta.300.src.patch diff --git a/config/patches/xterm-src/@xterm__xterm@6.1.0-beta.303.src.patch b/config/patches/xterm-src/@xterm__xterm@6.1.0-beta.304.src.patch similarity index 100% rename from config/patches/xterm-src/@xterm__xterm@6.1.0-beta.303.src.patch rename to config/patches/xterm-src/@xterm__xterm@6.1.0-beta.304.src.patch diff --git a/config/patches/xterm-upstream.json b/config/patches/xterm-upstream.json index 729be67b106..2990991bd6f 100644 --- a/config/patches/xterm-upstream.json +++ b/config/patches/xterm-upstream.json @@ -2,7 +2,7 @@ "$schemaNote": "Consumed by config/scripts/regenerate-xterm-patches.mjs. See docs/reference/xterm-patch-regeneration.md.", "upstream": { "repository": "https://github.com/xtermjs/xterm.js.git", - "commit": "d3e32b344dfe7dd6015cff6a9aeaaeaeccdc2789", + "commit": "c58ea3637f3968e0e6e79cd92cf9aace7ef89ee2", "commitSource": "bin/publish.js stamps package.json.commit before npm publish, so the published tarball names its own commit. The generator asserts the two agree." }, "sourcemaps": { @@ -19,11 +19,11 @@ "packages": [ { "name": "@xterm/xterm", - "version": "6.1.0-beta.303", + "version": "6.1.0-beta.304", "packageDir": ".", "versionStampFile": "src/common/Version.ts", - "sourcePatch": "config/patches/xterm-src/@xterm__xterm@6.1.0-beta.303.src.patch", - "patch": "config/patches/@xterm__xterm@6.1.0-beta.303.patch", + "sourcePatch": "config/patches/xterm-src/@xterm__xterm@6.1.0-beta.304.src.patch", + "patch": "config/patches/@xterm__xterm@6.1.0-beta.304.patch", "generatedPaths": ["lib/"], "build": [ { @@ -35,11 +35,11 @@ }, { "name": "@xterm/addon-webgl", - "version": "0.20.0-beta.299", + "version": "0.20.0-beta.300", "packageDir": "addons/addon-webgl", "$note": "No versionStampFile: publish.js stamps the addon's package.json, which overlayBuildOutput never patches. The root `build` is required because the addon's own tsgo -p . has empty files/include and only project references, so it emits nothing on its own; `package` is the addon's webpack (CJS half) and the root `esbuild-package` emits the ESM half.", - "sourcePatch": "config/patches/xterm-src/@xterm__addon-webgl@0.20.0-beta.299.src.patch", - "patch": "config/patches/@xterm__addon-webgl@0.20.0-beta.299.patch", + "sourcePatch": "config/patches/xterm-src/@xterm__addon-webgl@0.20.0-beta.300.src.patch", + "patch": "config/patches/@xterm__addon-webgl@0.20.0-beta.300.patch", "generatedPaths": ["lib/"], "build": [ { @@ -61,12 +61,12 @@ }, { "name": "@xterm/addon-search", - "version": "0.17.0-beta.300", + "version": "0.17.0-beta.301", "packageDir": "addons/addon-search", "$note": "No versionStampFile: publish.js stamps the addon's package.json, which overlayBuildOutput never patches. The root `build` is required because the addon's own tsgo -p . has empty files/include and only project references, so it emits nothing on its own; `package` is the addon's webpack (CJS half) and the root `esbuild-package` emits the ESM half.", "$upstream": "Submitted as https://github.com/xtermjs/xterm.js/pull/6149 (issue #6148). Once a release ships it, bump the addon and drop this entry.", - "sourcePatch": "config/patches/xterm-src/@xterm__addon-search@0.17.0-beta.300.src.patch", - "patch": "config/patches/@xterm__addon-search@0.17.0-beta.300.patch", + "sourcePatch": "config/patches/xterm-src/@xterm__addon-search@0.17.0-beta.301.src.patch", + "patch": "config/patches/@xterm__addon-search@0.17.0-beta.301.patch", "generatedPaths": ["lib/"], "build": [ { @@ -88,11 +88,11 @@ }, { "name": "@xterm/addon-serialize", - "version": "0.15.0-beta.300", + "version": "0.15.0-beta.301", "packageDir": "addons/addon-serialize", "$note": "No versionStampFile: publish.js stamps the addon's package.json, which overlayBuildOutput never patches. The root `build` is required because the addon's own tsgo -p . has empty files/include and only project references, so it emits nothing on its own; `package` is the addon's webpack (CJS half) and the root `esbuild-package` emits the ESM half.", - "sourcePatch": "config/patches/xterm-src/@xterm__addon-serialize@0.15.0-beta.300.src.patch", - "patch": "config/patches/@xterm__addon-serialize@0.15.0-beta.300.patch", + "sourcePatch": "config/patches/xterm-src/@xterm__addon-serialize@0.15.0-beta.301.src.patch", + "patch": "config/patches/@xterm__addon-serialize@0.15.0-beta.301.patch", "generatedPaths": ["lib/"], "build": [ { @@ -114,10 +114,10 @@ }, { "name": "@xterm/addon-image", - "version": "0.10.0-beta.300", + "version": "0.10.0-beta.301", "packageDir": "addons/addon-image", - "sourcePatch": "config/patches/xterm-src/@xterm__addon-image@0.10.0-beta.300.src.patch", - "patch": "config/patches/@xterm__addon-image@0.10.0-beta.300.patch", + "sourcePatch": "config/patches/xterm-src/@xterm__addon-image@0.10.0-beta.301.src.patch", + "patch": "config/patches/@xterm__addon-image@0.10.0-beta.301.patch", "generatedPaths": ["lib/"], "build": [ { diff --git a/config/process-host-direct-import-baseline.txt b/config/process-host-direct-import-baseline.txt index b85ebb00efa..1b51486ff35 100644 --- a/config/process-host-direct-import-baseline.txt +++ b/config/process-host-direct-import-baseline.txt @@ -6,7 +6,6 @@ src/cli/handlers/core.ts src/cli/handlers/interactive-login-interruption.ts src/cli/handlers/skills.ts src/cli/runtime/launch.ts -src/cli/runtime/serve-update-supervisor.ts src/main/agent-hooks/managed-hook-owner-identity.ts src/main/agent-hooks/wsl-hook-relay-launch.ts src/main/agent-hooks/wsl-hook-relay-link.ts @@ -111,15 +110,9 @@ src/main/ssh/system-ssh-forward-process.ts src/main/ssh/system-ssh-operation-lifecycle.ts src/main/startup/ensure-virtual-display.ts src/main/startup/hydrate-shell-path.ts -src/main/startup/windows-install-dir-acl-probe.ts -src/main/startup/windows-user-data-acl.ts -src/main/win32-utils.ts src/main/window/clipboard-ipc-handlers.ts src/main/windows-process-tree-kill.ts src/main/workspace-space-analysis.ts -src/main/wsl-availability.ts -src/main/wsl-unc-delete.ts -src/main/wsl.ts src/main/zsh-startup-hook-pty-harness.ts src/shared/ephemeral-vm-recipe-process.ts src/shared/ephemeral-vm-recipe-runner.ts diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc index 3b735730964..160002722a5 100644 --- a/config/reliability-gates.jsonc +++ b/config/reliability-gates.jsonc @@ -10,6 +10,124 @@ } }, "gates": [ + { + "id": "agent-session.delayed-terminal-launch", + "title": "Delayed terminal launches retain their harness preparation and recover process discovery", + "maturity": "experimental", + "protection": "partial", + "owner": "terminal-runtime", + "layer": "host-renderer", + "surfaces": [ + "terminal startup commands", + "typed agent commands", + "hidden terminal startup", + "agent hooks and managed accounts" + ], + "platforms": [ + "macos", + "linux", + "windows" + ], + "providers": [ + "local", + "daemon", + "ssh", + "remote-runtime", + "wsl" + ], + "coveredPlatforms": [ + "macos" + ], + "coveredProviders": [ + "local", + "daemon" + ], + "coverageNotes": "Shared preparation is exercised with real local plugin files and account environment plus mocked host spawn contracts. Captured real Claude startup title drives renderer recovery. Physical Linux, Windows, SSH and WSL delayed launches remain unproved.", + "motivatingLinks": [ + "docs/bug-reproductions/delayed-agent-launch.md" + ], + "invariant": "A literal sleep followed by && must not cause the later harness to lose hook/account preparation or hidden renderer query delivery. Preparation and typed-command hints are not live process evidence. Fresh agent startup output may request one bounded host confirmation after the initial command read window has expired.", + "oracle": "All 45 configured harnesses keep hidden startup query eligibility. Delayed OpenCode 2 installs v2 hooks rather than v1, disabled harnesses do not fall back, selected managed accounts survive, and Pi/OMP/Prime preparation targets the requested harness. A captured Claude startup title at 30 seconds yields process-confirmed routing, never title-authorized routing. A title storm causes at most three additional reads; close and untrackable providers cause none.", + "commands": [ + "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/agent-command-line-intent.test.ts src/shared/pi-agent-kind.test.ts src/shared/opencode-launch-command.test.ts src/main/ipc/pty/host-env/opencode-hook-installation.test.ts src/main/ipc/pty-spawn-env-terminal-basics.test.ts src/main/managed-data-accounts/launch-environment.test.ts src/renderer/src/components/terminal-pane/terminal-startup-command-classifier.test.ts src/renderer/src/components/terminal-pane/pane-delayed-agent-startup.test.ts src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.test.ts --maxWorkers=2" + ], + "testFiles": [ + "src/shared/agent-command-line-intent.test.ts", + "src/shared/pi-agent-kind.test.ts", + "src/shared/opencode-launch-command.test.ts", + "src/main/ipc/pty/host-env/opencode-hook-installation.test.ts", + "src/main/ipc/pty-spawn-env-terminal-basics.test.ts", + "src/main/managed-data-accounts/launch-environment.test.ts", + "src/renderer/src/components/terminal-pane/terminal-startup-command-classifier.test.ts", + "src/renderer/src/components/terminal-pane/pane-delayed-agent-startup.test.ts", + "src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.test.ts", + "src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.test.ts" + ], + "assertionRefs": [ + { + "file": "src/main/ipc/pty/host-env/opencode-hook-installation.test.ts", + "assertions": [ + "explicit %s with disabled" + ] + }, + { + "file": "src/renderer/src/components/terminal-pane/terminal-startup-command-classifier.test.ts", + "assertions": [ + "keeps hidden %s startup queries live after sleep" + ] + }, + { + "file": "src/renderer/src/components/terminal-pane/pane-delayed-agent-startup.test.ts", + "assertions": [ + "bounds a startup title storm to one extra read ladder and never adopts the title as identity", + "cancels delayed startup discovery on close" + ] + }, + { + "file": "src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.test.ts", + "assertions": [ + "confirms a delayed Claude from fresh startup output after the first read window expires" + ] + } + ], + "evidenceRuns": [ + { + "date": "2026-10-13", + "runner": "local", + "platform": "macos", + "command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/shared/agent-command-line-intent.test.ts src/shared/pi-agent-kind.test.ts src/shared/opencode-launch-command.test.ts src/main/ipc/pty/host-env/opencode-hook-installation.test.ts src/main/ipc/pty-spawn-env-terminal-basics.test.ts src/main/managed-data-accounts/launch-environment.test.ts src/renderer/src/components/terminal-pane/terminal-startup-command-classifier.test.ts src/renderer/src/components/terminal-pane/pane-delayed-agent-startup.test.ts src/renderer/src/components/terminal-pane/pty-connection-foreground-agent-routing.test.ts src/renderer/src/components/terminal-pane/pty-connection-hidden-codex-queries.test.ts --maxWorkers=2", + "result": "passed", + "durationSeconds": 1.86, + "summary": "214 assertions pass across nine files, including all 45 harness classifications, actual hook files, delayed account preparation, late process routing, hidden query delivery and bounded recovery." + } + ], + "runtimeBudget": { + "p95Seconds": 30, + "scope": "Focused deterministic gate; no CI soak established." + }, + "performanceBudget": { + "required": true, + "evidence": "Prefix scanning is capped at 4096 characters; ordinary output has no additional work. Startup title recovery uses one existing three-read ladder per command and joins active reads. Deterministic counts cover storms, close and untrackable providers." + }, + "flakeHistory": { + "status": "not-started", + "evidence": "Focused macOS runs passed; no cross-platform soak." + }, + "redGreenEvidence": { + "status": "complete", + "evidence": "Before the fix, delayed preparation produced 52 failing assertions and the captured late Claude startup title left process routing unset. The corresponding tests passed after the change." + }, + "promotionCriteria": [ + "Collect repeated independent runs and physical provider/platform evidence before promotion." + ], + "knownGaps": [ + "Real Claude hooks completed normally in the original macOS reproduction; no blanket hook outage was reproduced.", + "Literal numeric sleep prefixes only; arbitrary shell scripts, variables, separators, background jobs and pipelines remain unmodeled.", + "Physical Linux, Windows, SSH, WSL and remote-runtime delayed launches and all-harness live CLI runs were not performed.", + "A late agent emitting neither an identifiable startup title nor hook evidence still needs a later visibility/input observation." + ], + "demotionRule": "Keep experimental until soak evidence; investigate failures without widening polling windows, trusting titles or weakening hook/account assertions." + }, { "id": "native-chat.transcript-consumed-boundary", "title": "Transcript replacement remains visible when it races message publication", @@ -3595,12 +3713,11 @@ "invariant": "A first-install relay transfer must complete in an attempt-owned fixed staging slot before acquiring the shared version install lock. Reservation, promotion, confirmed cleanup, and stale recovery must reject path replacement, persisted-identity mismatch, POSIX symlinks, and Windows reparse points. A newly acquired install lock atomically records the execution host's boot identity; only a verified identity change or the existing stale-age proof may replace it, while legacy, missing, malformed, and unreadable identity state must retain the conservative stale fallback. Recovery examines only eight fixed slot/claim/delete names and removes at most one stale valid stage per call; eight unclaimable states fail with an explicit manual-recovery message. Split-SFTP hosts must prove the stage identity on the exact transfer session, only payload contents may be promoted under the shared lock, and cancellation must boundedly join SFTP, stream, local file-handle, and transfer settlement.", "oracle": "Pause a real ssh2 SFTP relay.js write after one remotely acknowledged chunk, prove the remote file is partial, abort the live transfer, and require no shared .install-lock, leaked local descriptor, or foreign-process termination. Separately inject two unconfirmed cancellations, require an independent deployment to install, launch, answer relay RPC, and read a real repository HEAD. Keep a fresh install lock on the current POSIX or Windows boot and require takeover to fail; replace its bounded identity with a prior-boot value and race concurrent recoverers, requiring exactly one atomic winner, a current successor identity, and no tombstone residue; omit the marker and require the legacy lock to remain fenced. Replace one retained fixed slot with an old-mtime same-owner directory while preserving the original, add a fixed-slot POSIX symlink, and require installed-path recovery to skip both while reclaiming a valid stale slot behind them. Add 15,197 unrelated relay-shaped names and run the real version GC, requiring bounded stdout and no removal. Unit and wire contracts cover exact POSIX and native PowerShell 0/1/7/8/9+ quota behavior, no-follow identity fencing, payload symlink/reparse rejection, one-item repeated draining, zero lock acquisition before upload settlement, joined transfer/channel teardown including never-settling failures, SFTP redirection, package.json namespace ownership, promotion only after the lock, cross-version isolation, and system-SSH behavior.", "commands": [ - "node config/scripts/run-ssh-staged-upload-reliability.mjs --powershell src/main/ssh/sftp-upload.test.ts src/main/ssh/ssh-file-transfer-abort.test.ts src/main/ssh/ssh-relay-install-namespace.test.ts src/main/ssh/sftp-namespace-resolution.test.ts src/main/ssh/ssh-connection-sftp-wire.test.ts src/main/ssh/ssh-remote-commands.test.ts" + "node config/scripts/run-ssh-staged-upload-reliability.mjs --powershell src/main/ssh/sftp-upload.test.ts src/main/ssh/ssh-file-transfer-abort.test.ts src/main/ssh/sftp-namespace-resolution.test.ts src/main/ssh/ssh-connection-sftp-wire.test.ts src/main/ssh/ssh-remote-commands.test.ts" ], "testFiles": [ "src/main/ssh/sftp-upload.test.ts", "src/main/ssh/ssh-file-transfer-abort.test.ts", - "src/main/ssh/ssh-relay-install-namespace.test.ts", "src/main/ssh/sftp-namespace-resolution.test.ts", "src/main/ssh/ssh-connection-sftp-wire.test.ts", "src/main/ssh/ssh-remote-commands.test.ts" @@ -3632,7 +3749,7 @@ "date": "2026-07-31", "runner": "local", "platform": "macos", - "command": "node config/scripts/run-ssh-staged-upload-reliability.mjs --powershell src/main/ssh/sftp-upload.test.ts src/main/ssh/ssh-file-transfer-abort.test.ts src/main/ssh/ssh-relay-install-namespace.test.ts src/main/ssh/sftp-namespace-resolution.test.ts src/main/ssh/ssh-connection-sftp-wire.test.ts src/main/ssh/ssh-remote-commands.test.ts", + "command": "node config/scripts/run-ssh-staged-upload-reliability.mjs --powershell src/main/ssh/sftp-upload.test.ts src/main/ssh/ssh-file-transfer-abort.test.ts src/main/ssh/sftp-namespace-resolution.test.ts src/main/ssh/ssh-connection-sftp-wire.test.ts src/main/ssh/ssh-remote-commands.test.ts", "result": "passed", "durationSeconds": 57.9, "summary": "Eleven focused files passed 152 tests with 3 platform skips using exact POSIX sh, native ARM macOS PowerShell 7.6.4, real ssh2 split-SFTP wire sessions, fixed-slot identity races, bounded recovery, joined cancellation teardown, and cross-version isolation." @@ -13600,10 +13717,10 @@ "https://github.com/stablyai/orca/pull/17170" ], "invariant": "Composition, native text forwarding, synthetic input, paste, and platform keyboard bypass paths must not send preedit/control bytes before commit and must commit text exactly once to the intended PTY. A live preedit must stay visible across an IME-resumed transaction, preserve every committed row-tail cell hidden by its opaque overlay, mask only a structurally verified Codex or Claude placeholder and never a row carrying typed text, keep the themed insertion caret and native candidate anchor inside the terminal at the final column, and clean up without stale overlay children or ownership classes. Layout-native Option text must preserve negotiated CSI-u alternate/associated fields and lock modifiers, distinguish repeat from press, and resolve releases with the press's primary identity plus the actual keyup modifiers without exposing a partial or stale layout refresh. An in-focus macOS input-source change must invalidate both renderer authorities before the next key can use the old source. When the snapshot source proves kitty state, macOS Preview commits must use the application's effective flags after the sequenced snapshot and every proven replay/live transition, and a claimed press delivered under report_event_types must produce exactly one matching release regardless of whether keyup arrives before or after insertText and regardless of xterm's defensive internal reset.", - "oracle": "Exact outbound bytes from the REAL native-text forwarder behind installPreviewImeBridge after initial snapshot restore, replacement resync, live transitions, and both keydown->insertText->keyup and keydown->keyup->insertText orderings; a wiring-only mock is supporting evidence, not the oracle. The current renderer-unit slice asserts native text commits route to the intended PTY once, composition/preedit bookkeeping does not leak premature text, resumed Windows event traces reactivate the visible preedit, an opaque mid-line overlay reproduces the committed row tail it covers, arbitrary DIM output remains visible, and final-column layout keeps both caret and textarea candidate anchor within the available screen width. The candidate-anchor slice reads back the inline `textarea.style.left` xterm's own listener and Orca's anchor listener both write during one composition event, so the assertion is the position the OS would sample rather than either writer's intent. A Codex frame whose prompt row is bold and whose dimmed model footer sits below a blank gap acquires the mask class while composing; the same placeholder text without that footer, a framed-versus-unframed Claude prompt, a row of arbitrary dimmed output, and a row carrying typed text do not. The class is gone after composition end, after a blur that is not followed by a session end, and after disposal. Rendered Electron/CDP geometry independently proves the overlay reproduces every committed cell it hides, that a real Codex placeholder at column 2 is masked rather than repeated, and that the final-column caret, preedit, and textarea right edges all land inside the screen. Input-source classification handles synthetic/native paths, paste/runtime forwarding avoids duplicate terminal payloads for covered fixtures, and Linux/Sogou candidate Space/digit selectors do not leak keydown/keypress/keyup while ordinary and long-held letter-to-digit typing remains available. A main/preload/renderer notification chain proves every live window invalidates immediately, the old native read settles before a coalesced refresh signal, and older refreshes are generation-fenced. The Electron/CDP live-PTY repro verifies Sogou-style Space and digit selectors submit only the committed Chinese text, while the legacy orphaned-letter-keyup sequence sends no selector byte to the PTY. Real legacy IME commit preservation, native candidate-window placement, and the full CJK/Vietnamese/Arabic/JIS-yen matrix run in follow-up platform soak where automation is possible.", + "oracle": "Exact outbound bytes from the REAL native-text forwarder behind installPreviewImeBridge after initial snapshot restore, replacement resync, live transitions, and both keydown->insertText->keyup and keydown->keyup->insertText orderings; a wiring-only mock is supporting evidence, not the oracle. The current renderer-unit slice asserts native text commits route to the intended PTY once, composition/preedit bookkeeping does not leak premature text, resumed Windows event traces reactivate the visible preedit, an opaque mid-line overlay reproduces the committed row tail it covers, arbitrary DIM output remains visible, and final-column layout keeps both caret and textarea candidate anchor within the available screen width. The candidate-anchor slice reads back the inline `textarea.style.left` xterm's own listener and Orca's anchor listener both write during one composition event, so the assertion is the position the OS would sample rather than either writer's intent. A Codex frame whose prompt row is bold and whose dimmed model footer sits below a blank gap acquires the mask class while composing; the same placeholder text without that footer, a framed-versus-unframed Claude prompt, a row of arbitrary dimmed output, and a row carrying typed text do not. The class is gone after composition end, after a blur that is not followed by a session end, and after disposal. Rendered Electron/CDP geometry independently proves the overlay reproduces every committed cell it hides, that a real Codex placeholder at column 2 is masked rather than repeated, and that the final-column caret, preedit, and textarea right edges all land inside the screen. Input-source classification handles synthetic/native paths, paste/runtime forwarding avoids duplicate terminal payloads for covered fixtures, and real fcitx4/Sogou captures send only the committed candidate for Space/digit picks while ordinary typing, literal Space and digits stay available. A main/preload/renderer notification chain proves every live window invalidates immediately, the old native read settles before a coalesced refresh signal, and older refreshes are generation-fenced. The Electron/CDP live-PTY repro verifies Sogou-style Space and digit selectors submit only the committed Chinese text. Real legacy IME commit preservation, native candidate-window placement, and the full CJK/Vietnamese/Arabic/JIS-yen matrix run in follow-up platform soak where automation is possible.", "commands": [ "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-native-text-forwarder.test.ts src/renderer/src/components/terminal-pane/terminal-ime-substituted-text-commit.test.ts src/renderer/src/components/terminal-pane/terminal-ime-macos-keybinding-dict-trace.test.ts src/renderer/src/components/terminal-pane/terminal-paste-runtime.test.ts src/renderer/src/components/terminal-pane/terminal-ime-composition-tracker.test.ts src/renderer/src/components/terminal-pane/terminal-ime-candidate-key-release-guard.test.ts src/renderer/src/components/terminal-pane/xterm-bypass-policy-non-mac.test.ts src/renderer/src/components/terminal-pane/xterm-bypass-policy.test.ts", - "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-linux-fcitx4-trace-replay.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-xterm-midline-preedit-tail.test.ts src/renderer/src/components/terminal-pane/terminal-ime-xterm-resumed-preedit-visibility.test.ts src/renderer/src/components/terminal-pane/terminal-ime-xterm-trailing-preedit-occlusion.test.ts src/renderer/src/lib/pane-manager/terminal-ime-candidate-anchor.test.ts src/renderer/src/components/terminal-pane/terminal-ime-composer-placeholder-mask.test.ts src/shared/terminal-composer-draft.test.ts src/main/daemon/terminal-cursor-line-context.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/dashboard-popout/preview-terminal-ime-bridge-kitty-bytes.test.ts src/renderer/src/components/dashboard-popout/preview-terminal-snapshot-replay.test.ts src/renderer/src/components/dashboard-popout/AgentTerminalPreview.test.tsx src/renderer/src/components/dashboard-popout/AgentTerminalPreview.option-dead-key.test.tsx src/shared/terminal-kitty-keyboard-mode-tracker.test.ts src/main/ipc/terminal-preview.test.ts src/main/ipc/terminal-preview-output-stream.test.ts src/renderer/src/runtime/remote-runtime-terminal-snapshot-kitty-flags.test.ts src/main/daemon/daemon-pty-adapter.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-kitty-csi-u-encoding.test.ts src/renderer/src/components/terminal-pane/terminal-shortcut-option-compose.test.ts src/renderer/src/components/terminal-pane/terminal-option-kitty-release.test.ts src/renderer/src/lib/keyboard-layout/layout-base-character.test.ts src/renderer/src/lib/keyboard-layout/option-as-alt-probe.test.ts src/main/ipc/macos-keyboard-layout-snapshot.test.ts src/main/ipc/macos-keyboard-layout-change-notifications.test.ts src/preload/app-restart-checkpoint-routing.test.ts src/renderer/src/web/web-preload-api-ui.test.ts", @@ -13619,7 +13736,7 @@ "src/renderer/src/components/terminal-pane/terminal-paste-runtime.test.ts", "src/renderer/src/components/terminal-pane/terminal-ime-composition-tracker.test.ts", "src/renderer/src/components/terminal-pane/terminal-ime-candidate-key-release-guard.test.ts", - "src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts", + "src/renderer/src/components/terminal-pane/terminal-ime-linux-fcitx4-trace-replay.test.ts", "src/renderer/src/components/terminal-pane/terminal-ime-xterm-midline-preedit-tail.test.ts", "src/renderer/src/components/terminal-pane/terminal-ime-xterm-resumed-preedit-visibility.test.ts", "src/renderer/src/components/terminal-pane/terminal-ime-xterm-trailing-preedit-occlusion.test.ts", @@ -13695,11 +13812,11 @@ ] }, { - "file": "src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts", + "file": "src/renderer/src/components/terminal-pane/terminal-ime-linux-fcitx4-trace-replay.test.ts", "assertions": [ - "an orphaned plain-letter keyup arms exactly the next bare digit guard", - "ordinary, overlapping, shifted, and long-held letter keydowns keep following digits available", - "physical letter tracking survives cross-pane focus handoff and clears on renderer-window blur" + "real fcitx4 Sogou captures (GTK module and XIM) send only the committed candidate for Space and digit picks, under legacy keys and kitty flags 1 and 5", + "a real fcitx4 Google Pinyin in-client preedit still commits through the composition path", + "an XIM pick's code-less keydown pairs with its keyup so kitty event reporting sends one release per pick" ] }, { @@ -13974,22 +14091,13 @@ "summary": "8 test file(s) passed, 143 tests, after adding the OS key-binding substitution replay. Discrimination checked by mutation rather than assumed: suppressing the structural claim, and separately removing the single character the older punctuation table happened to list, each make the replay send the raw layout character while both paired negatives stay green." }, { - "date": "2026-07-11", + "date": "2026-10-13", "runner": "local", "platform": "macos", - "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts", + "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-linux-fcitx4-trace-replay.test.ts", "result": "passed", - "durationSeconds": 0.619, - "summary": "1 state test file and 10 tests passed on macOS, including orphan-keyup, shifted/modifier-changed releases, intervening-key cancellation, cross-pane focus handoff, window/terminal blur cleanup, and long-held-letter coverage; the complete 8-file slice also passed 158 tests." - }, - { - "date": "2026-07-11", - "runner": "local", - "platform": "linux", - "command": "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/terminal-pane/terminal-ime-linux-candidate-state.test.ts", - "result": "passed", - "durationSeconds": 0.747, - "summary": "1 state test file and 10 tests passed in Debian 12 arm64 Docker under Node 24, including orphan-keyup, shifted/modifier-changed releases, intervening-key cancellation, cross-pane focus handoff, window/terminal blur cleanup, and long-held-letter coverage; the complete 8-file slice also passed 158 tests." + "durationSeconds": 1.99, + "summary": "1 replay test file and 37 tests passed on macOS: real fcitx4 Sogou (GTK module and XIM) and Google Pinyin captures through the full Linux pane keyboard stack under legacy keys and kitty flags 1 and 5, plus XIM release pairing under kitty flags 3. The same captures were also replayed with real fcitx4 + Sogou in an Ubuntu 22.04 container, with every scenario sending only the committed text." }, { "date": "2026-07-11", @@ -17829,8 +17937,8 @@ "node config/scripts/runtime-file-watcher-resource-probe.mjs", "node config/scripts/runtime-file-watcher-fault-harness.mjs", "ELECTRON_RUN_AS_NODE=1 pnpm exec electron config/scripts/runtime-file-watcher-fault-harness.mjs", - "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/ssh-relay-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", - "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/ssh-relay-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs" + "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/remote-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", + "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/remote-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs" ], "testFiles": [ "src/main/daemon/daemon-pty-adapter.test.ts", @@ -17876,7 +17984,7 @@ "src/shared/promise-settlement-waiters.test.ts", "config/scripts/runtime-file-watcher-fault-harness.mjs", "config/scripts/runtime-file-watcher-resource-probe.mjs", - "src/main/ssh/ssh-relay-versioned-install.test.ts", + "src/main/ssh/remote-versioned-install.test.ts", "config/scripts/package-electron-runtime-contract.test.mjs" ], "assertionRefs": [ @@ -18198,9 +18306,9 @@ ] }, { - "file": "src/main/ssh/ssh-relay-versioned-install.test.ts", + "file": "src/main/ssh/remote-versioned-install.test.ts", "assertions": [ - "remote completeness requires relay.js, relay-watcher.js, and the install sentinel" + "remote completeness requires every model artifact and the install sentinel" ] }, { @@ -18275,7 +18383,7 @@ "date": "2026-07-13", "runner": "local", "platform": "macos", - "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/ssh-relay-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", + "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/remote-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", "result": "passed", "durationSeconds": 10.01, "summary": "Six relay registry, filesystem/Git handler, bundled subprocess, install, and package contract files passed with 226 tests." @@ -18329,7 +18437,7 @@ "date": "2026-07-13", "runner": "local", "platform": "macos", - "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/ssh-relay-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", + "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/remote-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", "result": "passed", "durationSeconds": 10.69, "summary": "Six relay registry, filesystem/Git handler, bundled subprocess, install, and package contract files passed with 226 tests, including watcher/PTY removal fencing and recursive deletion failure behavior." @@ -18383,7 +18491,7 @@ "date": "2026-07-13", "runner": "local", "platform": "macos", - "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/ssh-relay-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", + "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/ssh/remote-versioned-install.test.ts config/scripts/package-electron-runtime-contract.test.mjs", "result": "passed", "durationSeconds": 9.79, "summary": "Six relay registry, filesystem/Git handler, bundled subprocess, install, and package contract files passed with 225 tests, including terminal removal notification and recursive deletion fencing." diff --git a/config/runtime-electron-baseline.txt b/config/runtime-electron-baseline.txt deleted file mode 100644 index a308ec4b62c..00000000000 --- a/config/runtime-electron-baseline.txt +++ /dev/null @@ -1,6 +0,0 @@ -# Modules reachable from the Orca runtime or structured-chat code that import `electron`. -# Generated by config/scripts/check-runtime-electron-ratchet.mjs. -# This list is EMPTY and must stay that way: both run in orcad, the headless runtime, -# on plain Node (see `pnpm run build:orcad`). Any entry means that code got less portable; -# migrate the module behind a host port instead (src/main/host/). - diff --git a/config/scripts/agent-inspection-cadence-batching-benchmark.mjs b/config/scripts/agent-inspection-cadence-batching-benchmark.mjs index 128627676c4..bdcd9c62fd0 100644 --- a/config/scripts/agent-inspection-cadence-batching-benchmark.mjs +++ b/config/scripts/agent-inspection-cadence-batching-benchmark.mjs @@ -12,7 +12,7 @@ import fs from 'node:fs' import nodeModule from 'node:module' import path from 'node:path' import process from 'node:process' -import { fileURLToPath } from 'node:url' +import { fileURLToPath, pathToFileURL } from 'node:url' if (!process.execArgv.includes('--experimental-transform-types')) { const result = spawnSync( @@ -51,13 +51,17 @@ for (const paneCount of PANE_COUNTS) { } const { nextCadenceInspectionDelayMs } = await import( - path.join(ROOT, 'src/renderer/src/components/terminal-pane/agent-completion-poll-interval.ts') + pathToFileURL( + path.join(ROOT, 'src/renderer/src/components/terminal-pane/agent-completion-poll-interval.ts') + ).href ) const { POLL_TIER_INTERVAL_MS } = await import( - path.join(ROOT, 'src/renderer/src/components/terminal-pane/agent-completion-poll-cadence.ts') + pathToFileURL( + path.join(ROOT, 'src/renderer/src/components/terminal-pane/agent-completion-poll-cadence.ts') + ).href ) const { PROCESS_TABLE_SNAPSHOT_MAX_STALENESS_MS } = await import( - path.join(ROOT, 'src/shared/process-table-snapshot-reader.ts') + pathToFileURL(path.join(ROOT, 'src/shared/process-table-snapshot-reader.ts')).href ) // Pre-change: independent ±10% jitter per pane, re-rolled on every reschedule. diff --git a/config/scripts/anti-slop-scope-regression.test.mjs b/config/scripts/anti-slop-scope-regression.test.mjs new file mode 100644 index 00000000000..50b75c95e81 --- /dev/null +++ b/config/scripts/anti-slop-scope-regression.test.mjs @@ -0,0 +1,48 @@ +import { cpSync, mkdtempSync, rmSync } from 'node:fs' +import { createRequire } from 'node:module' +import path from 'node:path' +import { afterAll, expect, it } from 'vitest' +import { runOxlintPluginOnSource } from './oxlint-plugin-test-runner.mjs' + +const directory = mkdtempSync(path.join(import.meta.dirname, '.anti-slop-scope-')) +const source = path.dirname(createRequire(import.meta.url).resolve('oxlint-plugin-anti-slop')) +cpSync(source, directory, { recursive: true }) +afterAll(() => rmSync(directory, { recursive: true, force: true })) + +function lint(source, rule) { + return runOxlintPluginOnSource({ + pluginName: 'anti-slop', + pluginPath: path.join(directory, 'index.ts'), + rules: { [`anti-slop/${rule}`]: 'error' }, + source, + extension: 'ts' + }) +} + +it.each([ + ['const value = {}; const wide: unknown = value; wide as { id: string };', 1], + ['const value = {}; const alias = value; const wide: unknown = alias; <{ id: string }>wide;', 1], + ['function parse(input: unknown) { return input as { id: string }; }', 0], + ['const value = {}; let wide: unknown = value; wide as { id: string };', 0], + ['const value = {}; const wide: unknown = value; function read() { return wide as {}; }', 0], + [ + 'const value = {}; const wide: unknown = value; function read(wide: unknown) { return wide as {}; }', + 0 + ], + ['const value = {}; const wide: unknown = value; wide as unknown;', 0] +])('preserves widening evidence and lexical boundaries: %s', (source, count) => { + expect(lint(source, 'no-widen-then-assert')).toHaveLength(count) +}) + +it.each([ + ["import { vi as test } from 'vitest'; test.mock('module');", 1], + ["import { jest as test } from '@jest/globals'; test['doMock']('module');", 1], + ["jest.unstable_mockModule('module', () => ({}));", 1], + ["vi['mock']('module');", 1], + ["import { vi } from 'vitest'; vi.mocked(value);", 0], + ["const unrelated = { mock() {} }; unrelated.mock('module');", 0], + ["const vi = { mock() {} }; vi.mock('module');", 0], + ["import { vi as test } from 'vitest'; function run(test) { test.mock('module'); }", 0] +])('preserves mock method and owner resolution: %s', (source, count) => { + expect(lint(source, 'no-module-mocking')).toHaveLength(count) +}) diff --git a/config/scripts/appimage-node-runtime.cjs b/config/scripts/appimage-node-runtime.cjs new file mode 100644 index 00000000000..34d393e1521 --- /dev/null +++ b/config/scripts/appimage-node-runtime.cjs @@ -0,0 +1,61 @@ +/** + * Linux builds place the pinned Node at resources/node-runtime/bin/node in afterPack, before the + * glibc-floor gate scans the tree. deb and rpm drop it again through fpm, so only the AppImage + * ships it: an AppImage's files vanish with its mount, an installed package's do not. + */ +const { chmodSync, copyFileSync, mkdirSync } = require('node:fs') +const { join, resolve } = require('node:path') +const { pathToFileURL } = require('node:url') +const { + APPIMAGE_NODE_RUNTIME_FPM_EXCLUDE, + APPIMAGE_NODE_RUNTIME_SEGMENTS, + appImageNodeRuntimeTarget +} = require('../../src/shared/appimage-node-runtime.ts') +const { runTerminalHostRoundTrip } = require('./verify-packaged-daemon-entry.cjs') + +const appImageNodeRuntimeFpmArgs = ['--exclude', APPIMAGE_NODE_RUNTIME_FPM_EXCLUDE] +const PTY_ROUND_TRIP_TIMEOUT_MS = 20_000 + +async function ensurePinnedNode(target) { + const { ensurePinnedNodeExecutable } = await import( + pathToFileURL(resolve(__dirname, 'pinned-node-downloads.mjs')).href + ) + return ensurePinnedNodeExecutable({ target }) +} + +/** `arch` is a Node arch name; the copy is hash-checked by the pinned download it comes from. */ +async function placeAppImageNodeRuntime(resourcesDir, arch, ensureNode = ensurePinnedNode) { + const target = appImageNodeRuntimeTarget(arch) + if (!target) { + throw new Error(`[appimage-node-runtime] the Node pin has no glibc build for Linux ${arch}`) + } + const destination = join(resourcesDir, ...APPIMAGE_NODE_RUNTIME_SEGMENTS) + mkdirSync(join(destination, '..'), { recursive: true }) + copyFileSync(await ensureNode(target), destination) + chmodSync(destination, 0o755) + return destination +} + +/** The bundled Node must load the packaged node-pty and serve one PTY, as the daemon will. */ +async function verifyAppImageNodeRuntimeServesPty(resourcesDir, runtimePath) { + const stderr = [] + try { + await runTerminalHostRoundTrip({ + command: [runtimePath], + entry: join(resourcesDir, 'app.asar.unpacked', 'out', 'main', 'daemon-entry.js'), + deadline: Date.now() + PTY_ROUND_TRIP_TIMEOUT_MS, + stderr + }) + } catch (error) { + throw new Error( + `[appimage-node-runtime] the bundled Node did not serve a PTY: ${error.message}\n${stderr.join('').slice(-2000)}` + ) + } + console.log('[appimage-node-runtime] OK — the bundled Node served a PTY') +} + +module.exports = { + appImageNodeRuntimeFpmArgs, + placeAppImageNodeRuntime, + verifyAppImageNodeRuntimeServesPty +} diff --git a/config/scripts/appimage-node-runtime.test.mjs b/config/scripts/appimage-node-runtime.test.mjs new file mode 100644 index 00000000000..4161d9e7761 --- /dev/null +++ b/config/scripts/appimage-node-runtime.test.mjs @@ -0,0 +1,67 @@ +import { mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs' +import { createRequire } from 'node:module' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { afterEach, beforeEach, describe, expect, it } from 'vitest' + +const require = createRequire(import.meta.url) +const { + appImageNodeRuntimeFpmArgs, + placeAppImageNodeRuntime +} = require('./appimage-node-runtime.cjs') +const releaseConfig = require('../electron-builder.config.cjs') +const prLinuxConfig = require('../electron-builder-pr-linux.config.cjs') + +let root = '' + +beforeEach(() => { + root = mkdtempSync(join(tmpdir(), 'orca-appimage-node-pack-')) +}) + +afterEach(() => { + rmSync(root, { recursive: true, force: true }) +}) + +/** Ruby's File.fnmatch without flags, which is how fpm applies --exclude: `*` crosses `/`. */ +function fpmExcludes(pattern, stagedPath) { + const source = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replaceAll('*', '.*') + return new RegExp(`^${source}$`).test(stagedPath) +} + +describe('the pinned Node in Linux packages', () => { + it('is placed under resources as an executable bin/node for the slice arch', async () => { + const pinned = join(root, 'pinned-node') + writeFileSync(pinned, 'node bytes') + const requested = [] + const destination = await placeAppImageNodeRuntime(join(root, 'resources'), 'arm64', (t) => { + requested.push(t) + return pinned + }) + expect(requested).toEqual(['linux-arm64-glibc']) + expect(destination).toBe(join(root, 'resources', 'node-runtime', 'bin', 'node')) + expect(readFileSync(destination, 'utf8')).toBe('node bytes') + expect(statSync(destination).mode & 0o777).toBe(0o755) + }) + + it('fails packaging for a slice the pin has no glibc build for', async () => { + await expect( + placeAppImageNodeRuntime(join(root, 'resources'), 'ia32', () => '') + ).rejects.toThrow('no glibc build for Linux ia32') + }) + + it('ships only in the AppImage: deb and rpm exclude it, release and PR builds alike', () => { + for (const config of [releaseConfig, prLinuxConfig]) { + for (const target of ['deb', 'rpm']) { + const fpm = config[target].fpm.join('\0') + expect(fpm).toContain(appImageNodeRuntimeFpmArgs.join('\0')) + } + expect(config.appImage.fpm).toBeUndefined() + } + const [, pattern] = appImageNodeRuntimeFpmArgs + expect(fpmExcludes(pattern, 'opt/Orca/resources/node-runtime')).toBe(true) + expect(fpmExcludes(pattern, 'opt/Orca/resources/node_modules')).toBe(false) + expect(fpmExcludes(pattern, 'opt/Orca/resources/app.asar.unpacked/out/node-runtime')).toBe( + false + ) + }) +}) diff --git a/config/scripts/benchmark-ci-preflight-critical-path.mjs b/config/scripts/benchmark-ci-preflight-critical-path.mjs new file mode 100644 index 00000000000..45846ff75e3 --- /dev/null +++ b/config/scripts/benchmark-ci-preflight-critical-path.mjs @@ -0,0 +1,183 @@ +import { mkdirSync, rmSync, writeFileSync } from 'node:fs' +import { availableParallelism, totalmem } from 'node:os' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { runProcessSync } from '@orca/process-host' +import { measurePreflightCommand } from './preflight-benchmark-command.mjs' +import { buildCounterbalancedSchedule } from './counterbalanced-benchmark-schedule.mjs' +import { summarizeBenchmarkSamples } from './benchmark-sample-summary.mjs' + +const comparison = process.argv[2] +if (!['smoke', 'sync-spawn', 'typecheck'].includes(comparison) || process.argv.length !== 3) { + throw new Error('Use smoke, sync-spawn or typecheck') +} +const root = fileURLToPath(new URL('../..', import.meta.url)) +const output = path.join(root, '.build/preflight-benchmark') +mkdirSync(output, { recursive: true }) +const env = { ...process.env, ORCA_BACKGROUND_LAUNCH: '1' } +const report = { + sourceSha: process.env.GITHUB_SHA ?? null, + comparison, + host: { + platform: process.platform, + arch: process.arch, + node: process.version, + memoryBytes: totalmem(), + cores: availableParallelism() + }, + method: + 'Four counterbalanced pairs on one checkout; baseline comes from its first parent. Smoke clears build output each run; native and download caches are warmed for both arms.', + measurements: [] +} +const save = () => + writeFileSync( + path.join(output, `critical-path-${comparison}.json`), + `${JSON.stringify(report, null, 2)}\n` + ) + +function baselineSource(file) { + const result = runProcessSync({ program: 'git', args: ['show', `HEAD^1:${file}`], cwd: root }) + if (result.code !== 0 || result.outputTruncated) { + throw new Error(`Cannot read baseline ${file}`) + } + return result.stdout +} +async function command(program, args, label) { + const result = await measurePreflightCommand({ program, args, label, root, output, env }) + if (result.code !== 0 || result.signal || result.timedOut) { + throw new Error(`${label}: ${JSON.stringify(result)}`) + } + return result +} + +const baselineName = + comparison === 'smoke' + ? 'runtime-serve-terminal-smoke.mjs' + : comparison === 'typecheck' + ? 'run-typecheck-projects-in-parallel.mjs' + : 'check-main-sync-spawn-ratchet.mjs' +const baselineFile = path.join(root, 'config/scripts', `.benchmark-baseline-${baselineName}`) +const runnerFile = path.join(output, 'baseline-smoke-runner.mjs') +writeFileSync(baselineFile, baselineSource(`config/scripts/${baselineName}`)) + +try { + if (comparison !== 'smoke') { + report.host.bun = ( + await command('bun', ['--version'], 'critical-path-bun-version') + ).stdout.trim() + if (report.host.bun !== '1.4.3') { + throw new Error('Pin Bun 1.4.3') + } + } + if (comparison === 'sync-spawn') { + const baseline = await import(new URL(`./.benchmark-baseline-${baselineName}`, import.meta.url)) + const candidate = await import('./check-main-sync-spawn-ratchet.mjs') + const sources = candidate.collectSyncSpawnSources(root) + let analyzed = 0 + for (const [file, contents] of sources) { + const before = baseline.collectSyncLaunchUses(file, contents) + const after = candidate.collectSyncLaunchUses(file, contents) + if (JSON.stringify(before) !== JSON.stringify(after)) { + throw new Error(`Findings changed: ${file}`) + } + analyzed++ + } + for (const source of ['import {', 'const broken = ;']) { + for (const implementation of [baseline, candidate]) { + let rejected = false + try { + implementation.collectSyncLaunchUses('src/main/malformed.ts', source) + } catch { + rejected = true + } + if (!rejected) { + throw new Error('Malformed source was accepted') + } + } + } + report.parity = `Identical counts and symbols for all ${analyzed} production files; both reject malformed syntax.` + } else if (comparison === 'smoke') { + const steps = [ + [process.execPath, ['config/scripts/ensure-native-runtime.mjs', '--runtime=node']], + ['pnpm', ['run', 'build:cli']], + ['pnpm', ['run', 'build:orcad']], + [process.execPath, [baselineFile, '--target', 'orcad']] + ] + writeFileSync( + runnerFile, + `import { runProcessSync } from '@orca/process-host'; +for (const [program, args] of ${JSON.stringify(steps)}) { + const result = runProcessSync({ program, args, cwd: ${JSON.stringify(root)}, stdio: 'inherit', timeoutMs: null }); + if (result.code !== 0 || result.signal) process.exit(result.code || 1); +}\n` + ) + await command('pnpm', ['run', 'build:orcad'], 'critical-path-smoke-warmup') + report.parity = + 'Both clients must pass pairing, worktree, PTY and execution-host CLI round trips.' + } else { + report.parity = + 'Same four projects, Bun version, two processes and two threads; both suites must pass.' + } + + let findings + for (const [pair, order] of buildCounterbalancedSchedule(4, 'baseline', 'candidate').entries()) { + for (const arm of order) { + let result + if (comparison === 'smoke') { + rmSync(path.join(root, 'out'), { recursive: true, force: true }) + result = + arm === 'baseline' + ? await command(process.execPath, [runnerFile], `smoke-${pair}-${arm}`) + : await command('pnpm', ['run', 'smoke:orcad-terminal'], `smoke-${pair}-${arm}`) + for (const marker of [ + 'terminal round trip OK', + 'execution host CLI round trip OK', + '[serve-terminal-smoke] PASS' + ]) { + if (!result.stdout.includes(marker)) { + throw new Error(`Smoke skipped ${marker}: ${arm}`) + } + } + } else if (comparison === 'typecheck') { + result = await command( + process.execPath, + [ + arm === 'baseline' ? baselineFile : `config/scripts/${baselineName}`, + '--compiler=bun', + '--bun-concurrency=2', + '--bun-threads=2' + ], + `typecheck-${pair}-${arm}` + ) + } else { + result = await command( + 'bun', + [arm === 'baseline' ? baselineFile : `config/scripts/${baselineName}`], + `sync-spawn-${pair}-${arm}` + ) + if (findings !== undefined && findings !== result.stdout) { + throw new Error(`Ratchet findings changed: ${arm}`) + } + findings = result.stdout + } + report.measurements.push({ pair, arm, ...result }) + save() + console.log(JSON.stringify({ comparison, pair, arm, durationMs: result.durationMs })) + } + } + report.summary = Object.fromEntries( + ['baseline', 'candidate'].map((arm) => [ + arm, + summarizeBenchmarkSamples( + report.measurements + .filter((sample) => sample.arm === arm) + .map((sample) => sample.durationMs) + ) + ]) + ) + save() + console.log(JSON.stringify(report.summary)) +} finally { + rmSync(baselineFile, { force: true }) + rmSync(runnerFile, { force: true }) +} diff --git a/config/scripts/benchmark-preflight-compat-boundary.mjs b/config/scripts/benchmark-preflight-compat-boundary.mjs new file mode 100644 index 00000000000..521be683cf5 --- /dev/null +++ b/config/scripts/benchmark-preflight-compat-boundary.mjs @@ -0,0 +1,130 @@ +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' +import path from 'node:path' +import { fileURLToPath, pathToFileURL } from 'node:url' +import { measurePreflightCommand } from './preflight-benchmark-command.mjs' +import { buildCounterbalancedSchedule } from './counterbalanced-benchmark-schedule.mjs' +import { summarizeBenchmarkSamples } from './benchmark-sample-summary.mjs' + +const root = fileURLToPath(new URL('../..', import.meta.url)) +const output = path.join(root, '.build/preflight-benchmark') +mkdirSync(output, { recursive: true }) +const bun = process.env.ORCA_BENCHMARK_BUN ?? 'bun' +const sourcePath = 'config/scripts/check-compat-boundary-imports.mjs' +const baselineRef = process.env.ORCA_COMPAT_BASELINE_REF ?? 'HEAD^' +const baselinePath = path.join(output, 'compat-baseline.mjs') +const report = { + sourceSha: process.env.GITHUB_SHA ?? null, + baselineRef, + measurements: [], + comparisons: {}, + negativeProbe: null +} +const save = () => + writeFileSync(path.join(output, 'compat-boundary.json'), `${JSON.stringify(report, null, 2)}\n`) +const command = (program, args, label) => + measurePreflightCommand({ + program, + args, + label, + root, + output, + env: { ...process.env, ORCA_BACKGROUND_LAUNCH: '1' } + }) +async function requireSuccess(program, args, label) { + const result = await command(program, args, label) + if (result.code !== 0 || result.signal || result.timedOut) { + throw new Error(`${label}: ${JSON.stringify(result)}`) + } + return result +} +report.bunVersion = (await requireSuccess(bun, ['--version'], 'compat-bun-version')).stdout.trim() +if (report.bunVersion !== '1.4.3') { + throw new Error('Pin Bun 1.4.3') +} +report.baselineSha = ( + await requireSuccess('git', ['rev-parse', baselineRef], 'compat-baseline-sha') +).stdout.trim() +const baselineSource = ( + await requireSuccess( + 'git', + ['show', `${report.baselineSha}:${sourcePath}`], + 'compat-baseline-source' + ) +).stdout +// Both versions inspect this checkout and load the same parser and source inventory. +writeFileSync( + baselinePath, + baselineSource.replace( + /from '(\.\/[^']+)'/g, + (_, specifier) => + `from '${pathToFileURL(path.resolve(root, 'config/scripts', specifier)).href}'` + ) +) +const arms = { + baseline: [process.execPath, baselinePath], + node: [process.execPath, sourcePath], + bun: [bun, sourcePath] +} +for (const [comparison, first, second] of [ + ['compat-prefilter', 'baseline', 'node'], + ['compat-runtime', 'node', 'bun'] +]) { + let diagnostics + for (const [pair, order] of buildCounterbalancedSchedule(4, first, second).entries()) { + for (const arm of order) { + const [program, script] = arms[arm] + const result = await requireSuccess(program, [script], `${comparison}-${pair}-${arm}`) + const findings = `${result.stdout}${result.stderr}` + if (diagnostics !== undefined && diagnostics !== findings) { + throw new Error(`Diagnostics changed: ${comparison}`) + } + diagnostics = findings + report.measurements.push({ comparison, pair, arm, ...result }) + save() + console.log(JSON.stringify({ comparison, pair, arm, durationMs: result.durationMs })) + } + } + report.comparisons[comparison] = Object.fromEntries( + [first, second].map((arm) => [ + arm, + summarizeBenchmarkSamples( + report.measurements + .filter((sample) => sample.comparison === comparison && sample.arm === arm) + .map((sample) => sample.durationMs) + ) + ]) + ) + save() +} +const probeDirectory = mkdtempSync(path.join(root, 'src/shared/preflight-compat-probe-')) +try { + for (const [name, specifier] of [ + ['plain', '../workspace-layout/old-client'], + ['escaped', '../workspace-layout/old-\\u0063lient/private'] + ]) { + writeFileSync(path.join(probeDirectory, `${name}.ts`), `import '${specifier}'\n`) + } + let diagnostics + for (const [arm, [program, script]] of Object.entries(arms)) { + const result = await command(program, [script], `compat-invalid-${arm}`) + const findings = `${result.stdout}${result.stderr}` + if ( + result.code !== 1 || + result.signal || + result.timedOut || + !findings.includes('/plain.ts:') || + !findings.includes('/escaped.ts:') + ) { + throw new Error(`Compatibility check did not reject fixtures: ${JSON.stringify(result)}`) + } + if (diagnostics !== undefined && diagnostics !== findings) { + throw new Error(`Negative-probe diagnostics changed: ${arm}`) + } + diagnostics = findings + } + report.negativeProbe = 'identical findings in baseline Node, optimized Node and optimized Bun' + save() +} finally { + rmSync(probeDirectory, { recursive: true, force: true }) +} +console.log(JSON.stringify(report.comparisons)) diff --git a/config/scripts/benchmark-preflight-localization-extraction.mjs b/config/scripts/benchmark-preflight-localization-extraction.mjs new file mode 100644 index 00000000000..1dce9715b90 --- /dev/null +++ b/config/scripts/benchmark-preflight-localization-extraction.mjs @@ -0,0 +1,96 @@ +import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { measurePreflightCommand } from './preflight-benchmark-command.mjs' +import { buildCounterbalancedSchedule } from './counterbalanced-benchmark-schedule.mjs' +import { summarizeBenchmarkSamples } from './benchmark-sample-summary.mjs' + +const root = fileURLToPath(new URL('../..', import.meta.url)) +const output = path.join(root, '.build/preflight-benchmark') +mkdirSync(output, { recursive: true }) +const bun = process.env.ORCA_BENCHMARK_BUN ?? 'bun' +const report = { sourceSha: process.env.GITHUB_SHA ?? null, measurements: [], comparison: null } +const save = () => + writeFileSync( + path.join(output, 'localization-extraction.json'), + `${JSON.stringify(report, null, 2)}\n` + ) +async function requireSuccess(program, args, label, env = process.env) { + const result = await measurePreflightCommand({ program, args, label, root, output, env }) + if (result.code !== 0 || result.signal || result.timedOut) { + throw new Error(`${label}: ${JSON.stringify(result)}`) + } + return result +} +report.bunVersion = ( + await requireSuccess(bun, ['--version'], 'extraction-bun-version') +).stdout.trim() +if (report.bunVersion !== '1.4.3') { + throw new Error('Pin Bun 1.4.3') +} +const directory = mkdtempSync(path.join(output, 'extraction-')) +const outputPattern = path.join(directory, '{{language}}.json').split(path.sep).join('/') +const args = [ + 'node_modules/i18next-cli/dist/esm/cli.js', + '--config', + 'config/i18next.config.ts', + 'extract', + '--sync-primary', + '--quiet' +] +let catalog +try { + for (const [pair, order] of buildCounterbalancedSchedule(4, 'node', 'bun').entries()) { + for (const arm of order) { + rmSync(path.join(directory, 'en.json'), { force: true }) + const result = await requireSuccess( + arm === 'bun' ? bun : process.execPath, + args, + `extraction-${pair}-${arm}`, + { ...process.env, ORCA_BACKGROUND_LAUNCH: '1', ORCA_I18N_EXTRACTION_OUTPUT: outputPattern } + ) + const extracted = JSON.stringify( + JSON.parse(readFileSync(path.join(directory, 'en.json'), 'utf8')) + ) + if (catalog !== undefined && catalog !== extracted) { + throw new Error(`Extracted catalog changed: ${arm}`) + } + catalog = extracted + report.measurements.push({ pair, arm, ...result }) + save() + console.log(JSON.stringify({ pair, arm, durationMs: result.durationMs })) + } + } + report.comparison = Object.fromEntries( + ['node', 'bun'].map((arm) => [ + arm, + summarizeBenchmarkSamples( + report.measurements + .filter((sample) => sample.arm === arm) + .map((sample) => sample.durationMs) + ) + ]) + ) + report.catalogParity = 'identical full extracted catalogs in all eight runs' + save() +} finally { + rmSync(directory, { recursive: true, force: true }) +} +let findings +for (const [arm, program] of [ + ['node', process.execPath], + ['bun', bun] +]) { + const result = await requireSuccess( + program, + ['config/scripts/verify-localization-extraction.mjs'], + `extraction-check-${arm}` + ) + if (findings !== undefined && findings !== result.stdout) { + throw new Error(`Extraction gate findings changed: ${arm}`) + } + findings = result.stdout +} +report.gateParity = findings +save() +console.log(JSON.stringify(report.comparison)) diff --git a/config/scripts/build-mobile-web-app-bundle.mjs b/config/scripts/build-mobile-web-app-bundle.mjs index 92481b76c9c..64ac4fae206 100644 --- a/config/scripts/build-mobile-web-app-bundle.mjs +++ b/config/scripts/build-mobile-web-app-bundle.mjs @@ -506,7 +506,9 @@ export async function mobileWebAppModuleClosure(entryModules, { absWorkingDir } // Extensionless, so `resolveExtensions` picks the same file the bundle ships: a route with a // `.web.tsx` sibling resolves to that one, and naming the `.tsx` path explicitly would measure // the native switch no browser ever loads. - entryPoints: entryModules.map((entry) => entry.replace(/\.tsx?$/, '')), + entryPoints: entryModules.map((entry) => + resolve(absWorkingDir ?? base.absWorkingDir, entry.replace(/\.tsx?$/, '')) + ), splitting: false, // `[dir]` too: `app/_layout` and `app/h/_layout` share a name. entryNames: '[dir]/[name]', diff --git a/config/scripts/build-mobile-web-app-bundle.test.mjs b/config/scripts/build-mobile-web-app-bundle.test.mjs index 489599d7bf3..25659e4a417 100644 --- a/config/scripts/build-mobile-web-app-bundle.test.mjs +++ b/config/scripts/build-mobile-web-app-bundle.test.mjs @@ -11,19 +11,15 @@ import { import { MOBILE_WEB_APP_NATIVE_PARITY_STYLE, MOBILE_WEB_APP_ROOT_RESET, - MOBILE_WEB_APP_SHIMS, bundleMobileWebApp, buildMobileWebAppBundle, entryStaticClosure, - mobileWebAppBuildOptions, renameOutputsByContent, routeChunkNames } from './build-mobile-web-app-bundle.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT, - ROUTE_SOURCE_LOADERS, - collectMobileWebAppRouteKeys, - collectMobileWebAppRoutes + collectMobileWebAppRouteKeys } from './mobile-web-app-route-manifest.mjs' import { MOBILE_WEB_APP_BUNDLE_MAX_ENTRY_BYTES, @@ -42,7 +38,6 @@ import { BINARY_SOURCE_EXTENSIONS, assertNoCarriageReturnsInSource } from './mobile-web-source-line-endings.mjs' -import { spelledCountsAgainstTables } from './spelled-count-census.mjs' import { hashedAsset, readDesktopVersion, @@ -87,34 +82,6 @@ describe('the CRLF pin', () => { }) describeBundling('the app bundle', () => { - it('isolates read-only fixture consumers from mutations in another assertion', async () => { - const first = await readAppBundle() - const original = first.script[0] - first.script[0] ^= 255 - first.chunks.length = 0 - first.routeKeys.length = 0 - const next = await readAppBundle() - expect(next.script[0]).toBe(original) - expect(next.chunks.length).toBeGreaterThan(0) - expect(next.routeKeys.length).toBeGreaterThan(0) - const written = await readWrittenBundle() - written.manifest.assets.length = 0 - expect((await readWrittenBundle()).manifest.assets.length).toBeGreaterThan(0) - const originalByte = written.files[0].bytes[0] - written.files[0].bytes[0] ^= 255 - expect((await readWrittenBundle()).files[0].bytes[0]).toBe(originalByte) - await withScratch(async (scratch) => { - const firstDir = join(scratch, 'first') - await copyWrittenBundle(firstDir) - await writeFile(join(firstDir, 'manifest.json'), 'corrupted') - const secondDir = join(scratch, 'second') - const second = await copyWrittenBundle(secondDir) - for (const { file, bytes } of second.files) { - expect((await readFile(join(secondDir, file))).equals(bytes), file).toBe(true) - } - }) - }, 120_000) - it('resolves react-native to react-native-web and leaves no require.context', async () => { const sources = allScriptSource(await readAppBundle()) for (const source of sources) { @@ -307,47 +274,6 @@ describeBundling('the app bundle', () => { } }, 120_000) - it('asks esbuild for the split the budgets assume', async () => { - const options = mobileWebAppBuildOptions(await collectMobileWebAppRoutes(appDir)) - // Each of these is load-bearing for a budget below: esm and splitting are what make a route a - // chunk, and the metafile is the only thing that says which imports are static. - expect(options.format).toBe('esm') - expect(options.splitting).toBe(true) - expect(options.chunkNames).toBe('[hash]') - expect(options.metafile).toBe(true) - }) - - it('reads a route source the same way the export guard does', async () => { - const options = mobileWebAppBuildOptions(await collectMobileWebAppRoutes(appDir)) - // The guard parses each route on its own, outside this build. Sharing the table is what stops - // a loader the bundle relies on from being missing there and reported as a syntax error. - for (const [extension, loader] of Object.entries(ROUTE_SOURCE_LOADERS)) { - expect(options.loader[extension], extension).toBe(loader) - } - }) - - it('applies every shim it names', async () => { - const options = mobileWebAppBuildOptions(await collectMobileWebAppRoutes(appDir)) - for (const shim of MOBILE_WEB_APP_SHIMS) { - expect(shim.appliesTo(options), `${shim.name} is named but not applied`).toBe(true) - } - }) - - it('fails the named shim, not the whole build, when its option goes missing', async () => { - const options = mobileWebAppBuildOptions(await collectMobileWebAppRoutes(appDir)) - // Each shim reads an option of its own (two read `banner.js`), so stripping every option - // leaves none applying. Without that, the list could name a shim the build stopped applying. - const stripped = { - ...options, - alias: {}, - loader: {}, - define: {}, - banner: {}, - plugins: [] - } - expect(MOBILE_WEB_APP_SHIMS.filter((shim) => shim.appliesTo(stripped))).toEqual([]) - }) - it('ships no haptic that reaches for the DOM', async () => { // expo-haptics' web build fakes an iOS haptic by appending a hidden // `